diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index cd7317d19..000000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,30 +0,0 @@ -# Thank you for contributing to Delta Chat. - -If you like to discuss a **new feature** or submit suggestions, -please use the community forum: - -* - -If you intend to send a **bug report** for Delta Chat, -search for existing bugs first: - -* [Core](https://github.com/deltachat/deltachat-core-rust/issues?&q=is%3Aissue) -* [Android](https://github.com/deltachat/deltachat-android/issues?&q=is%3Aissue) -* [iOS](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue) -* [Desktop](https://github.com/deltachat/deltachat-ios/issues?&q=is%3Aissue) - -In short, the Android/iOS/Desktop parts are about the User Interface. -The Core part is about handling the connection to the mail server and the chat -or e-mail messages as well as providing secure communication by using -[Autocrypt](https://autocrypt.org/en/latest/). - -A _bug_ is a reproducable misbehaviour, -when something happens but something else should happen instead. - -Please try to create your issue in the respective issue tracker. - -Did you know there is a [Help](https://delta.chat/en/help) page for Delta Chat? - -To ask questions, you are also invited to join our IRC channel #deltachat -on [Freenode](https://kiwiirc.com/nextclient/#irc://irc.freenode.net/deltachat). - diff --git a/.github/workflows/preview-apk.yml b/.github/workflows/preview-apk.yml index d7f294da9..b838276a7 100644 --- a/.github/workflows/preview-apk.yml +++ b/.github/workflows/preview-apk.yml @@ -11,17 +11,18 @@ jobs: uses: styfle/cancel-workflow-action@0.9.1 with: access_token: ${{ github.token }} - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: submodules: recursive - - uses: Swatinem/rust-cache@v1 + - uses: Swatinem/rust-cache@v2 with: working-directory: jni/deltachat-core-rust - - uses: actions/setup-java@v1.4.3 + - uses: actions/setup-java@v3 with: - java-version: 11 - - uses: android-actions/setup-android@v2 - - uses: actions/cache@v2 + java-version: 17 + distribution: 'temurin' + - uses: android-actions/setup-android@v3 + - uses: actions/cache@v3 with: path: | ~/.gradle/caches @@ -48,7 +49,7 @@ jobs: run: ./gradlew --no-daemon assembleGplayDebug - name: Upload APK - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: app-preview.apk path: 'build/outputs/apk/gplay/debug/*.apk' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8e2e73376..40b1f1cfb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -53,7 +53,7 @@ jobs: echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEY_STORE_PASSWORD }}" >> ~/.gradle/gradle.properties echo "DC_RELEASE_KEY_ALIAS=${{ secrets.ALIAS }}" >> ~/.gradle/gradle.properties echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEY_PASSWORD }}" >> ~/.gradle/gradle.properties - ./gradlew --no-daemon assembleGplayRelease + ./gradlew --no-daemon assembleFossRelease - name: Release uses: softprops/action-gh-release@v1 @@ -62,4 +62,4 @@ jobs: body: "WARNING: DeltaChat Lite is not DeltaLab! it is a lightweight version of Delta Chat" prerelease: ${{ contains(github.event.ref, '-beta') }} fail_on_unmatched_files: true - files: build/outputs/apk/gplay/release/*.apk + files: build/outputs/apk/foss/release/*.apk diff --git a/.gitignore b/.gitignore index e06e7294b..3e39f6288 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ project.properties .settings bin/ gen/ -gplay/ +/gplay/ .idea/ *.iml *.so @@ -45,3 +45,5 @@ jni/x86_64 jni/armeabi jni/armeabi-v7a jni/arm64-v8a + +*~ \ No newline at end of file diff --git a/.tx/config b/.tx/config index 18fae2ddf..53f8bbb00 100644 --- a/.tx/config +++ b/.tx/config @@ -3,8 +3,8 @@ host = https://www.transifex.com lang_map = id: in, ja_JP: ja, nl_NL: nl, pt_BR: pt-rBR, zh_CN: zh-rCN, zh_TW: zh-rTW [o:delta-chat:p:delta-chat-app:r:stringsxml] -file_filter = res/values-/strings.xml -source_file = res/values/strings.xml +file_filter = src/main/res/values-/strings.xml +source_file = src/main/res/values/strings.xml source_lang = en type = ANDROID diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d4cf9c38..69cd855a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,249 @@ # Delta Chat Android Changelog +## v1.46.5 +2024-06 + +* support webxdc apps with experimental realtime channels ("Settings / Advanced / Realtime Webxdc Channels") +* fewer traffic in larger chatmail groups by allowing more than 50 recipients per time +* log debug level (mostly foreign modules) only if "Settings / Advanced / Developer Mode" is enabled +* fix: avoid asking to disable battery optimisations when creating the second profile +* fix hangs on low/no network during onboarding +* fix: cancel muting does not cancel selection in chatlist +* fix migrated address losing verified status and key on experimental AEAP +* fix: allow creation of groups by outgoing messages without recipients +* fix: avoid group splits by preferring ID from encrypted header over references for new groups +* fix: do not fail to send images with wrong extensions +* fix: retry sending MDNs on temporary error +* fix: do not miss new messages while expunging the folder +* fix missing logging info lines +* fix: remove group member locally even if sending fails +* fix: revert group member addition if the corresponding message couldn't be sent +* update translations and local help +* update to core 1.140.2 + + +## v1.46.3 +2024-06 + +* Disable FCM PUSH notification support for F-Droid and other non-Google-Play-builds +* using core 1.139.5 + + +## v1.46.2 +2024-06 + +* fix: create new profile when scanning/tapping QR codes outside "Add Profile" +* update translations and local help +* using core 1.139.5 + + +## v1.46.1 +2024-05 + +* new onboarding: you can create a new profile with one tap on "Create New Profile" - + or use an existing login or second-device-setup as usual +* use FCM PUSH notification if supported by providers (as chatmail) and by the operating system +* do not ask for disabling "battery optimisations" when PUSH notifications are working +* add an option to disable PUSH notifications +* contacts can be attached as "Cards" at "Attach / Contact"; + when the receiver taps the cards, guaranteed end-to-end encrypted can be established +* "Profiles" are names as such throughout the app; + note that these profiles exist on the device only, there is nothing persisted on the server +* adding contacts manually at "New Chat / New Contact / Add Contact Manually" +* send any emoji as reaction +* show reactions in summaries +* nicer summaries by using some emojis for attachment types +* pin/archive/etc chats directly from search result +* new map for - still experimental - location streaming (enable at "Settings / Advanced") +* ask for system unlock before accessing "password & account" +* advanced settings resorted, you'll also find "password & account" and "show classic emails" there +* improve resilience by adding references to the last three messages +* one-to-one chats are read-only during reasonable run of securejoin +* if securejoin is taking longer than expected, a warning is shown and messages can be sent +* improve resilience by including more entries in DNS fallback cache +* improve anonymous mailing lists by not adding hostname to Message-ID +* harden share-to-delta +* add second device's troubleshooting is always available offline now +* hide folder options if not supported by the used account +* allow to view password (after entering system secret) +* device update message is added as unread only for the first account +* share log to other chats or apps +* use colors for info/warning/error in the log +* fix: preserve upper-/lowercase of links from HTML-messages +* fix: rescan folders on "Watch Sent Folder" changes +* fix sometimes wrong sender name in "Message Info" +* fix: do not send avatar in securejoin messages before contact verification +* fix: avoid being re-added to groups just left +* fix: do not auto-delete webxdc apps that have recent updates +* fix: improve moving messages on gmail +* fix: improve chat assignments of not downloaded messages +* fix: do not create ad-hoc groups from partial downloads +* fix: improve connectivity on startup by adding backoff for IMAP connections +* fix: mark contact request messages as seen on IMAP server +* fix: convert images to RGB8 before encoding into JPEG to fix sending of large RGBA images +* fix showing large PNG files +* fix: do not convert large GIF to JPEG +* fix receiving Autocrypt Setup Messages from K-9 +* fix: delete expired locations and POIs with deleted chats +* fix: send locations more reliable +* fix: use last known location if it is recent enough +* fix: do not fail to send encrypted quotes to unencrypted chats, replace quote by "..." instead +* fix: always use correct "Saved Messages" icon when the chat is recreated +* fix: add white background to transparent avatars +* fix crashes when exporting or importing huge accounts +* fix: remove leading whitespace from subject +* fix problem with sharing the same key by several accounts +* fix busy looping eg. during key import +* fix remote group membership changes always overriding local ones +* fix hint when adding a webxdc shortcut to the home page +* fix webxdc links for securejoin +* fix sending uncompressed images (bug introduced in beta 1.45 beta series) +* fix: hide not useful menu options in the QR screens +* fix scanning invite codes from the "New Chat" screen +* fix: use the last header of multiple ones with the same name; this is the one DKIM was using +* fix migration of legacy databases +* fix: on onboarding, keep entered name and avatar when scanning QR codes or going for other options +* fix broken "..." ellipsis for small screens +* fix: do not mark the message with locations as seen +* fix startup crash on android4 +* fix location streaming crash introduced in 1.45 beta +* update translations and local help +* update to core 1.139.5 + + +## v1.44.0 +2024-03 + +* sync self-avatar and self-signature text across devices +* remove webxdc sending limit +* recognize "Trash" folder by name in case it is not flagged as such by the server +* send group avatars inline so that they do not appear as unexpected attachments +* "Settings / Advanced / Send statistics to Delta Chat's developers" + now include number of protected/encrypted/unencrypted chats +* fix sending sync messages on updating self-name etc. +* fix sometimes slow reconnects +* more bug fixes +* update translations and local help +* update to core 1.136.2 + + +## v1.43.1 Testrun +2024-02 + +* add "Settings / Advanced / Send statistics to Delta Chat's developers" to draft a message with statistic; + the message is only sent if the user hits the "Send" button +* add device message if outgoing messages are undecryptable +* "Settings / Advanced / Read System Address Book" is remembered per-account +* add link to troubleshooting for "Add as Second Device" on welcome screen and update troubleshooting +* fix compatibility issue with 1.42 when using "Add Second Device" or backups +* fix sometimes mangled links +* fix sometimes wrongly marked gossiped keys +* fix: guarantee immediate message deletion if "Delete Messages from Server" is set to "At once" +* fix: Never allow a message timestamp to be a lot in the future +* fix: make IMAP folder handling more resilient +* update translations and local help +* update to core 1.135.0 + + +## v1.43.0 Testrun +2024-02 + +* add "Reactions": long tap a message to react to it ❤️ +* reactions from others are shown below the messages +* tap a reaction below a message to get reaction details +* sharing QR code now shares "Invite Link": + if tapped by with Delta Chat users, Delta Chat opens; otherwise the browser opens; + the server does not get any information about the link details (as "Fragment" is not sent to server) +* copying/pasting QR code data now also supports invite links +* when using multiple accounts, + the avatar in the upper left corner now shows the number of unread messages in other account +* updated "welcome message" now focuses about how to get in contact +* add meaningful info message if provider does not allow unencrypted messages +* long-tapping chatlist items now allow to mute/unmute chats directly +* ask for system unlock secret before opening "Password & Account" +* add 'Learn More' to ephemeral messages dialog +* mark data as being "fragile", supporting systems now allows the data to be kept, making reinstalls easier +* new option "Settings / Advanced / Read System Address Book": + when enabled, the address book addresses are added to the "New Chat" activity +* faster reconnects when switching from a bad or offline network to a working network +* add "From:" to protected headers for signed-only messages generated by some apps +* sync user actions for ad-hoc groups across devices +* sync contact creation/rename across devices +* encrypt read receipts +* only try to configure non-strict TLS checks if explicitly set +* accept i.delta.chat as well as openpgp4fpr: links +* force a display name to be set when using an instant onboarding QR code +* focus on name and state for guaranteed e2ee chats; email address and other data are available in the profile +* improve navigation on account creation by adding a title and a back button to the welcome screen +* fix: delete resent messages on receiver side +* fix: do not drop unknown report attachments, such as TLS reports +* fix: be graceful with systems mangling the qr-code-date (macOS, iOS) +* fix unexpected line breaks in messages (by using Quoted-Printable MIME) +* fix: avoid retry sending for servers not returning a response code in time (force BCC-self) +* fix partially downloaded messages getting stuck in "Downloading..." +* fix inconsistent QR scan states (track forward and backward verification separately, mark 1:1 chat as verified as early as possible) +* fix duplicated messages for some providers as "QQ Mail" +* fix: do not remove contents from unencrypted Schleuder mailing lists messages +* fix: reset message error when scheduling resending +* fix marking some one-to-one chats as guaranteed +* fix: avoid multiple resending of messages on slow SMTP servers +* fix: more reliable connectivity information +* fix: delete received outgoing messages from SMTP queue +* fix timestamp of guaranteed e2ee info message for correct message ordering after backup restore +* fix: add padlock to empty part if the whole message is empty +* fix IDLE timeout renewal on keepalives and reduce it to 5 minutes +* fix: fail fast on LIST errors to avoid busy loop when connection is lost +* fix: improve checking if all members of a chat are verified +* fix: same "green checkmark" message order on all platforms +* fix CI by increasing TCP timeouts from 30 to 60 seconds +* update translations and local help +* update to core 1.134.0 + + +## v1.42.6 +2023-11 + +* sync changes on "Your Profile Name", "Show Class Mails", "Read Receipts" options across devices +* remove receiver limit on .xdc size +* fix decryption errors when using multiple private keys +* fix more log in errors for providers as 163.com; this was introduced in 1.41 +* fix: database locked errors on webxdc updates +* update translations and local help +* update to core 1.131.9 + + +## v1.42.4 +2023-11 + +* fix battery draining due to active IMAP loop on some providers; this was introduced in 1.41 +* fix log in error on some providers as 163.com; this was introduced in 1.41 +* fix "Learn More" buttons that opened the help always in english +* update local help +* update to core 1.131.7 + + +## v1.42.3 +2023-11 + +* fix: avoid infinite loop by failing fast on IMAP FETCH parsing errors +* update translations +* update to core 1.131.6 + + +## v1.42.2 +2023-11 + +* fix contact creation using outdated names sometimes +* fix: do not replace the message with an error in square brackets + when the sender is not a member of the protected group +* fix: compare addresses on QR code scans and at similar places case-insensitively +* fix: normalize addresses to lower case to catch unrecoverable typos and other rare errors +* fix: fetch contact addresses in a single query +* fix: sync chat name to other devices +* update translations and local help +* update to core 1.131.5 + + ## v1.42.1 2023-11 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..61f2e74d8 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,153 @@ +# Contributing Guidelines + +Thank you for looking for ways to help on Delta Chat Android! + +This document tries to outline some conventions that may not be obvious +and aims to give a good starting point to new contributors. + + +## Reporting Bugs + +If you found a bug, [report it on Github](https://github.com/deltachat/deltachat-android/issues). + +Project maintainers may transfer bugs that are not UI specific +(eg. network, database or encryption related) +to [Delta Chat Core](https://github.com/deltachat/deltachat-core-rust/issues). +If you assume beforehand, that the bug you've found belongs to Core, +you can report there directly. + +Please search both open and closed issues to make sure your bug report is not a duplicate. + +For community interactions around Delta Chat +please read our [Community Standards](https://delta.chat/community-standards). + + +## Proposing Features + +If you have a feature request, +create a new topic on the [Forum](https://support.delta.chat/c/features/6). + + +## Rough UX Philosophy + +Some rough ideas, that may be helpful when thinking about how to enhance things: + +- Work hard to avoid options and up-front choices. + Thinking about concrete user stories may help on that. +- Avoid to speak about keys and other hard to understand things in the primary UI. +- The app shall work offline as well as with bad network. +- Users do not read (much). +- Consistency matters. +- Offer only things that are highly useful to many people in primary UI. + If really needed, bury other things eg. in some menus. +- The app should be for the many, not for the few. + + +## Contributing Code + +The [README](./README.md) explains in detail how to set up the build environment. +Please follow all steps precisely. +If you run into troubles, +ask on one of the [communication channels](https://delta.chat/contribute) for help. + +To contribute code, +[open a Pull Request](https://github.com/deltachat/deltachat-android/pulls). + +If you have write access to the repository, +push a branch named `/` +so it is clear who is responsible for the branch, +and open a PR proposing to merge the change. +Otherwise fork the repository and create a branch in your fork. + +Please add a meaningful description to your PR +so that reviewers get an idea about what the modifications are supposed to do. + +A meaningful PR title is helpful for [updating `CHANGELOG.md` on releases](./RELEASE.md) +(CHANGELOG.md is updated manually +to only add things that are at least roughly understandable by the end user) + +If the changes affect the user interface, +screenshots are very helpful, +esp. before/after screenshots. + + +### Coding Conventions + +Source files are partly derived from different other open source projects +and may follow different coding styles and conventions. + +If you do a PR fixing a bug or adding a feature, +please embrace the coding convention you see in the corresponding files, +so that the result fits well together. + +Do not refactor or rename things in the same PR +to make the diff small and the PR easy to review. + +Project language is Java. + +By using [Delta Chat Core](https://github.com/deltachat/deltachat-core-rust) +there is already a strong separation between "UI" and "Model". +Further separations and abstraction layers are often not helpful +and only add more complexity. + +Try to avoid premature optimisation +and complexity because it "may be needed in some future". +Usually, it is not. + +Readable code is better than having some Java paradigms fulfilled. +Classic Java has a strong drive to add lots of classes, factories, one-liner-functions. +Try to not follow these patterns and keep things really on point and simple. +If this gets in conflict with embracing existing style, however, +consistency with existing code is more important. + +The "Delta Chat Core" is a high-level interface to what the UI actually needs, +data should be served in a form that the UI do not need much additional work. +If this is not the case, consider a feature proposal to "Delta Chat Core". + + +### Merging Conventions + +PR are merged usually to the branch `main` from which [releases](./RELEASE.md) are done. + +As a default, do a `git rebase main` in case feature branches and `main` differ too much. + +Once a PR has an approval, unless stated otherwise, it can be merged by the author. +A PR may be approved but postponed to be merged eg. because of an ongoing release. + +To ensure the correct merge merge strategy, merging left up to the PR author: + +- Usually, PR are squash-merged + as UI development often results in tiny tweak commits that are not that meaningful on their own. +- If all commits are meaningful and have a well-written description, + they can be rebased-merged. + +If you do not have write access to the repository, +you may leave a note in the PR about the desired merge strategy. + + +## Translations + +Translations are done via [Transifex](https://explore.transifex.com/delta-chat/), +you can log in there with your E-Mail Address or with a Github or Google handle. +You find two projects there: +- "Delta Chat App" contains the strings used in the app's UI +- "Delta Chat Website" contains the offline help from "Settings / Help" + as well as the pages used on + +Most strings and the whole help are used for all systems +(Android, iOS, Linux, Windows, macOS) +and should be formulated accordingly. + +If you want to change the english sources, +do a PR to [`strings.xml`](https://github.com/deltachat/deltachat-android/blob/main/res/values/strings.xml) +or to [`help.md`](https://github.com/deltachat/deltachat-pages/blob/master/en/help.md). +Again, please do not mix adding things and refactorings, esp. for `help.md`, +this would require retranslations and should be considered carefully. + + +## Other Ways To Contribute + +For other ways to contribute, refer to the [website](https://delta.chat/contribute). + +If you think, something important is missed in this overview, +please do a PR to this document :) diff --git a/Dockerfile b/Dockerfile index ef4f19fcf..4255d6ddb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM docker.io/ubuntu:18.04 +FROM docker.io/debian:12.4 # Install Android Studio requirements # See https://developer.android.com/studio/install#linux @@ -7,7 +7,7 @@ RUN apt-get update -y \ wget \ curl \ unzip \ -openjdk-11-jre \ +openjdk-17-jre \ file \ build-essential \ && rm -rf /var/lib/apt/lists/* diff --git a/README.md b/README.md index 7e7abf484..0d268151a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ The APK can also be downloaded from [get.delta.chat](https://get.delta.chat). For the core library and other common info, please refer to the [Delta Chat Core Library](https://github.com/deltachat/deltachat-core-rust). +For general contribution hints, please refer to [CONTRIBUTING.md](./CONTRIBUTING.md). + Screenshot Chat List Screenshot Chat View @@ -225,6 +227,14 @@ You have 2 ways to do this: 2. Or set them via environment variables. +# Translations + +Android metadata and changelogs are translated using [Weblate](https://hosted.weblate.org/projects/deltachat/android-metadata/). + + +Translation status + + # Credits The user interface classes are based on the Signal messenger. diff --git a/RELEASE.md b/RELEASE.md index 881721728..cad21c9e5 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -23,7 +23,10 @@ the following steps are done in a PR called `prep-VERSION` (no leading "v"): from and . avoid technical terms, library versions etc. the changelog is for the end user. - do not forget to update/mention used core version and release month. + do not forget to update/mention used core version and release month. + in case previous entries of the changelog refer to betas or to not officially released versions, + the entries can be summarized. + this makes it easier for the end user to follow changes by showing major changes atop 4. add a device message to `ConversationListActivity::onCreate()` or remove the old one. do not repeat the CHANGELOG here: write what really is the ux outcome @@ -69,7 +72,8 @@ on : 9. a) open "Delta Chat/Release/Production" then "Create new release" and upload APK from above - b) fill out "Release details/Release notes" (500 characters, summary can be reused for F-Droid), + b) fill out "Release details/Release notes" (500 chars), add the line + "These features will roll out over the coming days. Thanks for using Delta Chat!"; release name should be default ("123 (1.2.3)") c) click "Next", set "Rollout Percentage" to 1% (later 2%, 5%, 10%, 20%, 50%, 100%), click "Start rollout to Production" @@ -105,6 +109,16 @@ on : f) on "Step 4" page: "Submit app" +## Release on Huawei AppGallery + +on : + +13. a) go to "Upload your app / Android / Delta Chat / Update", again "Update" upper right + b) "Manage Packages / Upload", upload the APK from above, hit "Save" + c) Update "App Information / New Features", hit "Save", then "Next" + d) Hit "Submit"; on the next page, confirm version and language + + ## Releases on Apklis, Passkoocheh These stores are not under our control. diff --git a/assets/device-messages/green-checkmark.jpg b/assets/device-messages/green-checkmark.jpg deleted file mode 100644 index 82a367d61..000000000 Binary files a/assets/device-messages/green-checkmark.jpg and /dev/null differ diff --git a/assets/help/pl/help.html b/assets/help/pl/help.html deleted file mode 100644 index c242f3ad6..000000000 --- a/assets/help/pl/help.html +++ /dev/null @@ -1,1533 +0,0 @@ - - - - - -

- - - Czym jest Delta Chat? - - -

- -

Delta Chat to nowa aplikacja do czatowania, która wysyła wiadomości e-mailem, w miarę możliwości zaszyfrowane przy użyciu Autocrypt. -Nie musisz się nigdzie rejestrować, po prostu użyj swojego istniejącego konta e-mail w Delta Chat.

- -

- -

- - - Jak mogę znaleźć ludzi, z którymi mogę czatować? - - -

- -

Dzięki Delta Chat możesz pisać na każdy istniejący adres e-mail - nawet -jeśli odbiorca nie korzysta z aplikacji Delta Chat. Odbiorca nie musi -instalować tej samej aplikacji co Twoja, tak jak w przypadku innych komunikatorów.

- -

- - - Jakie są zalety Delta Chat w porównaniu z innymi komunikatorami? - - -

- -
    -
  • Independent of any company or services. You own your data.
  • -
  • Your data is not saved on a central server unless all users are using -the same e-mail servers
  • -
  • You do not distribute your address book to anyone.
  • -
  • Fast by the use of Push-IMAP.
  • -
  • Largest userbase - recipients not using Delta Chat can be reached as well.
  • -
  • No Spam - only messages of known users are shown by default.
  • -
  • End-to-end encryption via Autocrypt.
  • -
  • Copyleft and Standards based libre software.
  • -
  • Flexible identity with built-in support for multiple accounts
  • -
- -

- - - Jakie wiadomości pojawiają się w Delta Chat? - - -

- -

Domyślnie Delta Chat pokazuje wszystkie e-maile.

- -

Możesz to zmienić w „Ustawienia » Czaty i media » Pokaż klasyczne e-maile”. Masz następujące opcje:

- -
    -
  • „Nie, tylko czaty”: Wyświetlane są tylko wiadomości wysłane przez innych użytkowników Delta Chat i odpowiedzi na Twoje wiadomości Delta Chat. Ma to największy sens, jeśli używasz tego samego konta e-mail również do wysyłania zwykłych wiadomości e-mail. To jest ustawienie domyślne.
  • -
  • „Wszystkie”: Delta Chat pokazuje wszystkie e-maile, które są wysyłane na Twój adres e-mail. Ma to sens, jeśli chcesz używać Delta Chat do wszystkich swoich e-maili, więc żadna wiadomość nie zostanie utracona. To jest ustawienie domyślne.
  • -
  • „Dla zaakceptowanych kontaktów”: Delta Chat pokazuje wszystkie e-maile od kontaktów, z którymi już prowadzisz czat, ale nowe czaty pojawiają się tylko dla wiadomości Delta Chat. Pomaga to zdecydować indywidualnie dla każdego przypadku, czy chcesz prowadzić rozmowę w Delta Chat, czy w „normalnej” aplikacji e-mail.
  • -
- -

- - - Co zrobić, jeśli oczekuję wiadomości od osoby, do której nie pisałem w przeszłości? - - -

- -
    -
  • Jeśli wiadomość przychodzi od nieznanego kontaktu, pojawia się jako prośba. Musisz zaakceptować prośbę, zanim będziesz mógł odpowiedzieć.
  • -
  • Możesz również „usunąć” ją, jeśli nie chcesz na razie z nią rozmawiać. To nie usuwa wiadomości na serwerze, tylko na Twoim urządzeniu. Możesz więc nadal zajmować się tą wiadomością w innej aplikacji pocztowej.
  • -
  • Jeśli usuniesz prośbę, przyszłe wiadomości od tego kontaktu będą nadal wyświetlane jako prośba o wiadomość, więc możesz zmienić zdanie. Jeśli naprawdę nie chcesz otrzymywać wiadomości od tej osoby, rozważ zablokowanie jej.
  • -
- -

- - - Czy Delta Chat obsługuje obrazy, filmy i inne załączniki? - - -

- -
    -
  • -

    Tak. Oprócz zwykłego tekstu wszystkie załączniki wiadomości e-mail są wyświetlane jako oddzielne wiadomości. Wiadomości wychodzące automatycznie otrzymują załączniki w razie potrzeby.

    -
  • -
  • -

    Ze względu na wydajność obrazy są domyślnie optymalizowane i wysyłane w mniejszym rozmiarze, ale można je wysłać jako „plik”, aby zachować oryginał.

    -
  • -
- -

- - - Jak mogę dodawać lub przełączać się między wieloma kontami? - - -

- -

Możesz łatwo pracować z dodatkowymi kontami na klientach mobilnych i stacjonarnych Delta Chat, klikając:

-
    -
  • na przycisku menu, a następnie „Przełącz konto” (Android i komputer stacjonarny)
  • -
  • lub ikonę profilu, a następnie „Dodaj konto” (iOS)
  • -
- -

Możesz także dowiedzieć się, jak dodawać konta do wielu urządzeń.

- -

- - - Kto widzi moje zdjęcie profilowe? - - -

- -
    -
  • -

    Możesz dodać zdjęcie profilowe w swoich ustawieniach. Jeśli napiszesz do swoich kontaktów lub dodasz je za pomocą kodu QR, automatycznie zobaczą je jako Twoje zdjęcie profilowe.

    -
  • -
  • -

    Kontakty, które nie korzystają z Delta Chat nie widzą zdjęcia profilowego (jednak oczywiście mogą zainstalować Delta Chat :)

    -
  • -
  • -

    Ze względów prywatności nikt nie widzi Twojego zdjęcia profilowego, dopóki nie napiszesz do niego wiadomości.

    -
  • -
  • -

    Twoje zdjęcie profilowe nie jest wysyłane z każdą wiadomością, ale wystarczająco regularnie, aby kontakty ponownie otrzymały Twoje zdjęcie profilowe, nawet jeśli dodadzą nowe urządzenie.

    -
  • -
- -

- - - Czy Delta Chat obsługuje wiadomości e-mail w formacie HTML? - - -

- -

Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

- -

- - - Dlaczego muszę wpisać moje hasło e-mail do Delta Chat? Czy to jest bezpieczne? - - -

- -

Podobnie jak w przypadku innych programów pocztowych, takich jak Thunderbird, K9-Mail lub Outlook, program potrzebuje hasła, aby można było go używać do wysyłania wiadomości e-mail. Oczywiście hasło jest przechowywane tylko na Twoim urządzeniu. Hasło jest przesyłane tylko do Twojego dostawcy poczty e-mail (po zalogowaniu), który i tak ma dostęp do Twojej poczty

- -

Jeśli korzystasz z dostawcy poczty e-mail z obsługą OAuth2, takiego jak gmail.com lub yandex.ru, nie musisz przechowywać hasła na urządzeniu. W takim przypadku używany jest tylko token dostępu.

- -

Ponieważ Delta Chat jest Open Source, możesz sprawdzić Kod źródłowy -jeśli chcesz sprawdzić, czy Twoje poświadczenia są przetwarzane w bezpieczny sposób. Cieszymy się z opinii, które sprawiają, że aplikacja jest bezpieczniejsza dla wszystkich naszych użytkowników.

- -

- - - Jakich uprawnień potrzebuje Delta Chat? - - -

- -

W zależności od używanego systemu operacyjnego możesz -zostać poproszony o przyznanie uprawnień aplikacji. -Oto, co robi Delta Chat z tymi uprawnieniami:

- -
    -
  • Aparat (można zablokować)
  • -
  • robi zdjęcia i filmy: do wysyłania zdjęć
  • -
  • Kontakty (można zablokować)
  • -
  • czyta twoje kontakty: aby znaleźć kontakty do czatu
  • -
  • Lokalizacja (można zablokować)
  • -
  • dostęp do przybliżonej lokalizacji (sieciowe źródła lokalizacji): dla funkcji przesyłania strumieniowego lokalizacji
  • -
  • dostęp do dokładnej lokalizacji (GPS i sieciowe źródła lokalizacji): dla funkcji przesyłania strumieniowego lokalizacji
  • -
  • Mikrofon (można zablokować)
  • -
  • nagrywanie dźwięku: dla wiadomości audio
  • -
  • Przechowywanie (można zablokować)
  • -
  • modyfikowanie lub usuwanie zawartości karty SD: pobieranie załączników do wiadomości
  • -
  • czytanie zawartość twojej karty SD: aby udostępniać pliki swoim kontaktom
  • -
  • Inne możliwości aplikacji
  • -
  • zmiana ustawienia dźwięku: możesz wybrać dzwonki i głośność dla powiadomień i wiadomości audio
  • -
  • uruchamianie przy starcie: więc nie musisz ręcznie uruchamiać Delta Chat
  • -
  • kontrola wibracji: do powiadomień
  • -
  • przeglądanie połączenia sieciowych: aby połączyć się z dostawcą poczty e-mail
  • -
  • zapobieganie uśpieniu telefonu: dzięki czemu możesz łatwiej skopiować kod zabezpieczający podczas komunikatu konfiguracyjnego Autocrypt
  • -
  • pełny dostęp do sieci: aby połączyć się z dostawcą poczty e-mail
  • -
  • wyświetlanie połączenia Wi-Fi: aby połączyć się z dostawcą poczty e-mail
  • -
  • prośba o zignorowanie optymalizacji baterii: dla użytkowników, którzy chcą otrzymywać wiadomości przez cały czas
  • -
- -

- - - Co oznacza przypinanie, wyciszanie i archiwizowanie? - - -

- -

Użyj tych narzędzi, aby uporządkować swoje czaty i mieć wszystko na swoim miejscu:

- -
    -
  • -

    Przypięte czaty zawsze pozostają na szczycie listy czatów. Możesz ich używać, aby szybko lub tymczasowo uzyskać dostęp do swoich ulubionych czatów, aby o czymś nie zapomnieć.

    -
  • -
  • -

    Wycisz czaty, jeśli nie chcesz otrzymywać z nich powiadomień. Wyciszone czaty pozostają na swoim miejscu i możesz też przypiąć wyciszony czat.

    -
  • -
  • -

    Archiwizuj czaty, jeśli nie chcesz ich już widzieć na liście czatów. Zarchiwizowane czaty pozostają dostępne nad listą czatów lub poprzez wyszukiwanie.

    -
  • -
  • -

    Gdy zarchiwizowany czat otrzyma nową wiadomość, o ile nie zostanie wyciszony, wyskoczy z archiwum i wróci na twoją listę czatów. -Wyciszone czaty pozostają zarchiwizowane do czasu ich ręcznego przywrócenia.

    -
  • -
- -

Aby zarchiwizować lub przypiąć czat, dotknij i przytrzymaj (Android), użyj menu czatu (Android/Desktop) lub przesuń palcem w lewo (iOS); -aby wyciszyć czat, użyj menu czatu (Android/Desktop) lub profilu czatu (iOS).

- -

- - - Co oznacza zielona kropka? - - -

- -
    -
  • Od wersji Delta Chat 1.34 czasami można zobaczyć „zieloną kropkę” obok awatara kontaktu. Oznacza to, że był on „niedawno widziany”.
  • -
  • Dokładnie oznacza to, że w ciągu ostatnich 10 minut Delta Chat widział go:
  • -
  • dlatego, że wysłał Ci bezpośrednio wiadomość,
  • -
  • ponieważ napisał coś do grupy, której oboje jesteście członkami,
  • -
  • ponieważ wysłał Ci potwierdzenie przeczytania napisanej przez Ciebie wiadomości,
  • -
  • lub dlatego, że wysłał dane do Twojej aplikacji Delta Chat za pomocą Webxdc aplikacji.
  • -
  • Nie jest to więc status online w czasie rzeczywistym – a jeśli ktoś nie odpowie od razu, mimo że wydaje się, że jest online, nie martw się i daj mu trochę miejsca ;-)
  • -
  • Z drugiej strony inni nie zawsze „zobaczą, że jesteś online”. Jeśli wyłączyłeś potwierdzenia odczytu, nie zobaczą oni zielonej kropki, dopóki nie wyślesz do nich wiadomości lub nie napiszesz do grupy, w której również się znajdują.
  • -
- -

- - - Jak mogę usunąć swoje konto? - - -

- -

Gdy korzystasz z konta e-mail w Delta Chat, 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.

- -

Jeśli chcesz zachować konto, ale odinstalować Delta Chat, zaleca się opuszczenie każdego czatu grupowego przed odinstalowaniem Delta Chat.

- -

- - - Grupy - - -

- -

- - - Tworzenie grupy - - -

- -
    -
  • Wybierz Nowy czat, a następnie Nowa grupa z menu w prawym górnym rogu lub naciśnij odpowiedni przycisk na Androidzie / iOS.
  • -
  • Na następnym ekranie wybierz członków grupy i zdefiniuj nazwę grupy. Możesz też wybrać awatar grupy.
  • -
  • Zaraz po napisaniu pierwszej wiadomości w grupie wszyscy członkowie zostaną poinformowani o nowej grupie i mogą odpowiedzieć w grupie (jeżeli nie napiszesz wiadomości w grupie, grupa jest niewidoczna dla członków).
  • -
- -

- - - Dodanie członków do grupy - - -

- -
    -
  • Każdy członek grupy ma takie same prawa jak każdy inny. Z tego powodu każdy może usunąć każdego członka lub dodać nowego.
  • -
  • Aby dodać lub usunąć członków, kliknij nazwę grupy na czacie.
  • -
- -

- - - Usunąłem się przez przypadek. - - -

- -
    -
  • Ponieważ nie jesteś członkiem grupy, nie możesz dodać siebie ponownie. -Jednak nie ma problemu, po prostu poproś dowolnego członka grupy na normalnym czacie, aby dodał cię ponownie.
  • -
- -

- - - Nie chcę już otrzymywać wiadomości od grupy. - - -

- -
    -
  • -

    Usuń siebie z listy członków lub usuń cały czat. -Jeśli później będziesz chciał ponownie dołączyć do grupy, poproś innego członka grupy, aby dodał cię do grupy.

    -
  • -
  • -

    Alternatywnie możesz też „Wyłączyć powiadomienia” dla grupy dzięki temu otrzymasz wszystkie wiadomości i -nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych nowych wiadomościach.

    -
  • -
- -

- - - Co oznaczają znaczniki wyświetlane obok wiadomości wychodzących? - - -

- -
    -
  • Jeden znacznik oznacza, że wiadomość została pomyślnie wysłana do Twojego dostawcy.
  • -
  • Dwa znaczniki oznaczają, że co najmniej jedno urządzenie odbiorcy zgłosiło otrzymanie wiadomości.
  • -
  • Odbiorcy mogli wyłączyć potwierdzenia odczytu, więc nawet jeśli widzisz tylko jeden znacznik, wiadomość mogła zostać przeczytana.
  • -
  • Odwrotnie, dwa znaczniki nie oznaczają automatycznie, że człowiek przeczytał lub zrozumiał wiadomość ;)
  • -
- -

- - - Co się stanie, jeśli włączę opcję „Usuń wiadomości z serwera”? - - -

- -
    -
  • -

    Domyślnie Delta Chat przechowuje wszystkie wiadomości lokalnie na Twoim urządzeniu. Jeśli np. chcesz zaoszczędzić miejsce u swojego dostawcy poczty, możesz wybrać automatyczne usuwanie starych wiadomości. Pozostają one nadal na Twoim urządzeniu, dopóki nie usuniesz ich również tam.

    -
  • -
  • -

    Aby ją włączyć, w ustawieniach „Czaty i media” przejdź do Usuwanie starych wiadomości → Usuń wiadomości z serwera. Możesz ustawić przedział czasowy pomiędzy „Od razu” a „Po 1 roku”. Wszystkie e-maile otrzymane przez Delta Chat zostaną usunięte z serwera po tym czasie.

    -
  • -
  • -

    Zauważ, że jeśli używasz Delta Chat na więcej niż jednym urządzeniu, powinieneś pozostawić wiadomości na serwerze, do czasu, aż inne urządzenie/urządzenia będzie mogło je pobrać.

    -
  • -
- -

- - - Co się stanie, jeśli włączę opcję „Usuń wiadomości z urządzenia”? - - -

- -
    -
  • Jeśli chcesz zaoszczędzić miejsce na urządzeniu, możesz wybrać opcję automatycznego usuwania starych wiadomości.
  • -
  • Aby ją włączyć, przejdź do „Usuń wiadomości z urządzenia” w ustawieniach w sekcji „Czaty i media”. Możesz ustawić przedział czasowy pomiędzy „po 1 godzinie” a „po 1 roku”; w ten sposób wszystkie wiadomości zostaną usunięte z urządzenia, gdy tylko staną się starsze.
  • -
- -

- - - Encryption and Security - - -

- -

- - - Which standards are used for end-to-end encryption? - - -

- -

Autocrypt is used for automatically -establishing end-to-end encryption with contacts and group chats. -Autocrypt uses a limited and secure subset of the OpenPGP standard. -End-to-End encrypted messages are marked with a padlock -padlock.

- -

Secure-Join protocols -are used for establishing chats with guaranteed end-to-end encryption -which protects against network attacks and compromised servers. -Chats marked with a green checkmark -green checkmark -guarantee end-to-end encrypted messages.

- -

- - - How can i know if messages are end-to-end encrypted? - - -

- -

All end-to-end encrypted messages carry a padlock:

- -

padlock in bubble

- -

End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:

- -

green checkmark in title

- -

- - - How can I get guaranteed end-to-end encryption and green checkmarks? - - -

- -

Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

- -

Inviter side:

- -
    -
  • -

    Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
  • -

    Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
- -

Joiner side:

- -
    -
  • -

    Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

    -
  • -
  • -

    Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

    -
  • -
  • -

    Tap “OK”

    -
  • -
- -

Both Inviter and Joiner:

- -

Wait while Secure-Join network messages are exchanged between both devices.

- -
    -
  • -

    If both devices are online, -both sides will eventually see a (group or direct) chat with a green checkmark -green checkmark -next to the title.

    -
  • -
  • -

    If one of the devices is offline, the green checkmarks will only -appear later when the device is internet-connected again -and the Secure-Join network protocol completed.

    -
  • -
- -

Congratulations! -You now will automatically use guaranteed end-to-end encryption -with this contact and both of you can add each other to green-checkmarked groups -green checkmark, -thereby automatically spreading guaranteed end-to-end encryption among its members.

- -

- - - What does the green checkmark and “guaranteed end-to-end encryption” mean? - - -

- -

Chat titles with green checkmarks -green checkmark -mean that all messages in the chat will be end-to-end encrypted -and can not be read or altered by compromised e-mail servers or Internet providers. -Joining green-checkmarked group chats -safely spreads everybody’s encryption information (and green checkmarks) -in a manner that guarantees end-to-end encryption in the group and among members.

- -

Contact profiles with green checkmarks -green checkmark -mean that messaging a contact is currently guaranteed to be end-to-end encrypted. -Every green-checkmarked contact either did a direct QR-scan with you -or was introduced by a another green-checkmarked contact. -Introductions happen automatically when adding members to groups. -Whoever adds a contact to a green-checkmarked group becomes an introducer -to those members who didn’t yet know about the added contact. -In a contact profile you can tap on the “Introduced by …” text repeatedly -until you get to the one with whom you directly did a QR-scan.

- -

Note that in a contact profile you may see and tap introducers -but there is no green checkmark in the profile title. -This usually means that the contact “sent a message from another device”.

- -

For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols -and specifically read about “Verified Groups”, the technical term -of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

- -

- - - A contact “sent a message from another device”, what can i do? - - -

- -

Your chat with a contact lost guaranteed end-to-end encryption. -The green checkmark was removed for this chat and contact when you see this warning. -If you find the sudden drop of guaranteed end-to-end encryption -surprising for this contact then don’t accept the warning! -Instead check with your contact through a second channel -like a video call, other messenger or a phone call, -to find out what happened.

- -

If your contact actually caused the drop of guaranteed end-to-end encryption -please see the next paragraphs for common reasons and their mitigations. -Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted -even if the contact is a member there.

- -

Your contact is using Delta Chat on a second device (phone or laptop)

- -

If they have another device with a Delta Chat app running, -they should remove the account from the new device -and add it as a second device as described here. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is established with both devices of your contact.

- -

Your contact reinstalled Delta Chat using their old account login

- -

If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is re-established for this contact.

- -

If they don’t have a backup file, it’s best to perform a QR scan -with your chat partner to re-establish guaranteed end-to-end encryption.

- -

Your contact sent a mail through a webmail interface or another e-mail app -and will get back to using Delta Chat soon again.

- -

If you are sure that the contact sometimes uses webmail, -or another mail app lacking end-to-end encryption, -then you may accept the warning. -As soon as your contact uses Delta Chat again, -guaranteed end-to-end encryption will be automatically re-established.

- -

Your contact stopped using Delta Chat entirely

- -

Sometimes remaining in contact is more important than end-to-end encryption. -“Transport Layer Encryption” (TLS) may still meaningfully protect -the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server -to not read or manipulate your messages, and to not hand them to third parties.

- -

In any case, you can not do much else than accept the warning. -Please also remove the contact from any active green-checkmarked group -which you can find in “Shared chats” in the Contact profile. -This spares your contact from getting “unreadable” messages.

- -

If the contact removed Delta Chat because of buggy or undesirable behaviour, -please consider posting to our support forum -to help us identify and address common problems. Thanks!

- -

- - - Are attachments (pictures, files, audio etc.) end-to-end encrypted? - - -

- -

Yes.

- -

When we talk about an “end-to-end encrypted message” -we always mean a whole message is encrypted, -including all the attachments -and attachment metadata such as filenames.

- -

- - - Is OpenPGP secure? - - -

- -

Yes, Delta Chat uses a secure subset of OpenPGP -and only displays a padlock security indicator on a message -if the whole message is properly encrypted and signed. -For example, “Detached signatures” are not treated as secure.

- -

OpenPGP is not insecure by itself. -Most publically discussed OpenPGP security problems -actually stem from bad usability or bad implementations of tools or apps (or both). -It is particularly important to distinguish between OpenPGP, the IETF encryption standard, -and GnuPG (GPG), a command line tool implementing OpenPGP. -Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used. -Delta Chat rather uses the OpenPGP Rust implementation rPGP, -available as an independent “pgp” package, -and security-audited in 2019.

- -

We aim, along with other OpenPGP implementors, -to further improve security characteristics by implementing the -new IETF OpenPGP Crypto-Refresh -which was thankfully adopted in summer 2023.

- -

- - - Did you consider using alternatives to OpenPGP for end-to-end -encryption? - - -

- -

Yes, we are following efforts like MLS -or Saltpack -but adopting them would mean breaking end-to-end encryption interoperability -with all other e-mail apps that typically support OpenPGP encryption. -So it would not be a light decision to take -and there must be tangible improvements for users.

- -

Delta Chat takes a holistic “usable security” approach -and works with a wide range of activist groupings as well as -renowned researchers such as TeamUSEC -to improve actual user outcomes against security threats. -The wire protocol and standard for establishing end-to-end encryption is -only one part of “user outcomes”, -see also our answers to device-seizure -and message-metadata questions.

- -

- - - Is Delta Chat vulnerable to EFAIL? - - -

- -

No, Delta Chat never was vulnerable to EFAIL -because its OpenPGP implementation rPGP -uses Modification Detection Code when encrypting messages -and returns an error -if the Modification Detection Code is incorrect.

- -

Delta Chat also never was vulnerable to the “Direct Exfiltration” EFAIL attack -because it only decrypts multipart/encrypted messages -which contain exactly one encrypted and signed part, -as defined by the Autocrypt Level 1 specification.

- -

- - - Is a message exposed in cleartext if end-to-end encryption is not available? - - -

- -

Even if your messages are not guaranteed to be end-to-end encrypted, -they are still protected from Internet providers like cell or cable companies. -However, your and your recipient’s e-mail providers -may read, analyze or even modify your messages, -including any attachments, -if they are not end-to-end encrypted.

- -

Delta Chat by default uses strict -TLS encryption -which secures connections between your device and your e-mail provider. -All of Delta Chat’s TLS-handling has been independently security audited. -Moreover, the connection between your and the recipient’s e-mail provider -will typically be transport-encrypted as well. -If the involved e-mail servers support MTA-STS -then transport encryption will be enforced between e-mail providers -in which case Delta Chat communications will never be exposed in cleartext to the Internet -even if the message was not end-to-end encrypted.

- -

Note that maintaining guaranteed end-to-end encryption on top of TLS encryption -provides pervasive safety between your and the recipient’s devices. -Not even your e-mail or Internet provider will be able to read or modify your messages.

- -

- - - How does Delta Chat protect metadata in messages? - - -

- -

Delta Chat protects most message metadata by putting the following information -into the end-to-end encrypted part of messages:

- -
    -
  • Subject line
  • -
  • Group avatar and name
  • -
  • MDN (read receipt) requests (Chat-Disposition-Notification-To)
  • -
  • Disappearing message timer (Ephemeral-Timer)
  • -
  • Chat-Group-Member-Removed, Chat-Group-Member-Added
  • -
  • Secure-Join header containing secure join commands
  • -
  • Notification about enabling location streaming
  • -
  • WebRTC room URL
  • -
- -

E-Mail servers do not get access to this protected metadata -but they do see the message date as well as the message size, -and, more importantly, the sender and receiver addresses. -E-mail servers need receiver addresses to route and -deliver messages to recipient’s devices.

- -

- - - How to protect metadata and contacts when a device is seized? - - -

- -

Both for protecting against metadata-collecting e-mail servers -as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts -can not be identified easily, as compared to messengers which reveal -phone numbers in chat groups which in turn are often associated with legal identities.

- -

- - - How can i check encryption information? - - -

- -

You may check the end-to-end encryption status manually in the “Encryption” dialog -(user profile on Android/iOS or right-click a user’s chat-list item on desktop). -Delta Chat shows two fingerprints there. -If the same fingerprints appear on your own and your contact’s device, -the connection is safe.

- -

- - - How can I check the encryption status of messages? - - -

- -

A little padlock in a message bubble denotes -that the message was properly end-to-end encrypted from the given sender. -If there is no padlock, the message was not properly end-to-end encrypted -most likely because the sender uses an app or webmail interface -without support for end-to-end–encryption.

- -

- - - Why do I see unencrypted messages? - - -

- -

If a contact uses a non-Autocrypt e-mail app, -all messages involving this contact (in a group or 1:1 chat) -will not be end-to-end encrypted, and thus not show a “padlock” with messages. -Note that even if your contacts use Delta Chat on their account, -they might also use a non-Autocrypt e-mail app on that account -which then may cause intermittently unencrypted messages. -Replying unencrypted to unencrypted messages is mandated by Autocrypt -to prevent unreadable messages on the side of your contacts -and their non-Autocrypt e-mail app.

- -

- - - How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? - - -

- -

If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), -it’s best to setup guaranteed end-to-end encryption with them -and then create a guaranteed end-to-end encrypted group chat with you two as members. -In this group chat all messages will be end-to-end encrypted -even if the direct chat between you two has a -“… sent a message from another device” warning.

- -

- - - How can I ensure message end-to-end encryption and deletion? - - -

- -

The best way to ensure every message is end-to-end encrypted, -and metadata deleted as quickly as possible -is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

- -

Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages -on the server after a user-configured time.

- -

If you don’t need a longer-lived copy of your messages on the server, -you can also turn on “delete messages from server automatically”.

- -

- - - Does Delta Chat support Perfect Forward Secrecy? - - -

- -

No, Delta Chat doesn’t support Perfect Forward Secrecy (PFS). -This means that if your Delta Chat private decryption key is leaked, -and someone has collected your prior in-transit messages, -they will be able to decrypt and read them using the leaked decryption key.

- -

Note, however, that if anyone obtains to your decryption keys, -they will typically also be able to obtain your messages, -irrespective if Perfect Forward Secrecy is in place or not. -The typical real-world situation for leaked decryption keys is device seizure -which we discuss in our answer on metadata and device seizure.

- -

It is possible that Delta Chat evolves to support Perfect Forward Secrecy, -because OpenPGP is just a container for encrypted messages -but encryption key management (and thus key rotation or key “ratcheting”) -could be organized in flexible ways. -See Seqouia’s PFS prototype -for existing experiments in the OpenPGP implementor community.

- -

- - - Is end-to-end encryption of Delta Chat as safe as Signal? - - -

- -

It depends on what is important to you. -Delta Chat does not support PFS like Signal does -but it provides guaranteed end-to-end encrypted chats -that are safe against compromised servers or corrupted networks. -Signal and most other PFS-supporting messengers do not provide -a practical scheme for protecting chat groups from network attacks -which are arguably more worrysome -than a potential attacker who seizes your phone and private encryption setup -but somehow not your messages, yet has a full record of all -past encrypted messages.

- -

In any case, Delta Chat’s end-to-end encryption uses a secure subset of OpenPGP -which has been independently security-audited.

- -

- - - Czy mogę ponownie wykorzystać mój istniejący klucz prywatny? - - -

- -

Yes. -The best way is to send an Autocrypt Setup Message from the other e-mail client. -Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

- -

Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”. -Caution: Make sure the key is not protected by a password, or remove the password beforehand.

- -

If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.

- -

- - - Nie mogę zaimportować istniejącego klucza PGP do Delta Chat. - - -

- -

Jest wielce prawdopodobne, że problemem jest klucz, który jest zaszyfrowany i/lub używa hasła. Takie klucze nie są obsługiwane przez Delta Chat. Możesz usunąć frazę szyfrującą i hasło i spróbować ponownie zaimportować klucz. Jeśli chcesz zachować hasło, musisz utworzyć alias e-mail do użytku z Delta Chat, tak aby klucz Delta Chat był powiązany z tym aliasem e-mail.

- -

Rozsądny format, Delta Chat obsługuje popularne formaty kluczy prywatnych OpenPGP, jednak jest mało prawdopodobne, że będziemy obsługiwać 100% wszystkich kluczy prywatnych z dowolnych źródeł. To również nie jest głównym celem Delta Chat (w rzeczywistości, znaczna większość użytkowników Delta Chat nie będzie miała żadnego klucza przed rozpoczęciem korzystania z Delta). Jednak staramy się wspierać klucze prywatne z innych źródeł tak dobrze jak to tylko możliwe.

- -

Usunięcie hasła z klucza prywatnego będzie się różnić w zależności od -oprogramowania używanego do zarządzania kluczami PGP. Za pomocą programu Enigmail można ustawić -hasło na pustą wartość w oknie zarządzania kluczami. Z GnuPG możesz ustawić je z linii poleceń. -W przypadku innych programów można znaleźć rozwiązanie online.

- -

- - - Multi-klient - - -

- -

- - - Czy mogę korzystać z Delta Chat na wielu urządzeniach w tym samym czasie? - - -

- -

Tak. Delta Chat 1.36 zawiera nową, eksperymentalną funkcję korzystania z tego samego konta na różnych urządzeniach:

- -
    -
  • -

    Upewnij się, że oba urządzenia są połączone z tego samego Wi-Fi lub sieci

    -
  • -
  • -

    Na pierwszym urządzeniu przejdź do Ustawienia → Dodaj kolejne urządzenie, w razie potrzeby odblokuj ekran i poczekaj chwilę, aż pojawi się kod QR

    -
  • -
  • -

    Na drugim urządzeniu zainstaluj Delta Chat

    -
  • -
  • -

    Na drugim urządzeniu uruchom Delta Chat, wybierz Dodaj jako kolejne urządzenie i zeskanuj kod QR z pierwszego urządzenia

    -
  • -
- -

Przenoszenie powinno rozpocząć się po kilku sekundach, a podczas przenoszenia oba urządzenia będą pokazywać postęp. Poczekaj, aż zakończy się na obu urządzeniach.

- -

W przeciwieństwie do wielu innych komunikatorów, po udanym przenoszeniu oba urządzenia są całkowicie niezależne. Jedno urządzenie nie jest potrzebne do działania drugiego.

- -

- - - Rozwiązywanie problemów - - -

- -
    -
  • -

    Sprawdź dokładnie, czy oba urządzenia są w tym samym Wi-Fi lub tej samej sieci

    -
  • -
  • -

    Twój system może mieć „zaporę ogniową”, o której wiadomo, że powoduje problemy (szczególnie w systemie Windows). -Wyłącz zaporę dla Delta Chat po obu stronach i spróbuj ponownie

    -
  • -
  • -

    Upewnij się, że na urządzeniu docelowym jest wystarczająca ilość miejsca

    -
  • -
  • -

    Jeśli przenoszenie się rozpoczęło, upewnij się, że urządzenia pozostają aktywne i nie zasypiają. Nie wychodź z Delta Chat. (dokładamy wszelkich starań, aby aplikacja działała w tle, ale systemy mają tendencję do ubijania aplikacji, niestety)

    -
  • -
  • -

    Delta Chat jest już zalogowany na urządzeniu docelowym? Możesz używać wielu kont na urządzeniu, po prostu dodaj kolejne konto

    -
  • -
  • -

    Jeśli nadal masz problemy lub nie możesz zeskanować kodu QR, wypróbuj ręczne przenoszenie opisane poniżej

    -
  • -
- -

- - - Manual Transfer - - -

- -

Ta metoda jest zalecana tylko wtedy, gdy opisana powyżej opcja „Dodaj kolejne urządzenie” nie działa.

- -
    -
  • On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your -screen unlock PIN, pattern, or password. Then you can click on “Start -Backup”. This saves the backup file to your device. Now you have to transfer -it to the other device somehow.
  • -
  • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption -keys, and media should be copied to the new device. -
      -
    • If you use iOS: and you encounter difficulties, maybe -this guide will -help you.
    • -
    -
  • -
  • You are now synchronized, and can use both devices for sending and receiving -end-to-end encrypted messages with your communication partners.
  • -
- -

- - - Czy są jakieś plany wprowadzenia klienta Web Delta Chat? - - -

- -
    -
  • Nie ma bezpośrednich planów, ale wstępne przemyślenia.
  • -
  • Istnieją 2-3 możliwości wprowadzenia klienta Web Delta Chat, 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.
  • -
  • 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 get.delta.chat.
  • -
- -

- - - Do czego służy ustawienie „Wyślij kopię do siebie”? - - -

- -

Wysłanie kopii wiadomości do siebie zapewnia otrzymywanie własnych wiadomości na wszystkich urządzeniach. Jeśli masz wiele urządzeń i jej nie włączysz, zobaczysz tylko wiadomości od innych osób oraz wiadomości, które wysyłasz z bieżącego urządzenia.

- -

Kopia jest wysyłana do skrzynki odbiorczej, a następnie przenoszona do folderu DeltaChat; nie jest umieszczana w folderze „Wysłane”. Delta Chat nigdy nie przesyła niczego do folderu Wysłane, ponieważ oznaczałoby to dwukrotne przesłanie wiadomości (raz przez SMTP i raz przez IMAP do folderu Wysłane).

- -

Domyślne ustawienie kopiowania do siebie to „nie”.

- -

- - - Po co mam wybrać opcję oglądania folderu „Wysłane”? - - -

- -

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ą Delta Chat i chce, aby jego program pocztowy „uczestniczył” w rozmowach na czacie.

- -

Jednak zalecamy używanie klienta Delta Chat Desktop; możesz go pobrać z get.delta.chat. 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 Delta Chat Desktop.

- -

- - - Dlaczego mogę nie widzieć folderu DeltaChat? - - -

- -

Niektórzy używają Delta Chat jako zwykłego klienta poczty e-mail i chcą używać folderu Skrzynka odbiorcza dla swojej poczty zamiast folderu DeltaChat. Jeśli wyłączysz opcję „Oglądaj folder DeltaChat”, powinieneś również wyłączyć opcję „Automatyczne przenoszenie do folderu DeltaChat”. W przeciwnym razie usuwanie wiadomości lub konfiguracja wielu urządzeń może nie działać poprawnie.

- -

- - - webxdc apps - - -

- -

In Delta Chat, you can share webxdc apps, attachments with an .xdc file -extension. They can do very different things, and make Delta Chat a truly -extendable messenger.

- -

- - - How private are webxdc apps? - - -

- -
    -
  • webxdc apps can not send data to the Internet, or download anything.
  • -
  • A webxdc app can only exchange data within a Delta Chat chat, with its -copies on the devices of your chat partners. Other than that, it’s completely -isolated from the Internet.
  • -
  • The privacy a webxdc app offers is the privacy of your chat - as long as you -trust the people you chat with, you can trust the webxdc app as well.
  • -
  • This also means: it can be a privacy risk to open webxdc apps in chats where -you don’t trust the members - as you know it from e-mail attachments, where -you only open attachments from senders you trust, and not from spammers.
  • -
- -

- - - Where can I get webxdc apps? - - -

- -
    -
  • In general, anyone can share webxdc apps with each -other without restrictions.
  • -
  • You can send ‘hi’ to xstore@testrun.org -to see an experimental webxdc appstore. -All of the apps are open source and for free.
  • -
  • Many people write their own webxdc apps and post them to the Delta Chat -forum.
  • -
- -

- - - How can I create my own webxdc apps? - - -

- -
    -
  • webxdc apps are just zip files containing html, css, and javascript code.
  • -
  • You can extend the Hello World example app -to get started.
  • -
  • All else you need to know is written in the -documentation.
  • -
  • If you have question, you can ask others with experience in the Delta Chat -Forum.
  • -
- -

- - - Funkcje eksperymentalne - - -

- -

We are very grateful for feedback on these features - do you want to share -your ideas? Join the Forum to contribute. -You may conveniently login via Delta Chat and a QR code scan, -another rather stable experiment we run on the side (sic!).

- -

- - - Jak mogę korzystać z połączeń audio/wideo z Delta Chat? - - -

- -
    -
  • To turn on audio/video calls, go to the “experimental features” section in -the advanced settings and choose a “Video Chat Instance”.
  • -
  • When you invite others to a video chat, it is opened in your browser/app at -once. The others receive an e-mail with a link to the video chat. -This way, it is also compatible if your chat partners don’t use Delta Chat.
  • -
  • Note that there is no ring tone on the other side, and your chat partners -will not get interrupted by a video chat invite.
  • -
  • You can use any video chat service which allows joining by link. Just add the -link in the settings.
  • -
  • For example, to use the flagship Jitsi Meet instance, you could enter -https://meet.jit.si/$ROOM. The $ROOM variable will be a random value; -this way, you will have a new random jitsi room every time you call someone.
  • -
- -

- - - Co to są Listy rozgłoszeniowe i jak mogę ich używać? - - -

- -
    -
  • Dzięki liście rozgłoszeniowej możesz wysłać wiadomość do wielu odbiorców jednocześnie; kiedy ci odpowiedzą, otrzymasz odpowiedź w bezpośrednim czacie 1: 1 z nimi. Odbiorcy nie widzą siebie nawzajem.
  • -
  • Technicznie, jest to e-mail z wieloma odbiorcami w „ukrytej kopii”.
  • -
  • Możesz włączyć tę funkcję w sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych. Następnie możesz utworzyć listę rozgłoszeniową z okna dialogowego „Nowy czat”.
  • -
  • Jeśli używasz więcej niż jednego urządzenia, listy rozgłoszeniowe nie są obecnie synchronizowane między nimi.
  • -
  • Wiadomości wysyłane do list rozgłoszeniowych nie są szyfrowane. Szyfrowanie złamałoby anonimowość, ponieważ wtedy wszyscy odbiorcy wiedzieliby, kto jeszcze je otrzymał (wysyłanie indywidualnych wiadomości do wszystkich byłoby gorsze z powodu limitu prędkości i zużycia sieci).
  • -
- -

- - - Jak mogę udostępnić swoją lokalizację moim rozmówcom? - - -

- -
    -
  • Możesz włączyć przesyłanie strumieniowe lokalizacji w sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych.
  • -
  • Teraz, jeśli chcesz udostępnić swoją lokalizację na czacie, przejdź do „załącz” i wybierz „Lokalizacja”. Możesz teraz ustawić przedział czasowy, w którym Twoja lokalizacja będzie przesyłana strumieniowo do rozmówców, od 5 minut do 6 godzin.
  • -
  • Gdy Twoja lokalizacja się zmienia, inni uczestnicy czatu mogą ją zobaczyć na mapie w czacie.
  • -
  • Aby zobaczyć mapę i wyświetlić lokalizacje innych osób, musisz włączyć tę funkcję w ustawieniach zaawansowanych.
  • -
  • Ta funkcja nie będzie udostępniać Twojej lokalizacji nikomu poza partnerami czatu. Ale: aby pokazać mapę, musimy pobrać część mapy z serwisu mapbox.com, więc jeśli wyświetlasz mapę, serwis mapbox.com jest proszony o mapę określonego obszaru. Jeśli jest to dla Ciebie zagrożeniem dla prywatności, ta funkcja może nie być dla Ciebie. Pracujemy nad znalezieniem zdecentralizowanej alternatywy dla Mapbox.
  • -
  • Na komputerze system operacyjny zwykle nie może określić Twojej lokalizacji. Zamiast tego możesz kliknąć prawym przyciskiem myszy na mapie i opisać lokalizację, która jest wysyłana do czatu jako wiadomość, ale także pojawia się na mapie.
  • -
- -

- - - Co właściwie chroni eksperymentalne szyfrowanie bazy danych? - - -

- -
    -
  • W tej chwili szyfrowanie bazy danych jest jeszcze bardzo eksperymentalne. Nie polegaj na nim w kwestii ochrony, powinieneś dodatkowo użyć szyfrowania systemu operacyjnego, jeśli takie zapewnia.
  • -
  • Szyfrowanie bazy danych nie szyfruje jeszcze obiektów blob, tylko wiersze i kolumny bazy danych. Oznacza to mniej więcej tyle, że Twoje wiadomości są bezpieczne, ale nie załączniki.
  • -
  • W systemach iOS i Android klucze szyfrujące są przechowywane w pęku kluczy systemowych. Oznacza to, że szyfrowanie jest tak bezpieczne, jak system operacyjny, na którym działa.
  • -
  • Klient Delta Chat na komputer nie oferuje jeszcze szyfrowania bazy danych, ponieważ nie ma standardowego sposobu przechowywania kluczy szyfrowania na różnych obsługiwanych platformach.
  • -
- -

- - - Dlaczego mogę wybrać, aby widzieć tylko folder DeltaChat? - - -

- -

To jest ustawienie eksperymentalne dla niektórych osób, które eksperymentują z regułami po stronie serwera. Nie wszyscy dostawcy to obsługują, ale w przypadku niektórych możesz przenieść wszystkie wiadomości z nagłówkiem „Chat-Version” do folderu DeltaChat. Zwykle byłoby to zrobione przez aplikację Delta Chat.

- -

Włączenie „Pobieraj tylko z folderu DeltaChat” ma sens, jeśli masz:

- -
    -
  • włączoną regułę po stronie serwera, aby przenosić wszystkie wiadomości z nagłówkiem Chat-Version do folderu DeltaChat i,
  • -
  • ustawioną opcję „Pokaż klasyczne e-maile” na „Nie, tylko czaty”.
  • -
- -

W tym przypadku Delta Chat nie musi obserwować skrzynki odbiorczej, a wystarczy, że będzie obserwować tylko folder DeltaChat.

- -

- - - Jak mogę zmienić moje konto na inny adres e-mail? - - -

- -
    -
  1. -

    Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). -You will get an information notice about the fact that you are moving to a new address. -An additional notice will also show up in your “Device messages” chat.

    -
  2. -
  3. -

    If possible, let your old e-mail provider forward all messages to your new address.

    -
  4. -
  5. -

    Tell your contacts that you changed your address. -Writing to guaranteed end-to-end encrypted chats and groups, -will make them notice your move automatically -and they will continue chatting with you using your new address.

    -
  6. -
- -

Note that Delta Chat will not retrieve messages anymore from your old e-mail provider. -If you didn’t configure your e-mail provider to forward messages (step 2.) -only those contacts to whom you sent a message in a guaranteed end-to-end encrypted chat -will send messages to your new address.

- -

To learn more about this the details behind this, read our blogpost on -it.

- -

- - - Różne - - -

- -

- - - Czy Delta Chat działa z moim dostawcą poczty e-mail? - - -

- -
    -
  • Z dość dużym prawdopodobieństwem: Tak :) -Jednak niektórzy dostawcy potrzebują specjalnych opcji, aby działać poprawnie, zobacz Przegląd dostawców
  • -
- -

- - - Chcę zarządzać własnym serwerem e-mail dla Delta Chat. Co polecacie? - - -

- - - -

- - - Jeśli Delta Chat korzysta z poczty e-mail, czy naprawdę jest to komunikator internetowy? - - -

- -
    -
  • Wysyłanie i odbieranie wiadomości zwykle zajmuje kilka sekund. Czasami zdarzają się przypadki, w których trwa to dłużej, ale prawdopodobnie jest to również prawdą w przypadku każdego innego komunikatora.
  • -
  • Natychmiastowe czatowanie działa szybko, jeśli obie strony aktywnie korzystają z aplikacji. Czasami działa wolniej, jeśli aplikacja działa w tle.
  • -
  • Odbieranie wiadomości może zająć kilka minut, ponieważ zarówno Android, jak i iOS często zatrzymują Delta Chat podczas działaniem w tle i budzą go tylko od czasu do czasu. To sztuczne opóźnienie jest zwykle gorsze na iOS niż na Androidzie.
  • -
  • Jednak „ubijanie” aplikacji działających w tle na Androidzie i iOS stanowi problem dla wielu legalnych aplikacji. Aby uzyskać więcej informacji, zobacz dontkillmyapp.com.
  • -
- -

- - - Czy Delta Chat jest kompatybilny z Protonmail / Tutanota / Criptext? - - -

- -
    -
  • Yes and No.
  • -
  • No, you can not use your Protonmail, Tutanota, or Criptext account with Delta -Chat; they do not offer receiving mails via IMAP.
  • -
  • In any case you can use Delta Chat to send Messages to people who use -Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end -encrypted, though. The end-to-end encryption those providers offer is not -compatible with Autocrypt, the standard Delta Chat -uses.
  • -
  • Delta Chat can end-to-end-encrypt through any e-mail provider with any -Autocrypt-enabled e-mail app.
  • -
- -

- - - Interesują mnie szczegóły techniczne. Możesz powiedzieć mi coś więcej? - - -

- - - -

- - - Czy Delta Chat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach? - - -

- -

Projekt Delta Chat przeszedł w ostatnich latach cztery niezależne audyty bezpieczeństwa:

- -

-W 2019 r. firma Include Security przeanalizowała biblioteki PGP i RSA Delta Chat. Nie znaleziono żadnych krytycznych problemów, ale dwa poważne problemy, które później naprawiliśmy. Ujawniła również jeden problem o średniej wadze i kilka mniej poważnych, ale nie było możliwości wykorzystania tych luk w implementacji Delta Chat. Niektóre z nich jednak naprawiliśmy od czasu zakończenia kontroli. Pełny raport można przeczytać tutaj.

- -
    -
  • -

    W 2020 r. firma Include Security przeanalizowała biblioteki Rust core, IMAP, SMTP i TLS Delta Chat. Nie znalazła żadnych problemów krytycznych ani poważnych. W raporcie zwrócono uwagę na kilka słabych punktów o średniej wadze – same w sobie nie stanowią zagrożenia dla użytkowników Delta Chat, ponieważ zależą od środowiska, w którym używany jest Delta Chat. Ze względu na użyteczność i kompatybilność nie możemy złagodzić wszystkich z nich i zdecydowaliśmy się przedstawić zalecenia dotyczące bezpieczeństwa zagrożonym użytkownikom. Pełny raport można przeczytać tutaj.

    -
  • -
  • -

    Początkiem 2023 r. firma Cure53 przeanalizowała zarówno szyfrowanie transportu połączeń sieciowych Delta Chat, jak i powtarzalną konfigurację serwera pocztowego zgodnie z zaleceniami na tej stronie. Możesz przeczytać więcej o audycie na naszym blogu lub przeczytać pełny raport tutaj.

    -
  • -
  • -

    Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

    -
  • -
- -

- - - W jaki sposób finansowany jest rozwój Delta Chat? - - -

- -

Delta Chat nie otrzymuje żadnego kapitału wysokiego ryzyka, nie jest zadłużony i nie jest pod presją generowania ogromnych zysków lub sprzedawania reklamodawcom użytkowników i ich przyjaciół oraz rodziny (lub gorzej). -Raczej korzystamy z publicznych źródeł finansowania, jak dotąd pochodzących z UE i USA, aby wspomóc nasze wysiłki w inicjowaniu zdecentralizowanego i zróżnicowanego ekosystemu komunikatora, opartego na rozwoju społeczności Free i Open-Source.

- -

Konkretnie, rozwój Delta Chat był dotychczas finansowany z tych źródeł:

- -
    -
  • -

    The NEXTLEAP EU project funded the research -and implementation of verified groups and setup contact protocols -in 2017 and 2018 and also helped to integrate end-to-end Encryption -through Autocrypt.

    -
  • -
  • -

    Open Technology Fund przyznał nam pierwszy grant w 2018/2019 (~200 000 $), dzięki któremu znacznie ulepszyliśmy aplikację na Androida i wydaliśmy pierwszą wersję beta aplikacji na komputery stacjonarne, a także ugruntował rozwój naszych funkcji w badaniach UX w kontekście praw człowieka, zobacz nasz końcowy raport Needfinding and UX. -Druga dotacja w 2019/2020 (~300 000 4) pomogła nam wydać wersje Delta/iOS, przekonwertować naszą podstawową bibliotekę na Rust i zapewnić nowe funkcje dla wszystkich platform.

    -
  • -
  • -

    The NLnet foundation granted in 2019/2020 EUR 46K for -completing Rust/Python bindings and instigating a Chat-bot eco-system.

    -
  • -
  • -

    W 2021 r. otrzymaliśmy kolejne dofinansowanie z UE na dwie propozycje dotyczące Internetu nowej generacji, a mianowicie na EPPD – katalog przenośności dostawcy poczty e-mail ( ~97 tys. EUR) i AEAP – przenoszenie adresu e-mail (~90 tys. EUR), co zaowocowało lepszą obsługą wielu kont, ulepszonymi kontaktami i ustawieniami grup za pomocą kodów QR oraz wieloma ulepszeniami sieciowymi na wszystkich platformach.

    -
  • -
  • -

    Od końca 2021 do marca 2023 otrzymaliśmy dofinansowanie Wolność Internetu (~500 tys. $) z amerykańskiego Biura Demokracji, Praw Człowieka i Pracy (DRL). -Fundusze te wspierają nasze długofalowe cele, aby uczynić Delta Chat bardziej użytecznym i kompatybilnym z szeroką gamą serwerów e-mail na całym świecie, a także bardziej odpornym i bezpiecznym w miejscach często dotkniętych cenzurą i wyłączeniami Internetu.

    -
  • -
  • -

    Od 2023 roku zostaliśmy zaakceptowani w programie Next Generation Internet (NGI) Entrust dla naszych propozycji „Prywatnych zdecentralizowanych aplikacji”. Dokładna kwota do ustalenia (około 100 tys. EUR). Finansowanie to wspiera dalszy rozwój „aplikacji udostępnianych na czacie” webxdc.

    -
  • -
  • -

    Czasami otrzymujemy jednorazowe darowizny od osób prywatnych. Na przykład w 2021 roku pewna hojna osoba przekazała nam 4K EUR w formie przelewu bankowego tytułem “kontynuujcie dobry rozwój!”. 💜 Takie pieniądze przeznaczamy na finansowanie spotkań rozwojowych lub na doraźne wydatki, których nie da się łatwo przewidzieć lub zrefundować z publicznych dotacji. Otrzymywanie większej ilości darowizn pomaga nam również stać się bardziej niezależnymi i długoterminowo rentownymi jako społeczność współpracowników.

    -
  • -
- - - -
    -
  • Wreszcie, ale zdecydowanie nie najmniej ważne, kilku ekspertów i entuzjastów pro-bono wniosło wkład i przyczyniło się do rozwoju Delta Chat bez otrzymywania pieniędzy lub tylko niewielkich kwot. Bez nich Delta Chat nie byłby tam, gdzie jest dzisiaj, nawet w pobliżu.
  • -
- -

Wspomniane powyżej finansowanie pieniężne jest w większości organizowane przez merlinux GmbH we Freiburgu (Niemcy) i jest dystrybuowane do kilkunastu podmiotów na całym świecie.

- -

Zapoznaj się z kanałami wpłat dla Delta Chat, aby uzyskać informacje o możliwościach wpłat zarówno pieniężnych, jak i innych.

- - - - - \ No newline at end of file diff --git a/assets/help/ru/help.html b/assets/help/ru/help.html deleted file mode 100644 index 8b42b3ce4..000000000 --- a/assets/help/ru/help.html +++ /dev/null @@ -1,1736 +0,0 @@ - - - - - -

- - - Что такое Delta Chat? - - -

- -

Delta Chat — это новое приложение для обмена мгновенными сообщениями, которое отправляет сообщения через электронную почту, шифруя сообщение (если это возможно) с помощью Autocrypt. -Вам не нужно нигде регистрироваться, просто используйте существующую учётную запись электронной почты в Delta Chat.

- -

- -

- - - Как мне найти людей для общения? - - -

- -

С помощью Delta Chat вы можете писать на любые существующие адреса -электронной почты, даже если получатель не использует приложение Delta Chat. -Получателю не нужно устанавливать то же приложение, что и у вас, в отличии от других мессенджеров.

- -

- - - Каковы преимущества Delta Chat по сравнению с другими мессенджерами? - - -

- -
    -
  • Independent of any company or services. You own your data.
  • -
  • Your data is not saved on a central server unless all users are using -the same e-mail servers
  • -
  • You do not distribute your address book to anyone.
  • -
  • Fast by the use of Push-IMAP.
  • -
  • Largest userbase - recipients not using Delta Chat can be reached as well.
  • -
  • No Spam - only messages of known users are shown by default.
  • -
  • End-to-end encryption via Autocrypt.
  • -
  • Copyleft and Standards based libre software.
  • -
  • Flexible identity with built-in support for multiple accounts
  • -
- -

- - - Какие сообщения отображаются в Delta Chat? - - -

- -

By default, Delta Chat shows all e-mails.

- -

At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

- -
    -
  • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
  • -
  • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
  • -
  • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
  • -
- -

- - - Что если я ожидаю сообщение от кого-то кому я ранее не писал? - - -

- -
    -
  • If a message comes from an unknown contact, it appears as a request. You -need to accept the request before you can reply.
  • -
  • You can also “delete” it if you don’t want to chat with them for now. This -does not delete the message on the server, only on your device. So you can -still deal with the message in a different mail app.
  • -
  • If you delete a request, future messages from that contact will still appear -as message request, so you can change your mind. If you really don’t want to -receive messages from this person, consider blocking them.
  • -
- -

- - - Поддерживает ли Delta Chat вложения фото, видео или другие? - - -

- -
    -
  • -

    Да. Помимо обычного текста, все вложения электронной почты отображаются в виде отдельных сообщений. В исходящие сообщения вложения встраиваются по мере необходимости автоматически.

    -
  • -
  • -

    For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.

    -
  • -
- -

- - - Как я могу добавить или сменить аккаунт? - - -

- -

You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

-
    -
  • on the menu button and then ‘Switch Account’ (Android and desktop)
  • -
  • or the profile icon and then ‘Add Account’ (iOS)
  • -
- -

You may also wish to learn how to add accounts to multiple devices.

- -

- - - Кто видит моё изображение в профиле? - - -

- -
    -
  • -

    Вы можете добавить изображение профиля в настройках. Если вы пишете своим - контактам или добавляете их с помощью QR-кода, они автоматически видят его как - изображение вашего профиля.

    -
  • -
  • -

    Контакты, которые не используют Delta Chat не видят ваше изображение профиля -(однако, конечно, они могут установить Delta Chat :)

    -
  • -
  • -

    Из соображений конфиденциальности никто не увидит ваше изображение - в профиле, пока вы не напишете им сообщение.

    -
  • -
  • -

    Изображение вашего профиля отправляется не с каждым сообщением, но достаточно -регулярно, чтобы ваши контакты снова его получили, даже если они добавят - новое устройство.

    -
  • -
- -

- - - Поддерживает ли Delta Chat электронную почту в формате HTML? - - -

- -

Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

- -

- - - Почему я должен вводить свой пароль от электронной почты в Delta Chat? Это безопасно? - - -

- -

Как и в случае других программ электронной почты, таких как Thunderbird, - K9-Mail или Outlook, программе необходим пароль, чтобы использовать его - для отправки почты. Конечно, пароль хранится только на вашем устройстве. - Пароль передаётся только вашему провайдеру электронной почты (при входе - в систему), который в любом случае имеет доступ к вашей почте.

- -

Если вы используете провайдера электронной почты с поддержкой OAuth2, - например, gmail.com или yandex.ru, нет необходимости хранить пароль на - устройстве, так как в этом случае используется токен доступа.

- -

Поскольку Delta Chat является программой открытым исходным кодом, вы - можете изучить исходный код, если хотите убедиться, что ваши - учётные данные обрабатываются безопасно. Мы будем рады вашим отзывам - и предложениям, которые сделают приложение более безопасным для всех.

- -

- - - Какие разрешения нужны Delta Chat? - - -

- -

В зависимости от используемой операционной системы -вам может быть предложено предоставить разрешения для приложения. -Вот что делает Delta Chat с этими разрешениями:

- -
    -
  • Камера (можно запретить) -
      -
    • делайте фотографии и видео: для отправки фотографий
    • -
    -
  • -
  • Контакты (можно запретить) -
      -
    • чтение ваших контактов: чтобы найти контакты для общения
    • -
    -
  • -
  • Местоположение (можно запретить) -
      -
    • доступ к приблизительному местоположению (источники сетевого местоположения): для функции потоковой передачи местоположения
    • -
    • доступ к точному местоположению (GPS и сетевые источники местоположения): для функции потоковой передачи местоположения
    • -
    -
  • -
  • Микрофон (можно запретить) -
      -
    • запись аудио: для звуковых сообщений
    • -
    -
  • -
  • Память (можно запретить) -
      -
    • изменение или удаление содержимого вашей SD-карты: для загрузки вложений сообщений
    • -
    • чтение содержимого вашей SD-карты: чтобы делиться файлами с вашими контактами
    • -
    -
  • -
  • Другие возможности приложения -
      -
    • изменять настройки звука: таким образом, вы можете выбрать мелодию звонка и громкость для уведомлений и аудиосообщений
    • -
    • запуск при включении: вам не придется запускать Delta Chat вручную
    • -
    • контроль вибрации: для уведомлений
    • -
    • просмотр сетевых подключений: для подключения к провайдеру электронной почты
    • -
    • предотвращение спящего режима: так вы можете легче скопировать код безопасности во время Autocrypt Setup Message
    • -
    • иметь полный доступ к сети: для подключения к вашему провайдеру электронной почты
    • -
    • просмотр подключений Wi-Fi: для подключения к провайдеру электронной почты
    • -
    • игнорирование оптимизации батареи: для пользователей, которые хотят получать сообщения в любое время
    • -
    -
  • -
- -

- - - What means Pinning, Muting, Archiving? - - -

- -

Используйте эти инструменты чтобы организовать ваши чаты:

- -
    -
  • -

    Закрепленные чаты всегда находятся наверху списка чатов. Вы можете использовать их чтобы быстро получать доступ к вашим любимым чатам или чтобы не забыть о важных вещах.

    -
  • -
  • -

    Mute chats if you do not want to get notifications for them. Muted chats stay in place and you can also pin a muted chat.

    -
  • -
  • -

    Archive chats if you do not want to see them in your chat list any longer. -Archived chats remain accessible above the chat list or via search.

    -
  • -
  • -

    When an archived chat gets a new message, unless muted, it will pop out of the archive and back into your chat list. -Muted chats stay archived until you unarchive them manually.

    -
  • -
- -

To archive or pin a chat, long tap (Android), use the chat’s menu (Android/Desktop) or swipe to the left (iOS); -to mute a chat, use the chat’s menu (Android/Desktop) or the chat’s profile (iOS).

- -

- - - Что означает зеленая точка? - - -

- -
    -
  • Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar -of a contact. It means they were “recently seen”.
  • -
  • In detail: it means, that in the last 10 minutes, Delta Chat has seen them: -
      -
    • either because they messaged you directly,
    • -
    • because they wrote something to a group you are both a member of,
    • -
    • because they sent you a read receipt for a message you wrote,
    • -
    • or because they sent data to your Delta Chat app by using a -webxdc app.
    • -
    -
  • -
  • So this is not a real time online status - and if someone doesn’t answer -right away even though they seem to be online, don’t worry and give them some -space ;-)
  • -
  • On the other hand, others will not always “see that you are online”. If you -have turned off read receipts, they will not see the green dot until you -message them or write to a group they’re in as well.
  • -
- -

- - - Как я могу удалить аккаунт? - - -

- -

As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

- -

If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

- -

- - - Группы - - -

- -

- - - Создание группы - - -

- -
    -
  • Выберите Новый чат, а затем Новая группа из меню в правом верхнем углу или нажмите соответствующую кнопку на Android/iOS.
  • -
  • На следующем экране выберите участников и придумайте название группы. Вы также можете выбрать изображение группы.
  • -
  • Как только вы напишете первое сообщение в группе, все участники будут проинформированы о новой группе и смогут ответить (до тех пор, пока вы не напишете сообщение в группе, группа будет невидима для участников).
  • -
- -

- - - Добавление участников в группу - - -

- -
    -
  • Каждый участник группы имеет те же права, что и любой другой. По этой причине каждый может удалить любого участника или добавить нового.
  • -
  • Чтобы добавить или удалить участников, нажмите на название группы в чате.
  • -
- -

- - - Я случайно себя удалил. - - -

- -
    -
  • Поскольку вы больше не являетесь членом группы, вы не можете добавлять себя снова. -Тем не менее, проблемы нет, просто попросите любого другого члена группы в обычном чате повторно добавить вас.
  • -
- -

- - - Я больше не хочу получать сообщения группы. - - -

- -
    -
  • -

    Либо удалите себя из списка участников, либо удалите весь чат. -Если позже вы снова захотите присоединиться к группе, попросите другого члена группы добавить вас.

    -
  • -
  • -

    Или, в качестве альтернативы, вы также можете отключить уведомления для группы - это означает, что вы будете получать все сообщения и сможете их писать, но больше не будете получать уведомления о новых сообщениях.

    -
  • -
- -

- - - Что означают галочки рядом с исходящими сообщениями? - - -

- -
    -
  • Одна галочка означает, что сообщение было успешно отправлено вашему провайдеру.
  • -
  • Две галочки означают, что хотя бы одно устройство получателя -сообщило о получении сообщения.
  • -
  • Получатели могут отключить функцию чтения сообщений, -поэтому даже если вы видите только одну галочку, сообщение может быть прочитано.
  • -
  • И наоборот, две галочки не означают, - что человек прочитал или понял сообщение ;)
  • -
- -

- - - What happens if I turn on “Delete old messages from server”? - - -

- -
    -
  • -

    By default, Delta Chat stores all messages locally on your device. -If you e.g. want to save storage space at your mail provider, -you can configure Delta Chat -to delete old already-received messages on the server automatically. -They still remain on your device until you delete them there, too.

    -
  • -
  • -

    To turn it on, go to Delete Old Messages → Delete Messages from Server -in the “Chats and Media” settings. -You can set a timeframe between “At once” and “After 1 year”. -All e-mails received by Delta Chat will be deleted from the server after this timeframe.

    -
  • -
  • -

    Note that if you use Delta Chat on more than one device, -you need to leave the message on the server with a sufficient timeframe -so that the other device(s) can download them, too.

    -
  • -
- -

- - - What happens if I turn on “Delete old messages from device”? - - -

- -
    -
  • If you want to save storage on your device, you can choose to delete old -messages automatically.
  • -
  • To turn it on, go to “delete old messages from device” in the “Chats & Media” -settings. You can set a timeframe between “after an hour” and “after a year”; -this way, all messages will be deleted from your device as soon as they are -older than that.
  • -
- -

- - - Шифрование и безопасность - - -

- -

- - - Which standards are used for end-to-end encryption? - - -

- -

Autocrypt is used for automatically -establishing end-to-end encryption with contacts and group chats. -Autocrypt uses a limited and secure subset of the OpenPGP standard. -End-to-End encrypted messages are marked with a padlock -padlock.

- -

Secure-Join protocols -are used for establishing chats with guaranteed end-to-end encryption -which protects against network attacks and compromised servers. -Chats marked with a green checkmark -green checkmark -guarantee end-to-end encrypted messages.

- -

- - - How can i know if messages are end-to-end encrypted? - - -

- -

All end-to-end encrypted messages carry a padlock:

- -

padlock in bubble

- -

End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:

- -

green checkmark in title

- -

- - - How can I get guaranteed end-to-end encryption and green checkmarks? - - -

- -

Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

- -

Inviter side:

- -
    -
  • -

    Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
  • -

    Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
- -

Joiner side:

- -
    -
  • -

    Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

    -
  • -
  • -

    Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

    -
  • -
  • -

    Tap “OK”

    -
  • -
- -

Both Inviter and Joiner:

- -

Wait while Secure-Join network messages are exchanged between both devices.

- -
    -
  • -

    If both devices are online, -both sides will eventually see a (group or direct) chat with a green checkmark -green checkmark -next to the title.

    -
  • -
  • -

    If one of the devices is offline, the green checkmarks will only -appear later when the device is internet-connected again -and the Secure-Join network protocol completed.

    -
  • -
- -

Congratulations! -You now will automatically use guaranteed end-to-end encryption -with this contact and both of you can add each other to green-checkmarked groups -green checkmark, -thereby automatically spreading guaranteed end-to-end encryption among its members.

- -

- - - What does the green checkmark and “guaranteed end-to-end encryption” mean? - - -

- -

Chat titles with green checkmarks -green checkmark -mean that all messages in the chat will be end-to-end encrypted -and can not be read or altered by compromised e-mail servers or Internet providers. -Joining green-checkmarked group chats -safely spreads everybody’s encryption information (and green checkmarks) -in a manner that guarantees end-to-end encryption in the group and among members.

- -

Contact profiles with green checkmarks -green checkmark -mean that messaging a contact is currently guaranteed to be end-to-end encrypted. -Every green-checkmarked contact either did a direct QR-scan with you -or was introduced by a another green-checkmarked contact. -Introductions happen automatically when adding members to groups. -Whoever adds a contact to a green-checkmarked group becomes an introducer -to those members who didn’t yet know about the added contact. -In a contact profile you can tap on the “Introduced by …” text repeatedly -until you get to the one with whom you directly did a QR-scan.

- -

Note that in a contact profile you may see and tap introducers -but there is no green checkmark in the profile title. -This usually means that the contact “sent a message from another device”.

- -

For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols -and specifically read about “Verified Groups”, the technical term -of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

- -

- - - A contact “sent a message from another device”, what can i do? - - -

- -

Your chat with a contact lost guaranteed end-to-end encryption. -The green checkmark was removed for this chat and contact when you see this warning. -If you find the sudden drop of guaranteed end-to-end encryption -surprising for this contact then don’t accept the warning! -Instead check with your contact through a second channel -like a video call, other messenger or a phone call, -to find out what happened.

- -

If your contact actually caused the drop of guaranteed end-to-end encryption -please see the next paragraphs for common reasons and their mitigations. -Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted -even if the contact is a member there.

- -

Your contact is using Delta Chat on a second device (phone or laptop)

- -

If they have another device with a Delta Chat app running, -they should remove the account from the new device -and add it as a second device as described here. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is established with both devices of your contact.

- -

Your contact reinstalled Delta Chat using their old account login

- -

If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is re-established for this contact.

- -

If they don’t have a backup file, it’s best to perform a QR scan -with your chat partner to re-establish guaranteed end-to-end encryption.

- -

Your contact sent a mail through a webmail interface or another e-mail app -and will get back to using Delta Chat soon again.

- -

If you are sure that the contact sometimes uses webmail, -or another mail app lacking end-to-end encryption, -then you may accept the warning. -As soon as your contact uses Delta Chat again, -guaranteed end-to-end encryption will be automatically re-established.

- -

Your contact stopped using Delta Chat entirely

- -

Sometimes remaining in contact is more important than end-to-end encryption. -“Transport Layer Encryption” (TLS) may still meaningfully protect -the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server -to not read or manipulate your messages, and to not hand them to third parties.

- -

In any case, you can not do much else than accept the warning. -Please also remove the contact from any active green-checkmarked group -which you can find in “Shared chats” in the Contact profile. -This spares your contact from getting “unreadable” messages.

- -

If the contact removed Delta Chat because of buggy or undesirable behaviour, -please consider posting to our support forum -to help us identify and address common problems. Thanks!

- -

- - - Are attachments (pictures, files, audio etc.) end-to-end encrypted? - - -

- -

Yes.

- -

When we talk about an “end-to-end encrypted message” -we always mean a whole message is encrypted, -including all the attachments -and attachment metadata such as filenames.

- -

- - - Is OpenPGP secure? - - -

- -

Yes, Delta Chat uses a secure subset of OpenPGP -and only displays a padlock security indicator on a message -if the whole message is properly encrypted and signed. -For example, “Detached signatures” are not treated as secure.

- -

OpenPGP is not insecure by itself. -Most publically discussed OpenPGP security problems -actually stem from bad usability or bad implementations of tools or apps (or both). -It is particularly important to distinguish between OpenPGP, the IETF encryption standard, -and GnuPG (GPG), a command line tool implementing OpenPGP. -Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used. -Delta Chat rather uses the OpenPGP Rust implementation rPGP, -available as an independent “pgp” package, -and security-audited in 2019.

- -

We aim, along with other OpenPGP implementors, -to further improve security characteristics by implementing the -new IETF OpenPGP Crypto-Refresh -which was thankfully adopted in summer 2023.

- -

- - - Did you consider using alternatives to OpenPGP for end-to-end -encryption? - - -

- -

Yes, we are following efforts like MLS -or Saltpack -but adopting them would mean breaking end-to-end encryption interoperability -with all other e-mail apps that typically support OpenPGP encryption. -So it would not be a light decision to take -and there must be tangible improvements for users.

- -

Delta Chat takes a holistic “usable security” approach -and works with a wide range of activist groupings as well as -renowned researchers such as TeamUSEC -to improve actual user outcomes against security threats. -The wire protocol and standard for establishing end-to-end encryption is -only one part of “user outcomes”, -see also our answers to device-seizure -and message-metadata questions.

- -

- - - Is Delta Chat vulnerable to EFAIL? - - -

- -

No, Delta Chat never was vulnerable to EFAIL -because its OpenPGP implementation rPGP -uses Modification Detection Code when encrypting messages -and returns an error -if the Modification Detection Code is incorrect.

- -

Delta Chat also never was vulnerable to the “Direct Exfiltration” EFAIL attack -because it only decrypts multipart/encrypted messages -which contain exactly one encrypted and signed part, -as defined by the Autocrypt Level 1 specification.

- -

- - - Is a message exposed in cleartext if end-to-end encryption is not available? - - -

- -

Even if your messages are not guaranteed to be end-to-end encrypted, -they are still protected from Internet providers like cell or cable companies. -However, your and your recipient’s e-mail providers -may read, analyze or even modify your messages, -including any attachments, -if they are not end-to-end encrypted.

- -

Delta Chat by default uses strict -TLS encryption -which secures connections between your device and your e-mail provider. -All of Delta Chat’s TLS-handling has been independently security audited. -Moreover, the connection between your and the recipient’s e-mail provider -will typically be transport-encrypted as well. -If the involved e-mail servers support MTA-STS -then transport encryption will be enforced between e-mail providers -in which case Delta Chat communications will never be exposed in cleartext to the Internet -even if the message was not end-to-end encrypted.

- -

Note that maintaining guaranteed end-to-end encryption on top of TLS encryption -provides pervasive safety between your and the recipient’s devices. -Not even your e-mail or Internet provider will be able to read or modify your messages.

- -

- - - How does Delta Chat protect metadata in messages? - - -

- -

Delta Chat protects most message metadata by putting the following information -into the end-to-end encrypted part of messages:

- -
    -
  • Subject line
  • -
  • Group avatar and name
  • -
  • MDN (read receipt) requests (Chat-Disposition-Notification-To)
  • -
  • Disappearing message timer (Ephemeral-Timer)
  • -
  • Chat-Group-Member-Removed, Chat-Group-Member-Added
  • -
  • Secure-Join header containing secure join commands
  • -
  • Notification about enabling location streaming
  • -
  • WebRTC room URL
  • -
- -

E-Mail servers do not get access to this protected metadata -but they do see the message date as well as the message size, -and, more importantly, the sender and receiver addresses. -E-mail servers need receiver addresses to route and -deliver messages to recipient’s devices.

- -

- - - How to protect metadata and contacts when a device is seized? - - -

- -

Both for protecting against metadata-collecting e-mail servers -as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts -can not be identified easily, as compared to messengers which reveal -phone numbers in chat groups which in turn are often associated with legal identities.

- -

- - - How can i check encryption information? - - -

- -

You may check the end-to-end encryption status manually in the “Encryption” dialog -(user profile on Android/iOS or right-click a user’s chat-list item on desktop). -Delta Chat shows two fingerprints there. -If the same fingerprints appear on your own and your contact’s device, -the connection is safe.

- -

- - - How can I check the encryption status of messages? - - -

- -

A little padlock in a message bubble denotes -that the message was properly end-to-end encrypted from the given sender. -If there is no padlock, the message was not properly end-to-end encrypted -most likely because the sender uses an app or webmail interface -without support for end-to-end–encryption.

- -

- - - Why do I see unencrypted messages? - - -

- -

If a contact uses a non-Autocrypt e-mail app, -all messages involving this contact (in a group or 1:1 chat) -will not be end-to-end encrypted, and thus not show a “padlock” with messages. -Note that even if your contacts use Delta Chat on their account, -they might also use a non-Autocrypt e-mail app on that account -which then may cause intermittently unencrypted messages. -Replying unencrypted to unencrypted messages is mandated by Autocrypt -to prevent unreadable messages on the side of your contacts -and their non-Autocrypt e-mail app.

- -

- - - How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? - - -

- -

If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), -it’s best to setup guaranteed end-to-end encryption with them -and then create a guaranteed end-to-end encrypted group chat with you two as members. -In this group chat all messages will be end-to-end encrypted -even if the direct chat between you two has a -“… sent a message from another device” warning.

- -

- - - How can I ensure message end-to-end encryption and deletion? - - -

- -

The best way to ensure every message is end-to-end encrypted, -and metadata deleted as quickly as possible -is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

- -

Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages -on the server after a user-configured time.

- -

If you don’t need a longer-lived copy of your messages on the server, -you can also turn on “delete messages from server automatically”.

- -

- - - Does Delta Chat support Perfect Forward Secrecy? - - -

- -

No, Delta Chat doesn’t support Perfect Forward Secrecy (PFS). -This means that if your Delta Chat private decryption key is leaked, -and someone has collected your prior in-transit messages, -they will be able to decrypt and read them using the leaked decryption key.

- -

Note, however, that if anyone obtains to your decryption keys, -they will typically also be able to obtain your messages, -irrespective if Perfect Forward Secrecy is in place or not. -The typical real-world situation for leaked decryption keys is device seizure -which we discuss in our answer on metadata and device seizure.

- -

It is possible that Delta Chat evolves to support Perfect Forward Secrecy, -because OpenPGP is just a container for encrypted messages -but encryption key management (and thus key rotation or key “ratcheting”) -could be organized in flexible ways. -See Seqouia’s PFS prototype -for existing experiments in the OpenPGP implementor community.

- -

- - - Is end-to-end encryption of Delta Chat as safe as Signal? - - -

- -

It depends on what is important to you. -Delta Chat does not support PFS like Signal does -but it provides guaranteed end-to-end encrypted chats -that are safe against compromised servers or corrupted networks. -Signal and most other PFS-supporting messengers do not provide -a practical scheme for protecting chat groups from network attacks -which are arguably more worrysome -than a potential attacker who seizes your phone and private encryption setup -but somehow not your messages, yet has a full record of all -past encrypted messages.

- -

In any case, Delta Chat’s end-to-end encryption uses a secure subset of OpenPGP -which has been independently security-audited.

- -

- - - Можно ли повторно использовать существующий секретный ключ? - - -

- -

Yes. -The best way is to send an Autocrypt Setup Message from the other e-mail client. -Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

- -

Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”. -Caution: Make sure the key is not protected by a password, or remove the password beforehand.

- -

If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.

- -

- - - Я не могу импортировать мой существующий ключ PGP в Delta Chat. - - -

- -

Вероятная причина заключается в том, что ваш ключ зашифрован и/или использует -пароль. Такие ключи не поддерживаются Delta Chat. Вы можете удалить -шифрование парольной фразы и пароль, а затем повторить попытку импорта. Если вы хотите -сохранить свою парольную фразу, вам придется создать псевдоним электронной почты для использования - Delta Chat, чтобы ключ Delta Chat был привязан к этому псевдониму электронной почты.

- -

Delta Chat поддерживает расспространённые форматы закрытых ключей OpenPGP, однако -маловероятно, что мы будем поддерживать все закрытые ключи из любых источников. Это - не является главным фокусом Delta Chat. На самом деле, подавляющее большинство -пользователей Delta Chat не будут иметь никакого ключа, прежде чем они начнут использовать его. -Однако мы стараемся поддерживать закрытые ключи из как можно большего числа источников.

- -

Удаление пароля закрытого ключа будет отличаться в зависимости от программного обеспечения, используемого для управления ключами PGP. -В Enigmail вы можете установить пустой пароль в окне управления ключами. -В GnuPG вы можете установить его через командную строку. -Для других программ ищите решение в интернете.

- -

- - - Мультиклиент - - -

- -

- - - Можно ли использовать Delta Chat на нескольких устройствах одновременно? - - -

- -

Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

- -
    -
  • -

    Make sure both devices are on the same Wi-Fi or network

    -
  • -
  • -

    On the first device, go to Settings → Add Second Device, unlock the screen if needed -and wait a moment until a QR code is shown

    -
  • -
  • -

    On the second device, install Delta Chat

    -
  • -
  • -

    On the second device, start Delta Chat, select Add as Second Device, and scan the QR code from the old device

    -
  • -
  • -

    Transfer should start after a few seconds and during transfer both devices will show the progress. -Wait until it is finished on both devices.

    -
  • -
- -

In contrast to many other messengers, after successful transfer, -both devices are completely independent. -One device is not needed for the other to work.

- -

- - - Troubleshooting - - -

- -
    -
  • -

    Double-check both devices are in the same Wi-Fi or network

    -
  • -
  • -

    Your system might have a “personal firewall”, -which is known to cause problems (especially on Windows). -Disable the personal firewall for Delta Chat on both ends and try again

    -
  • -
  • -

    Ensure there is enough storage on the destination device

    -
  • -
  • -

    If transfer started, make sure, the devices stay active and do not fall asleep. -Do not exit Delta Chat. -(we try hard to make the app work in background, but systems tend to kill apps, unfortunately)

    -
  • -
  • -

    Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

    -
  • -
  • -

    If you still have problems or if you cannot scan a QR code -try the manual transfer described below

    -
  • -
- -

- - - Manual Transfer - - -

- -

This method is only recommended if “Add Second Device” as described above does not work.

- -
    -
  • On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your -screen unlock PIN, pattern, or password. Then you can click on “Start -Backup”. This saves the backup file to your device. Now you have to transfer -it to the other device somehow.
  • -
  • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption -keys, and media should be copied to the new device. -
      -
    • If you use iOS: and you encounter difficulties, maybe -this guide will -help you.
    • -
    -
  • -
  • You are now synchronized, and can use both devices for sending and receiving -end-to-end encrypted messages with your communication partners.
  • -
- -

- - - Есть ли какие-либо планы по внедрению веб-клиента Delta Chat? - - -

- -
    -
  • Ближайших планов нет, но есть некоторые предварительные идеи.
  • -
  • Существуют 2-3 способа внедрения веб-клиента Delta Chat, но все -они требуют значительных усилий. На данный момент мы сосредоточены на выпуске стабильных релизов во всех -магазинах приложений (Google Play/iOS/Windows/macOS/Linux).
  • -
  • Если вам нужен веб-клиент, поскольку вы не можете устанавливать программное обеспечение на -компьютере, на которым вы работаете, вы можете использовать портативный настольный клиент Windows -или AppImage для Linux. Вы можете найти их на -get.delta.chat.
  • -
- -

- - - Для чего нужен параметр “Отправить копию себе”? - - -

- -

Отправка копии ваших сообщений себе гарантирует, что вы получите свои собственные -сообщения на всех устройствах. Если у вас есть несколько устройств и вы не включили его, вы -видите только сообщения от других людей и сообщения, которые вы отправляете с -текущего устройства.

- -

Копия отправляется в папку “Входящие”, а затем перемещается в папку DeltaChat; она не -помещается в папку “Отправлено”. Delta Chat никогда ничего не загружает в папку Отправлено -, потому что это означало бы загрузку сообщения дважды (один раз через SMTP -и один раз через IMAP в папку Отправлено).

- -

Значение для “Отправить копию себе” по умолчанию - нет.

- -

- - - Для чего нужен параметр “следить за папкой Отправлено”? - - -

- -

Этот параметр, важен для тех, кто использует другую -почтовую программу (например, Thunderbird) вместе с приложением Delta Chat.

- -

Однако мы рекомендуем использовать настольный клиент Delta Chat; вы можете скачать его -на get.delta.chat. Возможность “слежения за папкой Отправлено” -может быть убрана в будущем. Эта функция была представлена в то время, когда не было - настольного клиента Delta Chat доступного на всех платформах.

- -

- - - Почему я могу отключить “следить за папкой Delta Chat”? - - -

- -

Некоторые люди используют Delta Chat в качестве обычного почтового клиента и хотят использовать папку “Входящие” -для своей почты вместо папки DeltaChat. Если вы отключите функцию “следить за -папкой DeltaChat”, вы также должны отключить “переместить сообщения чата в DeltaChat”. -В противном случае удаление сообщений или настройки могут работать неправильно.

- -

- - - webxdc apps - - -

- -

In Delta Chat, you can share webxdc apps, attachments with an .xdc file -extension. They can do very different things, and make Delta Chat a truly -extendable messenger.

- -

- - - How private are webxdc apps? - - -

- -
    -
  • webxdc apps can not send data to the Internet, or download anything.
  • -
  • A webxdc app can only exchange data within a Delta Chat chat, with its -copies on the devices of your chat partners. Other than that, it’s completely -isolated from the Internet.
  • -
  • The privacy a webxdc app offers is the privacy of your chat - as long as you -trust the people you chat with, you can trust the webxdc app as well.
  • -
  • This also means: it can be a privacy risk to open webxdc apps in chats where -you don’t trust the members - as you know it from e-mail attachments, where -you only open attachments from senders you trust, and not from spammers.
  • -
- -

- - - Where can I get webxdc apps? - - -

- -
    -
  • In general, anyone can share webxdc apps with each -other without restrictions.
  • -
  • You can send ‘hi’ to xstore@testrun.org -to see an experimental webxdc appstore. -All of the apps are open source and for free.
  • -
  • Many people write their own webxdc apps and post them to the Delta Chat -forum.
  • -
- -

- - - How can I create my own webxdc apps? - - -

- -
    -
  • webxdc apps are just zip files containing html, css, and javascript code.
  • -
  • You can extend the Hello World example app -to get started.
  • -
  • All else you need to know is written in the -documentation.
  • -
  • If you have question, you can ask others with experience in the Delta Chat -Forum.
  • -
- -

- - - Experimental Features - - -

- -

We are very grateful for feedback on these features - do you want to share -your ideas? Join the Forum to contribute. -You may conveniently login via Delta Chat and a QR code scan, -another rather stable experiment we run on the side (sic!).

- -

- - - How can I use audio/video calls with Delta Chat? - - -

- -
    -
  • To turn on audio/video calls, go to the “experimental features” section in -the advanced settings and choose a “Video Chat Instance”.
  • -
  • When you invite others to a video chat, it is opened in your browser/app at -once. The others receive an e-mail with a link to the video chat. -This way, it is also compatible if your chat partners don’t use Delta Chat.
  • -
  • Note that there is no ring tone on the other side, and your chat partners -will not get interrupted by a video chat invite.
  • -
  • You can use any video chat service which allows joining by link. Just add the -link in the settings.
  • -
  • For example, to use the flagship Jitsi Meet instance, you could enter -https://meet.jit.si/$ROOM. The $ROOM variable will be a random value; -this way, you will have a new random jitsi room every time you call someone.
  • -
- -

- - - What are Broadcast Lists and how can I use them? - - -

- -
    -
  • With a Broadcast List you can send a message to many recipents at once; when -they reply to you, you get the reply in your direct 1:1 chat with them. The -recipients can’t see each other.
  • -
  • Technically, it is an E-Mail with many recipients in BCC.
  • -
  • You can turn on the feature in the “experimental features” section in the -advanced settings. Then you can create a Broadcast List from the “New Chat” -dialog.
  • -
  • In case you are using more than one device, Broadcast Lists are currently not -synced between them.
  • -
  • Messages sent to broadcast lists are not encrypted. Encryption would break -anonymity, because then all recipients would know who else received it -(Sending individual mails to everyone would be worse for rate limit and network -consumption reason).
  • -
- -

- - - How can I share my location with my chat partners? - - -

- -
    -
  • You can turn on location streaming in the “experimental features” section of -the advanced settings.
  • -
  • Now, if you want to share your location in a chat, go to “attach” and select -“location”. You can now set a time frame in which your location will be -streamed to your chat partners, between 5 minutes and 6 hours.
  • -
  • When your location changes, the others in the chat can view it on a map in -the chat.
  • -
  • To see the map and view locations of others, you need to turn on the feature -in the advanced settings.
  • -
  • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
  • -
  • On desktop, the OS typically can’t determine your location. Instead you can -right click on the map and describe a location, which is sent to the chat as -a message, but also appears on the map.
  • -
- -

- - - What does the experimental database encryption actually protect? - - -

- -
    -
  • Right now, the database encryption is still very experimental. Don’t rely on -it for protection, you should additionally use encryption of your operating -system, if it provides any.
  • -
  • The database encryption does not yet encrypt the blobs, only the rows and -columns of the database. This more or less means that your messages are safe, -but not your attachments.
  • -
  • For iOS and Android, the encryption keys are stored in the system keychain. -This means the encryption is as secure as the operating system it’s running -on.
  • -
  • The Delta Chat desktop client doesn’t offer database encryption yet, as there -is no standard way to store the encryption keys on the different supported -platforms.
  • -
- -

- - - Why can I choose to only watch the DeltaChat folder? - - -

- -

Это экспериментальная функция для некоторых людей, которые экспериментируют с -правилами на стороне сервера. Не все провайдеры поддерживают это, но с некоторыми вы можете переместить -все письма с заголовком “Chat-Version” в папку DeltaChat. Обычно это -делается с помощью приложения Delta Chat.

- -

Enabling “Only Fetch from DeltaChat folder” makes sense if you have both:

- -
    -
  • включено правило на стороне сервера для перемещения всех сообщений с заголовком “Chat-Version” в папку Delta Chat, и
  • -
  • установлен параметр “Показывать классические электронные письма” со значеним “Нет, только чаты”.
  • -
- -

In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

- -

- - - How can I change my account to a different e-mail address? - - -

- -
    -
  1. -

    Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). -You will get an information notice about the fact that you are moving to a new address. -An additional notice will also show up in your “Device messages” chat.

    -
  2. -
  3. -

    If possible, let your old e-mail provider forward all messages to your new address.

    -
  4. -
  5. -

    Tell your contacts that you changed your address. -Writing to guaranteed end-to-end encrypted chats and groups, -will make them notice your move automatically -and they will continue chatting with you using your new address.

    -
  6. -
- -

Note that Delta Chat will not retrieve messages anymore from your old e-mail provider. -If you didn’t configure your e-mail provider to forward messages (step 2.) -only those contacts to whom you sent a message in a guaranteed end-to-end encrypted chat -will send messages to your new address.

- -

To learn more about this the details behind this, read our blogpost on -it.

- -

- - - Другое - - -

- -

- - - Поддерживает ли Delta Chat работу с моим провайдером электронной почты? - - -

- -
    -
  • В большинстве случаев - да :)
    -Тем не менее, для корректной работы некоторых почтовых служб (провайдеров) -требуются специфические настройки; -смотрите Обзор провайдеров
  • -
- -

- - - I want to manage my own e-mail server for Delta Chat. What do you recommend? - - -

- - - -

- - - Если Delta Chat использует электронную почту, действительно ли это сервис обмена мгновенными сообщениями (мессенджер)? - - -

- -
    -
  • Отправка и получение сообщений обычно занимает несколько секунд. Иногда -есть случаи, когда это занимает больше времени, но это, возможно, верно и для -любого другого мессенджера.
  • -
  • Мгновенный чат работает быстро, если обе стороны активно используют приложение. Иногда это -происходит медленнее, если приложение работает в фоновом режиме.
  • -
  • Получение сообщений тогда может занять несколько минут, потому что и Android, и iOS часто -останавливают работу Delta Chat в фоновом режиме и только иногда пробуждают его -. Эта искусственная задержка обычно хуже работает на iOS, чем на Android.
  • -
  • Однако Android и iOS убивают приложения, работающие в фоновом режиме, что является -проблемой для многих законных приложений. Для получения дополнительной информации см. -dontkillmyapp.com.
  • -
- -

- - - Совместим ли Delta Chat с Protonmail / Tutanota / Criptext? - - -

- -
    -
  • Yes and No.
  • -
  • No, you can not use your Protonmail, Tutanota, or Criptext account with Delta -Chat; they do not offer receiving mails via IMAP.
  • -
  • In any case you can use Delta Chat to send Messages to people who use -Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end -encrypted, though. The end-to-end encryption those providers offer is not -compatible with Autocrypt, the standard Delta Chat -uses.
  • -
  • Delta Chat can end-to-end-encrypt through any e-mail provider with any -Autocrypt-enabled e-mail app.
  • -
- -

- - - Меня интересуют технические детали. Можете рассказать больше? - - -

- - - -

- - - Was Delta Chat independently audited for security vulnerabilities? - - -

- -

The Delta Chat project underwent four independent security audits in the last years:

- -
    -
  • -

    In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

    -
  • -
  • -

    In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

    -
  • -
  • -

    Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

    -
  • -
  • -

    Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

    -
  • -
- -

- - - Как финансируются разработки Delta Chat? - - -

- -

Delta Chat не получает никакого венчурного капитала, -не имеет долгов, и не ставит целью заработать огромную прибыль или -продавать пользователей, их друзей и семью рекламодателям (или ещё кому-либо). -Мы предпочитаем использовать государственные источники финансирования далёкие от Евросоюза и США, чтобы -продолжить создавать децентрализованную экосистему обмена сообщениями, -основанную на Свободном и Открытом исходном коде.

- -

Конкретно до этого момента, разработки Delta Chat финансировались из этих источников:

- -
    -
  • -

    The NEXTLEAP EU project funded the research -and implementation of verified groups and setup contact protocols -in 2017 and 2018 and also helped to integrate end-to-end Encryption -through Autocrypt.

    -
  • -
  • -

    Фонд открытых технологий предоставил нам -два гранта. Первый грант 2018/2019 года (~$200 тыс.) помог значительно улучшить Android приложение -и выпустить бета-версию настольного клиента, кроме того -закрепил наши разработки в области исследований UX в контексте прав человека, -смотрите наш отчёт Needfinding and UX report. -Второй грант 2019/2020 года (~$300 тыс.) помог нам -выпустить Delta/iOS версии, преобразовать нашу основную библиотеку Rust, а также -предоставить новые функции для всех платформ.

    -
  • -
  • -

    The NLnet foundation granted in 2019/2020 EUR 46K for -completing Rust/Python bindings and instigating a Chat-bot eco-system.

    -
  • -
  • -

    В 2021 мы получили дополнительное финансирование из ЕС для двух Next-Generation-Internet -целей, а именно для EPPD - e-mail provider portability directory (~97 тыс. евро) и AEAP - email address porting (~90 тыс. евро). Это привело к улучшению поддержки мультиклиентности, QR-кодов, настройки контактов и групп, и множеству улучшений в работе сети для всех платформ.

    -
  • -
  • -

    From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the -U.S. Bureau of Democracy, Human Rights and Labor (DRL). -This funding supported our long-running goals to make Delta Chat more usable -and compatible with a wide range of e-mail servers world-wide, and more resilient and secure -in places often affected by internet censorship and shutdowns.

    -
  • -
  • -

    Beginning 2023 we got accepted in the Next Generation Internet (NGI) -Entrust program for our “Private Decentralized Apps” proposals. -Exact amount is to be determined (around 100K EUR). -This funding supports further developments of webxdc “apps shared in a chat”.

    -
  • -
  • -

    Sometimes we receive one-time donations from private individuals. -For example, in 2021 a generous individual bank-wired us 4K EUR -with the subject “keep up the good developments!”. 💜 -We use such money to fund development gatherings or to care for ad-hoc expenses -that can not easily be predicted for, or reimbursed from, public funding grants. -Receiving more donations also helps us to become more independent and long-term viable -as a contributor community.

    - - -
  • -
  • -

    И последнее, но далеко не менее важное: несколько экспертов и энтузиастов на общественных началах внесли - и вносят свой вклад в развитие Delta Chat, не получая денег, а только -небольшие суммы. Без них Delta Chat не был бы там, где он есть сегодня, -даже близко.

    -
  • -
- -

Упомянутые выше денежные сборы было организованы компанией merlinux GmbH в городе -Фрайбург (Германия), и распределяются среди более чем дюжины участников по всему миру.

- -

Please see Delta Chat Contribution channels -for both monetary and and other contribution possibilities.

- - - - - \ No newline at end of file diff --git a/assets/help/uk/help.html b/assets/help/uk/help.html deleted file mode 100644 index a9e26dac4..000000000 --- a/assets/help/uk/help.html +++ /dev/null @@ -1,1548 +0,0 @@ - - - - - -

- - - Що таке Delta Chat? - - -

- -

Delta Chat це новий додаток для спілкування, який надсилає повідомлення через електронну пошту, зашифровані, якщо можливо, за допомогою Autocrypt. -Вам не потрібно будь-де реєструватися, просто використовуйте з Delta Chat вашу наявну електронну пошту

- -

- -

- - - Як мені знайти людей для спілкування? - - -

- -

З Delta Chat ви можете писати на будь-яку адресу електронної пошти, навіть якщо адресат не використовує Delta Chat. Отримувач не повинен інсталювати такий само додаток, що і у вас, як у інших месенджерів.

- -

- - - Які переваги Delta Chat у порівнянні з іншими месенджерами? - - -

- -
    -
  • Independent of any company or services. You own your data.
  • -
  • Your data is not saved on a central server unless all users are using -the same e-mail servers
  • -
  • You do not distribute your address book to anyone.
  • -
  • Fast by the use of Push-IMAP.
  • -
  • Largest userbase - recipients not using Delta Chat can be reached as well.
  • -
  • No Spam - only messages of known users are shown by default.
  • -
  • End-to-end encryption via Autocrypt.
  • -
  • Copyleft and Standards based libre software.
  • -
  • Flexible identity with built-in support for multiple accounts
  • -
- -

- - - Які повідомлення відображаються у Delta Chat? - - -

- -

За замовчуванням Delta Chat відображає всі електронні листи.

- -

У “Налаштування -> Чати та Медіа -> Показати класичні електронні листи”, ви можете змінити це. У вас є такі параметри:

- -
    -
  • «Ні, лише чати»: лише повідомлення, надіслані іншими користувачами Delta Chat, і відповіді на них відображаються ваші повідомлення Delta Chat. Це має найбільший сенс, якщо ви використовуєте той самий обліковий запис електронної пошти також для звичайної електронної пошти.
  • -
  • «Усі»: Delta Chat показує всі електронні листи, надіслані на вашу електронну адресу. Це має сенс, якщо ви хочете використовувати Delta Chat для всіх ваших електронних листів, тому жодних повідомлень не губиться. Це налаштування за замовчуванням.
  • -
  • «Для прийнятих контактів»: Delta Chat показує всі електронні листи від контактів, з ким у вас уже є чат, але нові чати з’являються лише для повідомлень Delta Chat. Це допоможе вирішити в кожному конкретному випадку, чи бажаєте ви мати a розмова в Delta Chat або в «звичайній» програмі електронної пошти.
  • -
- -

- - - Що робити, якщо я очікую повідомлення від когось, кому раніше не писав? - - -

- -
    -
  • Якщо повідомлення приходить від невідомого контакту, воно відображається як запит. ви потрібно прийняти запит, перш ніж ви зможете відповісти.
  • -
  • Ви також можете “видалити” його, якщо ви не хочете зараз спілкуватися з ними. Це не видаляє повідомлення на сервері, лише на вашому пристрої. Отже, ви можете як і раніше обробляти повідомлення в іншій поштовій програмі.
  • -
  • Якщо ви видалите запит, майбутні повідомлення від цього контакту все одно відображатимуться як запит на повідомлення, щоб ви могли змінити свою думку. Якщо дуже не хочеться отримувати повідомлення від цієї особи, подумайте про її блокування.
  • -
- -

- - - Чи підтримує Delta Chat вкладення у вигляді фото, відео тощо? - - -

- -
    -
  • -

    Так. Крім звичайного тексту, всі вкладення електронної пошти відображаються у вигляді окремих повідомлень. Вихідні повідомлення автоматично отримують вкладення.

    -
  • -
  • -

    З міркувань продуктивності, зображення оптимізовані та надсилаються в меншому розмірі за замовчуванням, але ви можете надіслати їх як «файл», щоб зберегти оригінал.

    -
  • -
- -

- - - Як я можу додати або переключитися між кількома обліковими записами? - - -

- -

Ви можете легко працювати з додатковими обліковими записами в мобільних і десктопних клієнтах Delta Chat, натиснувши одне з:

-
    -
  • на кнопці меню, а потім «Змінити обліковий запис» (Android і десктоп)
  • -
  • або значок профілю, а потім «Додати обліковий запис» (iOS)
  • -
- -

Ви також можете дізнатися як додати облікові записи на кілька пристроїв.

- -

- - - Хто бачить моє зображення профілю? - - -

- -
    -
  • -

    Ви можете додати зображення профілю в ваших налаштуваннях. Якщо ви пишете комусь із ваших контактів чи додаєте їх через QR код, вони автоматично побачать ваше зображення профілю.

    -
  • -
  • -

    Контакти, які не використовують Delta Chat, не бачать зображення профілю (однак, звичайно, вони можуть встановити Delta Chat :)

    -
  • -
  • -

    Із міркувань приватності, ніхто не бачить ваше зображення профілю доки ви їм не напишете.

    -
  • -
  • -

    Ваше зображення профілю не надсилається із кожним повідомленням, але достатньо регулярно для того щоб ваші контакти заново отримували ваше зображення профілю, навіть якщо вони додали новий пристрій.

    -
  • -
- -

- - - Чи підтримує Delta Chat HTML-листи? - - -

- -

Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

- -

- - - Чому я маю вводити пароль до моєї електронної пошти у Delta Chat? Чи це безпечно? - - -

- -

Як і інші клієнти електронної пошти, на зразок Thunderbird, K9-Mail, or Outlook, програма потребує пароль. Авжеж, пароль зберігається лише на вашому пристрої. Пароль передається лише до вашого провайдера електронної пошти, який все одно має доступ до ваших повідомлень.

- -

Якщо ваш провайдер електронної пошти підтримує OAuth2, як gmail.com чи yandex.ru, то немає необхідності зберігати пароль на пристрої. В цьому випадку використовується лише токен доступу.

- -

Оскільки Delta Chat має відкритий код, ви можете ознайомитись із початковим кодом якщо бажаєте перевірити що ваші дані для авторизації надійно зберігаються. Ми будемо раді вашим пропозиціям, які зроблять додаток більш безпечним для всіх користувачів.

- -

- - - Яких дозволів потребує Delta Chat? - - -

- -

В залежності від операційної системи, додаток може потребувати наступних дозволів:

- -
    -
  • Камера (може бути заборонено) -
      -
    • знімати фото та відео: для надсилання фотографій
    • -
    -
  • -
  • Контакти (може бути заборонено) -
      -
    • зчитувати ваші контакти: знаходити контакти для спілкування
    • -
    -
  • -
  • Місцезнаходження (може бути заборонено) -
      -
    • доступ до приблизного місцезнаходження (мережеві джерела місцезнаходження): для функції стримінгу координат
    • -
    • доступ до точного місцезнаходження (GPS та мережеві джерела координат): для функції стримінгу координат
    • -
    -
  • -
  • Мікрофон (може бути заборонено) -
      -
    • записувати звук: для звукових повідомлень
    • -
    -
  • -
  • Сховище (може бути заборонено) -
      -
    • змінювати та видаляти вміст вашої SD-карти: для завантаження вкладень до повідомлень
    • -
    • зчитувати вміст вашої SD-карти: для надсилання файлів вашим контактам
    • -
    -
  • -
  • Інші можливості додатку: -
      -
    • змінювати налаштування звуку: ви можете змінювати сигнали та гучність для сповіщень та звукових повідомлень
    • -
    • запуск на старті: вам не потрібно запускати Delta Chat вручну
    • -
    • вібрація: для сповіщень
    • -
    • перегляд мережевих з’єднань: для під’єднання до сервера електронної пошти
    • -
    • запобігання переходу телефону у сплячий режим: так вам буде легше скопіювати код безпеки при налаштування Autocrypt
    • -
    • повний доступ до мережі: для під’єднання до сервера електронної пошти
    • -
    • перегляд Wi-Fi з’єднань: для під’єднання до сервера електронної пошти
    • -
    • запитувати дозволу ігнорувати оптимізації батареї: для користувачів які хочуть бути на постійному зв’язку
    • -
    -
  • -
- -

- - - Що значить Закріплення, Приглушення, Архівування? - - -

- -

Використовуйте ці інструменти, щоб організувати ваші чати і тримати все на своєму місці:

- -
    -
  • -

    Закріплені чати завжди залишаються першими в списку чатів. Ви можете використовувати їх, щоб мати швидкий доступ до ваших найулюбленіших чат або тимчасово аби про щось не забути.

    -
  • -
  • -

    Приглушіть чати якщо ви не хочете отримувати сповіщення для них. Приглушені чати залишаються на місці і ви також можете закріпити приглушений чат.

    -
  • -
  • -

    Архівуйте чати, якщо ви більше не хочете бачити їх у своєму списку чатів. -Заархівовані чати залишаються доступними над списком чатів або через пошук.

    -
  • -
  • -

    Коли архівний чат отримує нове повідомлення, якщо не приглушений, він вискочить з архіву і повернеться у ваш список чатів. -Приглушені чати залишаються заархівованим доки ви не розархівуєте їх вручну.

    -
  • -
- -

Щоб заархівувати або закріпити чат, довго торкніться (Android), скористайтеся меню чату (Android/комп’ютер) або проведіть пальцем ліворуч (iOS); щоб вимкнути звук чату, скористайтеся меню чату (Android/комп’ютер) або профілем чату (iOS).

- -

- - - Що означає зелена точка? - - -

- -
    -
  • Починаючи з Delta Chat 1.34, ви іноді можете бачити “зелену крапку” поруч із аватаром контакту. Це означає, що контакт «нещодавно бачили».
  • -
  • Детально: це означає, що за останні 10 хвилин Delta Chat бачив їх:
  • -
  • або тому, що вони надіслали вам повідомлення безпосередньо,
  • -
  • тому що вони написали щось групі, учасником якої є ви обоє,
  • -
  • тому що вони надіслали вам сповіщення про прочитання повідомлення, яке ви написали,
  • -
  • або тому, що вони надіслали дані до вашої програми Delta Chat за допомогою a приватна програма. -– Отже, це не онлайн-статус у реальному часі – і якщо хтось не відповідає відразу, навіть якщо вони, здаються, онлайн, не хвилюйтесь і дайте їм трохи простору ;-) -– З іншого боку, інші не завжди «побачать, що ви онлайн». Якщо ви вимкнули сповіщення про прочитання, вони не побачать зелену крапку, доки ви не надішлете їм повідомлення або напишете у групу, до якої вони входять.
  • -
- -

- - - Як мені видалити свій обліковий запис? - - -

- -

Оскільки ви використовуєте обліковий запис електронної пошти для Delta Chat, спосіб видалення облікового запису залежить від вашого постачальника послуг електронної пошти. Ми не маємо жодного контролю над вашим обліковим записом електронної пошти, тому, на жаль, ми не можемо вам у цьому допомогти.

- -

Якщо ви хочете зберегти обліковий запис, але видалити Delta Chat, перед видаленням Delta Chat рекомендується покинути будь-які групові чати.

- -

- - - Групи - - -

- -

- - - Створення групи - - -

- -
    -
  • Оберіть Новий чат, потім Нова групи у меню в верхньому правому кутку або натисніть відповідну кнопку у Android/iOS.
  • -
  • На наступному екрані виберіть учасники групи та встановіть назву групи. Ви також можете обрати аватар групи.
  • -
  • Як тільки ви напишете перше повідомлення у групу, усі учасники будуть проінформовані про нову групу і зможуть відповісти у нову групу (доки ви не напишете повідомлення у групі, група залишатиметься невидимою для учасників).
  • -
- -

- - - Додавання учасників групи - - -

- -
    -
  • Кожен учасник групи має ті ж самі права, що і будь-який інший. З цієї причини кожен може видалити будь-якого учасника або додати нового.
  • -
  • Щоб додати або видалити учасників, натисніть на назву групи в чаті.
  • -
- -

- - - Я випадково себе видалив - - -

- -
    -
  • Оскільки ви більше не учасник групи, ви не зможете додати себе знову. Однак, це не проблема, просто попросіть будь-якого іншого учасника групи в звичайному чаті додати вас знову.
  • -
- -

- - - Я більше не хочу отримувати повідомлення групи. - - -

- -
    -
  • -

    Або видаліть себе із списку учасників групи, або видаліть весь чат. Якщо ви хочете повернутись до чату пізніше, попросіть іншого учасника групи додати вас знову.

    -
  • -
  • -

    Ви також можете “Заглушити” групу - це означає, що ви будете отримувати усі повідомлення та можете писати у групу, але ви більше не будете отримувати сповіщення про нові повідомлення.

    -
  • -
- -

- - - Що означають галочки біля вихідних повідомлень? - - -

- -
    -
  • Одна галочка означає, що повідомлення було успішно надіслано вашому провайдеру.
  • -
  • Дві галочки означають, що принаймні один пристрій одержувача повідомив про отримання повідомлення.
  • -
  • Одержувачі могли вимкнути звіти про прочитання, тож навіть якщо ви бачите лише одну галочку, можливо, повідомлення прочитане.
  • -
  • Навпаки, дві галочки не означають автоматично, що людина прочитала або зрозуміла повідомлення ;)
  • -
- -

- - - Що станеться, якщо я ввімкну «Видаляти старі повідомлення з сервера»? - - -

- -
    -
  • -

    За умовчанням Delta Chat зберігає всі повідомлення локально на вашому пристрої. Якщо ви, наприклад, бажаєте заощадити місце для зберігання у свого провайдера електронної пошти, ви можете вибрати автоматичне видалення старих повідомлень. Вони все ще залишаються на вашому пристрої, поки ви видалите їх і там.

    -
  • -
  • -

    Щоб увімкнути його, перейдіть до Видалити старі повідомлення → Видалити повідомлення з сервера в налаштуваннях «Чати та медіа». Ви можете встановити часові рамки між «Одразу» та «Через 1 рік». Усі електронні листи, отримані Delta Chat, будуть видалені з сервера після закінчення цього терміну.

    -
  • -
  • -

    Зауважте, що якщо ви використовуєте Delta Chat на кількох пристроях, вам слід залишити повідомлення на сервері, доки інший пристрій не зможе завантажити їх. У цьому випадку вам слід встановити для автоматичного видалення значення «через день» або щось подібне, залежно від того, як часто ви вмикаєте інший пристрій.

    -
  • -
- -

- - - Що станеться, якщо я ввімкну «Видаляти старі повідомлення з пристрою»? - - -

- -
    -
  • Якщо ви хочете заощадити пам’ять на своєму пристрої, ви можете видалити старе повідомлення автоматично.
  • -
  • Щоб увімкнути його, перейдіть до «видалити старі повідомлення з пристрою» в налаштуваннях «Чатів та медіа» . Ви можете встановити часові рамки від «через годину» до «через рік»; -Таким чином, усі повідомлення будуть видалені з вашого пристрою, як тільки вони будуть старішими за це.
  • -
- -

- - - Encryption and Security - - -

- -

- - - Які стандарти використовуються для наскрізного шифрування? - - -

- -

Autocrypt is used for automatically -establishing end-to-end encryption with contacts and group chats. -Autocrypt uses a limited and secure subset of the OpenPGP standard. -End-to-End encrypted messages are marked with a padlock -padlock.

- -

Secure-Join protocols -are used for establishing chats with guaranteed end-to-end encryption -which protects against network attacks and compromised servers. -Chats marked with a green checkmark -green checkmark -guarantee end-to-end encrypted messages.

- -

- - - How can i know if messages are end-to-end encrypted? - - -

- -

All end-to-end encrypted messages carry a padlock:

- -

padlock in bubble

- -

End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:

- -

green checkmark in title

- -

- - - How can I get guaranteed end-to-end encryption and green checkmarks? - - -

- -

Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

- -

Inviter side:

- -
    -
  • -

    Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
  • -

    Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

    -
  • -
- -

Joiner side:

- -
    -
  • -

    Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

    -
  • -
  • -

    Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

    -
  • -
  • -

    Tap “OK”

    -
  • -
- -

Both Inviter and Joiner:

- -

Wait while Secure-Join network messages are exchanged between both devices.

- -
    -
  • -

    If both devices are online, -both sides will eventually see a (group or direct) chat with a green checkmark -green checkmark -next to the title.

    -
  • -
  • -

    If one of the devices is offline, the green checkmarks will only -appear later when the device is internet-connected again -and the Secure-Join network protocol completed.

    -
  • -
- -

Congratulations! -You now will automatically use guaranteed end-to-end encryption -with this contact and both of you can add each other to green-checkmarked groups -green checkmark, -thereby automatically spreading guaranteed end-to-end encryption among its members.

- -

- - - What does the green checkmark and “guaranteed end-to-end encryption” mean? - - -

- -

Chat titles with green checkmarks -green checkmark -mean that all messages in the chat will be end-to-end encrypted -and can not be read or altered by compromised e-mail servers or Internet providers. -Joining green-checkmarked group chats -safely spreads everybody’s encryption information (and green checkmarks) -in a manner that guarantees end-to-end encryption in the group and among members.

- -

Contact profiles with green checkmarks -green checkmark -mean that messaging a contact is currently guaranteed to be end-to-end encrypted. -Every green-checkmarked contact either did a direct QR-scan with you -or was introduced by a another green-checkmarked contact. -Introductions happen automatically when adding members to groups. -Whoever adds a contact to a green-checkmarked group becomes an introducer -to those members who didn’t yet know about the added contact. -In a contact profile you can tap on the “Introduced by …” text repeatedly -until you get to the one with whom you directly did a QR-scan.

- -

Note that in a contact profile you may see and tap introducers -but there is no green checkmark in the profile title. -This usually means that the contact “sent a message from another device”.

- -

For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols -and specifically read about “Verified Groups”, the technical term -of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

- -

- - - A contact “sent a message from another device”, what can i do? - - -

- -

Your chat with a contact lost guaranteed end-to-end encryption. -The green checkmark was removed for this chat and contact when you see this warning. -If you find the sudden drop of guaranteed end-to-end encryption -surprising for this contact then don’t accept the warning! -Instead check with your contact through a second channel -like a video call, other messenger or a phone call, -to find out what happened.

- -

If your contact actually caused the drop of guaranteed end-to-end encryption -please see the next paragraphs for common reasons and their mitigations. -Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted -even if the contact is a member there.

- -

Your contact is using Delta Chat on a second device (phone or laptop)

- -

If they have another device with a Delta Chat app running, -they should remove the account from the new device -and add it as a second device as described here. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is established with both devices of your contact.

- -

Your contact reinstalled Delta Chat using their old account login

- -

If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is re-established for this contact.

- -

If they don’t have a backup file, it’s best to perform a QR scan -with your chat partner to re-establish guaranteed end-to-end encryption.

- -

Your contact sent a mail through a webmail interface or another e-mail app -and will get back to using Delta Chat soon again.

- -

If you are sure that the contact sometimes uses webmail, -or another mail app lacking end-to-end encryption, -then you may accept the warning. -As soon as your contact uses Delta Chat again, -guaranteed end-to-end encryption will be automatically re-established.

- -

Your contact stopped using Delta Chat entirely

- -

Sometimes remaining in contact is more important than end-to-end encryption. -“Transport Layer Encryption” (TLS) may still meaningfully protect -the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server -to not read or manipulate your messages, and to not hand them to third parties.

- -

In any case, you can not do much else than accept the warning. -Please also remove the contact from any active green-checkmarked group -which you can find in “Shared chats” in the Contact profile. -This spares your contact from getting “unreadable” messages.

- -

If the contact removed Delta Chat because of buggy or undesirable behaviour, -please consider posting to our support forum -to help us identify and address common problems. Thanks!

- -

- - - Are attachments (pictures, files, audio etc.) end-to-end encrypted? - - -

- -

Yes.

- -

When we talk about an “end-to-end encrypted message” -we always mean a whole message is encrypted, -including all the attachments -and attachment metadata such as filenames.

- -

- - - Is OpenPGP secure? - - -

- -

Yes, Delta Chat uses a secure subset of OpenPGP -and only displays a padlock security indicator on a message -if the whole message is properly encrypted and signed. -For example, “Detached signatures” are not treated as secure.

- -

OpenPGP is not insecure by itself. -Most publically discussed OpenPGP security problems -actually stem from bad usability or bad implementations of tools or apps (or both). -It is particularly important to distinguish between OpenPGP, the IETF encryption standard, -and GnuPG (GPG), a command line tool implementing OpenPGP. -Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used. -Delta Chat rather uses the OpenPGP Rust implementation rPGP, -available as an independent “pgp” package, -and security-audited in 2019.

- -

We aim, along with other OpenPGP implementors, -to further improve security characteristics by implementing the -new IETF OpenPGP Crypto-Refresh -which was thankfully adopted in summer 2023.

- -

- - - Did you consider using alternatives to OpenPGP for end-to-end -encryption? - - -

- -

Yes, we are following efforts like MLS -or Saltpack -but adopting them would mean breaking end-to-end encryption interoperability -with all other e-mail apps that typically support OpenPGP encryption. -So it would not be a light decision to take -and there must be tangible improvements for users.

- -

Delta Chat takes a holistic “usable security” approach -and works with a wide range of activist groupings as well as -renowned researchers such as TeamUSEC -to improve actual user outcomes against security threats. -The wire protocol and standard for establishing end-to-end encryption is -only one part of “user outcomes”, -see also our answers to device-seizure -and message-metadata questions.

- -

- - - Is Delta Chat vulnerable to EFAIL? - - -

- -

No, Delta Chat never was vulnerable to EFAIL -because its OpenPGP implementation rPGP -uses Modification Detection Code when encrypting messages -and returns an error -if the Modification Detection Code is incorrect.

- -

Delta Chat also never was vulnerable to the “Direct Exfiltration” EFAIL attack -because it only decrypts multipart/encrypted messages -which contain exactly one encrypted and signed part, -as defined by the Autocrypt Level 1 specification.

- -

- - - Is a message exposed in cleartext if end-to-end encryption is not available? - - -

- -

Even if your messages are not guaranteed to be end-to-end encrypted, -they are still protected from Internet providers like cell or cable companies. -However, your and your recipient’s e-mail providers -may read, analyze or even modify your messages, -including any attachments, -if they are not end-to-end encrypted.

- -

Delta Chat by default uses strict -TLS encryption -which secures connections between your device and your e-mail provider. -All of Delta Chat’s TLS-handling has been independently security audited. -Moreover, the connection between your and the recipient’s e-mail provider -will typically be transport-encrypted as well. -If the involved e-mail servers support MTA-STS -then transport encryption will be enforced between e-mail providers -in which case Delta Chat communications will never be exposed in cleartext to the Internet -even if the message was not end-to-end encrypted.

- -

Note that maintaining guaranteed end-to-end encryption on top of TLS encryption -provides pervasive safety between your and the recipient’s devices. -Not even your e-mail or Internet provider will be able to read or modify your messages.

- -

- - - How does Delta Chat protect metadata in messages? - - -

- -

Delta Chat protects most message metadata by putting the following information -into the end-to-end encrypted part of messages:

- -
    -
  • Subject line
  • -
  • Group avatar and name
  • -
  • MDN (read receipt) requests (Chat-Disposition-Notification-To)
  • -
  • Disappearing message timer (Ephemeral-Timer)
  • -
  • Chat-Group-Member-Removed, Chat-Group-Member-Added
  • -
  • Secure-Join header containing secure join commands
  • -
  • Notification about enabling location streaming
  • -
  • WebRTC room URL
  • -
- -

E-Mail servers do not get access to this protected metadata -but they do see the message date as well as the message size, -and, more importantly, the sender and receiver addresses. -E-mail servers need receiver addresses to route and -deliver messages to recipient’s devices.

- -

- - - How to protect metadata and contacts when a device is seized? - - -

- -

Both for protecting against metadata-collecting e-mail servers -as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts -can not be identified easily, as compared to messengers which reveal -phone numbers in chat groups which in turn are often associated with legal identities.

- -

- - - How can i check encryption information? - - -

- -

You may check the end-to-end encryption status manually in the “Encryption” dialog -(user profile on Android/iOS or right-click a user’s chat-list item on desktop). -Delta Chat shows two fingerprints there. -If the same fingerprints appear on your own and your contact’s device, -the connection is safe.

- -

- - - How can I check the encryption status of messages? - - -

- -

A little padlock in a message bubble denotes -that the message was properly end-to-end encrypted from the given sender. -If there is no padlock, the message was not properly end-to-end encrypted -most likely because the sender uses an app or webmail interface -without support for end-to-end–encryption.

- -

- - - Why do I see unencrypted messages? - - -

- -

If a contact uses a non-Autocrypt e-mail app, -all messages involving this contact (in a group or 1:1 chat) -will not be end-to-end encrypted, and thus not show a “padlock” with messages. -Note that even if your contacts use Delta Chat on their account, -they might also use a non-Autocrypt e-mail app on that account -which then may cause intermittently unencrypted messages. -Replying unencrypted to unencrypted messages is mandated by Autocrypt -to prevent unreadable messages on the side of your contacts -and their non-Autocrypt e-mail app.

- -

- - - How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? - - -

- -

If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), -it’s best to setup guaranteed end-to-end encryption with them -and then create a guaranteed end-to-end encrypted group chat with you two as members. -In this group chat all messages will be end-to-end encrypted -even if the direct chat between you two has a -“… sent a message from another device” warning.

- -

- - - How can I ensure message end-to-end encryption and deletion? - - -

- -

The best way to ensure every message is end-to-end encrypted, -and metadata deleted as quickly as possible -is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

- -

Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages -on the server after a user-configured time.

- -

If you don’t need a longer-lived copy of your messages on the server, -you can also turn on “delete messages from server automatically”.

- -

- - - Does Delta Chat support Perfect Forward Secrecy? - - -

- -

No, Delta Chat doesn’t support Perfect Forward Secrecy (PFS). -This means that if your Delta Chat private decryption key is leaked, -and someone has collected your prior in-transit messages, -they will be able to decrypt and read them using the leaked decryption key.

- -

Note, however, that if anyone obtains to your decryption keys, -they will typically also be able to obtain your messages, -irrespective if Perfect Forward Secrecy is in place or not. -The typical real-world situation for leaked decryption keys is device seizure -which we discuss in our answer on metadata and device seizure.

- -

It is possible that Delta Chat evolves to support Perfect Forward Secrecy, -because OpenPGP is just a container for encrypted messages -but encryption key management (and thus key rotation or key “ratcheting”) -could be organized in flexible ways. -See Seqouia’s PFS prototype -for existing experiments in the OpenPGP implementor community.

- -

- - - Is end-to-end encryption of Delta Chat as safe as Signal? - - -

- -

It depends on what is important to you. -Delta Chat does not support PFS like Signal does -but it provides guaranteed end-to-end encrypted chats -that are safe against compromised servers or corrupted networks. -Signal and most other PFS-supporting messengers do not provide -a practical scheme for protecting chat groups from network attacks -which are arguably more worrysome -than a potential attacker who seizes your phone and private encryption setup -but somehow not your messages, yet has a full record of all -past encrypted messages.

- -

In any case, Delta Chat’s end-to-end encryption uses a secure subset of OpenPGP -which has been independently security-audited.

- -

- - - Чи можна повторно використовувати існуючий закритий ключ? - - -

- -

Yes. -The best way is to send an Autocrypt Setup Message from the other e-mail client. -Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

- -

Alternatively, you can import the key manually in “Settings -> Advanced settings -> Import secret keys”. -Caution: Make sure the key is not protected by a password, or remove the password beforehand.

- -

If you don’t have a key or don’t even know you would need one - don’t worry: Delta Chat generates keys as needed, you don’t have to hit a button for it.

- -

- - - Я не можу імпортувати свій існуючий PGP ключ у Delta Chat. - - -

- -

Найімовірнішою причиною є те, що ваш ключ зашифрований та/або використовується пароль. Такі ключі не підтримуються Delta Chat. Ви можете видалити шифрування парольної фрази та пароль і спробувати імпорт знову. Якщо ви хочете зберегти свою парольну фразу, вам доведеться створити псевдонім електронної пошти для використання з Delta Chat, щоб ключ Delta Chat був прив’язаний до цього псевдоніма електронної пошти.

- -

Delta Chat підтримує поширені формати приватних ключів OpenPGP, однак навряд чи приватні ключі з усіх джерел будуть повністю підтримуватися. Це не головна мета Delta Chat. Фактично, більшість нових користувачів не матимуть жодного ключа до використання Delta Chat. Однак ми намагаємось підтримувати приватні ключі з якомога більшої кількості джерел.

- -

Видалення пароля з приватного ключа буде залежати від програмного забезпечення, яке використовується для управління ключами PGP. За допомогою Enigmail ви можете встановити для порожній пароль у вікні Керування ключами. За допомогою GnuPG ви можете встановити його через командний рядок. Для інших програм ви зможете знайти рішення в інтернеті.

- -

- - - Мульти-клієнт - - -

- -

- - - Чи можна використовувати Delta Chat на декількох пристроях одночасно? - - -

- -

Так. У Delta Chat 1.36 є нова експериментальна функція для використання одного облікового запису на різних пристроях:

- -
    -
  • -

    Упевніться, що обидва пристрої підключені до одного Wi-Fi або мережі

    -
  • -
  • -

    На першому пристрої перейдіть до Налаштування → Додати другий пристрій, розблокуйте екран, якщо потрібно і трохи зачекайте, поки не з’явиться QR-код

    -
  • -
  • -

    На другому пристрої встановіть Delta Chat

    -
  • -
  • -

    На другому пристрої запустіть Delta Chat, виберіть Додати як другий пристрій і відскануйте QR-код зі старого пристрою

    -
  • -
  • -

    Передача має розпочатися через кілька секунд, і під час передачі обидва пристрої відображатимуть прогрес. Дочекайтеся завершення на обох пристроях.

    -
  • -
- -

На відміну від багатьох інших месенджерів, після успішної передачі, обидва пристрої повністю незалежні. Один пристрій не потрібен для роботи іншого.

- -

- - - Вирішення проблем - - -

- -
    -
  • -

    Ще раз упевніться, що обидва пристрої підключені до одного Wi-Fi або мережі

    -
  • -
  • -

    Ваша система може мати “персональний брандмауер”, який, як відомо, викликає проблеми (особливо у Windows). Вимкніть персональний брандмауер для Delta Chat на обох кінцях і повторіть спробу

    -
  • -
  • -

    Переконайтеся, що на цільовому пристрої достатньо пам’яті

    -
  • -
  • -

    Якщо передача почалася, переконайтеся, що пристрої залишаються активними і не засинають. Не виходьте з Delta Chat. (ми докладаємо всіх зусиль, щоб програма працювала у фоновому режимі, але системи, як правило, вбивають програми, на жаль)

    -
  • -
  • -

    Delta Chat уже ввійшов на цільовому пристрої? Ви можете використовувати кілька облікових записів на одному пристрої, просто додайте інший обліковий запис

    -
  • -
  • -

    Якщо у вас усе ще виникають проблеми або якщо ви не можете відсканувати QR-код спробуйте перенесення вручну, описане нижче

    -
  • -
- -

- - - Manual Transfer - - -

- -

Цей спосіб рекомендований, лише якщо «Додати другий пристрій», як описано вище, не працює.

- -
    -
  • On the old device, go to “Settings -> Chats and media -> Export Backup”. Enter your -screen unlock PIN, pattern, or password. Then you can click on “Start -Backup”. This saves the backup file to your device. Now you have to transfer -it to the other device somehow.
  • -
  • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption -keys, and media should be copied to the new device. -
      -
    • If you use iOS: and you encounter difficulties, maybe -this guide will -help you.
    • -
    -
  • -
  • You are now synchronized, and can use both devices for sending and receiving -end-to-end encrypted messages with your communication partners.
  • -
- -

- - - Чи планується впровадження веб-клієнта Delta Chat? - - -

- -
    -
  • Немає найближчих планів, крім попередніх думок.
  • -
  • Є 2-3 способи створити веб-клієнт Delta Chat, але всі вони вимагають значної роботи. На даний момент ми зосереджені на отриманні стабільних релізів в усіх магазини додатків (Google Play / IOS / Windows / MacOS / репозитаріїв Linux), як нативних додатків.
  • -
  • Якщо вам потрібен веб-клієнт, через заборону встановлювати програмне забезпечення на комп’ютері, з яким ви працюєте, ви можете використовувати портативний клієнт Windows Desktop або AppImage для Linux. Ви можете знайти їх на get.delta.chat.
  • -
- -

- - - Для чого потрібне налаштування “Відправити копію собі”? - - -

- -

Надсилаючи собі копію своїх повідомлень, ви отримуєте власні повідомлення на всіх пристроях. Якщо у вас кілька пристроїв, і ви не вмикаєте це налаштування, ви бачите лише повідомлення інших людей та повідомлення, які ви надсилаєте з поточного пристрою.

- -

Копія надсилається у папку Вхідні, а потім переміщується до папки DeltaChat; вона не поміщається в папку «Відправлені». Delta Chat ніколи не завантажує нічого в папку Надіслане, оскільки це означало б завантаження повідомлень двічі (один раз через SMTP і один раз через IMAP до папки Надіслані).

- -

За замовчуванням параметр копії для себе - “ні”.

- -

- - - Чому я можу обрати стеження за папкою “Надіслані”? - - -

- -

Єдина причина, через яку захочеться стежити за папкою Надіслане, полягає в тому, що якщо ви використовуєте іншу поштову програму (наприклад, Thunderbird) разом із вашим додатком Delta Chat і хочете, щоб ваш поштовий клієнт брав участь у розмовах.

- -

Однак ми рекомендуємо використовувати клієнт Delta Chat Desktop; Ви можете завантажити його на get.delta.chat. Можливість стеження папки “Надіслане” може зникнути в майбутньому. Вона був представлена у той час, коли на всіх платформах ще не було клієнта Delta Chat Desktop.

- -

- - - Чому я можу відмовитись від стеження за папкою DeltaChat? - - -

- -

Деякі люди використовують Delta Chat як звичайний поштовий клієнт і хочуть використовувати папку Вхідні для своєї пошти замість папки DeltaChat. Якщо ви вимкнете “Перегляд папки DeltaChat”, вам слід також вимкнути “переміщення повідомлень чату до DeltaChat”. -В іншому випадку видалення повідомлень або налаштування декількох пристроїв може не працювати належним чином.

- -

- - - webxdc apps - - -

- -

In Delta Chat, you can share webxdc apps, attachments with an .xdc file -extension. They can do very different things, and make Delta Chat a truly -extendable messenger.

- -

- - - How private are webxdc apps? - - -

- -
    -
  • webxdc apps can not send data to the Internet, or download anything.
  • -
  • A webxdc app can only exchange data within a Delta Chat chat, with its -copies on the devices of your chat partners. Other than that, it’s completely -isolated from the Internet.
  • -
  • The privacy a webxdc app offers is the privacy of your chat - as long as you -trust the people you chat with, you can trust the webxdc app as well.
  • -
  • This also means: it can be a privacy risk to open webxdc apps in chats where -you don’t trust the members - as you know it from e-mail attachments, where -you only open attachments from senders you trust, and not from spammers.
  • -
- -

- - - Where can I get webxdc apps? - - -

- -
    -
  • In general, anyone can share webxdc apps with each -other without restrictions.
  • -
  • You can send ‘hi’ to xstore@testrun.org -to see an experimental webxdc appstore. -All of the apps are open source and for free.
  • -
  • Many people write their own webxdc apps and post them to the Delta Chat -forum.
  • -
- -

- - - How can I create my own webxdc apps? - - -

- -
    -
  • webxdc apps are just zip files containing html, css, and javascript code.
  • -
  • You can extend the Hello World example app -to get started.
  • -
  • All else you need to know is written in the -documentation.
  • -
  • If you have question, you can ask others with experience in the Delta Chat -Forum.
  • -
- -

- - - Експериментальні функції - - -

- -

We are very grateful for feedback on these features - do you want to share -your ideas? Join the Forum to contribute. -You may conveniently login via Delta Chat and a QR code scan, -another rather stable experiment we run on the side (sic!).

- -

- - - Як я можу робити аудіо/відеодзвінки з Delta Chat? - - -

- -
    -
  • To turn on audio/video calls, go to the “experimental features” section in -the advanced settings and choose a “Video Chat Instance”.
  • -
  • When you invite others to a video chat, it is opened in your browser/app at -once. The others receive an e-mail with a link to the video chat. -This way, it is also compatible if your chat partners don’t use Delta Chat.
  • -
  • Note that there is no ring tone on the other side, and your chat partners -will not get interrupted by a video chat invite.
  • -
  • You can use any video chat service which allows joining by link. Just add the -link in the settings.
  • -
  • For example, to use the flagship Jitsi Meet instance, you could enter -https://meet.jit.si/$ROOM. The $ROOM variable will be a random value; -this way, you will have a new random jitsi room every time you call someone.
  • -
- -

- - - Що таке списки широкомовлення та як ними користуватися? - - -

- -
    -
  • За допомогою списку розсилки ви можете надіслати повідомлення багатьом одержувачам одночасно; коли вони відповідають вам, ви отримуєте відповідь у своєму прямому чаті 1:1 з ними. Одержувачі не бачать один одного.
  • -
  • Технічно це електронний лист із багатьма одержувачами в BCC.
  • -
  • Ви можете ввімкнути функцію в розділі «експериментальні функції» в розширених налаштуваннях. Потім ви можете створити список трансляцій у діалоговому вікні «Новий чат».
  • -
  • Якщо ви використовуєте більше ніж один пристрій, списки трансляцій наразі не синхронізуються між ними.
  • -
  • Повідомлення, надіслані до списків розсилки, не шифруються. Шифрування порушило б анонімність, оскільки тоді всі одержувачі знали б, хто ще його отримав (надсилання окремих листів усім було б гіршим через обмеження швидкості та споживання мережі).
  • -
- -

- - - Як я можу поділитися своїм місцезнаходженням зі своїми співрозмовниками в чаті? - - -

- -
    -
  • Ви можете ввімкнути потокове передавання місцезнаходження в розділі «експериментальні функції» в розширених налаштуваннях.
  • -
  • Тепер, якщо ви хочете поділитися своїм місцезнаходженням у чаті, перейдіть до «прикріпити» та виберіть “Місцезнаходження”. Тепер ви можете встановити часові рамки, протягом яких ваше місцезнаходження транслюється вашим партнерам у чаті від 5 хвилин до 6 годин.
  • -
  • Коли ваше місцезнаходження змінюється, інші учасники чату можуть побачити його на карті в чат.
  • -
  • Щоб бачити карту та місцезнаходження інших, потрібно ввімкнути цю функцію у розширених налаштуваннях.
  • -
  • Ця функція не надасть доступу до вашого місцезнаходження нікому, крім ваших співрозмовників в чаті. Але: щоб показати карту, нам потрібно завантажити фрагменти карти з mapbox.com, тому, якщо ви переглядаєте карту, mapbox.com запитує карту конкретної області. Якщо це загроза конфіденційності для вас, ця функція може бути не для вас. Ми працюємо над пошуком децентралізованої альтернативи для Mapbox.
  • -
  • На комп’ютері ОС зазвичай не може визначити ваше місцезнаходження. Натомість ви можете клацнути правою кнопкою миші на карті та надсилати до чату як повідомлення, яке також з’являється на карті.
  • -
- -

- - - Що насправді захищає експериментальне шифрування бази даних? - - -

- -
    -
  • На даний момент шифрування бази даних все ще є експериментальним. Не покладайтеся на нього для захисту, ви повинні додатково використовувати шифрування вашої операційної системи, якщо воно передбачає таке.
  • -
  • Шифрування бази даних ще не шифрує блоби, лише рядки та стовпці бази даних. Це більш-менш означає, що ваші повідомлення в безпеці, але не вкладені файли.
  • -
  • Для iOS і Android ключі шифрування зберігаються в системному брелоку. Це означає, що шифрування настільки ж безпечно, як і операційна система, на якій воно працює.
  • -
  • Настільний клієнт Delta Chat поки що не пропонує шифрування бази даних, оскільки немає стандартного способу зберігання ключів шифрування на різних підтримуваних платформах.
  • -
- -

- - - Чому я можу вибрати лише стеження за папкою DeltaChat? - - -

- -

Це експериментальне налаштування для деяких людей, які експериментують з правилами на стороні сервера. Не всі провайдери підтримують це, але деякі дозволятимуть перемістити всі листи із заголовком “Chat-Version” до папки DeltaChat. Зазвичай це робиться додатком Delta Chat.

- -

Увімкнення «Отримувати лише з папки DeltaChat» має сенс, якщо у вас є обидва:

- -
    -
  • увімкнене правило на стороні сервера для переміщення всіх повідомлень із заголовком Chat-Version до папки DeltaChat та
  • -
  • встановлено параметр “Показувати класичні електронні листи” у значення “ні, лише чати”.
  • -
- -

У цьому випадку Delta Chat не потрібно стежити за папкою «Вхідні», а достатньо лише стежити за папкою DeltaChat.

- -

- - - Як я можу змінити мій обліковий запис на іншу адресу електронної пошти? - - -

- -
    -
  1. -

    Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). -You will get an information notice about the fact that you are moving to a new address. -An additional notice will also show up in your “Device messages” chat.

    -
  2. -
  3. -

    If possible, let your old e-mail provider forward all messages to your new address.

    -
  4. -
  5. -

    Tell your contacts that you changed your address. -Writing to guaranteed end-to-end encrypted chats and groups, -will make them notice your move automatically -and they will continue chatting with you using your new address.

    -
  6. -
- -

Note that Delta Chat will not retrieve messages anymore from your old e-mail provider. -If you didn’t configure your e-mail provider to forward messages (step 2.) -only those contacts to whom you sent a message in a guaranteed end-to-end encrypted chat -will send messages to your new address.

- -

To learn more about this the details behind this, read our blogpost on -it.

- -

- - - Інше - - -

- -

- - - Чи підтримує Delta Chat роботу з моїм провайдером електронної пошти? - - -

- -
    -
  • У більшості випадків: Так :) -Проте для коректної роботи деяких провайдерів потрібні специфічні налаштування. Дивіться наш огляд провайдерів
  • -
- -

- - - Я хочу керувати власним сервером електронної пошти для Delta Chat. Що ви порадите? - - -

- - - -

- - - Якщо Delta Chat використовує електронну пошту, чи насправді він є Instant месенджером? - - -

- -
    -
  • Надсилання та отримання повідомлень зазвичай триває кілька секунд. Іноді трапляються випадки, коли це займає більше часу, але це, безперечно, справедливо і для будь-якого іншого месенджера.
  • -
  • Миттєвий чат працює швидко, якщо обидві сторони активно використовують додаток. Іноді це повільніше, якщо програма працює у фоновому режимі.
  • -
  • Отримання повідомлень тоді може зайняти хвилини, оскільки як Android, так і iOS часто припиняють роботу Delta Chat у фоновому режимі і лише час від часу прокидають його. Ця штучна затримка зазвичай гірша на iOS, ніж на Android.
  • -
  • Однак програми для Android та iOS вбивають програми, що працюють у фоновому режимі, є проблемою для багатьох законних програм. Для отримання додаткової інформації див. dontkillmyapp.com.
  • -
- -

- - - Чи сумісний Delta Chat із Protonmail / Tutanota / Criptext? - - -

- -
    -
  • Yes and No.
  • -
  • No, you can not use your Protonmail, Tutanota, or Criptext account with Delta -Chat; they do not offer receiving mails via IMAP.
  • -
  • In any case you can use Delta Chat to send Messages to people who use -Protonmail, Tutanota, or Criptext. Those messages will not be end-to-end -encrypted, though. The end-to-end encryption those providers offer is not -compatible with Autocrypt, the standard Delta Chat -uses.
  • -
  • Delta Chat can end-to-end-encrypt through any e-mail provider with any -Autocrypt-enabled e-mail app.
  • -
- -

- - - Мене цікавлять технічні деталі. Можете розповісти більше? - - -

- - - -

- - - Чи проходив Delta Chat незалежний аудит на наявність вразливостей у безпеці? - - -

- -

За останні роки проект Delta Chat пройшов чотири незалежні аудити безпеки:

- -
    -
  • -

    У 2019 році Include Security проаналізувала бібліотеки PGP і RSA із Delta Chat. Він не виявив критичних проблем, лише дві серйозні проблеми, які ми згодом виправили. Він також виявив одну проблему середньої тяжкості та кілька менш серйозних, але не було можливості використати ці вразливості в реалізації Delta Chat. Деякі з них ми все ж усунули після завершення аудиту. Ви можете прочитати повний звіт тут.

    -
  • -
  • -

    У 2020 році Include Security проаналізувала Rust-ядро Delta Chat і бібліотеки IMAP, SMTP та TLS. Він не виявив критичних або серйозних проблем. У звіті виявлено кілька слабких місць середнього ступеня тяжкості – вони самі по собі не становлять загрози для користувачів Delta Chat оскільки вони залежать від середовища, у якому використовується Delta Chat. З міркувань зручності використання та сумісності ми не можемо пом’якшити їх усі тому вирішили надати рекомендації щодо безпеки користувачам, яким загрожує небезпека. Ви можете прочитати повний звіт тут.

    -
  • -
  • -

    Починаючи з 2023 року Cure53 проаналізував транспортне шифрування мережевих з’єднань Delta Chat і відтворюване налаштування поштового сервера як рекомендовано на цьому сайті. Ви можете прочитати більше про аудит у нашому блозі або прочитайте повний звіт тут.

    -
  • -
  • -

    Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

    -
  • -
- -

- - - Як фінансується розробка Delta Chat? - - -

- -

Delta Chat не отримує жодного Венчурного Капіталу і не є в боргу, не знаходиться під тиском отримання значних прибутків, або продажу користувачів і їхніх друзів з родиною рекламодавцям (або гірше). Ми скоріше використовуємо джерела державного фінансування поки що від ЄС та США, щоб допомогти нашим зусиллям у створенні децентралізованої та різноманітної екосистеми обміну повідомленнями на основі вільного та відкритого коду спільноти розробників

- -

Конкретно, розробки Delta Chat поки що фінансуються з цих джерел:

- -
    -
  • -

    The NEXTLEAP EU project funded the research -and implementation of verified groups and setup contact protocols -in 2017 and 2018 and also helped to integrate end-to-end Encryption -through Autocrypt.

    -
  • -
  • -

    Open Technology Fund надав нам два гранти. -Перший грант 2018/2019 року (~$200K), допоміг значно покращили додаток для Android -і випустили першу бета-версію додатка для ПК, і який до того ж -закріпив наші розробки функцій у дослідженнях UX у контексті прав людини, -дивіться наш підсумковий звіт Needfinding and UX report. -Другий грант 2019/2020 року (~$300K) допоміг нам -випустити Delta/iOS версію, конвертувати нашу основному бібліотеку на Rust, -і додати нові функції для всіх платформ.

    -
  • -
  • -

    The NLnet foundation granted in 2019/2020 EUR 46K for -completing Rust/Python bindings and instigating a Chat-bot eco-system.

    -
  • -
- -

– У 2021 році ми отримали подальше фінансування ЄС для двох Інтернет-технологій наступного покоління пропозиції, а саме для EPPD - каталог перенесення електронної пошти (~97 тис. євро) та AEAP - перенесення електронної адреси (~90 тис. євро), що призвело до кращої підтримки кількох облікових записів, покращеного QR-коду контактів і налаштувань груп, а також багатьох покращень роботи мережі на всіх платформах.

- -
    -
  • -

    З кінця 2021 до березня 2023 року ми отримували фінансування Internet Freedom (500 тис. дол. США) від Бюро США з питань демократії, прав людини та праці (DRL). Це фінансування підтримало наші довгострокові цілі зробити Delta Chat більш зручним для використання і сумісним з широким спектром серверів електронної пошти по всьому світу, більш стійким і безпечним в місцях, які постраждали від інтернет-цензури та відключення інтернету.

    -
  • -
  • -

    На початку 2023 року нас прийняли в Next Generation Internet (NGI) -Entrust program для наших пропозицій щодо «Приватних децентралізованих додатків». Точна сума буде визначена (близько 100 тис. євро). Це фінансування підтримує подальший розвиток webxdc “додатків, якими діляться в чаті”.

    -
  • -
- -

– Іноді ми отримуємо одноразові пожертви від приватних осіб. Наприклад, у 2021 році щедра приватна особа перерахував нам 4 тис. євро з повідомленням «так тримати!». 💜 Ми використовуємо такі пожертви для фінансування зборів на розвиток або для тимчасових витрат, які важко передбачити або відшкодувати за рахунок грантів державного фінансування. Отримання більшої кількості пожертв також допомагає нам стати більш незалежними та довгостроково життєздатними як спільнота контриб’юторів.

- - - -
    -
  • Кілька експертів та ентузіастів, які працюють на громадських засадах, сприяли розробці програми Delta Chat, не отримуючи грошей або лише невеликі суми. Без них Delta Chat не був би там, де є сьогодні, навіть близько.
  • -
- -

Зазначене вище грошове фінансування в основному організовано компанією merlinux GmbH у Фрайбурзі (Німеччина) і розподілено між більше ніж дюжиною розробників по всьому світу.

- -

Перегляньте канали контрибуції Delta Chat як для грошових, так і для інших можливостей допомоги.

- - - - - \ No newline at end of file diff --git a/build.gradle b/build.gradle index 1443e7853..e36806ec3 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ plugins { - id 'com.android.application' version '7.4.2' + id 'com.android.application' version '8.1.4' +// id 'com.google.gms.google-services' version '4.4.1' } repositories { @@ -13,87 +14,23 @@ repositories { jcenter() } -dependencies { - implementation 'androidx.sharetarget:sharetarget:1.2.0' - implementation 'androidx.webkit:webkit:1.5.0' - implementation 'androidx.multidex:multidex:2.0.1' - implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'com.google.android.material:material:1.7.0' - implementation 'androidx.legacy:legacy-support-v13:1.0.0' - implementation ('androidx.preference:preference:1.2.0') { - exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel' - exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx' - } - implementation 'androidx.legacy:legacy-preference-v14:1.0.0' - implementation 'androidx.exifinterface:exifinterface:1.3.5' - implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' - implementation 'androidx.lifecycle:lifecycle-common-java8:2.5.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel:2.5.1' - implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1' - implementation 'androidx.work:work-runtime:2.7.1' - implementation 'com.google.android.exoplayer:exoplayer-core:2.9.6' // plays video and audio - implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.6' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' - implementation 'com.journeyapps:zxing-android-embedded:3.4.0' // QR Code scanner - implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library - implementation 'com.google.code.gson:gson:2.9.1' // used as JSON library. Don't upgrade to 2.10.1: https://github.com/deltachat/deltachat-android/pull/2610 - implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon. - implementation 'com.github.chrisbanes:PhotoView:2.1.3' // does the zooming on photos / media - implementation 'com.caverock:androidsvg-aar:1.4' // SVG support. - implementation 'com.github.bumptech.glide:glide:4.12.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' - annotationProcessor 'androidx.annotation:annotation:1.5.0' - implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles - implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity. - implementation 'com.soundcloud.android:android-crop:1.0.1@aar' // used for profile and group avatar selection in Android SDK<19 - implementation 'mobi.upod:time-duration-picker:1.1.3' // Used to pick the time for inactivity. - implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' // number of unread messages, - // the one-letter circle for the contacts (when there is not avatar) and a white background. - implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6 - implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') { // for the zooming on photos / media - exclude group: 'com.android.support', module: 'support-annotations' - } - implementation 'com.annimon:stream:1.1.8' // brings future java streams api to SDK Version < 24 - implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4' // glues the current time segment text in the gallery to the top. - - testImplementation 'junit:junit:4.13.1' - testImplementation 'org.assertj:assertj-core:1.7.1' - testImplementation 'org.mockito:mockito-core:1.9.5' - testImplementation 'org.powermock:powermock-api-mockito:1.6.1' - testImplementation 'org.powermock:powermock-module-junit4:1.6.1' - testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1' - testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1' - - androidTestImplementation 'androidx.test:runner:1.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0' - androidTestImplementation 'androidx.test:rules:1.4.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'com.android.support:support-annotations:28.0.0' - - androidTestImplementation ('org.assertj:assertj-core:1.7.1') { - exclude group: 'org.hamcrest', module: 'hamcrest-core' - } -} - - android { namespace "org.thoughtcrime.securesms" flavorDimensions "none" - compileSdkVersion 33 + compileSdk 34 // Set NDK version to strip native libraries. // Even though we compile our libraries outside Gradle with `scripts/ndk-make.sh`, // without ndkVersion `./gradlew clean` followed by `./gradlew assembleDebug --warning-mode=all` emits the following warning: // > Task :stripFatDebugDebugSymbols - // Unable to strip the following libraries, packaging them as they are: libanimation-decoder-gif.so, libmapbox-gl.so, libnative-utils.so. + // Unable to strip the following libraries, packaging them as they are: libanimation-decoder-gif.so, libnative-utils.so. // See for details. ndkVersion "23.2.8568313" useLibrary 'org.apache.http.legacy' defaultConfig { - versionCode 672 - versionName "1.42.1" + versionCode 688 + versionName "1.46.5" applicationId "com.b44t.messenger" multiDexEnabled true @@ -107,7 +44,6 @@ android { project.ext.set("archivesBaseName", "deltachat"); buildConfigField "boolean", "DEV_BUILD", "false" - buildConfigField "String", "MAP_ACCESS_TOKEN", '"pk.eyJ1IjoiZGVsdGFjaGF0IiwiYSI6ImNqc3c1aWczMzBjejY0M28wZmU0a3cwMzMifQ.ZPTH9dFJaav06RAu4rTYHw"' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -120,18 +56,16 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - packagingOptions { - exclude 'LICENSE.txt' - exclude 'LICENSE' - exclude 'NOTICE' - exclude 'asm-license.txt' - exclude 'META-INF/LICENSE' - exclude 'META-INF/NOTICE' - doNotStrip '*/mips/*.so' - doNotStrip '*/mips64/*.so' + jniLibs { + keepDebugSymbols += ['*/mips/*.so', '*/mips64/*.so'] + } + resources { + excludes += ['LICENSE.txt', 'LICENSE', 'NOTICE', 'asm-license.txt', 'META-INF/LICENSE', 'META-INF/NOTICE'] + } } + signingConfigs { debug { // add `DC_DEBUG_STORE_FILE=/path/to/debug.keystore` to `~/.gradle/gradle.properties` @@ -173,9 +107,15 @@ android { } productFlavors { + foss { + dimension "none" + buildConfigField "boolean", "USE_PLAY_SERVICES", "false" + } gplay { dimension "none" applicationId "chat.delta" + //apply plugin: "com.google.gms.google-services" + buildConfigField "boolean", "USE_PLAY_SERVICES", "true" } } @@ -205,25 +145,98 @@ android { sourceSets { main { - manifest.srcFile 'AndroidManifest.xml' - java.srcDirs = ['src'] - resources.srcDirs = ['src'] - aidl.srcDirs = ['src'] - renderscript.srcDirs = ['src'] - res.srcDirs = ['res'] - assets.srcDirs = ['assets'] jniLibs.srcDirs = ['libs'] } - androidTest { - java.srcDirs = ['androidTest'] - } } lint { abortOnError false } + buildFeatures { + renderScript true + aidl true + } } +dependencies { + implementation 'androidx.sharetarget:sharetarget:1.2.0' + implementation 'androidx.webkit:webkit:1.8.0' + implementation 'androidx.multidex:multidex:2.0.1' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'com.google.android.material:material:1.10.0' + implementation 'androidx.legacy:legacy-support-v13:1.0.0' + implementation ('androidx.preference:preference:1.2.1') { + exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel' + exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx' + } + implementation 'androidx.legacy:legacy-preference-v14:1.0.0' + implementation 'androidx.exifinterface:exifinterface:1.3.6' + implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' + implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2' + implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2' + implementation 'androidx.work:work-runtime:2.8.1' + implementation 'androidx.emoji2:emoji2-emojipicker:1.4.0' + implementation 'com.google.guava:guava:29.0-android' + implementation 'com.google.android.exoplayer:exoplayer-core:2.9.6' // plays video and audio + implementation 'com.google.android.exoplayer:exoplayer-ui:2.9.6' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'com.journeyapps:zxing-android-embedded:3.4.0' // QR Code scanner + implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library + implementation 'com.google.code.gson:gson:2.9.1' // used as JSON library. Don't upgrade to 2.10.1: https://github.com/deltachat/deltachat-android/pull/2610 + implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon. + implementation 'com.jpardogo.materialtabstrip:library:1.0.9' // used in the emoji selector for the tab selection. + implementation 'com.github.chrisbanes:PhotoView:2.1.3' // does the zooming on photos / media + implementation 'com.github.penfeizhou.android.animation:glide-plugin:2.25.0' // APNG & animated webp support. + implementation 'com.caverock:androidsvg-aar:1.4' // SVG support. + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + annotationProcessor 'androidx.annotation:annotation:1.7.0' + implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles + implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity. + implementation 'com.soundcloud.android:android-crop:1.0.1@aar' // used for profile and group avatar selection in Android SDK<19 + //implementation 'com.nineoldandroids:library:2.4.0' // DEPRECATED! Used to slide in the half-camera. + implementation 'mobi.upod:time-duration-picker:1.1.3' // Used to pick the time for inactivity. + implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' // number of unread messages, + // the one-letter circle for the contacts (when there is not avatar) and a white background. + implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6 + implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') { // for the zooming on photos / media + exclude group: 'com.android.support', module: 'support-annotations' + } + implementation 'com.annimon:stream:1.1.8' // brings future java streams api to SDK Version < 24 + implementation 'com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4' // glues the current time segment text in the gallery to the top. + + // Replacement for ContentResolver + // that protects against the Surreptitious Sharing attack. + // + implementation 'de.cketti.safecontentresolver:safe-content-resolver-v14:1.0.0' + +// gplayImplementation('com.google.firebase:firebase-messaging:23.4.1') { // for PUSH notifications +// exclude group: 'com.google.firebase', module: 'firebase-core' +// exclude group: 'com.google.firebase', module: 'firebase-analytics' +// exclude group: 'com.google.firebase', module: 'firebase-measurement-connector' +// } + + testImplementation 'junit:junit:4.13.1' + testImplementation 'org.assertj:assertj-core:1.7.1' + testImplementation 'org.mockito:mockito-core:1.9.5' + testImplementation 'org.powermock:powermock-api-mockito:1.6.1' + testImplementation 'org.powermock:powermock-module-junit4:1.6.1' + testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1' + testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1' + + androidTestImplementation 'androidx.test:runner:1.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0' + androidTestImplementation 'androidx.test:rules:1.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.3' + androidTestImplementation 'com.android.support:support-annotations:28.0.0' + + androidTestImplementation ('org.assertj:assertj-core:1.7.1') { + exclude group: 'org.hamcrest', module: 'hamcrest-core' + } +} + String buildConfigProperty(String name) { return "\"${propertyOrEmpty(name)}\"" } diff --git a/docs/f-droid.md b/docs/f-droid.md index 8aea4fb07..332b7086c 100644 --- a/docs/f-droid.md +++ b/docs/f-droid.md @@ -2,22 +2,22 @@ - is the Delta Chat page on F-Droid.org, - the F-Droid-app will show similar information. + the F-Droid app will show similar information. -- +- contains the description, icon, screenshots and all meta data shown for Delta Chat on F-Droid in the [fastlane format](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#fastlane-structure). -- and - - contain [additional F-Droid-specific metadata](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-f-droid-repo) +- + contains [additional F-Droid-specific metadata](https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-f-droid-repo) and build instructions that do not fit the fastlane format. F-Droid adds new versions automatically to the end of `.yml` file. -- new versions are recognized by tags in the form `v1.2.3` - - before adding tags like that, have a look at `docs/release-checklist.md` - the build and distribution is expected to take - [up to 5 days](https://gitlab.com/fdroid/wiki/-/wikis/FAQ#how-long-does-it-take-for-my-app-to-show-up-on-website-and-client). +- New versions are recognized by tags in the form `v1.2.3` - + before adding tags like that, have a look at + . + The build and distribution is expected to take + [up to 7 days](https://gitlab.com/fdroid/wiki/-/wikis/FAQ#how-long-does-it-take-for-my-app-to-show-up-on-website-and-client). # F-Droid Build status @@ -25,7 +25,7 @@ - shows F-Droid's overall build status, if Delta Chat shows up at "Need updating" or "Running", - things are working as expected :) + things are working as expected. :) - (with VERSIONCODE = 537 or so) links to successfully built apk @@ -41,22 +41,22 @@ $ git clone https://gitlab.com/fdroid/fdroiddata $ git clone https://gitlab.com/fdroid/fdroidserver $ cd fdroiddata -now, metadata/com.b44t.messenger.yml can be modified. -for testing, one can change the repo to a branch +Now, metadata/com.b44t.messenger.yml can be modified. +For testing, one can change the repo to a branch by adding the line `Update Check Mode:RepoManifest/BRANCH` to the file. -set some path to ndk etc: +Set some path to ndk etc: $ cp ../fdroidserver/examples/config.py . # adapt file as needed -checkout repo as f-droid would do: +Checkout repo as F-Droid would do: $ ../fdroidserver/fdroid checkupdates -v com.b44t.messenger (for testing with uncommitted changes, add --allow-dirty) -build repo as f-droid would do: +Build repo as F-Droid would do: $ ../froidserver/fdroid build -v com.b44t.messenger: -(via https://f-droid.org/docs/Installing_the_Server_and_Repo_Tools/ -and https://f-droid.org/docs/Building_Applications/ - +(via +and - might require `pip install pyasn1 pyasn1_modules pyaml requests`) @@ -66,14 +66,14 @@ might require `pip install pyasn1 pyasn1_modules pyaml requests`) and `metadata/en-US/full_description.txt` in repository. -- make sure there is a "newline" at the end of the description - (see ) +- Make sure there is a "newline" at the end of the description + (see ). # Changing F-Droid metadata -- the file `com.b44t.messenger.yml` can be changed via a PR to the repository +- The file `com.b44t.messenger.yml` can be changed via a PR to the repository. -- reformat the metadata using +- Reformat the metadata using $ ../fdroidserver/fdroid rewritemeta com.b44t.messenger # called from fdroiddata dir diff --git a/flake.lock b/flake.lock index b569a58f8..795a35dfe 100644 --- a/flake.lock +++ b/flake.lock @@ -3,15 +3,15 @@ "android": { "inputs": { "devshell": "devshell", - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1695500385, - "narHash": "sha256-bpTF7H5fjfZMwgU8/W28FPgkyTf2rYTVUMBgmMskk44=", + "lastModified": 1710633978, + "narHash": "sha256-yemnwSvW7cdWtXGpivFA5jDO35rGPs6fqxlQ4l6ODXs=", "owner": "tadfisher", "repo": "android-nixpkgs", - "rev": "a85aaf82d9c29b41e37bc0babd3f69632dfdbaf1", + "rev": "e91fb3d8517538e5ad9b422c9a4f604b56008a9e", "type": "github" }, "original": { @@ -22,18 +22,18 @@ }, "devshell": { "inputs": { + "flake-utils": "flake-utils", "nixpkgs": [ "android", "nixpkgs" - ], - "systems": "systems" + ] }, "locked": { - "lastModified": 1695195896, - "narHash": "sha256-pq9q7YsGXnQzJFkR5284TmxrLNFc0wo4NQ/a5E93CQU=", + "lastModified": 1708939976, + "narHash": "sha256-O5+nFozxz2Vubpdl1YZtPrilcIXPcRAjqNdNE8oCRoA=", "owner": "numtide", "repo": "devshell", - "rev": "05d40d17bf3459606316e3e9ec683b784ff28f16", + "rev": "5ddecd67edbd568ebe0a55905273e56cc82aabe3", "type": "github" }, "original": { @@ -44,14 +44,14 @@ }, "flake-utils": { "inputs": { - "systems": "systems_2" + "systems": "systems" }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "lastModified": 1701680307, + "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", "owner": "numtide", "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", "type": "github" }, "original": { @@ -62,14 +62,14 @@ }, "flake-utils_2": { "inputs": { - "systems": "systems_3" + "systems": "systems_2" }, "locked": { - "lastModified": 1694529238, - "narHash": "sha256-zsNZZGTGnMOf9YpHKJqMSsa0dXbfmxeoJ7xHlrt+xmY=", + "lastModified": 1709126324, + "narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=", "owner": "numtide", "repo": "flake-utils", - "rev": "ff7b65b44d01cf9ba6a71320833626af21126384", + "rev": "d465f4819400de7c8d874d50b982301f28a84605", "type": "github" }, "original": { @@ -79,15 +79,33 @@ } }, "flake-utils_3": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_4": { "inputs": { "systems": "systems_4" }, "locked": { - "lastModified": 1681202837, - "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "lastModified": 1705309234, + "narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=", "owner": "numtide", "repo": "flake-utils", - "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26", "type": "github" }, "original": { @@ -98,11 +116,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1695145219, - "narHash": "sha256-Eoe9IHbvmo5wEDeJXKFOpKUwxYJIOxKUesounVccNYk=", + "lastModified": 1709237383, + "narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5ba549eafcf3e33405e5f66decd1a72356632b96", + "rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8", "type": "github" }, "original": { @@ -114,11 +132,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1697915759, - "narHash": "sha256-WyMj5jGcecD+KC8gEs+wFth1J1wjisZf8kVZH13f1Zo=", + "lastModified": 1710889954, + "narHash": "sha256-Pr6F5Pmd7JnNEMHHmspZ0qVqIBVxyZ13ik1pJtm2QXk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "51d906d2341c9e866e48c2efcaac0f2d70bfd43e", + "rev": "7872526e9c5332274ea5932a0c3270d6e4724f3b", "type": "github" }, "original": { @@ -130,11 +148,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1681358109, - "narHash": "sha256-eKyxW4OohHQx9Urxi7TQlFBTDWII+F+x2hklDOQPB50=", + "lastModified": 1706487304, + "narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "96ba1c52e54e74c3197f4d43026b3f3d92e83ff9", + "rev": "90f456026d284c22b3e3497be980b2e47d0b28ac", "type": "github" }, "original": { @@ -147,22 +165,22 @@ "root": { "inputs": { "android": "android", - "flake-utils": "flake-utils_2", + "flake-utils": "flake-utils_3", "nixpkgs": "nixpkgs_2", "rust-overlay": "rust-overlay" } }, "rust-overlay": { "inputs": { - "flake-utils": "flake-utils_3", + "flake-utils": "flake-utils_4", "nixpkgs": "nixpkgs_3" }, "locked": { - "lastModified": 1697940838, - "narHash": "sha256-eyk92QqAoRNC0V99KOcKcBZjLPixxNBS0PRc4KlSQVs=", + "lastModified": 1711073443, + "narHash": "sha256-PpNb4xq7U5Q/DdX40qe7CijUsqhVVM3VZrhN0+c6Lcw=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "a3e829c06eadf848f13d109c7648570ce37ebccd", + "rev": "eec55ba9fcde6be4c63942827247e42afef7fafe", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2e0fe9b29..d95dd3591 100644 --- a/flake.nix +++ b/flake.nix @@ -15,25 +15,24 @@ pkgs = import nixpkgs { inherit system overlays; }; android-sdk = android.sdk.${system} (sdkPkgs: with sdkPkgs; [ - build-tools-30-0-3 + build-tools-33-0-1 cmdline-tools-latest ndk-bundle platform-tools - platforms-android-33 + platforms-android-34 ndk-23-2-8568313 ]); + rust-version = pkgs.lib.removeSuffix "\n" + (builtins.readFile ./scripts/rust-toolchain); in { devShells.default = pkgs.mkShell { ANDROID_SDK_ROOT = "${android-sdk}/share/android-sdk"; ANDROID_NDK_ROOT = "${android-sdk}/share/android-sdk/ndk/23.2.8568313"; - shellHook = '' - export PATH="$ANDROID_SDK_ROOT/build-tools/30.0.3/:$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/bin/:$PATH" - ''; buildInputs = [ android-sdk pkgs.openjdk17 - (pkgs.buildPackages.rust-bin.stable."1.72.0".minimal.override { + (pkgs.buildPackages.rust-bin.stable."${rust-version}".minimal.override { targets = [ "armv7-linux-androideabi" "aarch64-linux-android" diff --git a/google-services.json b/google-services.json new file mode 100644 index 000000000..64d7ae566 --- /dev/null +++ b/google-services.json @@ -0,0 +1,86 @@ +{ + "project_info": { + "project_number": "922391085500", + "project_id": "delta-chat-fcm", + "storage_bucket": "delta-chat-fcm.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:922391085500:android:938fa7a685ce74ba3e2bb9", + "android_client_info": { + "package_name": "chat.delta" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBYH8Iznh8btYX7g_udv_bu68VH30zzxho" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:922391085500:android:6f54e2c4e49405673e2bb9", + "android_client_info": { + "package_name": "chat.delta.beta" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBYH8Iznh8btYX7g_udv_bu68VH30zzxho" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9", + "android_client_info": { + "package_name": "com.b44t.messenger" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBYH8Iznh8btYX7g_udv_bu68VH30zzxho" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9", + "android_client_info": { + "package_name": "com.b44t.messenger.beta" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyBYH8Iznh8btYX7g_udv_bu68VH30zzxho" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 2510a2d94..f6503cb12 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,3 +1,6 @@ +android.defaults.buildfeatures.buildconfig=true android.enableJetifier=true +android.nonFinalResIds=false +android.nonTransitiveRClass=false android.useAndroidX=true -org.gradle.jvmargs=-Xmx4608m \ No newline at end of file +org.gradle.jvmargs=-Xmx4608m diff --git a/jni/Android.mk b/jni/Android.mk index e2867679c..65a4d0ad9 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -30,8 +30,6 @@ LOCAL_CFLAGS := -Werror -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -DNUL LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -fno-math-errno LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS -LOCAL_SRC_FILES := \ -utils/org_thoughtcrime_securesms_util_FileUtils.cpp \ -dc_wrapper.c +LOCAL_SRC_FILES := dc_wrapper.c include $(BUILD_SHARED_LIBRARY) diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index d55d6c9e4..4e3a8d180 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -268,6 +268,14 @@ JNIEXPORT void Java_com_b44t_messenger_DcAccounts_maybeNetwork(JNIEnv *env, jobj } +JNIEXPORT void Java_com_b44t_messenger_DcAccounts_setPushDeviceToken(JNIEnv *env, jobject obj, jstring token) +{ + CHAR_REF(token); + dc_accounts_set_push_device_token(get_dc_accounts(env, obj), tokenPtr); + CHAR_UNREF(token); +} + + JNIEXPORT jint Java_com_b44t_messenger_DcAccounts_addAccount(JNIEnv *env, jobject obj) { return dc_accounts_add_account(get_dc_accounts(env, obj)); @@ -792,6 +800,20 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getWebxdcStatusUpdates(JNIEn } +JNIEXPORT jint Java_com_b44t_messenger_DcContext_initWebxdcIntegration(JNIEnv *env, jobject obj, jint chat_id) +{ + return dc_init_webxdc_integration(get_dc_context(env, obj), chat_id); +} + + +JNIEXPORT void Java_com_b44t_messenger_DcContext_setWebxdcIntegration(JNIEnv *env, jobject obj, jstring file) +{ + CHAR_REF(file); + dc_set_webxdc_integration(get_dc_context(env, obj), filePtr); + CHAR_UNREF(file); +} + + JNIEXPORT jint Java_com_b44t_messenger_DcContext_addDeviceMsg(JNIEnv *env, jobject obj, jstring label, jobject msg) { CHAR_REF(label); @@ -1004,18 +1026,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_setLocation(JNIEnv *env, jo } -JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getLocationsCPtr(JNIEnv *env, jobject obj, jint chat_id, jint contact_id, jlong timestamp_start, jlong timestamp_end) -{ - return (jlong)dc_get_locations(get_dc_context(env, obj), chat_id, contact_id, CTIMESTAMP(timestamp_start), CTIMESTAMP(timestamp_end)); -} - - -JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteAllLocations(JNIEnv *env, jobject obj) -{ - dc_delete_all_locations(get_dc_context(env, obj)); -} - - JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getProviderFromEmailWithDnsCPtr(JNIEnv *env, jobject obj, jstring email) { CHAR_REF(email); @@ -1108,94 +1118,23 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcEvent_getData2Str(JNIEnv *env, jobje } -JNIEXPORT jint Java_com_b44t_messenger_DcEvent_getAccountId(JNIEnv *env, jobject obj) +JNIEXPORT jbyteArray Java_com_b44t_messenger_DcEvent_getData2Blob(JNIEnv *env, jobject obj) { - return (jint)dc_event_get_account_id(get_dc_event(env, obj)); -} + jbyteArray ret = NULL; + dc_event_t* event = get_dc_event(env, obj); + size_t ptrSize = dc_event_get_data2_int(event); + char* ptr = dc_event_get_data2_str(get_dc_event(env, obj)); + ret = ptr2jbyteArray(env, ptr, ptrSize); + dc_str_unref(ptr); -/******************************************************************************* - * DcArray - ******************************************************************************/ - - -static dc_array_t* get_dc_array(JNIEnv *env, jobject obj) -{ - static jfieldID fid = 0; - if (fid==0) { - jclass cls = (*env)->GetObjectClass(env, obj); - fid = (*env)->GetFieldID(env, cls, "arrayCPtr", "J" /*Signature, J=long*/); - } - if (fid) { - return (dc_array_t*)(*env)->GetLongField(env, obj, fid); - } - return NULL; -} - - -JNIEXPORT void Java_com_b44t_messenger_DcArray_unrefArrayCPtr(JNIEnv *env, jobject obj) -{ - dc_array_unref(get_dc_array(env, obj)); -} - - -JNIEXPORT jint Java_com_b44t_messenger_DcArray_getCnt(JNIEnv *env, jobject obj) -{ - return dc_array_get_cnt(get_dc_array(env, obj)); -} - - -JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getLatitude(JNIEnv *env, jobject obj, jint index) -{ - return (jfloat)dc_array_get_latitude(get_dc_array(env, obj), index); -} - - -JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getLongitude(JNIEnv *env, jobject obj, jint index) -{ - return (jfloat)dc_array_get_longitude(get_dc_array(env, obj), index); -} - - -JNIEXPORT jfloat Java_com_b44t_messenger_DcArray_getAccuracy(JNIEnv *env, jobject obj, jint index) -{ - return (jfloat)dc_array_get_accuracy(get_dc_array(env, obj), index); -} - - -JNIEXPORT jlong Java_com_b44t_messenger_DcArray_getTimestamp(JNIEnv *env, jobject obj, jint index) -{ - return JTIMESTAMP(dc_array_get_timestamp(get_dc_array(env, obj), index)); -} - - -JNIEXPORT jint Java_com_b44t_messenger_DcArray_getMsgId(JNIEnv *env, jobject obj, jint index) -{ - return dc_array_get_msg_id(get_dc_array(env, obj), index); -} - - -JNIEXPORT jint Java_com_b44t_messenger_DcArray_getLocationId(JNIEnv *env, jobject obj, jint index) -{ - return dc_array_get_id(get_dc_array(env, obj), index); -} - - -JNIEXPORT jstring Java_com_b44t_messenger_DcArray_getMarker(JNIEnv *env, jobject obj, jint index) -{ - char* temp = dc_array_get_marker(get_dc_array(env, obj), index); - jstring ret = NULL; - if (temp) { - ret = JSTRING_NEW(temp); - } - dc_str_unref(temp); return ret; } -JNIEXPORT jboolean Java_com_b44t_messenger_DcArray_isIndependent(JNIEnv *env, jobject obj, jint index) +JNIEXPORT jint Java_com_b44t_messenger_DcEvent_getAccountId(JNIEnv *env, jobject obj) { - return (dc_array_is_independent(get_dc_array(env, obj), index)!=0); + return (jint)dc_event_get_account_id(get_dc_event(env, obj)); } diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index e0e907b1b..b46247d64 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit e0e907b1bb710dcd049cbc864e319f1e08c94705 +Subproject commit b46247d649f0c013b8d48c54af0242c934f17848 diff --git a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp deleted file mode 100644 index ef86ac8e3..000000000 --- a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "org_thoughtcrime_securesms_util_FileUtils.h" - -#include -#include -#include - -jint JNICALL Java_org_thoughtcrime_securesms_util_FileUtils_getFileDescriptorOwner - (JNIEnv *env, jclass clazz, jobject fileDescriptor) -{ - jclass fdClass = env->GetObjectClass(fileDescriptor); - - if (fdClass == NULL) { - return -1; - } - - jfieldID fdFieldId = env->GetFieldID(fdClass, "descriptor", "I"); - - if (fdFieldId == NULL) { - return -1; - } - - int fd = env->GetIntField(fileDescriptor, fdFieldId); - - struct stat stat_struct; - - if (fstat(fd, &stat_struct) != 0) { - return -1; - } - - return stat_struct.st_uid; -} \ No newline at end of file diff --git a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h b/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h deleted file mode 100644 index abf13b35b..000000000 --- a/jni/utils/org_thoughtcrime_securesms_util_FileUtils.h +++ /dev/null @@ -1,21 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class org_thoughtcrime_securesms_util_FileUtils */ - -#ifndef _Included_org_thoughtcrime_securesms_util_FileUtils -#define _Included_org_thoughtcrime_securesms_util_FileUtils -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_thoughtcrime_securesms_util_FileUtils - * Method: getFileDescriptorOwner - * Signature: (Ljava/io/FileDescriptor;)I - */ -JNIEXPORT jint JNICALL Java_org_thoughtcrime_securesms_util_FileUtils_getFileDescriptorOwner - (JNIEnv *, jclass, jobject); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/metadata/de/title.txt b/metadata/de/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/de/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/en-US/changelogs/6744.txt b/metadata/en-US/changelogs/6744.txt new file mode 100644 index 000000000..5135a706c --- /dev/null +++ b/metadata/en-US/changelogs/6744.txt @@ -0,0 +1,6 @@ +- One-to-one chats guarantee end-to-end encryption for contacts with a green checkmark now +- For everyone\'s simplicity, we also mark these chats with green checkmarks +- Groups are created automatically with guaranteed end-to-end encryption if possible +- Accept/Blocked, Archived, Pinned, Mute is synced across all your devices +- More improvements in camera, voice messages, backup-all, screen reader, per-account wallpapers, gallery select-all, webxdc landscape +- Tons of bug fixes diff --git a/metadata/en-US/changelogs/6754.txt b/metadata/en-US/changelogs/6754.txt new file mode 100644 index 000000000..5135a706c --- /dev/null +++ b/metadata/en-US/changelogs/6754.txt @@ -0,0 +1,6 @@ +- One-to-one chats guarantee end-to-end encryption for contacts with a green checkmark now +- For everyone\'s simplicity, we also mark these chats with green checkmarks +- Groups are created automatically with guaranteed end-to-end encryption if possible +- Accept/Blocked, Archived, Pinned, Mute is synced across all your devices +- More improvements in camera, voice messages, backup-all, screen reader, per-account wallpapers, gallery select-all, webxdc landscape +- Tons of bug fixes diff --git a/metadata/en-US/changelogs/6774.txt b/metadata/en-US/changelogs/6774.txt new file mode 100644 index 000000000..f4f724b94 --- /dev/null +++ b/metadata/en-US/changelogs/6774.txt @@ -0,0 +1,6 @@ +- sync changes on "Your Profile Name", "Show Class Mails", "Read Receipts" options across devices +- remove receiver limit on .xdc size +- fix log in errors for providers as 163.com +- fix decryption errors when using multiple private keys +- fix database locked errors on webxdc updates +- update translations diff --git a/metadata/en-US/changelogs/6804.txt b/metadata/en-US/changelogs/6804.txt new file mode 100644 index 000000000..34a3c04ff --- /dev/null +++ b/metadata/en-US/changelogs/6804.txt @@ -0,0 +1,8 @@ +- "Reactions": long tap a message to react to it +- If you cannot scan QR codes, share them as "invite links" +- Unread messages of all accounts are counted and shown in title now +- Webxdc sending limit removed +- Long-tapping chatlist items now allow to mute/unmute chats directly +- Ask for system unlock secret before opening "Password & Account" +- New option "Settings / Advanced / Read System Address Book" +- Tons of bug fixes diff --git a/metadata/en-US/changelogs/6864.txt b/metadata/en-US/changelogs/6864.txt new file mode 100644 index 000000000..f71a0af68 --- /dev/null +++ b/metadata/en-US/changelogs/6864.txt @@ -0,0 +1,7 @@ +- new onboarding: you can create a new profile with one tap on "Create New Profile" - or use an existing login or second-device-setup as usual +- contacts can be attached as "Cards" at "Attach / Contact"; when the receiver taps the cards, guaranteed end-to-end encrypted can be established +- add contacts manually at "New Chat / New Contact / Add Contact Manually" +- send any emoji as reaction +- show reactions in summaries +- pin/archive/etc chats directly from search result +- bug fixed and more diff --git a/metadata/en-US/images/phoneScreenshots/1.png b/metadata/en-US/images/phoneScreenshots/1.png index 6f50fafbf..55364bacd 100644 Binary files a/metadata/en-US/images/phoneScreenshots/1.png and b/metadata/en-US/images/phoneScreenshots/1.png differ diff --git a/metadata/en-US/images/phoneScreenshots/2.png b/metadata/en-US/images/phoneScreenshots/2.png index 936661b60..e165558ef 100644 Binary files a/metadata/en-US/images/phoneScreenshots/2.png and b/metadata/en-US/images/phoneScreenshots/2.png differ diff --git a/metadata/en-US/images/phoneScreenshots/3.png b/metadata/en-US/images/phoneScreenshots/3.png index 83e1b607e..a6978fad7 100644 Binary files a/metadata/en-US/images/phoneScreenshots/3.png and b/metadata/en-US/images/phoneScreenshots/3.png differ diff --git a/metadata/en-US/images/phoneScreenshots/4.png b/metadata/en-US/images/phoneScreenshots/4.png index e768f6068..ae269dd69 100644 Binary files a/metadata/en-US/images/phoneScreenshots/4.png and b/metadata/en-US/images/phoneScreenshots/4.png differ diff --git a/metadata/en-US/images/phoneScreenshots/5.png b/metadata/en-US/images/phoneScreenshots/5.png index 9328f6e00..352221329 100644 Binary files a/metadata/en-US/images/phoneScreenshots/5.png and b/metadata/en-US/images/phoneScreenshots/5.png differ diff --git a/metadata/en-US/images/phoneScreenshots/6.png b/metadata/en-US/images/phoneScreenshots/6.png index acd462743..85ae92146 100644 Binary files a/metadata/en-US/images/phoneScreenshots/6.png and b/metadata/en-US/images/phoneScreenshots/6.png differ diff --git a/metadata/en-US/images/phoneScreenshots/7.png b/metadata/en-US/images/phoneScreenshots/7.png index c6e4ccf12..4e750da26 100644 Binary files a/metadata/en-US/images/phoneScreenshots/7.png and b/metadata/en-US/images/phoneScreenshots/7.png differ diff --git a/metadata/en-US/images/phoneScreenshots/8.png b/metadata/en-US/images/phoneScreenshots/8.png index 1966ec36a..2b87d8e6b 100644 Binary files a/metadata/en-US/images/phoneScreenshots/8.png and b/metadata/en-US/images/phoneScreenshots/8.png differ diff --git a/metadata/es/full_description.txt b/metadata/es/full_description.txt new file mode 100644 index 000000000..034863433 --- /dev/null +++ b/metadata/es/full_description.txt @@ -0,0 +1,19 @@ +Delta Chat es una aplicación de mensajería totalmente compatible con +infraestructura de correo electrónico. + +Por lo tanto, con Delta Chat se obtiene la facilidad de conocidos mensajeros con el alcance de +e-mail. Además, eres independiente de otras empresas o servicios, ya que tu +Los datos no están relacionados con Delta Chat, ni siquiera agregará nuevas dependencias aquí. + +Algunas características de un vistazo: + +* Seguro con cifrado automático de extremo a extremo, compatible con el nuevo estándar Autocrypt +* Rápido mediante el uso de Push-IMAP +* Mayor base de usuarios -- también se puede llegar a los receptores que no usan Delta Chat +* Compatible -- no sólo consigo mismo +* Interfaz de usuario elegante y sencilla +* Sistema distribuido +* Sin spam -- sólo los mensajes de usuarios conocidos se muestran por defecto +* Fiable -- seguro para uso profesional +* Confiable -- incluso se puede utilizar para mensajes de negocios +* Totalmente OpenSource y basado en estándares diff --git a/metadata/es/title.txt b/metadata/es/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/es/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/it/changelogs/6444.txt b/metadata/it/changelogs/6444.txt new file mode 100644 index 000000000..d98292db8 --- /dev/null +++ b/metadata/it/changelogs/6444.txt @@ -0,0 +1,10 @@ +Se un utente e-mail classica invia un'e-mail a un gruppo e aggiunge nuovi destinatari, i nuovi destinatari diventeranno membri del gruppo. +Tratta le chiavi PGP allegate dall'utente di posta elettronica classica come un segnale per preferire la crittografia reciproca. +Tratta i messaggi crittografati o firmati provenienti dall'utente di posta elettronica classica come un segnale per preferire la crittografia reciproca. +Corretta la migrazione dei vecchi database. +Correzione: invia messaggi di modifica temporanei del timer solo nella chat già conosciuta da altri membri. +Correzione: utilizza percorsi relativi al database ed evita problemi ad es. sulla migrazione verso altri dispositivi o percorsi. +Correzione: timeout di lettura/scrittura per IMAP su SOCKS5. +Correzione: non inviare "modifiche al nome del gruppo" se nessun carattere è stato modificato. +Aggiungi la traduzione greca, aggiornate altre traduzioni. +Aggiornamento al core104. diff --git a/metadata/it/changelogs/6464.txt b/metadata/it/changelogs/6464.txt new file mode 100644 index 000000000..4c18ed5d6 --- /dev/null +++ b/metadata/it/changelogs/6464.txt @@ -0,0 +1,13 @@ +correzione: rendere visibili le chat archiviate che non vengono annullate automaticamente (chat disattivate): aggiunge un contatore non letto e sposta l'archivio in alto +correzione: invia file AVIF, HEIC, TXT, PPT, XLS, XML come tali +correzione: attiva la riconnessione quando non si riesce a recuperare i messaggi esistenti +correzione: non riprova a recuperare i messaggi esistenti dopo un errore, impedisce il ciclo infinito di riconnessione +correzione: non aggiunge un errore se il messaggio è crittografato ma non firmato +correzione: non rimuove gli spazi iniziali dalle righe del messaggio +risolvere i casi limite relativi all'invio di testi citati +corretta la connessione STARTTLS +correzione: non trattare gli indirizzi email non validi come un'eccezione +correzione: svuotamento dei percorsi relativi del database introdotti in 1.34.8 in tempo +aggiornamenti rapidi degli elenchi di chat e dell'elenco dei contatti +aggiornare le traduzioni +aggiornamento al core106 diff --git a/metadata/it/changelogs/6494.txt b/metadata/it/changelogs/6494.txt new file mode 100644 index 000000000..b822b7635 --- /dev/null +++ b/metadata/it/changelogs/6494.txt @@ -0,0 +1,5 @@ +* aggiunge le opzioni SOCKS5 a "Aggiungi Account" e "Configura" +* introdurre la cache DNS: se il DNS smette di funzionare su una rete, Delta Chat sarà comunque in grado di connettersi ad IMAP utilizzando gli indirizzi IP precedenti +* mostra messaggi completi: non carica automaticamente il contenuto remoto per le richieste +* Corretti vari bug e migliorata la registrazione +* aggiornate le traduzioni diff --git a/metadata/it/changelogs/6504.txt b/metadata/it/changelogs/6504.txt new file mode 100644 index 000000000..7716e1746 --- /dev/null +++ b/metadata/it/changelogs/6504.txt @@ -0,0 +1,8 @@ +* nuovo e semplice modo per aggiungere un secondo dispositivo al tuo account: seleziona "Aggiungi Secondo Dispositivo" dopo l'installazione e scansiona un codice QR dal primo dispositivo +* visualizza "Tutti i Media" di tutte le chat +* nuova opzione "Cancella Chat". +* mostra le notifiche per tutti gli account +* utilizza meglio la modalità buio/luce in "Mostra messaggio completo" +* mostra l'icona accanto ai messaggi informativi delle app +* resilienza contro le interruzioni memorizzando nella cache i risultati DNS per le connessioni SMTP e IMAP +* Miglioramenti e correzioni velocità e affidabilità diff --git a/metadata/it/changelogs/6514.txt b/metadata/it/changelogs/6514.txt new file mode 100644 index 000000000..4a5fe06da --- /dev/null +++ b/metadata/it/changelogs/6514.txt @@ -0,0 +1,8 @@ +* aggiungi un messaggio sul dispositivo dopo aver configurato un secondo dispositivo utilizzando "Impostazioni/Aggiungi Secondo Dispositivo" +* velocizza significativamente il tempo di connessione "Aggiungi come Secondo Dispositivo" dal lato intermediario +* se possibile, mostra il nome Wi-Fi direttamente dopo aver scansionato il codice QR "Aggiungi Secondo Dispositivo". +* risolto il riavvio immediato di "Aggiungi Secondo Dispositivo" +* correzione: non vengono visualizzati solo i media cestinati nella vista "Tutti i Media". +* correzione: aggiornamento del database se necessario dopo "Aggiungi Secondo Dispositivo" +* aggiornate traduzioni e aiuto locale +* aggiornamento al core112.6 diff --git a/metadata/it/changelogs/6534.txt b/metadata/it/changelogs/6534.txt new file mode 100644 index 000000000..36b7d9242 --- /dev/null +++ b/metadata/it/changelogs/6534.txt @@ -0,0 +1,6 @@ +* inizia con un tema chiaro/scuro a seconda del tema del sistema +* corrette le icone di verifica per le chat individuali +* corretti gli errori di recupero dovuti al rilevamento EOF errato nelle risposte IMAP lunghe +* ulteriori correzioni di bug +* aggiornate le traduzioni e aiuto locale +* aggiornamento al core112.7 diff --git a/metadata/it/changelogs/6544.txt b/metadata/it/changelogs/6544.txt new file mode 100644 index 000000000..c0c15e5d1 --- /dev/null +++ b/metadata/it/changelogs/6544.txt @@ -0,0 +1,4 @@ +* utilizza la configurazione SOCKS5 anche per caricare immagini remote nelle mail HTML +* correzioni di bug +* aggiornate le traduzioni e aiuto locale +* aggiornamento al core112.8 diff --git a/metadata/it/changelogs/6584.txt b/metadata/it/changelogs/6584.txt new file mode 100644 index 000000000..607e5dc2a --- /dev/null +++ b/metadata/it/changelogs/6584.txt @@ -0,0 +1,6 @@ +* nuove API webxdc: importFiles() e sendToChat() +* rimosso il limite di dimensione superiore degli allegati +* risparmia traffico e spazio di archiviazione: ricodifica PNG di grandi dimensioni e altri formati di immagine supportati (i JPEG di grandi dimensioni venivano sempre ricodificati; le immagini inviate come "File" non vengono ancora registrate o modificate in altro modo) +* salva spazio di archiviazione locale: comprimi le email HTML nel database +* migliorata coerenza dell'appartenenza al gruppo +* molte correzioni di bug diff --git a/metadata/it/changelogs/6594.txt b/metadata/it/changelogs/6594.txt new file mode 100644 index 000000000..72af82ecf --- /dev/null +++ b/metadata/it/changelogs/6594.txt @@ -0,0 +1,5 @@ +* usa l'editor immagini per la selezione dell'avatar quando possibile +* migliora la schermata di caricamento in modalità oscura +* aggiornamento "icona verificata" +* aggiunta la traduzione di Luri Bakhtiari, aggiornate altre traduzioni +* molte correzioni di bug diff --git a/metadata/it/changelogs/6600.txt b/metadata/it/changelogs/6600.txt new file mode 100644 index 000000000..72af82ecf --- /dev/null +++ b/metadata/it/changelogs/6600.txt @@ -0,0 +1,5 @@ +* usa l'editor immagini per la selezione dell'avatar quando possibile +* migliora la schermata di caricamento in modalità oscura +* aggiornamento "icona verificata" +* aggiunta la traduzione di Luri Bakhtiari, aggiornate altre traduzioni +* molte correzioni di bug diff --git a/metadata/it/changelogs/6744.txt b/metadata/it/changelogs/6744.txt new file mode 100644 index 000000000..387d27d4b --- /dev/null +++ b/metadata/it/changelogs/6744.txt @@ -0,0 +1,6 @@ +- Le chat individuali garantiscono ora la crittografia end-to-end per i contatti con un segno di spunta verde +- Per la semplicità di tutti, contrassegniamo queste chat anche con segni di spunta verdi +- I gruppi vengono creati automaticamente con crittografia end-to-end garantita, se possibile +- Accetta/Bloccato, Archiviato, Appuntato, Disattiva Audio è sincronizzato su tutti i tuoi dispositivi +- Ulteriori miglioramenti alla fotocamera, ai messaggi vocali, al backup di tutto, alla lettura dello schermo, agli sfondi per account, alla selezione di tutto nella galleria, all'orientamento orizzontale webxdc +- Tonnellate di correzioni bug diff --git a/metadata/it/changelogs/6754.txt b/metadata/it/changelogs/6754.txt new file mode 100644 index 000000000..387d27d4b --- /dev/null +++ b/metadata/it/changelogs/6754.txt @@ -0,0 +1,6 @@ +- Le chat individuali garantiscono ora la crittografia end-to-end per i contatti con un segno di spunta verde +- Per la semplicità di tutti, contrassegniamo queste chat anche con segni di spunta verdi +- I gruppi vengono creati automaticamente con crittografia end-to-end garantita, se possibile +- Accetta/Bloccato, Archiviato, Appuntato, Disattiva Audio è sincronizzato su tutti i tuoi dispositivi +- Ulteriori miglioramenti alla fotocamera, ai messaggi vocali, al backup di tutto, alla lettura dello schermo, agli sfondi per account, alla selezione di tutto nella galleria, all'orientamento orizzontale webxdc +- Tonnellate di correzioni bug diff --git a/metadata/it/changelogs/6774.txt b/metadata/it/changelogs/6774.txt new file mode 100644 index 000000000..9ad82cae8 --- /dev/null +++ b/metadata/it/changelogs/6774.txt @@ -0,0 +1,6 @@ +- sincronizza le modifiche alle opzioni "Nome Tuo Profilo", "Mostra E-Mails Tradizionali", "Ricevute di Lettura" su tutti i dispositivi +- rimosso il limite del ricevitore sulla dimensione .xdc +- corretti gli errori di accesso per provider come 163.com +- corretti gli errori di decrittazione quando si utilizzano più chiavi private +- corretti gli errori di blocco del database sugli aggiornamenti webxdc +- aggiornate le traduzioni diff --git a/metadata/it/changelogs/6804.txt b/metadata/it/changelogs/6804.txt new file mode 100644 index 000000000..f3f7e6b98 --- /dev/null +++ b/metadata/it/changelogs/6804.txt @@ -0,0 +1,8 @@ +- "Reazioni": tocca a lungo un messaggio per reagire ad esso +- Se non riesci a scansionare i codici QR, condividili come "link di invito" +- I messaggi non letti di tutti gli account ora vengono conteggiati e mostrati nel titolo +- Rimosso limite di invio di webxdc +- Gli elementi dell'elenco chat a tocco prolungato ora consentono di disattivare/attivare l'audio delle chat direttamente +- Richiede lo sblocco segreto del sistema prima di aprire "Password & Account" +- Nuova opzione "Impostazioni/Avanzate/Leggi Rubrica di Sistema" +- Tonnellate di correzioni bug diff --git a/metadata/it/full_description.txt b/metadata/it/full_description.txt new file mode 100644 index 000000000..8578fe70d --- /dev/null +++ b/metadata/it/full_description.txt @@ -0,0 +1,19 @@ +Delta Chat è un'app di messaggistica completamente compatibile con +l'infrastruttura e-mail esistente. + +Quindi, con Delta Chat ottieni la facilità di messaggistica ben nota alla portata di +e-mail. Inoltre, sei indipendente da altre società o servizi, come i tuoi +dati non sono correlati a Delta Chat, qui non aggiungerai nemmeno nuove dipendenze. + +Alcune caratteristiche in breve: + +* Proteggi con la crittografia end-to-end automatica, che supporta il nuovo standard Autocrypt +* Veloce grazie all'uso di Push-IMAP +* Base utenti più ampia -- è possibile raggiungere anche i destinatari che non utilizzano Delta Chat +* Compatibile -- non solo con se stesso +* Interfaccia utente elegante e semplice +* Sistema distribuito +* Nessuno Spam -- per impostazione predefinita vengono visualizzati solo i messaggi di utenti conosciuti +* Affidabile -- sicuro per l'uso professionale +* Affidabile -- può essere utilizzato anche per messaggi aziendali +* Completamente OpenSource e basato su Standards diff --git a/metadata/it/short_description.txt b/metadata/it/short_description.txt index 861e437b3..4efb40ce0 100644 --- a/metadata/it/short_description.txt +++ b/metadata/it/short_description.txt @@ -1 +1 @@ -Comunica istantaneamente tramite e-mail +Chatta via e-mail. Elegantemente Retrò, Decentralizzato e Aperto. Riservatezza da Progettazione. diff --git a/metadata/it/title.txt b/metadata/it/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/it/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/nb/short_description.txt b/metadata/nb/short_description.txt index 1b6e197bf..64a513b02 100644 --- a/metadata/nb/short_description.txt +++ b/metadata/nb/short_description.txt @@ -1 +1 @@ -Kommuniser umiddelbart via e-post +Sludre desentralisert via e-post. diff --git a/metadata/nb/title.txt b/metadata/nb/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/nb/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/pt-BR/title.txt b/metadata/pt-BR/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/pt-BR/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/ru/changelogs/6444.txt b/metadata/ru/changelogs/6444.txt new file mode 100644 index 000000000..654d5dd50 --- /dev/null +++ b/metadata/ru/changelogs/6444.txt @@ -0,0 +1,10 @@ +Если пользователь классической электронной почты отправляет электронное письмо группе и добавляет новых получателей, новые получатели станут членами группы. +Рассматривать прикрепленные ключи PGP от пользователя классической электронной почты как сигнал о предпочтении взаимного шифрования. +Считаать зашифрованные или подписанные сообщения от пользователя классической электронной почты сигналом о предпочтении взаимного шифрования. +Исправлена миграция старых баз данных. +Исправлено: отправлять эфемерные сообщения об изменении таймера только в том случае, если чат уже известен другим участникам. +Исправлено: использовать относительные пути к базе данных. +Исправлены таймауты чтения/записи для IMAP через SOCKS5. +Исправлено: не отправлять «изменения имени группы», если ни один символ не был изменен. +Обновлены переводы. +Обновление до core104. diff --git a/metadata/ru/changelogs/6464.txt b/metadata/ru/changelogs/6464.txt new file mode 100644 index 000000000..3360991ae --- /dev/null +++ b/metadata/ru/changelogs/6464.txt @@ -0,0 +1,15 @@ +исправление: сделать видимыми заархивированные чаты, которые не распаковываются автоматически (отключенные чаты): добавить счетчик непрочитанных сообщений и переместить архив в начало страницы +исправление: отправлять файлы AVIF, HEIC, TXT, PPT, XLS, XML как таковые +исправление: инициировать повторное подключение, если не удалось получить существующие сообщения +исправление: не повторять попытку извлечения существующих сообщений после неудачи, предотвращая бесконечный цикл переподключения +исправление: не добавлять ошибку, если сообщение зашифровано, но не подписано +исправление: не удалять ведущие пробелы из строк сообщений +исправление угловых ситуаций при отправке текстов с кавычками +исправление: исправление STARTTLS-соединения +исправление: не рассматривать недействительные адреса электронной почты как исключение +исправление: своевременно промывать относительные пути к базам данных, введенные в 1.34.8 +более быстрое обновление списков чатов и списков контактов +обновление переводов +обновление до core106 + +Переведено с помощью DeepL.com (бесплатная версия) diff --git a/metadata/ru/changelogs/6494.txt b/metadata/ru/changelogs/6494.txt new file mode 100644 index 000000000..57078df6b --- /dev/null +++ b/metadata/ru/changelogs/6494.txt @@ -0,0 +1,5 @@ +* добавлены настройки SOCKS5 +* добавлен кеш DNS: если DNS перестаетс работать, Delta Chat всё равно сможет присоединиться к IMAP с использованием предыдущего IP-адреса +* отключена загрузка удаленного контента по умолчанию при отображении полного сообщения +* исправлены различные ошибки и улучшены логи +* обновлен перевод diff --git a/metadata/ru/changelogs/6504.txt b/metadata/ru/changelogs/6504.txt new file mode 100644 index 000000000..8067e1428 --- /dev/null +++ b/metadata/ru/changelogs/6504.txt @@ -0,0 +1,8 @@ +* новый, простой способ добавить второе устройство в свой аккаунт: выберите "Добавить как второе устройство" после установки и отсканируйте QR-код с первого устройства +* просмотр "Всех медиа" всех чатов +* новая опция "Очистить чат" +* показывать уведомления для всех аккаунтов +* более эффективное использование темного/светлого режима в "Показать полное сообщение" +* показывать значок рядом с информационными сообщениями приложений +* устойчивость к сбоям за счет кэширования результатов DNS для SMTP- и IMAP-соединений +* улучшения скорости и надежности, исправления diff --git a/metadata/ru/changelogs/6514.txt b/metadata/ru/changelogs/6514.txt new file mode 100644 index 000000000..c137a7456 --- /dev/null +++ b/metadata/ru/changelogs/6514.txt @@ -0,0 +1,8 @@ +* добавление сообщения об устройстве после настройки второго устройства с помощью "Настройки / Добавить второе устройство" +* значительно ускорить время подключения "Добавить в качестве второго устройства" на стороне получателя +* если возможно, показывать имя Wi-Fi непосредственно после сканирования QR-кода "Добавить второе устройство" +* исправление немедленного перезапуска "Добавить второе устройство" +* исправление: в представлении "Все носители" не показывать только удаленные носители +* исправление: обновление базы данных при необходимости после "Добавить второе устройство" +* обновить переводы и локальную справку +* обновление до core112.6 diff --git a/metadata/ru/changelogs/6534.txt b/metadata/ru/changelogs/6534.txt new file mode 100644 index 000000000..4a0c1e7d0 --- /dev/null +++ b/metadata/ru/changelogs/6534.txt @@ -0,0 +1,6 @@ +* запуск светлой/темной темы в зависимости от темы системы +* исправление значков проверки для чатов один на один +* исправление ошибок выборки из-за ошибочного определения EOF в длинных ответах IMAP +* исправление других ошибок +* обновление переводов и локальной справки +* обновление до core112.7 diff --git a/metadata/ru/changelogs/6544.txt b/metadata/ru/changelogs/6544.txt new file mode 100644 index 000000000..3597c833e --- /dev/null +++ b/metadata/ru/changelogs/6544.txt @@ -0,0 +1,4 @@ +* использование конфигурации SOCKS5 также для загрузки удаленных изображений в HTML-почте +* исправление ошибок +* обновление переводов и локальной справки +* обновление до core112.8 diff --git a/metadata/ru/changelogs/6584.txt b/metadata/ru/changelogs/6584.txt new file mode 100644 index 000000000..d15fab295 --- /dev/null +++ b/metadata/ru/changelogs/6584.txt @@ -0,0 +1,6 @@ +* новые API webxdc: importFiles() и sendToChat() +* убрано верхнее ограничение на размер вложений +* экономия трафика и памяти: перекодировка больших PNG и других поддерживаемых форматов изображений (большие JPEG всегда перекодировались; изображения, отправленные как "Файл", по-прежнему не записываются или изменяются иным образом) +* экономия локального хранилища: сжимать HTML-письма в базе данных +* улучшение согласованности членства в группах +* множество исправлений ошибок diff --git a/metadata/ru/changelogs/6594.txt b/metadata/ru/changelogs/6594.txt new file mode 100644 index 000000000..0fe3c92c8 --- /dev/null +++ b/metadata/ru/changelogs/6594.txt @@ -0,0 +1,5 @@ +* используйте редактор изображений для выбора аватара, когда это возможно +* улучшить экран загрузки в темном режиме +* обновить "проверенную иконку" +* добавлен перевод Лури Бахтиари, обновлены другие переводы +* множество исправлений ошибок diff --git a/metadata/ru/changelogs/6600.txt b/metadata/ru/changelogs/6600.txt new file mode 100644 index 000000000..0fe3c92c8 --- /dev/null +++ b/metadata/ru/changelogs/6600.txt @@ -0,0 +1,5 @@ +* используйте редактор изображений для выбора аватара, когда это возможно +* улучшить экран загрузки в темном режиме +* обновить "проверенную иконку" +* добавлен перевод Лури Бахтиари, обновлены другие переводы +* множество исправлений ошибок diff --git a/metadata/ru/changelogs/6744.txt b/metadata/ru/changelogs/6744.txt new file mode 100644 index 000000000..39ce66825 --- /dev/null +++ b/metadata/ru/changelogs/6744.txt @@ -0,0 +1,6 @@ +- Чаты один на один гарантируют сквозное шифрование для контактов, отмеченных зеленым флажком. +- Для простоты everyone\ мы также помечаем эти чаты зелеными галочками. +- Группы создаются автоматически с гарантированным сквозным шифрованием, если это возможно +- Принятые/заблокированные, архивированные, прикрепленные, отключенные синхронизируются на всех ваших устройствах. +- Улучшения в камере, голосовых сообщениях, резервном копировании, считывателе экрана, обоях для каждого аккаунта, галерее "Выделить все", ландшафте webxdc +- Множество исправлений ошибок diff --git a/metadata/ru/changelogs/6754.txt b/metadata/ru/changelogs/6754.txt new file mode 100644 index 000000000..39ce66825 --- /dev/null +++ b/metadata/ru/changelogs/6754.txt @@ -0,0 +1,6 @@ +- Чаты один на один гарантируют сквозное шифрование для контактов, отмеченных зеленым флажком. +- Для простоты everyone\ мы также помечаем эти чаты зелеными галочками. +- Группы создаются автоматически с гарантированным сквозным шифрованием, если это возможно +- Принятые/заблокированные, архивированные, прикрепленные, отключенные синхронизируются на всех ваших устройствах. +- Улучшения в камере, голосовых сообщениях, резервном копировании, считывателе экрана, обоях для каждого аккаунта, галерее "Выделить все", ландшафте webxdc +- Множество исправлений ошибок diff --git a/metadata/ru/changelogs/6774.txt b/metadata/ru/changelogs/6774.txt new file mode 100644 index 000000000..77cb66375 --- /dev/null +++ b/metadata/ru/changelogs/6774.txt @@ -0,0 +1,6 @@ +- синхронизируйте изменения опций "Имя вашего профиля", "Показывать письма класса", "Прочитать квитанции" на разных устройствах +- снято ограничение на размер .xdc для приемников +- исправление ошибок входа в систему для провайдеров 163.com +- исправить ошибки расшифровки при использовании нескольких закрытых ключей +- исправление ошибок блокировки базы данных при обновлении webxdc +- обновление переводов diff --git a/metadata/ru/changelogs/6804.txt b/metadata/ru/changelogs/6804.txt new file mode 100644 index 000000000..fd7ff7335 --- /dev/null +++ b/metadata/ru/changelogs/6804.txt @@ -0,0 +1,8 @@ +- "Реакции": долгое нажатие на сообщение, чтобы отреагировать на него. +- Если вы не можете сканировать QR-коды, поделитесь ими как "пригласительными ссылками". +- Непрочитанные сообщения всех аккаунтов теперь подсчитываются и отображаются в заголовке +- Убрано ограничение на отправку Webxdc +- Длительное нажатие на элементы списка чатов теперь позволяет отключать/включать чаты напрямую +- Запрос секрета разблокировки системы перед открытием "Пароль и аккаунт" +- Новая опция "Настройки / Дополнительно / Прочитать адресную книгу системы" +- Множество исправлений ошибок diff --git a/metadata/ru/full_description.txt b/metadata/ru/full_description.txt new file mode 100644 index 000000000..473bd9b62 --- /dev/null +++ b/metadata/ru/full_description.txt @@ -0,0 +1,19 @@ +Delta Chat — это чат-приложение, полностью совместимое с существующей +инфраструктурой электронной почты. + +Таким образом, с Delta Chat вы получаете удобство использования мессенджеров и доступность +электроннай почты. Более того, вы независимы от других компаний или сервисов, поскольку ваши +данные не связаны с Delta Chat, вы даже не будете добавлять сюда новые зависимости. + +Краткий обзор некоторых функций: + +* Безопасность с помощью автоматического сквозного шифрования поддерживающему новый стандарт Autocrypt +* Быстрота благодаря использованию Push-IMAP +* Самая большая база пользователей: можно связаться и с теми, кто не использует Delta Chat +* Совместимость - не только этот чат с самим с собой +* Элегантный и простой пользовательский интерфейс +* Распределенная система +* Никакого спама — по умолчанию отображаются только сообщения известных пользователей +* Надежный — безопасно для профессионального использования +* Заслуживающий доверия – можно использовать даже для деловых сообщений +* Полностью открытый исходный код и основанный на стандартах diff --git a/metadata/ru/short_description.txt b/metadata/ru/short_description.txt index aa841299f..b7d2c56ab 100644 --- a/metadata/ru/short_description.txt +++ b/metadata/ru/short_description.txt @@ -1 +1 @@ -Мгновенно общайтесь по электронной почте +Мгновенно общайтесь по электронной почте. Конфиденциально по дизайну. diff --git a/metadata/ru/title.txt b/metadata/ru/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/ru/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/zh-CN/changelogs/6444.txt b/metadata/zh-CN/changelogs/6444.txt new file mode 100644 index 000000000..6bb5cf753 --- /dev/null +++ b/metadata/zh-CN/changelogs/6444.txt @@ -0,0 +1,10 @@ +当传统电子邮件用户向群组发送邮件并添加新收件人时,这些新收件人将成为群组成员。 +将来自传统电子邮件用户的附带PGP密钥视为倾向于互相加密的信号。 +将来自传统电子邮件用户的加密或签名消息视为倾向于互相加密的信号。 +修复旧数据库的迁移问题。 +修复:仅在聊天已被其他成员知晓的情况下发送临时计时器变更消息。 +修复:使用相对路径访问数据库,以避免在迁移到其他设备或路径时出现问题。 +修复通过SOCKS5的IMAP连接的读写超时问题。 +修复:如果没有修改任何字符,则不发送“群组名称变更”信息。 +新增希腊语翻译,更新其他语言翻译。 +更新至core104版本。 diff --git a/metadata/zh-CN/changelogs/6464.txt b/metadata/zh-CN/changelogs/6464.txt new file mode 100644 index 000000000..c84a00a2c --- /dev/null +++ b/metadata/zh-CN/changelogs/6464.txt @@ -0,0 +1,13 @@ +修复:使归档的对话可见,这些对话不会自动解除归档(静音的对话):添加未读计数器并将归档移至顶部 +修复:直接发送AVIF、HEIC、TXT、PPT、XLS、XML等格式的文件,不进行转换 +修复:当获取现有消息失败时触发重新连接 +修复:在消息获取失败后不再重试,以防止无限重新连接循环 +修复:如果消息已加密但未签名,不再添加错误提示 +修复:不再从消息行首删除前导空格 +修复发送引用文本时的边缘情况问题 +修复STARTTLS连接问题 +修复:不将无效的电子邮件地址视为异常处理 +修复:及时清理在1.34.8版本中引入的相对数据库路径问题 +加快聊天列表和联系人列表的更新速度 +更新翻译 +更新至core106版本 diff --git a/metadata/zh-CN/changelogs/6494.txt b/metadata/zh-CN/changelogs/6494.txt new file mode 100644 index 000000000..b23796a12 --- /dev/null +++ b/metadata/zh-CN/changelogs/6494.txt @@ -0,0 +1,5 @@ +* 在“添加账户”和“配置”中增加SOCKS5代理选项 +* 引入DNS缓存功能:如果网络中的DNS服务停止工作,Delta Chat仍能通过使用先前的IP地址成功连接到IMAP服务器 +* 显示完整邮件内容:不自动加载远程内容以请求 +* 修复多种错误并增强日志记录功能 +* 更新翻译内容 diff --git a/metadata/zh-CN/changelogs/6504.txt b/metadata/zh-CN/changelogs/6504.txt new file mode 100644 index 000000000..4be5f5291 --- /dev/null +++ b/metadata/zh-CN/changelogs/6504.txt @@ -0,0 +1,8 @@ +* 添加第二台设备到账号的新简便方法:安装后选择“作为第二台设备添加”,然后扫描第一台设备上的二维码 +* 查看所有聊天中的“所有媒体” +* 新增“清空聊天”选项 +* 为所有账号显示通知 +* 在“显示完整消息”中更好地利用深色/浅色模式 +* 在应用信息消息旁显示图标 +* 通过缓存SMTP和IMAP连接的DNS结果以提高对解析中断的处理能力 +* 加速并提升了可靠性的改进与修复 diff --git a/metadata/zh-CN/changelogs/6514.txt b/metadata/zh-CN/changelogs/6514.txt new file mode 100644 index 000000000..d1a5cb170 --- /dev/null +++ b/metadata/zh-CN/changelogs/6514.txt @@ -0,0 +1,8 @@ +* 在使用“设置/添加第二台设备”设置好第二台设备后,添加一条设备添加消息 +* 显著加快“作为第二台设备添加”在接收端的连接时间 +* 如有可能,在扫描“添加第二台设备”二维码后直接显示Wi-Fi名称 +* 修复“添加第二台设备”立即重启的问题 +* 修复:在“所有媒体”视图中不只显示已删除的媒体 +* 修复:在“添加第二台设备”后如有需要则更新数据库 +* 更新翻译内容和本地帮助文档 +* 更新至core112.6版本 diff --git a/metadata/zh-CN/changelogs/6534.txt b/metadata/zh-CN/changelogs/6534.txt new file mode 100644 index 000000000..c3ee16c7a --- /dev/null +++ b/metadata/zh-CN/changelogs/6534.txt @@ -0,0 +1,6 @@ +* 根据系统主题自动选择浅色/深色模式启动 +* 修复一对一聊天中的验证图标问题 +* 修正因在长IMAP响应中错误的EOF检测导致的获取错误 +* 更多错误修复 +* 更新翻译内容和本地帮助文档 +* 更新至core112.7版本 diff --git a/metadata/zh-CN/changelogs/6544.txt b/metadata/zh-CN/changelogs/6544.txt new file mode 100644 index 000000000..7836dbb48 --- /dev/null +++ b/metadata/zh-CN/changelogs/6544.txt @@ -0,0 +1,4 @@ +* 将SOCKS5配置来也用来加载HTML邮件中的远程图片 +* 错误修复 +* 更新翻译内容和本地帮助文档 +* 更新至core112.8版本 diff --git a/metadata/zh-CN/changelogs/6584.txt b/metadata/zh-CN/changelogs/6584.txt new file mode 100644 index 000000000..7b9c6ff4c --- /dev/null +++ b/metadata/zh-CN/changelogs/6584.txt @@ -0,0 +1,6 @@ +* 新的Webxdc API:importFiles()和sendToChat() +* 移除附件的大小限制 +* 节省流量和存储空间:对大的PNG及其他受支持的图像格式进行重新编码(大的JPEG文件一直都会被重新编码;以“文件”形式发送的图像仍不会被重新编码或以其他方式改变) +* 节省本地存储空间:对数据库中的HTML邮件进行压缩 +* 提升群组成员身份一致性 +* 大量错误修复 diff --git a/metadata/zh-CN/changelogs/6594.txt b/metadata/zh-CN/changelogs/6594.txt new file mode 100644 index 000000000..704d1c78e --- /dev/null +++ b/metadata/zh-CN/changelogs/6594.txt @@ -0,0 +1,5 @@ +* 在可能的情况下,使用图像编辑器来选择头像 +* 改进深色模式下的加载屏幕显示效果 +* 更新“已验证图标” +* 添加卢尔语(Luri) 巴克提尔利语(Bakhtiari)语翻译,更新其他语言翻译 +* 大量错误修复 diff --git a/metadata/zh-CN/changelogs/6600.txt b/metadata/zh-CN/changelogs/6600.txt new file mode 100644 index 000000000..704d1c78e --- /dev/null +++ b/metadata/zh-CN/changelogs/6600.txt @@ -0,0 +1,5 @@ +* 在可能的情况下,使用图像编辑器来选择头像 +* 改进深色模式下的加载屏幕显示效果 +* 更新“已验证图标” +* 添加卢尔语(Luri) 巴克提尔利语(Bakhtiari)语翻译,更新其他语言翻译 +* 大量错误修复 diff --git a/metadata/zh-CN/changelogs/6744.txt b/metadata/zh-CN/changelogs/6744.txt new file mode 100644 index 000000000..7835ccb98 --- /dev/null +++ b/metadata/zh-CN/changelogs/6744.txt @@ -0,0 +1,6 @@ +- 现在一对一聊天为保证了端到端的加密的联系人使用绿色对勾标记 +- 为了简化每个人的体验,我们也用绿色对勾标记这些聊天 +- 如有可能,群聊会自动创建并尽可能保证端到端的加密 +- 接受/屏蔽、已存档、置顶、静音状态在您所有设备间同步 +- 相机、语音消息、备份全部、屏幕阅读器、每个账户单独的壁纸、相册全选、Webxdc横屏模式等方面有更多的改进 +- 大量的错误修复 diff --git a/metadata/zh-CN/changelogs/6754.txt b/metadata/zh-CN/changelogs/6754.txt new file mode 100644 index 000000000..7835ccb98 --- /dev/null +++ b/metadata/zh-CN/changelogs/6754.txt @@ -0,0 +1,6 @@ +- 现在一对一聊天为保证了端到端的加密的联系人使用绿色对勾标记 +- 为了简化每个人的体验,我们也用绿色对勾标记这些聊天 +- 如有可能,群聊会自动创建并尽可能保证端到端的加密 +- 接受/屏蔽、已存档、置顶、静音状态在您所有设备间同步 +- 相机、语音消息、备份全部、屏幕阅读器、每个账户单独的壁纸、相册全选、Webxdc横屏模式等方面有更多的改进 +- 大量的错误修复 diff --git a/metadata/zh-CN/changelogs/6774.txt b/metadata/zh-CN/changelogs/6774.txt new file mode 100644 index 000000000..7c5d1a43b --- /dev/null +++ b/metadata/zh-CN/changelogs/6774.txt @@ -0,0 +1,6 @@ +- 在设备间同步“您的个人资料名称”、“显示组邮件”和“阅读回执”选项的更改 +- 取消对.xdc文件大小的接收方限制 +- 修复针对如163.com等提供商的登录错误 +- 修复在使用多个私钥时的解密错误 +- 修复在webxdc更新时的数据库锁定错误 +- 更新翻译内容 diff --git a/metadata/zh-CN/changelogs/6804.txt b/metadata/zh-CN/changelogs/6804.txt new file mode 100644 index 000000000..d5ff2f218 --- /dev/null +++ b/metadata/zh-CN/changelogs/6804.txt @@ -0,0 +1,8 @@ +- "反应功能":长按消息以作出回应 +- 如果无法扫描二维码,可以将它们分享为“邀请链接” +- 现在,所有账户的未读消息会被计数并在标题中显示 +- 移除了Webxdc的发送限制 +- 长按聊天列表项现在可以直接使聊天静音/取消静音 +- 在打开“密码与账户”前,会要求输入系统解锁密码 +- 新选项:“设置/高级/读取系统通讯录” +- 大量错误修复 diff --git a/metadata/zh-CN/full_description.txt b/metadata/zh-CN/full_description.txt new file mode 100644 index 000000000..207a69294 --- /dev/null +++ b/metadata/zh-CN/full_description.txt @@ -0,0 +1,16 @@ +Delta Chat 是一款完全兼容现有电子邮件基础设施的即时通讯应用程序。 + +因此,使用 Delta Chat,您既能享受到知名即时通讯软件的便捷性,又能拥有电子邮件的广泛可达性。此外,您将独立于其他公司或服务——因为您的数据不依赖于 Delta Chat,您在这里也不会增加新的依赖关系。 + +部分功能亮点包括: + +* 安全性:自动端到端加密,并支持最新的Autocrypt标准 +* 速度:通过Push-IMAP技术实现快速通信 +* 最大用户基数:未使用 Delta Chat 的接收者也能顺利接收到信息 +* 兼容性强:不仅限于 Delta Chat 用户之间的交流 +* 优雅且简单的用户界面 +* 分布式系统 +* 无垃圾邮件:默认仅显示已知联系人的消息 +* 可靠性高:适合专业用途 +* 值得信赖:可用于商业信息交流 +* 完全开源且基于标准构建 diff --git a/metadata/zh-CN/short_description.txt b/metadata/zh-CN/short_description.txt index 2e155880a..37cebb4b2 100644 --- a/metadata/zh-CN/short_description.txt +++ b/metadata/zh-CN/short_description.txt @@ -1 +1 @@ -通过电子邮件进行即时通信 +通过电子邮件进行即时通信。经典优雅,去中心化且开源。保护隐私。 diff --git a/metadata/zh-CN/title.txt b/metadata/zh-CN/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/zh-CN/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/metadata/zh-TW/short_description.txt b/metadata/zh-TW/short_description.txt index 7b2b6d58b..4d9659779 100644 --- a/metadata/zh-TW/short_description.txt +++ b/metadata/zh-TW/short_description.txt @@ -1 +1 @@ -通過電子郵件即時通信 +透過電子郵件聊天。優雅復古、去中心化而且開源。隱私設計。 diff --git a/metadata/zh-TW/title.txt b/metadata/zh-TW/title.txt new file mode 100644 index 000000000..97cecc272 --- /dev/null +++ b/metadata/zh-TW/title.txt @@ -0,0 +1 @@ +Delta Chat diff --git a/res/drawable-hdpi/ic_location_on_white_48dp.png b/res/drawable-hdpi/ic_location_on_white_48dp.png deleted file mode 100755 index d226e78f1..000000000 Binary files a/res/drawable-hdpi/ic_location_on_white_48dp.png and /dev/null differ diff --git a/res/drawable-hdpi/ic_timeline.png b/res/drawable-hdpi/ic_timeline.png deleted file mode 100755 index ec39d34d8..000000000 Binary files a/res/drawable-hdpi/ic_timeline.png and /dev/null differ diff --git a/res/drawable-xhdpi/ic_timeline.png b/res/drawable-xhdpi/ic_timeline.png deleted file mode 100755 index 35bbcf599..000000000 Binary files a/res/drawable-xhdpi/ic_timeline.png and /dev/null differ diff --git a/res/drawable-xxhdpi/ic_timeline.png b/res/drawable-xxhdpi/ic_timeline.png deleted file mode 100755 index b151d978a..000000000 Binary files a/res/drawable-xxhdpi/ic_timeline.png and /dev/null differ diff --git a/res/drawable-xxxhdpi/ic_timeline.png b/res/drawable-xxxhdpi/ic_timeline.png deleted file mode 100755 index bfe700020..000000000 Binary files a/res/drawable-xxxhdpi/ic_timeline.png and /dev/null differ diff --git a/res/drawable/circle_touch_highlight_background_map.xml b/res/drawable/circle_touch_highlight_background_map.xml deleted file mode 100644 index b610f0adb..000000000 --- a/res/drawable/circle_touch_highlight_background_map.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/drawable/divider_end.xml b/res/drawable/divider_end.xml deleted file mode 100644 index 553712883..000000000 --- a/res/drawable/divider_end.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/res/drawable/divider_start.xml b/res/drawable/divider_start.xml deleted file mode 100644 index 45500503b..000000000 --- a/res/drawable/divider_start.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - diff --git a/res/drawable/ic_location_dot.xml b/res/drawable/ic_location_dot.xml deleted file mode 100644 index 7426bb67b..000000000 --- a/res/drawable/ic_location_dot.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/res/drawable/ic_location_poi_dot.xml b/res/drawable/ic_location_poi_dot.xml deleted file mode 100644 index 81e5bf15e..000000000 --- a/res/drawable/ic_location_poi_dot.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/res/drawable/intro1.png b/res/drawable/intro1.png deleted file mode 100644 index d44d2f9c8..000000000 Binary files a/res/drawable/intro1.png and /dev/null differ diff --git a/res/drawable/map_bubble_add_poi.xml b/res/drawable/map_bubble_add_poi.xml deleted file mode 100644 index ea2836da5..000000000 --- a/res/drawable/map_bubble_add_poi.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/activity_map.xml b/res/layout/activity_map.xml deleted file mode 100644 index 940c3f623..000000000 --- a/res/layout/activity_map.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - diff --git a/res/layout/add_poi_view.xml b/res/layout/add_poi_view.xml deleted file mode 100644 index 6f6e59398..000000000 --- a/res/layout/add_poi_view.xml +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/res/layout/bottom_map_sheet.xml b/res/layout/bottom_map_sheet.xml deleted file mode 100644 index 1d1868ade..000000000 --- a/res/layout/bottom_map_sheet.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/layout/map_bubble_layout.xml b/res/layout/map_bubble_layout.xml deleted file mode 100644 index 8b4b5a00d..000000000 --- a/res/layout/map_bubble_layout.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/res/menu/conversation_list.xml b/res/menu/conversation_list.xml deleted file mode 100644 index 072990723..000000000 --- a/res/menu/conversation_list.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/res/menu/conversation_list_batch_archive.xml b/res/menu/conversation_list_batch_archive.xml deleted file mode 100644 index 678ebc1c5..000000000 --- a/res/menu/conversation_list_batch_archive.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/menu/conversation_list_batch_pin.xml b/res/menu/conversation_list_batch_pin.xml deleted file mode 100644 index 36236cfc0..000000000 --- a/res/menu/conversation_list_batch_pin.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/menu/conversation_list_batch_unarchive.xml b/res/menu/conversation_list_batch_unarchive.xml deleted file mode 100644 index 835f26eac..000000000 --- a/res/menu/conversation_list_batch_unarchive.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/menu/qr_scan.xml b/res/menu/qr_scan.xml deleted file mode 100644 index a6ee5a836..000000000 --- a/res/menu/qr_scan.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml deleted file mode 100644 index 03e7c3761..000000000 --- a/res/values-hu/strings.xml +++ /dev/null @@ -1,311 +0,0 @@ - - - - Delta Chat - OK - Mégse - Igen - Nem - Be - Ki - Alapértelmezett - Egyéni - Egyik sem - Automatikus - Szigorú - Megnyitás - Törlés - Infó - Emoji - Továbbítás - Némítás - Eltűnő üzenetek - Mentés - Média - Most nem - Soha - Egy pillanat... - Kész - Visszavonás - - Tovább - Hiba - Hiba: %1$s - Nincs böngésző telepítve. - %1$s nem található. - Vágólapra másolva. - Partnerek - E-mail cím - Rossz e-mail cím. - Jelszó - Most - Ma - Tegnap - Ezen a héten - Ebben a hónapban - Múlt héten - Múlt hónapban - - - %d perce - %d perce - - - - %d órája - %d órája - - - %d beszélgetés - %d beszélgetés - - - %d partner - %d partner - - - %d üzenet - %d üzenet - - - %d tag - %d tag - - Én - Piszkozat - Kép - Gif - Képek - Hang - Hangüzenet - Továbbított üzenet - Videó - Dokumentumok - Névjegy - Kamera - Hely - Galéria - Fájl - Ismeretlen - - Zöld - Piros - Kék - Narancs - Cián - Lila - Magenta - Fehér - - Kicsi - Normál - Nagy - Nagyon nagy - - Gyors - Lassú - - - Új partner - Új beszélgetés - Új csoport - Küldés - Emoji billentyűzet kapcsoló - Csoport szerkesztése - Csoportnév és -kép - Minden hely megjelenítése - Beszélgetés archiválása - Archiválás visszavonása - Fájl csatolása - Csoport elhagyása - Beszélgetés törlése - Üzenetek törlése - Törlöd ezt a helyszínt? - Üzenet részletei - Vágólapra másolás - Üzenet továbbítása - Válasz az üzenetre - Értesítések némítása - Némítás kikapcsolása - Csatolmány exportálása - Minden média - Megosztás - Partner letiltása - Tiltás visszavonása - Lejátszás - Szünet - Ugrás az aljára - Ugrás a tetejére - Segítség - Összes kiválasztása - Név módosítása - Beállítások - Haladó - Profil megtekintése - Naplófájl mentése - Hely megosztása a csoport összes tagjával - Némítás 1 órára - Némítás 2 órára - Némítás 1 napra - Némítás 7 napra - Némítás örökre - - 5 percig - 30 percig - 1 óráig - 2 óráig - 6 óráig - - - Biztosan ki akarsz lépni a csoportból? - Továbbítod az üzenetet %1$s részére? - Beszélgetést indítasz %1$s partnerrel? - - Kiveszed a csoportból %1$s partnert? - - Kontaktok - Még nincs partner. - - - - - %d beszélgetés archiválva - %d beszélgetés archiválva - - Archivált beszélgetések - - %d új üzenet - %d új üzenet - - Írj egy kezdőüzenetet, hogy a többiek válaszolhassanak a csoportban.\n\n• Nincs gond, ha nem használja minden tag a Delta Chatet.\n\n• Az első üzenet kézbesítése kicsit lassabb lehet. - Visszavonás csúsztatással - Üres a postaláda.\nNyomd meg a \"+\" gombot új beszélgetés indításához. - Minden csevegés archiválva van.\nNyomd meg a \"+\" gombot új beszélgetés indításához. - Megosztás - Üzenet - Archivált - Nincs üzenet. - Magamnak küldött üzenetek - - Keresés - - Csoportnév - Csoportkép - Csoport készítése - Nevezd el a csoportot. - Tagok felvétele - A csoport tagjának kell lenned, hogy ezt megtehesd. - Titkosítás - Névjegy - Csoport - Galéria - Dokumentumok - Linkek - Térkép - Média előnézete - Ismert e-mail szolgáltató esetén az alábbi beállításokat automatikusan meghatározzuk. Előfordulhat, hogy az IMAP/SMTP szolgáltatást az email fiókod webes felületén engedélyezni kell.\n\nHa nem megy, kérj segítséget a szolgáltatótól vagy a barátaidtól. - Bejövő - IMAP bejelentkezési név - IMAP kiszolgáló - IMAP port - IMAP biztonság - Kimenő - SMTP bejelentkezési név - SMTP jelszó - SMTP kiszolgáló - SMTP port - Biztonsági mentés importálása - - - Továbbítás… - Profilod adatai - Profilkép - Letiltott partnerek - Neved - - A Delta Chat Messengeremmel küldtem: https://delta.chat - Küldés \"enterrel\" - Rezgés - Képernyőbiztonság - - Képernyőképek készítésének blokkolása a futó alkalmazások listájában és az alkalmazáson belül - Értesítések - Megjelenítés - Prioritás - LED színe - Hang - Csendes - Privacy - Csevegések és média - Alapbeállítás - - Világos - Sötét - Megjelenés - Sötét - Nyelv - Inkognitó billentyűzet - - Tanulás letiltásának kérése a billentyűzettől (személyre szabás kikapcsolása) - Olvasási nyugták - Ha az olvasási nyugták le vannak tiltva, te sem fogod látni mások olvasási nyugtáit. - Privát kulcsok kezelése - Rendszer emojik használata - A Delta Chat beépített emoji-támogatásának letiltása - Alkalmazás hozzáférés - Csevegések - Csevegésen belüli hangok - Üzenetek betűmérete - Egyéb - Biztonsági mentés - Privát kulcsok kezelése - Privát kulcsok exportálása - Privát kulcsok importálása - - Beszélgetés háttere - Galériából - Mind - Újra - - QR-kód - QR-kód olvasása - Ujjlenyomat. - %1$s csatlakozik. - %1$s ellenőrizve. - %1$s csatlakozott a csoporthoz. - %1$s ellenőrizve. - %1$s nem ellenőrizhető - Válasz - Új üzenet - Magas - Hangjelzés legfeljebb - Név és üzenet - Csak név - Se név, se üzenet - - Engedély szükséges - Folytatás - - Titkosított üzenet - - Üdvözöl a Delta Chat! - Válassz nyelvet... - Fájl - Kilépés - Szerkesztés - Visszavonás - Újra - Kivágás - Másolás - Beillesztés - Nézet - Súgó - Válassz ki egy beszélgetést vagy indíts egy újat - További információ - Eltávolítás - Mentés - Név - Biztonsági mentés exportálása - Naplófájlok könyvtárának megnyitása - Jelenlegi naplófájl megnyitása - diff --git a/scripts/add-language.sh b/scripts/add-language.sh index c44b4fb77..57fe38791 100755 --- a/scripts/add-language.sh +++ b/scripts/add-language.sh @@ -7,18 +7,19 @@ then fi LANG=$1 +RES=src/main/res -mkdir res/values-$LANG/ +mkdir $RES/values-$LANG/ -cp res/values/strings.xml res/values-$LANG/strings.xml +cp $RES/values/strings.xml $RES/values-$LANG/strings.xml # set time to old date because transifex may have different file times # and does not overwrite old file # (using -t as sth. as -d "100 days ago" does not work on mac) -touch -t 201901010000 res/values-$LANG/strings.xml +touch -t 201901010000 $RES/values-$LANG/strings.xml -echo "res/values-$LANG/strings.xml added:" -echo "- add the name to res/values/arrays.xml" +echo "$RES/values-$LANG/strings.xml added:" +echo "- add the name to $RES/values/arrays.xml" echo "- if needed, language mappings can be added to .tx/config" echo "- pull translations using ./scripts/tx-pull-translations.sh" echo " (on problems, 'tx -d pull' gives verbose output)" diff --git a/scripts/check-translations.sh b/scripts/check-translations.sh index 501caeb89..ffe5abd7d 100755 --- a/scripts/check-translations.sh +++ b/scripts/check-translations.sh @@ -1,20 +1,22 @@ echo potential errors, if any: +RES=./src/main/res + # a space after the percent sign # results in an IllegalFormatException in getString() -grep --include='strings.xml' -r '\% [12]' ./res/ -grep --include='strings.xml' -r '\%[$]' ./res/ -grep --include='strings.xml' -r '\$ ' ./res/ -grep --include='strings.xml' -r ' \$' ./res/ +grep --include='strings.xml' -r '\% [12]' $RES +grep --include='strings.xml' -r '\%[$]' $RES +grep --include='strings.xml' -r '\$ ' $RES +grep --include='strings.xml' -r ' \$' $RES # check for broken usage of escape sequences: # - alert on `\ n`, `\ N`, `\n\Another paragraph` and so on # - allow only `\n`, `\"`, `\'` and `\’` # (`’` might not be escaped, but it is done often eg. in "sq", so we allow that for now) -grep --include='strings.xml' -r "\\\\[^n\"'’]" ./res/ +grep --include='strings.xml' -r "\\\\[^n\"'’]" $RES # check for usage of a single `&` - this has to be an `&` -grep --include='strings.xml' -r "&[^a]" ./res/ +grep --include='strings.xml' -r "&[^a]" $RES # single
is not needed - and not allowed in xml, leading to error "matching end tag missing" -grep --include='strings.xml' -r "" exit fi @@ -16,5 +16,9 @@ grep --exclude=*.strings --exclude-dir={.git,libraries,Pods,deltachat-ios.xcodep echo "==================== DESKTOP USAGE ====================" grep --exclude-dir={.cache,.git,html-dist,node_modules,_locales} -ri $TEXT ../deltachat-desktop/ -echo "==================== NODE USAGE ====================" -grep --exclude-dir={.git} -ri $TEXT ../deltachat-core-rust/node +echo "==================== JSONRPC USAGE ====================" +grep --exclude-dir={.git} -ri $TEXT ../deltachat-core-rust/deltachat-jsonrpc + +echo "==================== UBUNTU TOUCH USAGE ====================" +grep --exclude-dir={.git} -ri $TEXT ../deltatouch/ + diff --git a/scripts/ndk-make.sh b/scripts/ndk-make.sh index bd7820734..a874ad103 100755 --- a/scripts/ndk-make.sh +++ b/scripts/ndk-make.sh @@ -33,7 +33,7 @@ # deploy DeltaChat from the jni/deltachat-core-rust directory by # typing `nmake`: # -# nmake() {(cd ../..; scripts/ndk-make.sh arm64-v8a && ./gradlew installFatDebug; notify-send "install finished")} +# nmake() {(cd ../..; scripts/ndk-make.sh arm64-v8a && ./gradlew installFossDebug; notify-send "install finished")} # # # If anything doesn't work, please open an issue!! diff --git a/scripts/rust-toolchain b/scripts/rust-toolchain index 0834888f5..79e15fd49 100644 --- a/scripts/rust-toolchain +++ b/scripts/rust-toolchain @@ -1 +1 @@ -1.72.0 +1.77.0 diff --git a/scripts/tx-pull-source.sh b/scripts/tx-pull-source.sh index 247ca5a82..6bf99aa16 100755 --- a/scripts/tx-pull-source.sh +++ b/scripts/tx-pull-source.sh @@ -1,4 +1,5 @@ +RES=src/main/res tx pull -l en -mv res/values-en/strings.xml res/values/strings.xml -rmdir res/values-en +mv $RES/values-en/strings.xml $RES/values/strings.xml +rmdir $RES/values-en ./scripts/check-translations.sh diff --git a/scripts/tx-push-source.sh b/scripts/tx-push-source.sh index 6c6e5c81a..10fe83bc2 100755 --- a/scripts/tx-push-source.sh +++ b/scripts/tx-push-source.sh @@ -1,3 +1,3 @@ -read -p "Push res/values/strings.xml to transifex? Press ENTER to continue, CTRL-C to abort." +read -p "Push src/main/res/values/strings.xml to transifex? Press ENTER to continue, CTRL-C to abort." tx push -s ./scripts/check-translations.sh diff --git a/scripts/upload-beta.sh b/scripts/upload-beta.sh index 3e95245db..2c094a809 100755 --- a/scripts/upload-beta.sh +++ b/scripts/upload-beta.sh @@ -15,7 +15,7 @@ if [[ ${VERSION:0:1} == "v" ]]; then fi APKGPLAY="gplay/release/deltachat-gplay-release-$VERSION.apk" -APKDEV="build/outputs/apk/fat/debug/deltachat-fat-debug-$VERSION.apk" +APKDEV="build/outputs/apk/foss/debug/deltachat-foss-debug-$VERSION.apk" ls -l $APKGPLAY ls -l $APKDEV read -p "upload these apks to download.delta.chat/android/beta? ENTER to continue, CTRL-C to abort." @@ -28,7 +28,7 @@ echo "upload done." echo "" echo "and now: here is Delta Chat $VERSION - choose your flavour and mind your backups:" echo "- 🍋 https://download.delta.chat/android/beta/deltachat-gplay-release-$VERSION.apk (android, overwrites existing gplay installs, should keep data)" -echo "- 🍉 https://download.delta.chat/android/beta/deltachat-fat-debug-$VERSION.apk (android, can be installed beside gplay)" +echo "- 🍉 https://download.delta.chat/android/beta/deltachat-foss-debug-$VERSION.apk (android, fully FOSS, can be installed beside gplay)" echo "- 🍏 https://testflight.apple.com/join/uEMc1NxS (ios, update to $VERSION may take a day or so)" echo "" echo "what to test: PLEASE_FILL_OUT" diff --git a/androidTest/com/b44t/messenger/TestUtils.java b/src/androidTest/java/com/b44t/messenger/TestUtils.java similarity index 100% rename from androidTest/com/b44t/messenger/TestUtils.java rename to src/androidTest/java/com/b44t/messenger/TestUtils.java diff --git a/androidTest/com/b44t/messenger/uibenchmarks/EnterChatsBenchmark.java b/src/androidTest/java/com/b44t/messenger/uibenchmarks/EnterChatsBenchmark.java similarity index 100% rename from androidTest/com/b44t/messenger/uibenchmarks/EnterChatsBenchmark.java rename to src/androidTest/java/com/b44t/messenger/uibenchmarks/EnterChatsBenchmark.java diff --git a/androidTest/com/b44t/messenger/uitests/offline/ForwardingTest.java b/src/androidTest/java/com/b44t/messenger/uitests/offline/ForwardingTest.java similarity index 100% rename from androidTest/com/b44t/messenger/uitests/offline/ForwardingTest.java rename to src/androidTest/java/com/b44t/messenger/uitests/offline/ForwardingTest.java diff --git a/androidTest/com/b44t/messenger/uitests/offline/SharingTest.java b/src/androidTest/java/com/b44t/messenger/uitests/offline/SharingTest.java similarity index 100% rename from androidTest/com/b44t/messenger/uitests/offline/SharingTest.java rename to src/androidTest/java/com/b44t/messenger/uitests/offline/SharingTest.java diff --git a/androidTest/com/b44t/messenger/uitests/online/OnboardingTest.java b/src/androidTest/java/com/b44t/messenger/uitests/online/OnboardingTest.java similarity index 100% rename from androidTest/com/b44t/messenger/uitests/online/OnboardingTest.java rename to src/androidTest/java/com/b44t/messenger/uitests/online/OnboardingTest.java diff --git a/src/com/b44t/messenger/DcArray.java b/src/com/b44t/messenger/DcArray.java deleted file mode 100644 index c9d50ccb9..000000000 --- a/src/com/b44t/messenger/DcArray.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.b44t.messenger; - -public class DcArray { - - public DcArray(long arrayCPtr) { - this.arrayCPtr = arrayCPtr; - } - - @Override protected void finalize() throws Throwable { - super.finalize(); - unrefArrayCPtr(); - arrayCPtr = 0; - } - - public native int getCnt (); - public native float getLatitude (int index); - public native float getLongitude (int index); - public native float getAccuracy (int index); - public native long getTimestamp (int index); - public native int getMsgId (int index); - public native int getLocationId(int index); - public native String getMarker (int index); - public native boolean isIndependent(int index); - - // working with raw c-data - private long arrayCPtr; // CAVE: the name is referenced in the JNI - private native void unrefArrayCPtr(); -} diff --git a/src/debug/README.md b/src/debug/README.md deleted file mode 100644 index a259be6c6..000000000 --- a/src/debug/README.md +++ /dev/null @@ -1,12 +0,0 @@ -the main purpose of this directory is -to define a different ic_launcher icon for the build-type 'debug'. - -the build-process seems to prefer files from /src/debug/res -over the ones from the /res, not totally sure, however, it -works :) - -btw the dev-icon is not available as vector graphic, -the original source is in xxhdpi - -all other resolutions are just scaled with gimp. - -via http://onebigfunction.com/android/2016/10/06/flavor-flav-android-product-flavors-explained/ diff --git a/src/foss/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java b/src/foss/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java new file mode 100644 index 000000000..3aa3584cd --- /dev/null +++ b/src/foss/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java @@ -0,0 +1,15 @@ +package org.thoughtcrime.securesms.notifications; + +import android.content.Context; +import androidx.annotation.Nullable; + +/* + Fake do-nothing implementation of FcmReceiveService. + The real implementation is in the gplay flavor only. +*/ +public class FcmReceiveService { + public static void register(Context context) {} + public static void waitForRegisterFinished() {} + public static void deleteToken() {} + @Nullable public static String getToken() { return null; } +} diff --git a/src/gplay/AndroidManifest.xml b/src/gplay/AndroidManifest.xml new file mode 100644 index 000000000..f2f978857 --- /dev/null +++ b/src/gplay/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gplay/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java b/src/gplay/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java new file mode 100644 index 000000000..b8e6bbbf0 --- /dev/null +++ b/src/gplay/java/org/thoughtcrime/securesms/notifications/FcmReceiveService.java @@ -0,0 +1,132 @@ +package org.thoughtcrime.securesms.notifications; + +import android.content.Context; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.annotation.WorkerThread; + +import com.google.android.gms.tasks.Tasks; +import com.google.firebase.FirebaseApp; +import com.google.firebase.messaging.FirebaseMessaging; +import com.google.firebase.messaging.FirebaseMessagingService; +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.util.Util; + +public class FcmReceiveService extends FirebaseMessagingService { + private static final String TAG = FcmReceiveService.class.getSimpleName(); + private static final Object INIT_LOCK = new Object(); + private static boolean initialized; + private static volatile boolean triedRegistering; + private static volatile String prefixedToken; + + public static void register(Context context) { + if (Build.VERSION.SDK_INT < 19) { + Log.w(TAG, "FCM not available on SDK < 19"); + triedRegistering = true; + return; + } + + if (FcmReceiveService.prefixedToken != null) { + Log.i(TAG, "FCM already registered"); + triedRegistering = true; + return; + } + + Util.runOnAnyBackgroundThread(() -> { + final String rawToken; + + try { + synchronized (INIT_LOCK) { + if (!initialized) { + // manual init: read tokens from `./google-services.json`; + // automatic init disabled in AndroidManifest.xml to skip FCM code completely. + FirebaseApp.initializeApp(context); + } + initialized = true; + } + rawToken = Tasks.await(FirebaseMessaging.getInstance().getToken()); + } catch (Exception e) { + // we're here usually when FCM is not available and initializeApp() or getToken() failed. + Log.w(TAG, "cannot get FCM token for " + BuildConfig.APPLICATION_ID + ": " + e); + triedRegistering = true; + return; + } + if (TextUtils.isEmpty(rawToken)) { + Log.w(TAG, "got empty FCM token for " + BuildConfig.APPLICATION_ID); + triedRegistering = true; + return; + } + + prefixedToken = addPrefix(rawToken); + Log.i(TAG, "FCM token: " + prefixedToken); + ApplicationContext.dcAccounts.setPushDeviceToken(prefixedToken); + triedRegistering = true; + }); + } + + // wait a until FCM registration got a token or not. + // we're calling register() pretty soon and getToken() pretty late on init, + // so usually, this should not block anything. + // still, waitForRegisterFinished() needs to be called from a background thread. + @WorkerThread + public static void waitForRegisterFinished() { + while (!triedRegistering) { + Util.sleep(100); + } + } + + private static String addPrefix(String rawToken) { + return "fcm-" + BuildConfig.APPLICATION_ID + ":" + rawToken; + } + + @Nullable + public static String getToken() { + return prefixedToken; + } + + public static void deleteToken() { + if (prefixedToken == null) { + Log.i(TAG, "FCM not registered yet, no token to delete"); + return; + } + + Util.runOnAnyBackgroundThread(() -> { + try { + Tasks.await(FirebaseMessaging.getInstance().deleteToken()); + prefixedToken = null; + Log.i(TAG, "FCM token deleted for " + BuildConfig.APPLICATION_ID); + } catch (Exception e) { + Log.e(TAG, "cannot delete FCM token for " + BuildConfig.APPLICATION_ID + ": " + e); + } + }); + } + + @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. + } + + @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. + } + + @Override + public void onNewToken(@NonNull String rawToken) { + prefixedToken = addPrefix(rawToken); + Log.i(TAG, "new FCM token: " + prefixedToken); + ApplicationContext.dcAccounts.setPushDeviceToken(prefixedToken); + } +} diff --git a/AndroidManifest.xml b/src/main/AndroidManifest.xml similarity index 91% rename from AndroidManifest.xml rename to src/main/AndroidManifest.xml index 815945e6e..fcb8b31af 100644 --- a/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -37,6 +37,9 @@ + + + - - - - - - + android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/> + + + + + + + + + + + + + - - @@ -382,6 +398,17 @@ + + + + + + +
  • Jak najít lidi k hovoru?
  • Jaké výhody má Delta Chat vzhledem k ostatním četovacím systémům?
  • -
  • Jaké zprávy Delta Chat zobrazuje?
  • What if I expect a message from someone I didn’t write to in the past?
  • Podporuje Delta Chat obrázky, videa a jiné přílohy?
  • -
  • How can I add or switch between multiple accounts?
  • +
  • What are profiles? How can I switch between them?
  • Kdo uvidí můj profilový obrázek?
  • -
  • Umí Delta Chat pracovat s e-maily v HTML?
  • -
  • Proč musím Delta Chatu zadat mé e-mailové heslo? Je to bezpečné?
  • -
  • Jaká oprávnění Delta Chat potřebuje?
  • -
  • What means Pinning, Muting, Archiving?
  • +
  • Can I set a Signature Text/Status/Motto with Delta Chat?
  • +
  • What do Pinning, Muting and Archiving mean?
  • What does the green dot mean?
  • -
  • How can I delete my account?
  • +
  • How do disappearing messages work?
  • Skupiny @@ -28,6 +25,15 @@
  • What happens if I turn on “Delete old messages from device”?
  • +
  • Instant message delivery and Push Notifications + +
  • Encryption and Security
  • Více klientů najednou @@ -59,9 +66,6 @@
  • Troubleshooting
  • Manual Transfer
  • Je v plánu vytvořit webovou verzi Delta Chatu?
  • -
  • K čemu je dobré nastavení “Posílat si kopii”?
  • -
  • Proč můžu nastavit sledování složky Odeslané?
  • -
  • Proč mohu zvolit nesledovat složku DeltaChat?
  • webxdc apps @@ -78,17 +82,24 @@
  • How can I share my location with my chat partners?
  • What does the experimental database encryption actually protect?
  • Why can I choose to only watch the DeltaChat folder?
  • -
  • How can I change my account to a different e-mail address?
  • +
  • How can I use a different e-mail address with my profile?
  • Různé
  • @@ -104,8 +115,14 @@ -

    Delta Chat je nový četovací messenger, který posílá zprávy přes e-mail, pokud možno zašifrované metodou Autocrypt. -Netřeba žádného nového účtu. Pro Delta Chat prostě použijete ten, který už máte pro svůj e-mail.

    +

    Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

    + +

    Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

    @@ -117,9 +134,15 @@ -

    Delta Chatem můžete napsat na jakýkoli e-mail i v případě, -že příjemce Delta Chat nepoužívá. Není nutné aby příjemce -instaloval stejnou aplikaci jako vy, jak vyžadují ostatní četovací systémy.

    +

    To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

    + +

    If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

    @@ -130,42 +153,25 @@ instaloval stejnou aplikaci jako vy, jak vyžadují ostatní četovací systémy

      -
    • Independent of any company or services. You own your data.
    • -
    • Your data is not saved on a central server unless all users are using -the same e-mail servers
    • -
    • You do not distribute your address book to anyone.
    • -
    • Fast by the use of Push-IMAP.
    • -
    • Largest userbase - recipients not using Delta Chat can be reached as well.
    • -
    • No Spam - only messages of known users are shown by default.
    • -
    • End-to-end encryption via Autocrypt.
    • -
    • Copyleft and Standards based libre software.
    • -
    • Flexible identity with built-in support for multiple accounts
    • -
    - -

    - - - Jaké zprávy Delta Chat zobrazuje? - - -

    - -

    By default, Delta Chat shows all e-mails.

    - -

    At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

    - -
      -
    • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
    • -
    • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
    • -
    • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
    • +
    • +

      Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

      +
    • +
    • +

      Pervasive multi-profile and multi-device support on all platforms.

      +
    • +
    • +

      Interactive web apps in chats for gaming and collaboration

      +
    • +
    • +

      Audited end-to-end encryption +safe against network and server attacks.

      +
    • +
    • +

      Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      +

    @@ -207,18 +213,25 @@ receive messages from this person, consider blocking them.

    - How can I add or switch between multiple accounts? + What are profiles? How can I switch between them?

    -

    You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

    -
      -
    • on the menu button and then ‘Switch Account’ (Android and desktop)
    • -
    • or the profile icon and then ‘Add Account’ (iOS)
    • -
    +

    A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

    -

    You may also wish to learn how to add accounts to multiple devices.

    +

    On first installation of Delta Chat a first profile is created.

    + +

    Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

    + +

    You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

    + +

    You may also wish to learn how to use the same profile on multiple devices.

    @@ -244,96 +257,26 @@ nebo přidáš nový vyfocením QR kódu, tyto kontakty automaticky uvidí tvůj

    Profilový obrázek není posílán s každou zprávou, ale dostatečně často k tomu aby tvé kontakty zvuobdrželi obrázek i když začnou používat nové zařízení.

    -

    +

    - Umí Delta Chat pracovat s e-maily v HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

    -

    Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

    +

    Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

    -

    +

    - Proč musím Delta Chatu zadat mé e-mailové heslo? Je to bezpečné? - - -

    - -

    Podobně jako ostatní e-mailové programy, např. Thunderbird nebo Outlook, -program potřebuje heslo k tomu aby mohl posílat e-maily. Samozřejmě, že -heslo je uloženo pouze na tvém přístroji. Heslo je přenášeno pouze při přihlašení -k e-mailovému serveru, který má i beztak přístup k tvým e-mailům.

    - -

    Poskytovatelé e-mailu s podporou OAuth2, např. “gmail.com” či “yandex.ru”, -nepotřebují při přihlašování tvé heslo. V takovém případě je uložen pouze -vygenerovaný přístupový kód.

    - -

    Delta Chat má otevřený zdrojový kód, -ze kterého lze ověřit, že program s osobními daty zachází bezpečně. Jsme rádi -za každou odezvu, která udělá Delta Chat bezpečnější pro všechny.

    - -

    - - - Jaká oprávnění Delta Chat potřebuje? - - -

    - -

    Dle užívaného operačního systému můžeš být -dotázán na udělení povolení této aplikaci. -Zde je co Delta Chat dělá s těmito povoleními:

    - -
      -
    • Kamera (může být zakázána) -
        -
      • fotit a filmovat: zasílat Fotky
      • -
      -
    • -
    • Kontakty (mohou být zakázané) -
        -
      • číst tvé kontakty: objevovat kontakty pro hovory
      • -
      -
    • -
    • Poloha (může být zakázaná) -
        -
      • přístup k přibližné poloze (poloha z GSM sítě): pro funkci “vysílání” polohy
      • -
      • přístup k přesné poloze (poloha z GPS a sítě GSM): pro funkci “vysílání” polohy
      • -
      -
    • -
    • Mikrofon (může být zakázaný) -
        -
      • nahrávat zvuk: pro hlasové zprávy
      • -
      -
    • -
    • Úložiště (může být zakázané) -
        -
      • upravovat a mazat obsah tvé SD karty: stahování příloh zpráv
      • -
      • číst obsah tvé SD karty: sdílet soubory s tvými kontakty
      • -
      -
    • -
    • Další schopnosti aplikace -
        -
      • měnit nastavení zvuku: lze měnit zvuky vyzvánění a hlasitost oznámení a zvukových zpráv
      • -
      • spouštět se při startu: nemusíš spouštět Delta Chat ručně
      • -
      • ovládat chvění: pro oznámení
      • -
      • značit síťová připojení: pro připojení k tvému poskytovateli e-mailu.
      • -
      • zamezit režimu spánku: pro snadnější přepis čísel bezpečnostního kódu při přenosu Nastavení Autokryptu
      • -
      • plný přístup k síti: pro připojení k poskytovateli e-mailu
      • -
      • vidět Wi-Fi připojenís: pro připojení k poskytovateli e-mailu
      • -
      • zamezit přizpůsobení se baterii: pro uživatele, kteří chtějí přijímat zprávy bez přerušení
      • -
      -
    • -
    - -

    - - - What means Pinning, Muting, Archiving? + What do Pinning, Muting and Archiving mean?

    @@ -388,22 +331,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

    +

    - How can I delete my account? + How do disappearing messages work?

    -

    As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

    +

    You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

    -

    If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

    + +

    Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

    + +

    Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

    @@ -536,6 +497,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

    + + + Instant message delivery and Push Notifications + + +

    + +

    + + + What are Push Notifications? How can I get instant message delivery? + + +

    + +

    Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

    + +

    Push Notifications work with all chatmail servers on

    + +
      +
    • +

      iOS devices, by integrating with Apple Push services.

      +
    • +
    • +

      Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

      +
    • +
    + +

    As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

    + +

    + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

    + +

    Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

    + +

    + + + Are Push notifications enabled / needed on Android devices? + + +

    + +

    If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

    + +

    In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

    + +
      +
    • +

      Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

      +
    • +
    • +

      Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

      +
    • +
    • +

      Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

      +
    • +
    + +

    Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

    + +

    + + + How private are Delta Chat Push Notifications? + + +

    + +

    Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

    + +

    Here is how Delta Chat apps perform Push Notification delivery:

    + +
      +
    • +

      A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

      +
    • +
    • +

      When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

      +
    • +
    • +

      The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

      +
    • +
    • +

      The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

      +
    • +
    + +

    As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

    + +

    The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

    + +

    Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

    + +

    + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

    + +

    Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

    + +

    Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

    +

    @@ -558,7 +683,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

    -

    Secure-Join protocols +

    Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -589,49 +714,32 @@ guarantee end-to-end encrypted messages.

    -

    Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

    +

    If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

    -

    Inviter side:

    +

    If you are together in person, +you can show a QR code to your chat partner.

    • -

      Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

      +

      For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

    • -

      Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

      +

      For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

    -

    Joiner side:

    +

    Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

    -
      -
    • -

      Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

      -
    • -
    • -

      Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

      -
    • -
    • -

      Tap “OK”

      -
    • -
    - -

    Both Inviter and Joiner:

    - -

    Wait while Secure-Join network messages are exchanged between both devices.

    +

    Now wait while Secure-Join network messages are exchanged between both devices.

    • @@ -685,7 +793,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

      For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

      @@ -713,7 +821,7 @@ even if the contact is a member there.

      Your contact is using Delta Chat on a second device (phone or laptop)

      If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

      @@ -721,8 +829,8 @@ and guaranteed encryption is established with both devices of your contact.

      Your contact reinstalled Delta Chat using their old account login

      If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

      @@ -743,7 +851,7 @@ guaranteed end-to-end encryption will be automatically re-established.

      Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

      In any case, you can not do much else than accept the warning. @@ -909,12 +1017,12 @@ deliver messages to recipient’s devices.

      Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

      @@ -973,7 +1081,7 @@ and their non-Autocrypt e-mail app.

      If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -991,10 +1099,10 @@ even if the direct chat between you two has a

      The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

      +and turning on disappearing messages.

      -

      Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

      Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

      If you don’t need a longer-lived copy of your messages on the server, @@ -1074,10 +1182,13 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

      Nejpravděpodobnější příčinou jsou zašifrované klíče, nebo klíče s heslem. -Takové klíče Delta Chat nepodporuje. Můžeš odstranit šifrování nebo heslo a +Takové klíče Delta Chat nepodporuje.  Můžeš odstranit šifrování nebo heslo a zkusit to znovu. Pokud je potřeba použít zaheslovaný klíč vytvoř / použij zástupnou adresua a pak přidej nový Delta Chat účet s tímto klíčem.

      +

      Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

      +

      Delta Chat podporuje běžné formáty OpenPGP klíčů, nicméně neočekáváme, že soukromé klíče ze všech aplikací budou fungovat. To není cíl, a ve skutečnosti věttšina nových uživatelů Delta Chatu nemá žádný stávající klíč. @@ -1088,6 +1199,67 @@ Enigmail umí nastavit prázdnou hodnotu hesla v okně Key Management. U GnuPG lze to samé nastavit z příkazové řádky. Pro ostatní programy by mělo jít nalézt řešení na Interentu.

      +

      + + + Was Delta Chat independently audited for security vulnerabilities? + + +

      + +

      The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

        +
      • +
      • +

        2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

        +
      • +
      • +

        2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

        +
      • +
      • +

        2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

        +
      • +
      +

      @@ -1104,7 +1276,7 @@ Pro ostatní programy by mělo jít nalézt řešení na Interentu.

      -

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

      +

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      • @@ -1142,10 +1314,19 @@ One device is not needed for the other to work.

      • Double-check both devices are in the same Wi-Fi or network

      • +
      • +

        On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

        +
      • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

        +
      • +
      • +

        Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

      • Ensure there is enough storage on the destination device

        @@ -1157,7 +1338,7 @@ Do not exit Delta Chat.
      • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

        +You can use multiple profiles per device, just add another profile

      • If you still have problems or if you cannot scan a QR code @@ -1180,8 +1361,8 @@ try the manual transfer described below

        screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
      • -
      • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
      • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
        • If you use iOS: and you encounter difficulties, maybe @@ -1211,55 +1392,6 @@ přenosnou verzi pro Windows nebo AppImage pro Linux. Všechny softwarové balíčky jsou na get.delta.chat.
        -

        - - - K čemu je dobré nastavení “Posílat si kopii”? - - -

        - -

        Posílat si kopii zpráv zaručuje, že zprávy se zobrazí na všech současně nastavených -zařízeních. Pokud máš několik zařízení a nezapneš tuto funkci, uvidíš pouze příchozí -zprávy, a zprávy odeslané jen z právě používaného přístroje. Ty odeslané z ostatních -zařízení neuvidíš.

        - -

        Kopie přijdou nejdříve do Příchozí složky, a pak jsou samočinně přesunuty do složky -DeltaChat; ne do složky Odeslané. Do složky Odeslané se nepřesouvá nikdy nic. -protože by to vyžadovalo přenášet zprávu dvakrát (jednou poslat přes SMTP, a jednou -pro složku Odeslané přes IMAP).

        - -

        Výchozí hodnota nastavení pro zasílání si kopií je “Ne”.

        - -

        - - - Proč můžu nastavit sledování složky Odeslané? - - -

        - -

        Jediný důvod sledovat složku s odeslanými zprávami je používání jiného e-mailového -programu (např. Thunderbird) spolu s Delta Chatem, a chtít z tohoto programu také -psát zprávy do hovorů Delta Chatu.

        - -

        Nicméně doporučujeme používat Delta Chat Desktop Client; ten lze stáhnout z get.delta.chat. Možnost sledování složky “Odeslané” -může být v budoucnu zrušena. Byla totiž vytvořena v době, kdy Delta Chat Desktop -nebyl dostupný na všech platformách.

        - -

        - - - Proč mohu zvolit nesledovat složku DeltaChat? - - -

        - -

        Někteří lidé užívají Delta Chat jako jediný e-mailový program, a chtějí užívat -složku Příchozí / Inbox pro všechny zprávy i místo složky DeltaChat. Pokud zrušíš -“Sleduj složku DeltaChat”, zruš také “přesouvat zprávy do složky DeltaChat”. Jinak -hrozí, že mazání zpráv či nastavení na několika zařízeních nebude správně fungovat.

        -

        @@ -1406,11 +1538,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

      • the chat.
      • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
      • -
      • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
      • +
      • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
      • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
      • @@ -1461,18 +1590,18 @@ DeltaChat. To je něco co za běžných okolností dělá Delta Chat sám.

        In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

        -

        +

        - How can I change my account to a different e-mail address? + How can I use a different e-mail address with my profile?

        1. -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        2. @@ -1503,6 +1632,60 @@ it.

          +

          + + + Jaká oprávnění Delta Chat potřebuje? + + +

          + +

          Dle užívaného operačního systému můžeš být +dotázán na udělení povolení této aplikaci. +Zde je co Delta Chat dělá s těmito povoleními:

          + +
            +
          • Camera (can be disallowed) +
              +
            • take pictures and videos: for sending Photos
            • +
            +
          • +
          • Contacts (can be disallowed) +
              +
            • read your contacts: to discover contacts to chat with
            • +
            +
          • +
          • Location (can be disallowed) +
              +
            • access approximate location (network location sources): for the location streaming feature
            • +
            • access precise location (GPS and network location sources): for the location streaming feature
            • +
            +
          • +
          • Microphone (can be disallowed) +
              +
            • record audio: for audio messages
            • +
            +
          • +
          • Storage (can be disallowed) +
              +
            • modify or delete the contents of your SD card: to download message attachments
            • +
            • read the contents of your SD card: to share files with your contacts
            • +
            +
          • +
          • Other app capabilities +
              +
            • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
            • +
            • run at startup: so you don’t have to start Delta Chat manually
            • +
            • control vibration: for notifications
            • +
            • view network connections: to connect to your E-Mail provider
            • +
            • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
            • +
            • have full network access: to connect to your E-Mail provider
            • +
            • view Wi-Fi connections: to connect to your E-Mail provider
            • +
            • ask to ignore battery optimisations: for achieving “instant message delivery”
            • +
            +
          • +
          +

          @@ -1532,28 +1715,136 @@ blogpost.
        3. You can find an installation guide on our website.
      -

      +

      - Je hovor v Delta Chatu skutečně interaktivní, když užívá E-Mail? + Proč musím Delta Chatu zadat mé e-mailové heslo? Je to bezpečné?

      +

      Podobně jako ostatní e-mailové programy, např. Thunderbird nebo Outlook, +program potřebuje heslo k tomu aby mohl posílat e-maily. Samozřejmě, že +heslo je uloženo pouze na tvém přístroji. Heslo je přenášeno pouze při přihlašení +k e-mailovému serveru, který má i beztak přístup k tvým e-mailům.

      + +

      Poskytovatelé e-mailu s podporou OAuth2, např. “gmail.com” či “yandex.ru”, +nepotřebují při přihlašování tvé heslo. V takovém případě je uložen pouze +vygenerovaný přístupový kód.

      + +

      Delta Chat má otevřený zdrojový kód, +ze kterého lze ověřit, že program s osobními daty zachází bezpečně. Jsme rádi +za každou odezvu, která udělá Delta Chat bezpečnější pro všechny.

      + +

      + + + Jaké zprávy Delta Chat zobrazuje? + + +

      + +

      By default, Delta Chat shows all e-mails.

      + +

      At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

      +
        -
      • Sending and receiving messages takes a few seconds, typically. Sometimes -there are cases where it takes longer but that is arguably true as well for -any other messenger.
      • -
      • Instant chatting works fast if both parties are actively using the app. It’s -sometimes slower if the app is running in the background.
      • -
      • Receiving messages then can take minutes because both Android and iOS often -stop Delta Chat from running in the background, and only wake it up -occasionally. This artificial delay is usually worse on iOS than on Android.
      • -
      • However, Android and iOS kill apps running in the background is a -problem for many legitimate apps. For more information, see -dontkillmyapp.com.
      • +
      • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
      • +
      • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
      • +
      • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
      +

      + + + Umí Delta Chat pracovat s e-maily v HTML? + + +

      + +

      Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

      + +

      + + + Can I set the E-Mail Subject with Delta Chat? + + +

      + +

      Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

      + +

      So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

      + +

      + + + K čemu je dobré nastavení “Posílat si kopii”? + + +

      + +

      Posílat si kopii zpráv zaručuje, že zprávy se zobrazí na všech současně nastavených +zařízeních. Pokud máš několik zařízení a nezapneš tuto funkci, uvidíš pouze příchozí +zprávy, a zprávy odeslané jen z právě používaného přístroje. Ty odeslané z ostatních +zařízení neuvidíš.

      + +

      Kopie přijdou nejdříve do Příchozí složky, a pak jsou samočinně přesunuty do složky +DeltaChat; ne do složky Odeslané. Do složky Odeslané se nepřesouvá nikdy nic. +protože by to vyžadovalo přenášet zprávu dvakrát (jednou poslat přes SMTP, a jednou +pro složku Odeslané přes IMAP).

      + +

      The default setting for “Send Copy to Self” is “on”.

      + +

      + + + Proč můžu nastavit sledování složky Odeslané? + + +

      + +

      Jediný důvod sledovat složku s odeslanými zprávami je používání jiného e-mailového +programu (např. Thunderbird) spolu s Delta Chatem, a chtít z tohoto programu také +psát zprávy do hovorů Delta Chatu.

      + +

      Nicméně doporučujeme používat Delta Chat Desktop Client; ten lze stáhnout z get.delta.chat. Možnost sledování složky “Odeslané” +může být v budoucnu zrušena. Byla totiž vytvořena v době, kdy Delta Chat Desktop +nebyl dostupný na všech platformách.

      + +

      + + + Proč mohu zvolit nesledovat složku DeltaChat? + + +

      + +

      Někteří lidé užívají Delta Chat jako jediný e-mailový program, a chtějí užívat +složku Příchozí / Inbox pro všechny zprávy i místo složky DeltaChat. Pokud zrušíš +“Sleduj složku DeltaChat”, zruš také “přesouvat zprávy do složky DeltaChat”. Jinak +hrozí, že mazání zpráv či nastavení na několika zařízeních nebude správně fungovat.

      +

      @@ -1575,6 +1866,23 @@ uses.

    • Autocrypt-enabled e-mail app.
    +

    + + + How can I delete my account? + + +

    + +

    As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

    + +

    If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    @@ -1587,59 +1895,6 @@ uses.
  • Dobrý začátek je Standards used in Delta Chat.
  • -

    - - - Was Delta Chat independently audited for security vulnerabilities? - - -

    - -

    The Delta Chat project underwent four independent security audits in the last years:

    - -
      -
    • -

      In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

      -
    • -
    • -

      In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

      -
    • -
    • -

      Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

      -
    • -
    • -

      Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

      -
    • -
    -

    @@ -1680,7 +1935,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

  • In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

    +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

  • From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/de/help.html b/src/main/assets/help/de/help.html similarity index 62% rename from assets/help/de/help.html rename to src/main/assets/help/de/help.html index e80800bb5..e6223a607 100644 --- a/assets/help/de/help.html +++ b/src/main/assets/help/de/help.html @@ -4,17 +4,14 @@

  • Gruppen @@ -28,12 +25,21 @@
  • Was passiert, wenn ich “Alte Nachrichten vom Gerät löschen” aktiviere?
  • +
  • Sofortige Nachrichtenzustellung und Push-Benachrichtigungen + +
  • Verschlüsselung und Sicherheit
  • Mehrere Geräte verwenden @@ -59,9 +66,6 @@
  • Fehlersuche
  • Manueller Transfer
  • Gibt es Pläne für eine Delta Chat Web-Anwendung?
  • -
  • Was macht die Option “Kopie an mich selbst senden”?
  • -
  • Warum gibt es die Funktion “Gesendet-Ordner beobachten”?
  • -
  • Warum kann ich “DeltaChat-Ordner beobachten” ausschalten?
  • Webxdc Apps @@ -78,17 +82,24 @@
  • Wie kann ich meinen Standort mit meinen Chat-Partnern teilen?
  • Was schützt die experimentelle Datenbankverschlüsselung tatsächlich?
  • Warum kann ich mich dafür entscheiden, nur den DeltaChat-Ordner zu beobachten?
  • -
  • Wie kann ich mein Konto auf eine andere E-Mail-Adresse ändern?
  • +
  • Wie kann ich mein Profil auf eine andere E-Mail-Adresse ändern?
  • Verschiedenes
  • @@ -104,8 +115,12 @@

    -

    Delta Chat ist eine neue Chat-App, die mit Autocrypt verschlüsselte E-Mails versendet. -Sie müssen sich nirgendwo anmelden, verwenden Sie einfach Ihr bestehendes E-Mail-Konto mit Delta Chat.

    +

    Delta Chat ist eine zuverlässige, dezentralisierte und sichere Messaging-App, verfügbar für Mobile- und Desktop-Plattformen.

    + +

    Delta Chat sieht wie Whatsapp oder Telegram aus, aber kann auch als E-Mail-App verwendet und betracht werden. +Sie können sich anonym bei einer Vielzahl von interoperablen Chatmail-Servern anmelden, bei denen es sich um minimale E-Mail-Server handelt, die für einen schnellen und sicheren Betrieb optimiert sind. +Oder Sie verwenden einen klassische E-Mail-Server und ein bestehendes E-Mail-Konto. +In diesem Fall fungiert Delta Chat als E-Mail-App.

    @@ -117,8 +132,12 @@ -

    Mit Delta Chat können Sie an jede existierende E-Mail-Adresse schreiben. Im Gegensatz -zu anderen Instant-Messengern muss der/die EmpfängerIn nicht Delta Chat installieren, um mit Ihnen zu kommunizieren. Er/sie kann einfach sein/ihr gewohntes Mailprogramm nutzen.

    +

    Zur sicheren Kontaktaufnahme mit anderen scannen Sie einen Einladungs-QR-Code +oder teilen Sie einen Einladungslink. +Dies ist erforderlich, wenn Sie ein Chatmail-basiertes Profil verwenden, weil Chatmail-Server unverschlüsselte ausgehende Nachrichten ablehnen.

    + +

    Wenn Sie ein Profil mit einer klassischen E-Mail-Adresse verwenden, können Sie manuell Kontakte über bekannte E-Mail-Adresse hinzufügen und anschreiben - +auch wenn der Empfänger Delta Chat nicht benutzt.

    @@ -129,33 +148,25 @@ zu anderen Instant-Messengern muss der/die EmpfängerIn nicht Delta Chat install

      -
    • Delta Chat ist unabhängig von Unternehmen oder Dienstleistern. Ihre Daten gehören nur Ihnen
    • -
    • Ihre Daten werden nicht auf einem zentralen Server gespeichert wenn Benutzer verschiedene E-Mail-Server verwenden
    • -
    • Ihr Adressbuch wird nicht an Dritte übermittelt.
    • -
    • Schnell durch die Verwendung von Push-IMAP.
    • -
    • Größte Nutzerbasis - EmpfängerInnen, die Delta Chat nicht nutzen, können ebenfalls erreicht werden.
    • -
    • Kein Spam - standardmäßig werden nur Nachrichten bekannter Kontakte angezeigt.
    • -
    • Ende-zu-Ende-Verschlüsselung mit Autocrypt.
    • -
    • Auf Copyleft und Standards basierende freie Software.
    • -
    • Flexible Identität mit eingebauter Unterstützung für mehrere Konten
    • -
    - -

    - - - Welche Nachrichten erscheinen in Delta Chat? - - -

    - -

    In der Standardeinstellung zeigt Delta Chat alle E-Mails an.

    - -

    Unter “Einstellungen / Chats und Medien / Normale E-Mails anzeigen” können Sie dies ändern. Sie haben die folgenden Optionen:

    - -
      -
    • “Nein, nur Chats”: Es werden die von anderen Delta-Chat-Benutzern gesendeten Nachrichten sowie alle Antworten auf Ihre Nachrichten angezeigt. Dies ist sinnvoll, wenn Sie das gleiche E-Mail-Konto noch mit einer anderen E-Mail-App bearbeiten.
    • -
    • “Alle”: Delta Chat zeigt alle E-Mails an, die an Ihre E-Mail-Adresse gesendet werden. Dies ist sinnvoll, wenn Sie Delta Chat für alle Ihre E-Mails verwenden möchten, damit keine Nachricht verloren geht. Dies ist die Standardeinstellung.
    • -
    • “Akzeptierte Kontakte”: Delta Chat zeigt alle E-Mails von Kontakten an, mit denen Sie bereits einen Chat haben, aber neue Chats werden nur für Delta Chat-Nachrichten angezeigt. So können Sie von Fall zu Fall entscheiden, ob Sie eine Unterhaltung in Delta Chat oder in einer “normalen” E-Mail-App führen möchten.
    • +
    • +

      Anonyme Chat-Profile mit schnellen, sicheren und interoperablen Chatmail-Servern, +die sofortige Push-Benachrichtigungen für iOS- und Android-Geräte bieten.

      +
    • +
    • +

      Durchgängige Multi-Profil und Multi-Geräte-Unterstützung auf allen Plattformen.

      +
    • +
    • +

      Interaktive Webanwendungen in Chats für Spiele und für die Zusammenarbeit

      +
    • +
    • +

      Geprüfte Ende-zu-Ende-Verschlüsselung, +sicher gegen Netzwerk- und Serverangriffe.

      +
    • +
    • +

      Freie und quelloffene Software, sowohl app- als auch serverseitig. +Basiert auf E-Mail- und Web-Internet-Standards, +um das „Noch-ein-Standard-Syndrom“ (xkcd 927) zu vermeiden.

      +

    @@ -192,18 +203,25 @@ zu anderen Instant-Messengern muss der/die EmpfängerIn nicht Delta Chat install

    - Wie kann ich mehrere Konten hinzufügen oder zwischen ihnen wechseln? + Was sind Profile? Wie kann ich zwischen ihnen wechseln?

    -

    Sie können ganz einfach mehrere E-Mail-Konten Konten verwnden, indem Sie entweder:

    -
      -
    • im Hauptmenü “Konto wechseln” wählen (Android und Desktop)
    • -
    • oder auf das Profilsymbol und dann auf “Konto hinzufügen” klicken (iOS)
    • -
    +

    Ein Profil besteht aus einem Namen, einem Bild und einigen zusätzlichen Informationen zum Verschlüsseln von Nachrichten. +Ein Profil existiert nur auf Ihren Geräten +und verwendet einen Chatmail- oder einen klassischen E-Mail-Server für den Transport von Nachrichten.

    -

    Vielleicht möchten Sie auch erfahren, wie Sie E-Mail-Konten zu mehreren Geräten hinzufügen können.

    +

    Bei der Installation von Delta Chat wird ein erstes Profil erstellt.

    + +

    Später können Sie auf Ihr Profilbild in der oberen linken Ecke tippen, um Profile hinzuzufügen +oder Profile zu wechseln.

    + +

    Vielleicht möchten Sie separate Profile für politische, familiäre oder berufliche Aktivitäten verwenden, +oder z. B. für ein spezielles „Spam-Profil“, mit dem Sie sich bei Websites und Plattformen anmelden +die dazu neigen, früher oder später unerwünschte Nachrichten („Spam“) zu versenden.

    + +

    Vielleicht möchten Sie auch erfahren, wie Sie Profile auf mehreren Geräten verwenden können.

    @@ -228,83 +246,21 @@ zu anderen Instant-Messengern muss der/die EmpfängerIn nicht Delta Chat install -

    +

    - Unterstützt Delta Chat HTML-E-Mails? + Kann ich eine Signatur (Status/Motto) festlegen?

    -
      -
    • Ja. Eingehende HTML-Nachrichten erhalten eine Schaltfläche “Ganze Nachricht anzeigen”. Ausgehende E-Mails verwenden immer “Nur Text”.
    • -
    - -

    - - - Weshalb muss ich mein E-Mail-Kennwort in Delta Chat eingeben? Ist das sicher? - - -

    - -

    Genau wie auch bei anderen E-Mail-Programmen (z. B. Thunderbird, K9-Mail oder Outlook) benötigt Delta Chat das Passwort, um E-Mails versenden zu können. Das Passwort wird nur auf Ihrem Gerät gespeichert und bei der Anmeldung an Ihren E-Mail-Anbieter gesendet.

    - -

    Wenn Sie einen E-Mail-Anbieter wie gmail.com oder yandex.ru nutzen, der OAuth2 unterstützt, wird Ihr Passwort nicht auf Ihrem Gerät gespeichert. In diesem Fall wird nur ein Zugriffstoken genutzt.

    - -

    Da Delta Chat Open Source ist, können Sie den Quellcode einsehen und sich davon überzeugen, dass Ihre Zugangsdaten sicher gehandhabt werden. Wir freuen uns über Feedback, das unsere App sicherer für all unsere NutzerInnen macht.

    - -

    - - - Welche App-Berechtigungen benötigt Delta Chat? - - -

    - -

    Je nach verwendetem Betriebssystem werden Sie möglicherweise aufgefordert, der App Berechtigungen zu erteilen. Diese werden wie folgt verwendet:

    - -
      -
    • Kamera (kann verweigert werden) -
        -
      • Bilder und Videos aufnehmen: Um Fotos zu senden
      • -
      -
    • -
    • Kontakte (kann verweigert werden) -
        -
      • Kontakte lesen: Um Kontakte zum Chatten zu finden
      • -
      -
    • -
    • Standort (kann verweigert werden) -
        -
      • Auf den ungefähren Standort zugreifen (netzwerkbasiert): Für die Standortübertragungsfunktion
      • -
      • Auf genauen Standort zugreifen (GPS- und netzwerkbasiert): Für die Standortübertragungsfunktion
      • -
      -
    • -
    • Mikrofon (kann verweigert werden) -
        -
      • Audio aufnehmen: Für Sprachnachrichten
      • -
      -
    • -
    • Speicher (kann verweigert werden) -
        -
      • SD-Karteninhalte ändern oder löschen: Um Nachrichtenanhänge herunterzuladen
      • -
      • SD-Karteninhalte lesen: Um Dateien mit Ihren Kontakten zu teilen
      • -
      -
    • -
    • Andere Berechtigungen: -
        -
      • Audio-Einstellungen ändern: Um Klingeltöne und die Lautstärke für Benachrichtigungen und Audionachrichten zu wählen
      • -
      • Beim Start ausführen: Um Delta Chat nicht manuell starten zu müssen
      • -
      • Vibrationsalarm steuern: Für Benachrichtigungen
      • -
      • Netzwerkverbindungen abrufen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
      • -
      • Ruhezustand deaktivieren: Um den Sicherheitscode während der Autocrypt-Setupnachricht einfacher abtippen zu können
      • -
      • Auf alle Netzwerke zugreifen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
      • -
      • WLAN-Verbindungen abrufen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
      • -
      • Fragen, ob Akku-Leistungsoptimierungen ignoriert werden können: Für NutzerInnen, die permanent Nachrichten empfangen möchten
      • -
      -
    • -
    +

    Ja, +Sie können dies unter “Einstellungen → Profil → Signatur” tun. +Kontakte, die Delta Chat nutzen, sehen die Signatur, +wenn Sie sich Ihre Kontaktdetails ansehen. +Für klassische E-Mail-Programme, +erscheint die Signatur +unter dem Text Ihrer Nachrichten.

    @@ -355,17 +311,37 @@ zu anderen Instant-Messengern muss der/die EmpfängerIn nicht Delta Chat install
  • Andererseits werden andere nicht immer “sehen, dass Sie online sind”. Wenn Sie Lesebestätigungen deaktiviert haben, sehen sie den grünen Punkt erst, wenn Sie ihnen eine Nachricht senden oder einer Gruppe schreiben, in der sie sich ebenfalls befinden.
  • -

    +

    - Wie kann ich mein Konto löschen? + Wie funktionieren “Verschwindende Nachrichten”?

    -

    Da Sie ein E-Mail-Konto für Delta Chat 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.

    +

    Sie schalten “Verschwindende Nachrichten” +oben rechts im Chatfenster, +durch Auswahl einer Zeitspanne +zwischen 1 Minute und 5 Wochen ein.

    -

    Wenn Sie das Konto behalten, aber Delta Chat deinstallieren möchten, ist es ratsam, aktive Gruppen zu verlassen, bevor Sie Delta Chat deinstallieren.

    +

    Bis die Einstellung wieder ausgeschaltet wird, +kümmern sich die Delta-Chat-Apps der Chat-Teilnehmer +um das Löschen der Nachrichten +nach der gewählten Zeitspanne. +Die Zeitspanne beginnt, +wenn der Empfänger die Nachricht zum ersten Mal in Delta Chat ansieht. +Die Nachrichten werden dann +sowohl in den E-Mail-Konten auf dem Server, +als auch in der App selbst gelöscht.

    + +

    Beachten Sie, dass Sie sich auf verschwindende Nachrichten nur so lange verlassen können, wie Sie Ihren Chat-Partnern vertrauen; +böswillige Chatpartner können Fotos machen, +oder auf andere Weise Nachrichten vor dem Löschen speichern, kopieren oder weiterleiten.

    + +

    Abgesehen davon, +wenn ein Chat-Partner Delta Chat deinstalliert, +werden die Nachrichten nicht aus seinem E-Mail-Konto gelöscht. +Sie werden höchstwahrscheinlich aber auch nicht mehr entschlüsselt werden können.

    @@ -484,6 +460,161 @@ Alle von Delta Chat empfangenen Nachrichten werden nach diesem Zeitraum vom Serv
  • Um es zu aktivieren, gehen Sie in den “Chats und Medien”-Einstellungen zu “Alte Nachrichten vom Gerät löschen”. Sie können einen Zeitraum zwischen “nach 1 Stunde” und “nach 1 Jahr” festlegen; auf diese Weise werden alle Nachrichten von Ihrem Gerät gelöscht, sobald sie älter als angegeben sind.
  • +

    + + + Sofortige Nachrichtenzustellung und Push-Benachrichtigungen + + +

    + +

    + + + Was sind Push-Benachrichtigungen? Wie kann ich Nachrichten sofort erhalten? + + +

    + +

    Push-Benachrichtigungen werden von Apples und Googles „Push-Diensten“ an das Gerät des Benutzers gesendet, +so dass eine inaktive Delta-Chat-App im Hintergrund Nachrichten erhalten +und Benachrichtigungen auf dem Telefon des Nutzers anzeigen kann.

    + +

    Push-Benachrichtigungen funktionieren mit allen Chatmail-Servern auf

    + +
      +
    • +

      iOS-Geräten, durch die Integration mit den Apple-Push-Diensten.

      +
    • +
    • +

      Android-Geräten, durch die Integration des Google FCM Push-Dienste, +auch auf Geräten, die microG +anstelle von proprietärem Google-Code auf dem Telefon.

      +
    • +
    + +

    Stand Mai 2024 unterstützen die klassischen E-Mail-Server keine Push-Benachrichtigungen für Delta-Chat-Benutzer.

    + +

    + + + Sind Push-Benachrichtigungen auf iOS-Geräten aktiviert? Gibt es Alternativen? + + +

    + +

    Ja, Delta Chat verwendet automatisch Push-Benachrichtigungen für Chatmail-Profile. +Und nein, es gibt für Apple-Telefonen keine Alternative, Push-Benachrichten zuzustellen; +Apple-Geräte erlauben es Delta Chat nicht, Daten im Hintergrund abzurufen. +Push-Benachrichtigungen werden für iOS-Nutzer automatisch aktiviert, da +Delta Chats datenschutzwahrendes Push-Benachrichtigungssystem +keine Daten an Apple weitergibt, die Apple nicht bereits hat.

    + +

    + + + Sind Push-Benachrichtigungen auf Android-Geräten aktiviert/erforderlich? + + +

    + +

    Wenn ein „Push-Service“ verfügbar ist, aktiviert Delta Chat Push-Benachrichtigungen +um eine sofortige Nachrichtenzustellung für alle Chatmail-Benutzer zu erreichen. +Wenn Sie einen klassischen E-Mail-Anbieter anstelle von chatmail Servern verwenden, +sind Push-Benachrichtigungen nicht verfügbar.

    + +

    In den Delta-Chat-Einstellungen „Benachrichtigungen“ für „Sofortige Benachrichtigungen“ +können Sie die folgenden Einstellungen ändern, die alle Chat-Profile betreffen:

    + +
      +
    • +

      Push-Dienst verwenden: die Standardeinstellung bei Verwendung von Chatmail-Profilen und wenn +ein Push-Service auf dem Telefon verfügbar ist. +Wenn Sie sowohl Chatmail- als auch klassische E-Mail-Profile haben, +dann funktioniert die Push-Benachrichtigung nur +für eingehende Nachrichten auf Chatmail-Profilen.

      +
    • +
    • +

      Hintergrundverbindung verwenden: Wenn Sie keinen Push-Dienst verwenden, können Sie die „Batterie-Optimierung“ für Delta Chat deaktivieren, damit Nachrichten im Hintergrund abgerufen werden können. Dabei kann es jedoch zu Verzögerungen von Minuten bis Stunden kommen. +Einige Android-Hersteller schränken Apps sogar vollständig ein +(siehe dontkillmyapp.com) +und Delta Chat zeigt möglicherweise keine eingehenden Nachrichten anbis Sie die App erneut manuell öffnen.

      +
    • +
    • +

      Hintergrundverbindung erzwingen: Dies ist die Ausweichoption wenn die vorherigen Optionen nicht verfügbar sind oder keine „sofortige Zustellung“ erreichen. Die Aktivierung dieser Option führt zu einer permanenten Benachrichtigung auf Ihrem Telefon, die bei neueren Android-Telefonen manchmal „verkleinert“ werden kann.

      +
    • +
    + +

    Beide „Hintergrundverbindung“-Optionen sind energiesparend und +können sicher ausprobiert werden, wenn Sie feststellen, dass Nachrichten nur mit großer Verzögerung ankommen.

    + +

    + + + Wie privat sind Delta Chat Push-Benachrichtigungen? + + +

    + +

    Delta Chats Vorgehensweise, Push-Benachrichtigungen zu verwenden, vermeidet die Weitergabe privater Informationen. +Es werden keine E-Mail- oder IP-Adressen oder Nachrichteninhalte (auch nicht verschlüsselt) +an irgendein System, das an der Zustellung von Push-Benachrichtigungen beteiligt ist, weitergegeben.

    + +

    So verwendet Delta Chat Push-Benachrichtigungen:

    + +
      +
    • +

      Eine Delta-Chat-Anwendung erhält lokal ein „Geräte-Token“ (eine zufällige Zahl) und speichert es +auf dem Chatmail-Server.

      +
    • +
    • +

      Wenn ein Chatmail-Server eine E-Mail für einen Delta Chat-Benutzer erhält +erhält, leitet er den „Geräte-Token“ an den zentralen Delta-Chat-Benachrichtigungs-Proxy weiter.

      +
    • +
    • +

      Der zentrale Delta-Chat-Benachrichtigungs-Proxy leitet +das „Geräte-Token“ an den jeweiligen Push-Dienst (Apple, Google, etc.) weiter, +ohne jemals die IP- oder E-Mail-Adresse des Delta-Chat-Benutzers zu kennen.

      +
    • +
    • +

      Der zentrale Push-Dienst (Apple, Google, etc.) +weckt die Delta-Chat-App auf Ihrem Gerät auf +um im Hintergrund nach neuen Nachrichten zu suchen. +Der zentrale Push-Dienst weiß nichts über die Chatmail- oder E-Mail-Adresse des Geräts, das er aufweckt und sieht nie eine E-Mail-Adresse (Absender oder Empfänger) +und auch nie den Inhalt einer Nachricht (auch nicht in verschlüsselter Form).

      +
    • +
    + +

    Stand Mai 2024 kennen die Chatmail-Server die Geräte-Token, +aber wir planen, diese Informationen an den Benachrichtigungs-Proxy zu verschlüsseln +zu verschlüsseln, so dass der Chatmail-Server niemals das „Geräte-Token“ erfährt.

    + +

    Der zentrale Delta-Chat-Benachrichtigungs-Proxy ist klein und vollständig in Rust implementiert +und vergisst die Geräte-Token, sobald Apple/Google/etc. sie verarbeitet hat, +normalerweise innerhalb weniger Millisekunden.

    + +

    Aufgrund dieses umfassenden Datenschutzkonzepts würde sogar die Beschlagnahmung eines Chatmail-Servers, +oder die vollständige Beschlagnahmung des zentralen Delta-Chat-Benachrichtigungsproxys +keine privaten Informationen preisgeben, die den zentralen Push-Diensten nicht bereits vorliegen.

    + +

    + + + Warum integriert sich Delta Chat in zentralisierte, proprietäre Apple/Google-Push-Dienste? + + +

    + +

    Delta Chat ist ein freier, quelloffener, dezentraler Messenger mit freier Serverwahl, +aber wir wollen, dass die Nutzer eine zuverlässige „Sofortzustellung“ von Nachrichten haben, +wie sie es von Whatsapp, Signal oder Telegram kennen, +ohne im Vorfeld Fragen zu stellen, die eher für erfahrene Nutzer oder Entwickler geeignet sind.

    + +

    Beachten Sie, dass Delta Chat ein kleines, die Privatsphäre wahrendes Push-Benachrichtigungssystem +hat, das eine „sofortige Zustellung“ von Nachrichten für alle Chatmail-Server erreicht. +Einschließlich dem Chatmail-Server, den Sie selbst ohne unsere Erlaubnis einrichten könnten. +Willkommen bei der Macht des interoperablen und massiven Chatmail- und E-Mail-Systems :)

    +

    @@ -492,10 +623,10 @@ Alle von Delta Chat empfangenen Nachrichten werden nach diesem Zeitraum vom Serv

    -

    +

    - Welches Verfahren wird für die Ende-zu-Ende-Verschlüsselung verwendet? + Welche Standards werden für die Ende-zu-Ende-Verschlüsselung verwendet?

    @@ -505,7 +636,7 @@ eine Ende-zu-Ende-Verschlüsselung mit Kontakten und Gruppenchats herzustellen. Autocrypt verwendet eine begrenzte und sichere Untermenge des OpenPGP-Standards. Ende-zu-Ende verschlüsselte Nachrichten sind mit einem Vorhängeschloss gekennzeichnet padlock

    -

    Secure-Join-Protokolle +

    Secure-Join-Protokolle werden für Chats mit garantierter Ende-zu-Ende-Verschlüsselung verwendet, die vor Netzwerkangriffen und kompromittierten Servern schützt. Chats, die mit einem grünen Häkchen markiert sind @@ -520,7 +651,7 @@ garantieren Ende-zu-Ende-verschlüsselte Nachrichten.

    -

    Alle Ende-zu-Ende-verschlüsselten Nachrichten sind mit einem Vorhängeschloss versehen:

    +

    Ende-zu-Ende-verschlüsselten Nachrichten sind mit einem Vorhängeschloss versehen:

    padlock in bubble

    @@ -536,66 +667,47 @@ garantieren Ende-zu-Ende-verschlüsselte Nachrichten.

    -

    Treffen Sie Ihren Chatpartner außerhalb von Delta Chat, vorzugsweise persönlich. -Ein zweiter Kanal wie ein Video-Chat -oder ein anderer Messenger ist aber auch in Ordnung. -Führen Sie das folgende QR-Code-Verfahren mit Ihrem Chat-Partner durch. -Einer von Ihnen ist der “Einladende”, die andere ist der “Beitretende”.

    +

    Wenn Sie einen zweiten Kommunikationskanal mit Ihrem Chatpartner haben, +wie einen Video-Chat oder einen anderen Messenger, +können Sie einen Einladungslink erstellen.

    -

    Auf der Seite des Einladers:

    +

    Wenn Sie persönlich zusammen sind, +können Sie Ihrem Chat-Partner einen QR-Code zeigen.

    • -

      Gruppeneinladung: -Tippen Sie auf den Titel der Chat-Gruppe, um die Mitgliederliste anzuzeigen, und wählen Sie “QR-Einladungscode”. -Zeigen Sie das QR-Bild der anderen Seite entweder persönlich oder über einen zweiten Kanal.

      +

      Für Gruppeneinladungen, +tippen Sie auf den Titel der Gruppe, um die Mitgliederliste anzuzeigen, +und wählen Sie „QR-Einladungscode“.

    • -

      Direkte 1:1 Chat-Einladung: -Tippen Sie auf das QR-Code-Symbol -auf dem Hauptbildschirm der Delta Chat-App – -auf dem Desktop befindet sich das QR-Symbol im Sandwich-Menü auf der linken Seite. -Zeigen Sie das QR-Bild der anderen Seite entweder persönlich oder über einen zweiten Kanal.

      +

      Für Direktchat-Einladungen, +tippen Sie auf das QR-Code-Symbol +auf dem Hauptbildschirm der Delta-Chat-App.

    -

    Auf der Seite des Beitretenden:

    +

    Lassen Sie Ihren Chat-Partner den QR-Code mit der Delta-Chat-App scannen. +Oder Sie klicken auf „Kopieren“ oder „Teilen“, um einen Einladungslink zu erstellen und diesen mit Ihrem Chat-Partner zu teilen.

    -
      -
    • -

      Tippen Sie auf das QR-Code-Symbol -auf dem Hauptbildschirm der Delta Chat-App – -auf dem Desktop befindet sich das QR-Symbol im Sandwich-Menü auf der linken Seite.

      -
    • -
    • -

      Wählen Sie “QR-CODE SCANNEN” und scannen Sie den QR-Code -den Sie von Ihrem Chatpartner in einem zweiten Kanal sehen oder erhalten haben.

      -
    • -
    • -

      “OK” tippen

      -
    • -
    - -

    Beide, Einlader und Beitretender:

    - -

    Warten Sie, während [Secure-Join-Netzwerkmeldungen] (https://countermitm.readthedocs.io/en/latest/new.html#setup-contact-protocol) zwischen beiden Geräten ausgetauscht werden.

    +

    Warten Sie nun, während das Secure-Join-Protokoll zwischen beiden Geräten abläuft.

    • Wenn beide Geräte online sind, -sehen beide Seiten schließlich einen (Gruppen- oder Direkt-) Chat mit einem grünen Häkchen +sehen beide Seiten schließlich einen Gruppen- oder Direkt-Chat mit einem grünen Häkchen green checkmark neben dem Titel.

    • Wenn eines der Geräte offline ist, erscheinen die grünen Häkchen erst -erst später, wenn das Gerät wieder mit dem Internet verbunden ist -und das Secure-Join-Netzwerkprotokoll abgeschlossen ist.

      +später, wenn das Gerät wieder mit dem Internet verbunden ist +und das Secure-Join-Protokoll abgeschlossen werden kann.

    Herzlichen Glückwunsch! 🎉 -Sie verwenden nun automatisch eine garantierte Ende-zu-Ende-Verschlüsselung +Sie verwenden nun eine garantierte Ende-zu-Ende-Verschlüsselung mit diesem Kontakt und Sie beide können sich gegenseitig zu grün markierten Gruppen hinzufügen green checkmark, Dadurch wird die garantierte Ende-zu-Ende-Verschlüsselung automatisch unter den Mitgliedern dieser Gruppe verbreitet.

    @@ -603,38 +715,37 @@ Dadurch wird die garantierte Ende-zu-Ende-Verschlüsselung automatisch unter den

    - Was bedeutet das grüne Häkchen und die “garantierte Ende-zu-Ende-Verschlüsselung”? + Was bedeuten das “Grüne Häkchen” und die “garantierte Ende-zu-Ende-Verschlüsselung”?

    -

    Chat-Titel mit grünen Häkchen +

    Chat-Titel mit grünen Häkchen green checkmark -bedeuten, dass alle Nachrichten im Chat Ende-zu-Ende verschlüsselt werden +bedeuten, dass alle Nachrichten im Chat Ende-zu-Ende-verschlüsselt werden und nicht von kompromittierten E-Mail-Servern oder Internet-Providern gelesen oder verändert werden können. Beim Beitritt zu Gruppenchats mit grünen Häkchen werden Verschlüsselungsinformationen (und die grünen Häkchen) aller Teilnehmer sicher so weitergegeben, dass die Ende-zu-Ende-Verschlüsselung in der Gruppe und zwischen den Mitgliedern garantiert werden kann.

    -

    Contact profiles with green checkmarks +

    Kontaktprofile mit grünen Häkchen green checkmark -mean that messaging a contact is currently guaranteed to be end-to-end encrypted. -Every green-checkmarked contact either did a direct QR-scan with you -or was introduced by a another green-checkmarked contact. -Introductions happen automatically when adding members to groups. -Whoever adds a contact to a green-checkmarked group becomes an introducer -to those members who didn’t yet know about the added contact. -In a contact profile you can tap on the “Introduced by …” text repeatedly -until you get to the one with whom you directly did a QR-scan.

    +bedeuten, dass die Nachrichtenübermittlung an einen Kontakt derzeit garantiert Ende-zu-Ende-verschlüsselt ist. +Jeder grün markierte Kontakt hat entweder einen direkten QR-Scan mit Ihnen durchgeführt +oder wurde von einem anderen Kontakt mit grünem Häkchen eingeführt. +Das Einführen geschieht automatisch, wenn Sie Mitglieder zu Gruppen hinzufügen. +Wer einen Kontakt zu einer Gruppe mit grünem Häkchen hinzufügt, wird zum Einführenden +für die Mitglieder, die noch nichts von dem hinzugefügten Kontakt wussten. +In einem Kontaktprofil können Sie wiederholt auf den Text “Eingeführt von …” tippen +bis du zu demjenigen gelangst, mit dem Sie einen direkten QR-Scan gemacht haben.

    -

    Note that in a contact profile you may see and tap introducers -but there is no green checkmark in the profile title. -This usually means that the contact “sent a message from another device”.

    +

    Beachten Sie, dass Sie in einem Kontaktprofil unter Umständen Einführende sehen und antippen können, aber kein grünes Häkchen im Profiltitel vorhanden ist. +Dies bedeutet normalerweise, dass der Kontakt “eine Nachricht von einem anderen Gerät gesendet hat”.

    -

    For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols -and specifically read about “Verified Groups”, the technical term -of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

    +

    Für eine ausführlichere Diskussion der “Garantierten Ende-zu-Ende-Verschlüsselung”, +siehe Secure-Join-Protokolle +und dort speziell den Abschnitt zu “Verified Groups”, dem technischen Begriff +für “Chats mit grünem Häkchen” oder “Garantierter Ende-zu-Ende-Verschlüsselung”.

    @@ -644,63 +755,58 @@ of what is called here “green-checkmarked” or “guaranteed end-to-end encry

    -

    Your chat with a contact lost guaranteed end-to-end encryption. -The green checkmark was removed for this chat and contact when you see this warning. -If you find the sudden drop of guaranteed end-to-end encryption -surprising for this contact then don’t accept the warning! -Instead check with your contact through a second channel -like a video call, other messenger or a phone call, -to find out what happened.

    +

    Wenn Sie diese Warnung sehen, wurde das grüne Häkchen entfernt, da für den Kontakt die Ende-zu-Ende-Verschlüsselung nicht mehr garantiert werden kann. +Wenn Sie den Wegfall der garantierten Ende-zu-Ende-Verschlüsselung +für diesen Kontakt überraschend finden, akzeptieren Sie die Warnung nicht! +Versuchen Sie stattdessen mit Ihrem Kontakt über einen zweiten Kanal (z.B. Videoanruf, Telefon oder ein anderer Messenger) herauszufinden, was passiert ist.

    -

    If your contact actually caused the drop of guaranteed end-to-end encryption -please see the next paragraphs for common reasons and their mitigations. -Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted -even if the contact is a member there.

    +

    Wenn Ihr Kontakt tatsächlich den Ausfall der garantierten Ende-zu-Ende-Verschlüsselung verursacht hat, +finden Sie in den nächsten Abschnitten häufige Gründe und Abhilfe. +Unabhängig davon bleiben alle anderen Chats mit einem grünen Häkchen garantiert Ende-zu-Ende-verschlüsselt, +auch wenn der Kontakt dort Mitglied ist.

    -

    Your contact is using Delta Chat on a second device (phone or laptop)

    +

    Ihr Kontakt verwendet Delta Chat auf einem zweiten Gerät (Smartphone oder Laptop)

    -

    If they have another device with a Delta Chat app running, -they should remove the account from the new device -and add it as a second device as described here. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is established with both devices of your contact.

    +

    Wenn Ihr Kontakt ein weiteres Gerät mit Delta Chat eingerichtet hat, +sollte das Konto von dem neuen Gerät entfernen werden und als zweites Gerät, wie hier beschrieben erneut hinzugefügt werden. +Sobald sie sich danach schreiben, wird die Warnung verschwinden +und die Verschlüsselung ist mit beiden Geräten Ihres Kontakts garantiert.

    -

    Your contact reinstalled Delta Chat using their old account login

    +

    Ihr Kontakt hat Delta Chat mit seinem alten Login neu installiert

    -

    If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. -As soon as they message you afterwards, the warning will be gone -and guaranteed encryption is re-established for this contact.

    +

    Wenn Ihr Kontakt ein Backup hat, +sollte das Profil auf dem neuen Gerät +entfernt werden und stattdessen das Backup importiert werden, um das Konto neu zu erstellen. +Sobald sie sich danach schreiben, wird die Warnung verschwinden +und die garantierte Verschlüsselung wird für diesen Kontakt wiederhergestellt.

    -

    If they don’t have a backup file, it’s best to perform a QR scan -with your chat partner to re-establish guaranteed end-to-end encryption.

    +

    Wenn Ihr Kontakt kein Backup hat, ist es am besten, einen QR-Code-Scan +mit Ihrem Chat-Partner durchzuführen, um die garantierte Ende-zu-Ende-Verschlüsselung wiederherzustellen.

    -

    Your contact sent a mail through a webmail interface or another e-mail app -and will get back to using Delta Chat soon again.

    +

    Ihr Kontakt hat eine E-Mail über Webmail oder eine andere E-Mail-Anwendung gesendet, +wird Delta Chat aber bald wieder benutzen.

    -

    If you are sure that the contact sometimes uses webmail, -or another mail app lacking end-to-end encryption, -then you may accept the warning. -As soon as your contact uses Delta Chat again, -guaranteed end-to-end encryption will be automatically re-established.

    +

    Wenn Sie wissen, dass der Kontakt manchmal Webmail, +oder andere E-Mail-Anwendungen ohne Ende-zu-Ende-Verschlüsselung verwendet, +dann können Sie die Warnung akzeptieren. +Sobald Ihr Kontakt Delta Chat wieder benutzt, +wird die garantierte Ende-zu-Ende-Verschlüsselung automatisch wiederhergestellt.

    -

    Your contact stopped using Delta Chat entirely

    +

    Ihr Kontakt hat die Nutzung von Delta Chat komplett eingestellt

    -

    Sometimes remaining in contact is more important than end-to-end encryption. -“Transport Layer Encryption” (TLS) may still meaningfully protect -the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server -to not read or manipulate your messages, and to not hand them to third parties.

    +

    Manchmal ist es wichtiger, in Kontakt zu bleiben als eine Ende-zu-Ende-Verschlüsselung zu haben; +die “Transport Layer Encryption” (TLS) kann die Vertraulichkeit +Ihrer Nachrichten zwischen Ihrem Gerät und dem E-Mail-Server dennoch schützen. +Ohne Ende-zu-Ende-Verschlüsselung vertrauen Sie und Ihr Chat-Partner jedoch darauf, dass Ihr E-Mail-Server Nachrichten nicht liest oder manipuliert und sie nicht an Dritte weitergibt.

    -

    In any case, you can not do much else than accept the warning. -Please also remove the contact from any active green-checkmarked group -which you can find in “Shared chats” in the Contact profile. -This spares your contact from getting “unreadable” messages.

    +

    In jedem Fall können Sie nicht viel mehr tun, als die Warnung zu akzeptieren. +Bitte entfernen Sie den Kontakt auch aus allen aktiven, grün markierten Gruppen +die Sie unter “Gemeinsame Chats” im Profil des Kontakts finden können. +So vermeiden Sie, dass Ihr Kontakt “unlesbare” Nachrichten erhält.

    -

    If the contact removed Delta Chat because of buggy or undesirable behaviour, -please consider posting to our support forum -to help us identify and address common problems. Thanks!

    +

    Wenn der Kontakt Delta Chat aufgrund von Fehlern oder Bugs nicht mehr verwendet, +können Sie diese in unser Support-Forum schreiben, +und uns so dabei helfen, häufige Probleme zu identifizieren und zu lösen. Vielen Dank!

    @@ -712,10 +818,10 @@ to help us identify and address common problems. Thanks!

    Ja.

    -

    When we talk about an “end-to-end encrypted message” -we always mean a whole message is encrypted, -including all the attachments -and attachment metadata such as filenames.

    +

    Wenn wir von einer “Ende-zu-Ende-verschlüsselten Nachricht” sprechen +meinen wir immer, dass eine ganze Nachricht verschlüsselt ist, +einschließlich aller Anhänge +und Anhang-Metadaten wie Dateinamen.

    @@ -725,25 +831,23 @@ and attachment metadata such as filenames.

    -

    Yes, Delta Chat uses a secure subset of OpenPGP -and only displays a padlock security indicator on a message -if the whole message is properly encrypted and signed. -For example, “Detached signatures” are not treated as secure.

    +

    Ja, Delta Chat verwendet eine sichere Untermenge von OpenPGP +und zeigt nur dann ein Vorhängeschloss auf einer Nachricht an, +wenn die gesamte Nachricht ordnungsgemäß verschlüsselt und signiert ist. +Zum Beispiel werden “Detached Signatures” nicht als sicher betrachtet.

    -

    OpenPGP is not insecure by itself. -Most publically discussed OpenPGP security problems -actually stem from bad usability or bad implementations of tools or apps (or both). -It is particularly important to distinguish between OpenPGP, the IETF encryption standard, -and GnuPG (GPG), a command line tool implementing OpenPGP. -Many public critiques of OpenPGP actually discuss GnuPG which Delta Chat has never used. -Delta Chat rather uses the OpenPGP Rust implementation rPGP, -available as an independent “pgp” package, -and security-audited in 2019.

    +

    Die meisten öffentlich diskutierten OpenPGP-Probleme +resultieren in Wirklichkeit aus schlechter Usability oder schlechter Implementierung von Tools oder Anwendungen - oder beidem. +Es ist besonders wichtig, zwischen OpenPGP, dem IETF-Verschlüsselungsstandard +und GnuPG (GPG), einem Kommandozeilenprogramm, das OpenPGP implementiert, zu unterscheiden. +In vielen öffentlichen Kritiken zu OpenPGP wird GnuPG diskutiert, das Delta Chat nie verwendet hat. +Delta Chat verwendet stattdessen die OpenPGP-Rust-Implementierung rPGP, +die als ein unabhängiges “pgp”-Paket, +verfügbar und 2019 sicherheitsgeprüft wurde.

    -

    We aim, along with other OpenPGP implementors, -to further improve security characteristics by implementing the -new IETF OpenPGP Crypto-Refresh -which was thankfully adopted in summer 2023.

    +

    Unser Ziel ist, zusammen mit anderen OpenPGP-Implementierungen, +die Sicherheitseigenschaften durch das im Sommer 2023 angenommene +IETF OpenPGP Crypto-Refresh weiter zu verbessern.

    @@ -753,21 +857,21 @@ which was thankfully adopted in summer 2023.

    -

    Yes, we are following efforts like MLS -or Saltpack -but adopting them would mean breaking end-to-end encryption interoperability -with all other e-mail apps that typically support OpenPGP encryption. -So it would not be a light decision to take -and there must be tangible improvements for users.

    +

    Ja, wir verfolgen Ansätze wie MLS +oder Saltpack. +Diese zu übernehmen würde aber bedeuten, die Interoperabilität der Ende-zu-Ende-Verschlüsselung +mit allen anderen E-Mail-Anwendungen zu zerstören. +Die Entscheidung wäre also nicht leicht zu treffen +und müsste spürbare Verbesserungen für die Nutzer bringen.

    -

    Delta Chat takes a holistic “usable security” approach -and works with a wide range of activist groupings as well as -renowned researchers such as TeamUSEC -to improve actual user outcomes against security threats. -The wire protocol and standard for establishing end-to-end encryption is -only one part of “user outcomes”, -see also our answers to device-seizure -and message-metadata questions.

    +

    Delta Chat verfolgt einen ganzheitlichen Ansatz bei der “nutzbaren Sicherheit”: +Wir arbeiteten mit vielen Aktivistengruppen sowie mit +renommierten Forschern wie TeamUSEC zusammen, +um die tatsächlichen Ergebnisse der Benutzer gegen Sicherheitsbedrohungen zu verbessern. +Das Wire-Protokoll und der Standard für die Einrichtung der Ende-zu-Ende-Verschlüsselung ist +nur ein Teil der Ergebnisse, +siehe auch unsere Antworten auf Gerätebeschlagnahmung +und Metadaten Fragen.

    @@ -777,16 +881,16 @@ and message-metadata questions.

    -

    No, Delta Chat never was vulnerable to EFAIL -because its OpenPGP implementation rPGP -uses Modification Detection Code when encrypting messages -and returns an error -if the Modification Detection Code is incorrect.

    +

    Nein, Delta Chat war nie anfällig für EFAIL. +Delta Chats OpenPGP-Implementierung rPGP +verwendet beim Verschlüsseln von Nachrichten “Modification Detection Codes” +und gibt Fehler zurück, +wenn dieser falsch ist.

    -

    Delta Chat also never was vulnerable to the “Direct Exfiltration” EFAIL attack -because it only decrypts multipart/encrypted messages -which contain exactly one encrypted and signed part, -as defined by the Autocrypt Level 1 specification.

    +

    Delta Chat war auch nie anfällig für den EFAIL-Angriff “Direct Exfiltration”, +da nur multipart/encrypted Nachrichten entschlüsselt werden, +die genau einen verschlüsselten und signierten Teil enthalten; +so wie in der Autocrypt Level 1 Spezifikation definiert.

    @@ -796,27 +900,26 @@ as defined by the Autocrypt Level 1 specification.

    -

    Even if your messages are not guaranteed to be end-to-end encrypted, -they are still protected from Internet providers like cell or cable companies. -However, your and your recipient’s e-mail providers -may read, analyze or even modify your messages, -including any attachments, -if they are not end-to-end encrypted.

    +

    Auch wenn Ihre Nachrichten nicht Ende-zu-Ende-verschlüsselt sind, +sind sie dennoch vor Internetanbietern wie Mobilfunk- oder Telefongesellschaften geschützt. +Allerdings können Ihr E-Mail-Provider und der des Empfängers +Ihre Nachrichten lesen, analysieren oder sogar verändern, +wenn sie nicht Ende-zu-Ende-verschlüsselt sind.

    -

    Delta Chat by default uses strict -TLS encryption -which secures connections between your device and your e-mail provider. -All of Delta Chat’s TLS-handling has been independently security audited. -Moreover, the connection between your and the recipient’s e-mail provider -will typically be transport-encrypted as well. -If the involved e-mail servers support MTA-STS -then transport encryption will be enforced between e-mail providers -in which case Delta Chat communications will never be exposed in cleartext to the Internet -even if the message was not end-to-end encrypted.

    +

    Delta Chat verwendet standardmäßig strikte +TLS-Verschlüsselung, +die die Verbindungen zwischen Ihrem Gerät und Ihrem E-Mail-Anbieter sichert. +Die gesamte TLS-Implementierung wurde unabhängig sicherheitsgeprüft. +Die Verbindung zwischen Ihrem E-Mail-Providern und dem des Empfängers +ist in der Regel ebenfalls transportverschlüsselt. +Wenn die beteiligten E-Mail-Server MTA-STS unterstützen, +wird TLS zwischen den E-Mail-Anbietern durchgesetzt. +In diesem Fall wird die Delta-Chat-Kommunikation niemals im Klartext ins Internet gelangen +selbst wenn die Nachricht nicht Ende-zu-Ende-verschlüsselt war.

    -

    Note that maintaining guaranteed end-to-end encryption on top of TLS encryption -provides pervasive safety between your and the recipient’s devices. -Not even your e-mail or Internet provider will be able to read or modify your messages.

    +

    Beachten Sie, dass die Beibehaltung der garantierten Ende-zu-Ende-Verschlüsselung zusätzlich zur TLS-Verschlüsselung +eine allumfassende Sicherheit zwischen Ihrem Gerät und dem des Empfängers bietet. +Nicht einmal Ihr E-Mail- oder Internet-Provider wird in der Lage sein, Ihre Nachrichten zu lesen oder zu verändern.

    @@ -826,25 +929,24 @@ Not even your e-mail or Internet provider will be able to read or modify your me

    -

    Delta Chat protects most message metadata by putting the following information -into the end-to-end encrypted part of messages:

    +

    Delta Chat schützt die meisten Metadaten von Nachrichten, indem es die folgenden Informationen +in den Ende-zu-Ende-verschlüsselten Teil der Nachrichten verschiebt:

      -
    • Subject line
    • -
    • Group avatar and name
    • -
    • MDN (read receipt) requests (Chat-Disposition-Notification-To)
    • -
    • Disappearing message timer (Ephemeral-Timer)
    • +
    • Betreffzeile
    • +
    • Avatar und Name der Gruppe
    • +
    • Lesebestätigungen (Chat-Disposition-Notification-To)
    • +
    • Timer für verschwindende Nachrichten (Ephemeral-Timer)
    • Chat-Group-Member-Removed, Chat-Group-Member-Added
    • -
    • Secure-Join header containing secure join commands
    • -
    • Notification about enabling location streaming
    • -
    • WebRTC room URL
    • +
    • Secure-Join-Header
    • +
    • Aktivierung des Standort-Streamings
    • +
    • WebRTC-Raum-URL
    -

    E-Mail servers do not get access to this protected metadata -but they do see the message date as well as the message size, -and, more importantly, the sender and receiver addresses. -E-mail servers need receiver addresses to route and -deliver messages to recipient’s devices.

    +

    E-Mail-Server erhalten keinen Zugriff auf diese geschützten Metadaten, +sehen aber Datum und Größe der Nachricht sowie die Absender- und Empfängeradressen. +E-Mail-Server benötigen Empfängeradressen, um Nachrichten +Nachrichten an die Geräte der Empfänger weiterzuleiten und zuzustellen.

    @@ -854,16 +956,15 @@ deliver messages to recipient’s devices.

    -

    Both for protecting against metadata-collecting e-mail servers -as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts -can not be identified easily, as compared to messengers which reveal -phone numbers in chat groups which in turn are often associated with legal identities.

    +

    Sowohl zum Schutz vor E-Mail-Servern, die Metadaten sammeln +als auch gegen die Gefahr der Beschlagnahmung von Geräten +empfehlen wir die Verwendung einer für Delta Chat optimierten E-Mail-Server-Instanz, um pseudonym-temporäre Konten durch Scannen von QR-Codes zu erstellen. +Beachten Sie, dass Delta-Chat-Apps auf allen Plattformen mehrere Konten unterstützen. +Sie können also problemlos aktionsspezifische “1-Wochen-“ oder “1-Monats-Konten” neben Ihrem “Hauptkonto” verwenden, +mit dem Wissen, dass alle temporären Kontodaten zusammen mit allen Metadaten gelöscht werden. +Wenn ein Gerät beschlagnahmt wird, können Kontakte mit temporären E-Mail-Konten +Konten nicht so leicht identifiziert werden, wie dies bei Messengern der Fall ist, die die +Telefonnummern in Chatgruppen preisgeben, die wiederum oft mit legalen Identitäten verbunden sind.

    @@ -873,11 +974,11 @@ phone numbers in chat groups which in turn are often associated with legal ident

    -

    You may check the end-to-end encryption status manually in the “Encryption” dialog -(user profile on Android/iOS or right-click a user’s chat-list item on desktop). -Delta Chat shows two fingerprints there. -If the same fingerprints appear on your own and your contact’s device, -the connection is safe.

    +

    Sie können den Status der Ende-zu-Ende-Verschlüsselung manuell im Dialog “Verschlüsselung” +(Android/iOS: Benutzerprofil, Desktop: Rechtsklick auf den Chat eines Benutzers) überprüfen. +Delta Chat zeigt dort zwei Fingerabdrücke an. +Wenn die gleichen Fingerabdrücke auf Ihrem eigenen Gerät und auf dem Gerät Ihres Kontakts erscheinen, +ist die Verbindung sicher.

    @@ -887,11 +988,11 @@ the connection is safe.

    -

    A little padlock in a message bubble denotes -that the message was properly end-to-end encrypted from the given sender. -If there is no padlock, the message was not properly end-to-end encrypted -most likely because the sender uses an app or webmail interface -without support for end-to-end–encryption.

    +

    Ein kleines Vorhängeschloss in einer Nachrichten zeigt an, +dass die Nachricht vom Absender korrekt Ende-zu-Ende-verschlüsselt wurde. +Wenn kein Vorhängeschloss vorhanden ist, wurde die Nachricht nicht oder nicht korrekt Ende-zu-Ende-verschlüsselt. +Höchstwahrscheinlich, weil der Absender ein Webmail-Interface oder eine App +ohne Ende-zu-Ende-Unterstützung verwendet.

    @@ -901,15 +1002,13 @@ without support for end-to-end–encryption.

    -

    If a contact uses a non-Autocrypt e-mail app, -all messages involving this contact (in a group or 1:1 chat) -will not be end-to-end encrypted, and thus not show a “padlock” with messages. -Note that even if your contacts use Delta Chat on their account, -they might also use a non-Autocrypt e-mail app on that account -which then may cause intermittently unencrypted messages. -Replying unencrypted to unencrypted messages is mandated by Autocrypt -to prevent unreadable messages on the side of your contacts -and their non-Autocrypt e-mail app.

    +

    Wenn ein Kontakt keine Autocrypt-fähige App verwendet, +werden alle Nachrichten, die diesen Kontakt betreffen (in Gruppen- oder Direkt-Chats) +nicht Ende-zu-Ende-verschlüsselt und zeigen daher kein “Vorhängeschloss”. +Beachten Sie, auch Kontakte, die primär Delta Chat verwenden, +können gleichzeitig auch nicht-Autocrypt-fähige Apps verwenden. +Das unverschlüsselte Antworten auf unverschlüsselte Nachrichten wird von Autocrypt vorgeschrieben +um zu verhindern, dass unlesbare Nachrichten auf der Seite Ihrer Kontakte ankommen.

    @@ -919,13 +1018,12 @@ and their non-Autocrypt e-mail app.

    -

    If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), -it’s best to setup guaranteed end-to-end encryption with them -and then create a guaranteed end-to-end encrypted group chat with you two as members. -In this group chat all messages will be end-to-end encrypted -even if the direct chat between you two has a -“… sent a message from another device” warning.

    +

    Wenn Sie einen sicheren Ende-zu-Ende-verschlüsselten Chat mit einem Kontakt benötigen, +der sowohl Delta Chat als auch nicht-Autocrypt-Anwendungen nutzt, +können Sie eine garantierte Ende-zu-Ende-Verschlüsselung einrichten, mit einer Gruppe mit Ihnen beiden als Mitgliedern. +In diesem Gruppenchat werden alle Nachrichten Ende-zu-Ende verschlüsselt werdejn, +auch wenn im Direkt-Chat eine +“Nachricht von einem anderen Gerät gesendet” wurde.

    @@ -935,14 +1033,14 @@ even if the direct chat between you two has a

    -

    The best way to ensure every message is end-to-end encrypted, -and metadata deleted as quickly as possible -is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

    +

    Der beste Weg, um sicherzustellen, dass alle Nachrichten Ende-zu-Ende verschlüsselt sind +und Metadaten so schnell wie möglich gelöscht werden, +ist die Verwendung von Chats mit garantierter Ende-zu-Ende-Verschlüsselung +und die Aktivierung von Verschwindende Nachrichten.

    -

    Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages -on the server after a user-configured time.

    +

    Garantierte Ende-zu-Ende-Verschlüsselung schützt vor MITM-Angriffen +und das Aktivieren von “Verschwindende Nachrichten” löscht die Nachrichten +auf dem Server und Lokal nach einer vom Benutzer eingestellten Zeit.

    Wenn Sie die Nachrichten auf Ihrem Gerät, aber nicht auf dem Server benötigen, können Sie auch in der Gruppe vereinbaren, “Nachrichten automatisch vom Server löschen” einzuschalten.

    @@ -955,20 +1053,17 @@ on the server after a user-configured time.

    Nein, Delta Chat unterstützt kein “Perfect Forward Secrecy” (PFS). -Das bedeutet, dass wenn Ihr privater Delta Chat-Schlüssel durchgesickert ist, +Das bedeutet, dass wenn Ihr privater Delta-Chat-Schlüssel durchgesickert ist, und jemand Ihre vorherigen In-Transit-Nachrichten gesammelt hat, können diese mit dem veröffentlichtem Schlüssel entschlüsselt werden.

    -

    Beachten Sie jedoch, dass jemand, der in den Besitz Ihrer privaten Schlüssel gelangt, -unabhängig davon, ob Perfect Forward Secrecy vorhanden ist oder nicht, -in der Regel auch in der Lage sein wird, Ihre Nachrichten zu lesen. -Die typische reale Situation für durchgesickerte private Schlüssel, ist die Beschlagnahme von Geräten, -die wir in unter [über Metadaten und Gerätebeschlagnahme] (#device-seizure) erörtern.

    +

    Beachten Sie jedoch, dass jemand, der in den Besitz Ihrer privaten Schlüssel gelangt, in der Regel auch in der Lage sein wird, Ihre Nachrichten zu lesen - unabhängig davon, ob Perfect Forward Secrecy nun verwendet wird oder nicht. +Die typische, reale Situation für durchgesickerte private Schlüssel, ist die Beschlagnahme von Geräten.

    -

    Es ist möglich, dass Delta Chat eine Tages “Perfect Forward Secrecy” unterstützt, -denn OpenPGP ist nur ein Container für verschlüsselte Nachrichten; +

    Es ist möglich, dass Delta Chat eine Tages “Perfect Forward Secrecy” unterstützt - +OpenPGP ist nur ein Container für verschlüsselte Nachrichten mit dem die Verwaltung der Schlüssel (und damit die Schlüsselrotation oder das Schlüssel-“Ratcheting”) -kann auf flexible Weise organisiert werden könnte. +auf flexible Weise organisiert werden kann. Siehe Seqouia’s PFS-Prototyp für bestehende Experimente in der OpenPGP-Community.

    @@ -982,12 +1077,12 @@ für bestehende Experimente in der OpenPGP-Community.

    Das hängt davon ab, was für Sie wichtig ist. Delta Chat unterstützt kein PFS, -bietet aber garantiert Ende-zu-Ende-verschlüsselte Chats, -die vor kompromittierten Servern oder korrupten Netzwerken sicher sind. +bietet aber garantierte Ende-zu-Ende-Verschlüsselung, +die vor kompromittierten Servern oder korrupten Netzwerken schützt. Signal und die meisten anderen PFS-unterstützenden Messenger bieten kein -praktisches System zum Schutz von Chatgruppen vor Netzwerkangriffen, -die besorgniserregender und realer sind -als ein potenzieller Angreifer, der zwar Ihr Telefon und Ihre privaten Schlüssel beschlagnahmt +praktisches System zum Schutz von Chatgruppen vor Netzwerkangriffen. +Diese sind besorgniserregender und realer +als ein potenzieller Angreifer, der zwar Ihr Telefon und Ihre privaten Schlüssel beschlagnahmt, aber irgendwie nicht Ihre Nachrichten - gleichzeitig aber eine vollständige Aufzeichnung aller vergangenen verschlüsselten Nachrichten hat.

    @@ -1008,7 +1103,7 @@ Look for something like Start Autocrypt Setup Transfer in the s
    • -

      Alternativ können Sie den Schlüssel manuell unter “Einstellungen -> Erweitert -> Schlüssel verwalten -> Importiere geheime Schlüssel” importieren. Achtung: Stellen Sie sicher, dass der Schlüssel nicht durch ein Passwort geschützt ist, oder entfernen Sie das Passwort vorher.

      +

      Alternativ können Sie den Schlüssel manuell unter “Einstellungen → Erweitert → Schlüssel verwalten → Importiere geheime Schlüssel” importieren. Achtung: Stellen Sie sicher, dass der Schlüssel nicht durch ein Passwort geschützt ist, oder entfernen Sie das Passwort vorher.

    • Wenn Sie keinen Schlüssel besitzen oder nicht einmal wissen, dass Sie einen benötigen - keine Sorge: Delta Chat erstellt einen Schlüssel, wenn er benötigt wird. Sie müssen nichts weiter tun.

      @@ -1023,14 +1118,15 @@ Look for something like Start Autocrypt Setup Transfer in the s +

      Mit sehr großer Wahrscheinlichkeit besteht das Problem darin, dass Ihr Schlüssel verschlüsselt ist und/oder ein Passwort verwendet. Solche Schlüssel werden von Delta Chat nicht unterstützt. Bitte entfernen Sie die Verschlüsselung und das Passwort und versuchen Sie den Import danach erneut.

      + +

      Ein weiterer häufiger Fehler ist die falsche Dateiendung. +Verwenden Sie das ASCII-Armored-Format und die Dateiendung .asc.

      +
        -
      • -

        Wahrscheinlich ist Ihr Schlüssel verschlüsselt und/oder mit einem Passwort geschützt. Solche Schlüssel werden von Delta Chat nicht unterstützt. Bitte entfernen Sie die Verschlüsselung und das Passwort und versuchen Sie den Import danach erneut. -Wenn Sie das Passwort nicht entfernen möchten, müssen Sie einen E-Mail-Alias zur Nutzung mit Delta Chat anlegen, sodass der Schlüssel von Delta Chat mit diesem E-Mail-Alias verknüpft ist.

        -
      • Delta Chat unterstützt “gängige” private Schlüsselformate, allerdings ist es unwahrscheinlich, dass wir 100% aller privaten Schlüssel aus sämtlichen Quellen unterstützen. -Dies ist auch nicht das Hauptaugenmerk von Delta Chat. Tatsächlich besitzt die große Mehrheit der Delta Chat-NutzerInnen keinen Schlüssel, bevor sie Delta Chat verwendet. +Dies ist auch nicht das Hauptaugenmerk von Delta Chat. Tatsächlich besitzt die große Mehrheit der Delta-Chat-NutzerInnen keinen Schlüssel, bevor sie Delta Chat verwendet. Wir versuchen jedoch, private Schlüssel aus anderen Quellen so gut wie möglich zu unterstützen.

      • @@ -1041,6 +1137,37 @@ Für andere Programme können Sie online eine Lösung finden.

      +

      + + + Wurde Delta Chat unabhängig auf Sicherheitslücken geprüft? + + +

      + +

      Das Delta-Chat-Projekt wurde in den letzten Jahren fünf unabhängigen Sicherheitsprüfungen und -analysen unterzogen:

      + +
        +
      • +

        Im März 2024 erhielten wir von der Forschungsgruppe “Applied Cryptography” der ETH Zürich eine umfassende Sicherheitsanalyse und haben alle aufgeworfenen Fragen adressiert. +Weitere Informationen finden Sie in unserem Blogbeitrag über Hardening Guaranteed End-to-End encryption und in der hinterher publizierten Kryptografischen Analyse von Delta Chat

        +
      • +
      • +

        Im April 2023 haben wir Sicherheits- und Datenschutzprobleme mit den “In Chats geteilten Apps”-Feature behoben, die mit Fehlern beim Sandboxing, insbesondere mit Chromium zusammenhängen. Wir haben daraufhin eine unabhängige Sicherheitsprüfung von Cure53 durchführen lassen, und alle gefundenen Probleme wurden mit den im April 2023 veröffentlichten 1.36 Releases behoben. Siehe hier für die vollständige Hintergrundgeschichte.

        +
      • +
      • +

        Im März 2023 analysierte Cure53 sowohl die Transportverschlüsselung von Delta Chats Netzwerkverbindungen als auch das reproduzierbare Mailserver-Setup wie auf dieser Seite empfohlen. Sie können mehr über das Audit in unserem Blog lesen oder Sie lesen den vollständigen Bericht hier.

        +
      • +
      • +

        Im Jahr 2020 analysierte Include Security Delta Chats Rust core, IMAP,SMTP, und TLS Bibliotheken. +Es wurden keine kritischen oder hochgradig gefährlichen Probleme gefunden. Der Bericht wies auf einige Schwachstellen mittlerer Schwere hin - sie stellen für sich genommen keine Bedrohung für Delta-Chat-Benutzer dar, da sie von der Umgebung abhängen, in der Delta Chat verwendet wird. Aus Gründen der Benutzerfreundlichkeit und der Kompatibilität können wir nicht alle Schwachstellen beseitigen und haben beschlossen, Sicherheitsempfehlungen für bedrohte Benutzer zu geben. Sie können den vollständigen Bericht hier lesen.

        +
      • +
      • +

        Im Jahr 2019 analysierte Include Security die von Delta Chat verwendeten PGP und RSA Bibliotheken. +Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schweregrad, die wir anschließend behoben haben. Außerdem wurden ein mittelschweres und einige weniger schwerwiegende Probleme gefunden, aber es gab keine Möglichkeit, diese Schwachstellen in der Delta-Chat-Implementierung auszunutzen. Einige dieser Schwachstellen haben wir dennoch nach Abschluss des Audits behoben. Sie können den [vollständigen Bericht hier] lesen (../assets/blog/2019-first-security-review.pdf).

        +
      • +
      +

      @@ -1057,7 +1184,7 @@ Für andere Programme können Sie online eine Lösung finden.

      -

      Ja. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

      +

      Ja. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      • @@ -1091,9 +1218,18 @@ Für andere Programme können Sie online eine Lösung finden.

      • Vergewissern Sie sich, dass beide Geräte mit dem gleichen Wi-Fi, WLAN oder Netzwerk verbunden sind.

      • +
      • +

        Unter Windows, Systemsteuerung / Netzwerk und Internet öffnen +und sicherstellen, dass Privates Netzwerk als “Netzwerkprofiltyp” ausgewählt ist. +(nach der Übertragung kann wieder der ursprüngliche Wert verwendet werden)

        +
      • Ihr System verfügt möglicherweise über eine “Personal Firewall”, diese sind dafür bekannt, Probleme zu verursachen (insbesondere bei Windows). Deaktivieren Sie die Personal Firewall für Delta Chat auf beiden Seiten und versuchen Sie es erneut

      • +
      • +

        In Gastnetzwerken z.B. der Fritz!Box, können Geräte möglicherweise nicht miteinander kommunizieren. +Verwenden Sie nach Möglichkeit ein Nicht-Gast-Netzwerk. Wenn Sie Zugriff auf den Router haben, können Sie auch die Kommunikation der Geräte untereinander für die Dauer der Übertragung erlauben.

        +
      • Vergewissern Sie sich, dass das Zielgerät über genügend Speicher verfügt

      • @@ -1101,7 +1237,7 @@ Für andere Programme können Sie online eine Lösung finden.

        Wenn die Übertragung begonnen hat, stellen Sie sicher, dass die Geräte aktiv bleiben und nicht ausgehen. Beenden Sie Delta Chat nicht. (wir bemühen uns, die App im Hintergrund laufen zu lassen, aber Systeme neigen dazu, Apps zu beenden, leider)

      • -

        Sie sind auf dem Zielgerät bereits eingeloggt? Sie können mehrere Konten pro Gerät verwenden, fügen Sie einfach ein weiteres Konto hinzu

        +

        Sie sind auf dem Zielgerät bereits eingeloggt? Sie können mehrere Profile pro Gerät verwenden, fügen Sie einfach ein weiteres Konto hinzu

      • Wenn Sie immer noch Probleme haben oder wenn Sie keinen QR-Code scannen können versuchen Sie die manuelle Übertragung wie unten beschrieben

        @@ -1119,7 +1255,7 @@ Für andere Programme können Sie online eine Lösung finden.

        Diese Methode wird nur empfohlen, wenn “Zweites Gerät hinzufügen”, wie oben beschrieben, nicht funktioniert.

          -
        • Auf dem alten Gerät gehen Sie zu “Einstellungen -> Chats und Medien -> Chats auf externem Speicher speichern”. Geben Sie Ihre PIN, Ihr Muster oder Ihr Passwort zum Entsperren des Bildschirms ein. Anschließend können Sie auf “Backup starten” klicken. Dadurch wird die Backup-Datei auf Ihrem Gerät gespeichert. Jetzt müssen Sie sie irgendwie auf das andere Gerät übertragen.
        • +
        • Auf dem alten Gerät gehen Sie zu “Einstellungen → Chats und Medien → Chats auf externem Speicher speichern”. Geben Sie Ihre PIN, Ihr Muster oder Ihr Passwort zum Entsperren des Bildschirms ein. Anschließend können Sie auf “Backup starten” klicken. Dadurch wird die Backup-Datei auf Ihrem Gerät gespeichert. Jetzt müssen Sie sie irgendwie auf das andere Gerät übertragen.
        • Auf dem neuen Gerät, auf dem Anmeldebildschirm, wählen Sie, anstatt sich bei Ihrem E-Mail-Konto anzumelden, “Wiederherstellen aus Backup”. Nach dem Import sollten Ihre Unterhaltungen, Verschlüsselungsschlüssel und Medien auf das neue Gerät kopiert sein.
          • Wenn Sie iOS verwenden und auf Schwierigkeiten stoßen, hilft Ihnen vielleicht diese Anleitung.
          • @@ -1142,42 +1278,6 @@ Für andere Programme können Sie online eine Lösung finden.

          • 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 get.delta.chat.
          -

          - - - Was macht die Option “Kopie an mich selbst senden”? - - -

          - -

          Das Senden einer Kopie an Sie selbst stellt sicher, dass Sie Ihre eigenen Nachrichten auf all Ihren Geräten sehen. Wenn Sie mehrere Geräte nutzen, aber diese Option nicht eingeschaltet ist, sehen Sie nur die Nachrichten, die andere Ihnen geschickt haben, und die ausgehenden Nachrichten, die auf dem Gerät selbst verschickt wurden.

          - -

          Die Kopie wird dabei an den Posteingang verschickt und von dort in den DeltaChat-Ordner verschoben. Delta Chat lädt niemals etwas in den Gesendet-Ordner hoch, weil dies bedeuten würde, dass eine Nachricht zweimal hochgeladen werden müsste (einmal durch SMTP und dann durch IMAP in den Gesendet-Ordner).

          - -

          Die Standardeinstellung für “Kopie an mich selbst senden” ist “Aus”.

          - -

          - - - Warum gibt es die Funktion “Gesendet-Ordner beobachten”? - - -

          - -

          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.

          - -

          Wir empfehlen für diesen Zweck aber “Delta Chat Desktop”; Sie können die App unter get.delta.chat herunterladen. Möglicherweise wird die Option “Gesendet-Ordner beobachten” zukünftig wegfallen; sie kommt aus einer Zeit, als Delta Chat Desktop noch nicht auf allen Plattformen zur Verfügung stand.

          - -

          - - - Warum kann ich “DeltaChat-Ordner beobachten” ausschalten? - - -

          - -

          Einige BenutzerInnen verwenden Delta Chat als reguläres E-Mail-Programm und möchten lieber den Posteingang anstatt des DeltaChat-Ordners verwenden. Wenn Sie “DeltaChat-Ordner beobachten” ausschalten, sollten Sie auch “Autom. Verschieben in den DeltaChat-Ordner” ausschalten. Andernfalls funktioniert die Verwendung auf mehreren Geräten möglicherweise nicht richtig.

          -

          @@ -1198,7 +1298,7 @@ Für andere Programme können Sie online eine Lösung finden.

          • Webxdc Apps können keine Daten ins Internet senden oder etwas herunterladen.
          • -
          • Eine Webxdc App kann Daten nur innerhalb eines Delta Chat-Chats mit ihren Kopien auf den Geräten Ihrer Chat-Partner austauschen. Ansonsten ist sie komplett vom Internet isoliert.
          • +
          • Eine Webxdc App kann Daten nur innerhalb eines Delta-Chat-Chats mit ihren Kopien auf den Geräten Ihrer Chat-Partner austauschen. Ansonsten ist sie komplett vom Internet isoliert.
          • Die Privatsphäre, die eine Webxdc App bietet, ist die Privatsphäre Ihres Chats - solange Sie den Personen vertrauen, mit denen Sie chatten, können Sie auch der Webxdc App vertrauen.
          • Das bedeutet auch: Es kann ein Datenschutzrisiko darstellen, Webxdc Apps in Chats zu öffnen, in denen man den Mitgliedern nicht vertraut - so wie man es von E-Mail-Anhängen kennt, wo man nur Anhänge von Absendern öffnet, denen man vertraut, und nicht von Spammern.
          @@ -1232,7 +1332,7 @@ forum veröffentlicht und diskutiert.

        • Webxdc Apps sind nur ZIP-Dateien, die HTML-, CSS- und JavaScript-Code enthalten.
        • Sie können die Hello World-Beispiel-App erweitern, um loszulegen.
        • Alles andere, was Sie wissen müssen, steht in der Dokumentation.
        • -
        • Wenn Sie Fragen haben, können Sie andere mit Erfahrung im Delta Chat-Forum fragen.
        • +
        • Wenn Sie Fragen haben, können Sie andere mit Erfahrung im Delta-Chat-Forum fragen.

        @@ -1243,7 +1343,7 @@ forum veröffentlicht und diskutiert.

      • -

        Wir sind sehr dankbar für Feedback zu diesen Funktionen - möchten Sie Ihre Ideen teilen? Treten Sie dem Forum bei, um einen Beitrag zu leisten. (Sie mögen Experimente? Registrieren Sie sich über “Sign Up -> with Delta Chat”!)

        +

        Wir sind sehr dankbar für Feedback zu diesen Funktionen - möchten Sie Ihre Ideen teilen? Treten Sie dem Forum bei, um einen Beitrag zu leisten. (Sie mögen Experimente? Registrieren Sie sich über “Sign Up → with Delta Chat”!)

        @@ -1270,7 +1370,7 @@ forum veröffentlicht und diskutiert.

          -
        • Mit einer Broadcast-Liste können Sie eine Nachricht an viele Empfänger gleichzeitig senden; wenn sie Ihnen antworten, erhalten Sie die Antwort in Ihrem direkten 1:1-Chat mit ihnen. Die Empfänger können einander nicht sehen.
        • +
        • Mit einer Broadcast-Liste können Sie eine Nachricht an viele Empfänger gleichzeitig senden; wenn sie Ihnen antworten, erhalten Sie die Antwort im Direktchat mit ihnen. Die Empfänger können einander nicht sehen.
        • Technisch gesehen handelt es sich um eine E-Mail mit vielen Empfängern in BCC.
        • Sie können die Funktion im Abschnitt “Experimentelle Features” in den erweiterten Einstellungen aktivieren. Dann können Sie im Dialogfeld “Neuer Chat” eine Broadcast-Liste erstellen.
        • Falls Sie mehr als ein Gerät verwenden, werden Broadcast-Listen derzeit nicht zwischen ihnen synchronisiert.
        • @@ -1290,7 +1390,7 @@ forum veröffentlicht und diskutiert.
        • Wenn Sie nun Ihren Standort in einem Chat teilen möchten, gehen Sie zu “Anhängen” und wählen Sie “Standort”. Sie können nun einen Zeitraum zwischen 5 Minuten und 6 Stunden festlegen, in dem Ihr Standort an Ihre Chat-Partner gestreamt wird.
        • Wenn sich Ihr Standort ändert, können die anderen im Chat ihn auf einer Karte im Chat sehen.
        • Um die Karte und die Standorte anderer anzuzeigen, müssen Sie die Funktion in den erweiterten Einstellungen aktivieren.
        • -
        • Diese Funktion teilt Ihren Standort mit niemandem außer Ihren Chat-Partnern. Aber: Um die Karte anzuzeigen, müssen wir Kartenkacheln von mapbox.com herunterladen. Wenn Sie also die Karte ansehen, wird mapbox.com nach der Karte eines bestimmten Gebiets gefragt. Wenn dies ein Datenschutzrisiko für Sie darstellt, ist diese Funktion möglicherweise nicht für Sie geeignet. Wir arbeiten daran, eine dezentrale Alternative für Mapbox zu finden.
        • +
        • Diese Funktion teilt Ihren Standort mit niemandem außer Ihren Chat-Partnern. Kartendaten werden von OpenStreetMap heruntergeladen.
        • Auf dem Desktop kann das Betriebssystem Ihren Standort normalerweise nicht bestimmen. Stattdessen können Sie mit der rechten Maustaste auf die Karte klicken und einen Ort beschreiben, der als Nachricht an den Chat gesendet wird, aber auch auf der Karte erscheint.
        @@ -1306,7 +1406,7 @@ forum veröffentlicht und diskutiert.
      • Im Moment ist die Datenbankverschlüsselung noch sehr experimentell. Verlassen Sie sich zum Schutz nicht darauf, sondern nutzen Sie zusätzlich die Verschlüsselung Ihres Betriebssystems, sofern vorhanden.
      • Die Datenbankverschlüsselung verschlüsselt noch nicht die Blobs, sondern nur die Zeilen und Spalten der Datenbank. Dies bedeutet mehr oder weniger, dass Ihre Nachrichten sicher sind, aber nicht Ihre Anhänge.
      • Für iOS und Android werden die Verschlüsselungsschlüssel im Systemschlüsselbund gespeichert. Das bedeutet, dass die Verschlüsselung so sicher ist wie das Betriebssystem, auf dem sie ausgeführt wird.
      • -
      • Der Delta Chat-Desktop-Client bietet noch keine Datenbankverschlüsselung, da es keine Standardmethode zum Speichern der Verschlüsselungsschlüssel auf den verschiedenen unterstützten Plattformen gibt.
      • +
      • Der Delta-Chat-Desktop-Client bietet noch keine Datenbankverschlüsselung, da es keine Standardmethode zum Speichern der Verschlüsselungsschlüssel auf den verschiedenen unterstützten Plattformen gibt.

      @@ -1317,7 +1417,7 @@ forum veröffentlicht und diskutiert.

    • -

      Dies ist eine experimentelle Einstellung für BenutzerInnen, die serverseitige Regeln verwenden möchten. Dies wird nicht von allen Providern unterstützt, aber bei einigen können Sie Nachrichten mit einem “Chat-Version”-Header vom Server in den DeltaChat-Ordner verschieben. Normalerweise wird dies von der Delta Chat-App erledigt.

      +

      Dies ist eine experimentelle Einstellung für BenutzerInnen, die serverseitige Regeln verwenden möchten. Dies wird nicht von allen Providern unterstützt, aber bei einigen können Sie Nachrichten mit einem “Chat-Version”-Header vom Server in den DeltaChat-Ordner verschieben. Normalerweise wird dies von der Delta-Chat-App erledigt.

      Die Aktivierung von “Nur aus DeltaChat-Ordner lesen” ist sinnvoll, wenn Sie beides haben:

      @@ -1328,36 +1428,36 @@ forum veröffentlicht und diskutiert.

      In diesem Fall muss Delta Chat den Posteingang nicht beobachten, und es reicht aus, nur den DeltaChat-Ordner zu beobachten.

      -

      +

      - Wie kann ich mein Konto auf eine andere E-Mail-Adresse ändern? + Wie kann ich mein Profil auf eine andere E-Mail-Adresse ändern?

      1. -

        Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). -You will get an information notice about the fact that you are moving to a new address. -An additional notice will also show up in your “Device messages” chat.

        +

        Ändern Sie Ihre E-Mail-Adresse unter “Einstellungen → Erweitert → Passwort und E-Mail-Konto” und +geben Sie das Passwort Ihres neuen E-Mail-Konto (und ggf. die Servereinstellungen) ein. +Sie erhalten einen Hinweis darauf, dass Sie zu einer neuen E-Mail-Adresse umziehen. +Ein zusätzlicher Hinweis erscheint auch in Ihrem Chat “Systemnachrichten”.

      2. -

        If possible, let your old e-mail provider forward all messages to your new address.

        +

        Wenn möglich, weisen Sie Ihren alten E-Mail-Provider an, alle Nachrichten an die neue Adresse weiterzuleiten.

      3. -

        Tell your contacts that you changed your address. -Writing to guaranteed end-to-end encrypted chats and groups, -will make them notice your move automatically -and they will continue chatting with you using your new address.

        +

        Teilen Sie Ihren Kontakten mit, dass Sie Ihre E-Mail-Adresse geändert haben. +Sobald Sie in “Garantiert Ende-zu-Ende-verschlüsselten” Chats schreiben, +werden die anderen Mitglieder automatisch von Ihrem Umzug erfahren +und werden mit Ihnen unter Ihrer neuen Adresse weiterchatten.

      -

      Note that Delta Chat will not retrieve messages anymore from your old e-mail provider. -If you didn’t configure your e-mail provider to forward messages (step 2.) -only those contacts to whom you sent a message in a guaranteed end-to-end encrypted chat -will send messages to your new address.

      +

      Beachten Sie, dass Delta Chat keine Nachrichten mehr von Ihrem alten E-Mail-Anbieter abrufen wird. +Wenn Sie Ihren E-Mail-Provider nicht für die Weiterleitung von Nachrichten konfiguriert haben (Schritt 2.) +werden nur die Kontakte, denen Sie eine Nachricht in einem garantiert Ende-zu-Ende-verschlüsselten Chat gesendet haben +gesendet haben, Nachrichten an Ihre neue Adresse senden.

      Um mehr über die Details dahinter zu erfahren, lesen Sie unseren Blogpost dazu.

      @@ -1369,6 +1469,58 @@ will send messages to your new address.

      +

      + + + Welche App-Berechtigungen benötigt Delta Chat? + + +

      + +

      Je nach verwendetem Betriebssystem werden Sie möglicherweise aufgefordert, der App Berechtigungen zu erteilen. Diese werden wie folgt verwendet:

      + +
        +
      • Kamera (kann verweigert werden) +
          +
        • Bilder und Videos aufnehmen: Um Fotos zu senden
        • +
        +
      • +
      • Kontakte (kann verweigert werden) +
          +
        • Kontakte lesen: Um Kontakte zum Chatten zu finden
        • +
        +
      • +
      • Standort (kann verweigert werden) +
          +
        • Auf den ungefähren Standort zugreifen (netzwerkbasiert): Für die Standortübertragungsfunktion
        • +
        • Auf genauen Standort zugreifen (GPS- und netzwerkbasiert): Für die Standortübertragungsfunktion
        • +
        +
      • +
      • Mikrofon (kann verweigert werden) +
          +
        • Audio aufnehmen: Für Sprachnachrichten
        • +
        +
      • +
      • Speicher (kann verweigert werden) +
          +
        • SD-Karteninhalte ändern oder löschen: Um Nachrichtenanhänge herunterzuladen
        • +
        • SD-Karteninhalte lesen: Um Dateien mit Ihren Kontakten zu teilen
        • +
        +
      • +
      • Andere Berechtigungen: +
          +
        • Audio-Einstellungen ändern: Um Klingeltöne und die Lautstärke für Benachrichtigungen und Audionachrichten zu wählen
        • +
        • Beim Start ausführen: Um Delta Chat nicht manuell starten zu müssen
        • +
        • Vibrationsalarm steuern: Für Benachrichtigungen
        • +
        • Netzwerkverbindungen abrufen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
        • +
        • Ruhezustand deaktivieren: Um den Sicherheitscode während der Autocrypt-Setupnachricht einfacher abtippen zu können
        • +
        • Auf alle Netzwerke zugreifen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
        • +
        • WLAN-Verbindungen abrufen: Um eine Verbindung zu Ihrem E-Mail-Anbieter herzustellen
        • +
        • Fragen, ob Akku-Leistungsoptimierungen ignoriert werden können: Für NutzerInnen, die permanent Nachrichten empfangen möchten
        • +
        +
      • +
      +

      @@ -1395,21 +1547,108 @@ Allerdings benötigen einige Anbieter besondere Einstellungen, um ordnungsgemä
    • Auf unserer Webseite finden Sie eine Installationsanleitung.
    -

    +

    - Delta Chat verwendet E-Mail - ist es dann wirklich ein Instant Messenger? + Weshalb muss ich mein E-Mail-Kennwort in Delta Chat eingeben? Ist das sicher? + + +

    + +

    Genau wie auch bei anderen E-Mail-Programmen (z. B. Thunderbird, K9-Mail oder Outlook) benötigt Delta Chat das Passwort, um E-Mails versenden zu können. Das Passwort wird nur auf Ihrem Gerät gespeichert und bei der Anmeldung an Ihren E-Mail-Anbieter gesendet.

    + +

    Wenn Sie einen E-Mail-Anbieter wie gmail.com oder yandex.ru nutzen, der OAuth2 unterstützt, wird Ihr Passwort nicht auf Ihrem Gerät gespeichert. In diesem Fall wird nur ein Zugriffstoken genutzt.

    + +

    Da Delta Chat Open Source ist, können Sie den Quellcode einsehen und sich davon überzeugen, dass Ihre Zugangsdaten sicher gehandhabt werden. Wir freuen uns über Feedback, das unsere App sicherer für all unsere NutzerInnen macht.

    + +

    + + + Welche Nachrichten erscheinen in Delta Chat? + + +

    + +

    In der Standardeinstellung zeigt Delta Chat alle E-Mails an.

    + +

    Unter “Einstellungen → Erweitert → Normale E-Mails anzeigen” können Sie dies ändern. Sie haben die folgenden Optionen:

    + +
      +
    • “Nein, nur Chats”: Es werden die von anderen Delta-Chat-Benutzern gesendeten Nachrichten sowie alle Antworten auf Ihre Nachrichten angezeigt. Dies ist sinnvoll, wenn Sie das gleiche E-Mail-Konto noch mit einer anderen E-Mail-App bearbeiten.
    • +
    • “Alle”: Delta Chat zeigt alle E-Mails an, die an Ihre E-Mail-Adresse gesendet werden. Dies ist sinnvoll, wenn Sie Delta Chat für alle Ihre E-Mails verwenden möchten, damit keine Nachricht verloren geht. Dies ist die Standardeinstellung.
    • +
    • “Akzeptierte Kontakte”: Delta Chat zeigt alle E-Mails von Kontakten an, mit denen Sie bereits einen Chat haben, aber neue Chats werden nur für Delta Chat-Nachrichten angezeigt. So können Sie von Fall zu Fall entscheiden, ob Sie eine Unterhaltung in Delta Chat oder in einer “normalen” E-Mail-App führen möchten.
    • +
    + +

    + + + Unterstützt Delta Chat HTML-E-Mails?

      -
    • Typischerweise benötigt das Senden und Empfangen von Nachrichten nur wenige Sekunden. Es gibt Fälle, in denen es länger dauert, aber das trifft auch auf andere Messenger zu.
    • -
    • Das Chatten geht schnell, wenn beide Seiten die App aktiv verwenden. Wenn die App im Hintergrund läuft, kann es zu Verzögerungen kommen.
    • -
    • Das Empfangen von Nachrichten im Hintergrund kann deshalb manchmal Minuten dauern, weil Android und iOS Delta Chat daran hindert, im Hintergrund zu laufen, und die App so nur gelegentlich aktiv ist. Diese künstliche Verzögerung ist eher unter iOS zu spüren als unter Android.
    • -
    • Dass Android und iOS Apps, die im Hintergrund laufen, beenden, ist allerdings ein Problem, das viele legitime Apps haben. Für weitere Informationen siehe dontkillmyapp.com.
    • +
    • Ja. Eingehende HTML-Nachrichten erhalten eine Schaltfläche “Ganze Nachricht anzeigen”. Ausgehende E-Mails verwenden immer “Nur Text”.
    +

    + + + Kann ich den E-Mail “Betreff” (das “Subject”) mit Delta Chat setzen? + + +

    + +

    Delta Chat setzt (und verschlüsselt!) die klassische E-Mail-Betreffzeile +automatisch auf den Gruppennamen oder den Absendernamen.

    + +

    Wenn Sie also den Betreff selbst festlegen möchten, +zum Beispiel für eine formelle E-Mail an einen Geschäftskontakt, +können Sie eine Gruppe erstellen +erstellen, die nur Sie und den/die Empfänger enthält. +Setzen Sie den Chat-Titel auf den von Ihnen gewünschten Betreff. +Wenn die Empfänger Delta Chat nicht verwenden, +wird sie wie eine normale, +formelle E-Mail aussehen. +Bonuspunkte für Professionalität gibt es, +wenn Sie eine Signaturtext einfügen.

    + +

    + + + Was macht die Option “Kopie an mich selbst senden”? + + +

    + +

    Das Senden einer Kopie an Sie selbst stellt sicher, dass Sie Ihre eigenen Nachrichten auf all Ihren Geräten sehen. Wenn Sie mehrere Geräte nutzen, aber diese Option nicht eingeschaltet ist, sehen Sie nur die Nachrichten, die andere Ihnen geschickt haben, und die ausgehenden Nachrichten, die auf dem Gerät selbst verschickt wurden.

    + +

    Die Kopie wird dabei an den Posteingang verschickt und von dort in den DeltaChat-Ordner verschoben. Delta Chat lädt niemals etwas in den Gesendet-Ordner hoch, weil dies bedeuten würde, dass eine Nachricht zweimal hochgeladen werden müsste (einmal durch SMTP und dann durch IMAP in den Gesendet-Ordner).

    + +

    Die Standardeinstellung für “Kopie an mich selbst senden” ist “An”.

    + +

    + + + Warum gibt es die Funktion “Gesendet-Ordner beobachten”? + + +

    + +

    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.

    + +

    Wir empfehlen für diesen Zweck aber “Delta Chat Desktop”; Sie können die App unter get.delta.chat herunterladen. Möglicherweise wird die Option “Gesendet-Ordner beobachten” zukünftig wegfallen; sie kommt aus einer Zeit, als Delta Chat Desktop noch nicht auf allen Plattformen zur Verfügung stand.

    + +

    + + + Warum kann ich “DeltaChat-Ordner beobachten” ausschalten? + + +

    + +

    Einige BenutzerInnen verwenden Delta Chat als reguläres E-Mail-Programm und möchten lieber den Posteingang anstatt des DeltaChat-Ordners verwenden. Wenn Sie “DeltaChat-Ordner beobachten” ausschalten, sollten Sie auch “Autom. Verschieben in den DeltaChat-Ordner” ausschalten. Andernfalls funktioniert die Verwendung auf mehreren Geräten möglicherweise nicht richtig.

    +

    @@ -1423,9 +1662,21 @@ Allerdings benötigen einige Anbieter besondere Einstellungen, um ordnungsgemä
  • Nein, Sie können sich nicht mit Delta Chat in ein Protonmail-, Tutanota- oder Criptext-Konto einloggen, da diese keinen Standard-E-Mail-Empfang über IMAP anbieten.
  • Ja, Sie können Delta Chat verwenden, um Nachrichten an Personen zu senden, die Protonmail, Tutanota oder Criptext verwenden. Diese Nachrichten werden jedoch nicht ende-zu-ende-verschlüsselt, da diese Anbieter keine mit dem Autocrypt-Standard kompatible Verschlüsselung verwenden.
  • Delta Chat kann Ende-zu-Ende-Verschlüsselung über jeden E-Mail-Anbieter mit jeder -[Autocrypt-fähige E-Mail-Anwendung] (https://autocrypt.org/dev-status.html) herstellen
  • +Autocrypt-fähige E-Mail-Anwendung herstellen +

    + + + Wie kann ich mein Konto löschen? + + +

    + +

    Da Sie ein E-Mail-Konto für Delta Chat 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.

    + +

    Wenn Sie das Konto behalten, aber Delta Chat deinstallieren möchten, ist es ratsam, aktive Gruppen zu verlassen, bevor Sie Delta Chat deinstallieren.

    +

    @@ -1438,33 +1689,6 @@ Allerdings benötigen einige Anbieter besondere Einstellungen, um ordnungsgemä
  • Siehe hierzu in Delta Chat genutzte Standards.
  • -

    - - - Wurde Delta Chat unabhängig auf Sicherheitslücken geprüft? - - -

    - -

    Das Delta-Chat-Projekt wurde in den letzten Jahren vier unabhängigen Sicherheitsprüfungen unterzogen:

    - -
      -
    • -

      Im Jahr 2019 analysierte Include Security die von Delta Chat verwendeten PGP und RSA Bibliotheken. -Es wurden keine kritischen Probleme gefunden, aber zwei Probleme mit hohem Schweregrad, die wir anschließend behoben haben. Außerdem wurden ein mittelschweres und einige weniger schwerwiegende Probleme gefunden, aber es gab keine Möglichkeit, diese Schwachstellen in der Delta Chat-Implementierung auszunutzen. Einige dieser Schwachstellen haben wir dennoch nach Abschluss des Audits behoben. Sie können den [vollständigen Bericht hier] lesen (../assets/blog/2019-first-security-review.pdf).

      -
    • -
    • -

      Im Jahr 2020 analysierte Include Security Delta Chats Rust core, IMAP,SMTP, und TLS Bibliotheken. -Es wurden keine kritischen oder hochgradig gefährlichen Probleme gefunden. Der Bericht wies auf einige Schwachstellen mittlerer Schwere hin - sie stellen für sich genommen keine Bedrohung für Delta Chat-Benutzer dar, da sie von der Umgebung abhängen, in der Delta Chat verwendet wird. Aus Gründen der Benutzerfreundlichkeit und der Kompatibilität können wir nicht alle Schwachstellen beseitigen und haben beschlossen, Sicherheitsempfehlungen für bedrohte Benutzer zu geben. Sie können den vollständigen Bericht hier lesen.

      -
    • -
    • -

      Anfang 2023 analysierte Cure53 sowohl die Transportverschlüsselung von Delta Chats Netzwerkverbindungen als auch das reproduzierbare Mailserver-Setup wie auf dieser Seite empfohlen. Sie können mehr über das Audit in unserem Blog lesen oder Sie lesen den vollständigen Bericht hier.

      -
    • -
    • -

      Anfang 2023 haben wir Sicherheits- und Datenschutzprobleme mit den “In Chats geteilten Apps”-Feature behoben, die mit Fehlern beim Sandboxing, insbesondere mit Chromium zusammenhängen. Wir haben daraufhin eine unabhängige Sicherheitsprüfung von Cure53 durchführen lassen, und alle gefundenen Probleme wurden mit den im April 2023 veröffentlichten 1.36 Releases behoben. Siehe hier für die vollständige Hintergrundgeschichte.

      -
    • -
    -

    diff --git a/assets/help/delta-what-optim.png b/src/main/assets/help/delta-what-optim.png similarity index 100% rename from assets/help/delta-what-optim.png rename to src/main/assets/help/delta-what-optim.png diff --git a/assets/help/en/help.html b/src/main/assets/help/en/help.html similarity index 79% rename from assets/help/en/help.html rename to src/main/assets/help/en/help.html index e9f5b2935..fafa7fd24 100644 --- a/assets/help/en/help.html +++ b/src/main/assets/help/en/help.html @@ -4,17 +4,14 @@
  • Groups @@ -28,6 +25,15 @@
  • What happens if I turn on “Delete old messages from device”?
  • +
  • Instant message delivery and Push Notifications + +
  • Encryption and Security
  • Multi-client @@ -59,9 +66,6 @@
  • Troubleshooting
  • Manual Transfer
  • Are there any plans for introducing a Delta Chat Web Client?
  • -
  • What is the “Send Copy to Self” setting good for?
  • -
  • Why can I choose to watch the “Sent” folder?
  • -
  • Why can I choose not to watch the DeltaChat folder?
  • webxdc apps @@ -78,17 +82,24 @@
  • How can I share my location with my chat partners?
  • What does the experimental database encryption actually protect?
  • Why can I choose to only watch the DeltaChat folder?
  • -
  • How can I change my account to a different e-mail address?
  • +
  • How can I use a different e-mail address with my profile?
  • Miscellaneous
  • @@ -104,8 +115,14 @@

    -

    Delta Chat is a new chat app that sends messages via e-mails, encrypted if possible, with Autocrypt. -You do not have to sign up anywhere, just use your existing e-mail account with Delta Chat.

    +

    Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

    + +

    Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

    @@ -117,9 +134,15 @@ -

    With Delta Chat, you can write to every existing e-mail address - even -if the recipient is not using the Delta Chat app. No need for the -recipient to install the same app as yours, as with other messengers.

    +

    To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

    + +

    If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

    @@ -130,42 +153,25 @@ recipient to install the same app as yours, as with other messengers.

      -
    • Independent of any company or services. You own your data.
    • -
    • Your data is not saved on a central server unless all users are using -the same e-mail servers
    • -
    • You do not distribute your address book to anyone.
    • -
    • Fast by the use of Push-IMAP.
    • -
    • Largest userbase - recipients not using Delta Chat can be reached as well.
    • -
    • No Spam - only messages of known users are shown by default.
    • -
    • End-to-end encryption via Autocrypt.
    • -
    • Copyleft and Standards based libre software.
    • -
    • Flexible identity with built-in support for multiple accounts
    • -
    - -

    - - - Which messages do appear in Delta Chat? - - -

    - -

    By default, Delta Chat shows all e-mails.

    - -

    At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

    - -
      -
    • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
    • -
    • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
    • -
    • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
    • +
    • +

      Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

      +
    • +
    • +

      Pervasive multi-profile and multi-device support on all platforms.

      +
    • +
    • +

      Interactive web apps in chats for gaming and collaboration

      +
    • +
    • +

      Audited end-to-end encryption +safe against network and server attacks.

      +
    • +
    • +

      Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      +

    @@ -207,18 +213,25 @@ receive messages from this person, consider blocking them.

    - How can I add or switch between multiple accounts? + What are profiles? How can I switch between them?

    -

    You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

    -
      -
    • on the menu button and then ‘Switch Account’ (Android and desktop)
    • -
    • or the profile icon and then ‘Add Account’ (iOS)
    • -
    +

    A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

    -

    You may also wish to learn how to add accounts to multiple devices.

    +

    On first installation of Delta Chat a first profile is created.

    + +

    Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

    + +

    You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

    + +

    You may also wish to learn how to use the same profile on multiple devices.

    @@ -248,97 +261,26 @@ device.

    -

    +

    - Does Delta Chat support HTML e-mails? + Can I set a Signature Text/Status/Motto with Delta Chat?

    -

    Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

    +

    Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

    -

    +

    - Why do I have to enter my E-Mail password into Delta Chat? Is this secure? - - -

    - -

    As with other E-Mail programs like Thunderbird, K9-Mail, or Outlook, the -program needs the password so you can use it to send mails. Of course, the -password is stored only on your device. The password is only transmitted to -your E-Mail provider (when you login), which has access to your mails anyway.

    - -

    If you use an E-Mail provider with OAuth2 support like gmail.com or yandex.ru, -there is no need to store your password on the device. In this case, only an -access token is used.

    - -

    As Delta Chat is Open Source, you can check the Source -Code -if you want to verify that your credentials are handled securely. We are happy -about feedback which makes the app more secure for all of our users.

    - -

    - - - Which permissions does Delta Chat need? - - -

    - -

    Depending on the operating system in use, -you may be asked to grant permissions to the app. -This is what Delta Chat does with these permissions:

    - -
      -
    • Camera (can be disallowed) -
        -
      • take pictures and videos: for sending Photos
      • -
      -
    • -
    • Contacts (can be disallowed) -
        -
      • read your contacts: to discover contacts to chat with
      • -
      -
    • -
    • Location (can be disallowed) -
        -
      • access approximate location (network location sources): for the location streaming feature
      • -
      • access precise location (GPS and network location sources): for the location streaming feature
      • -
      -
    • -
    • Microphone (can be disallowed) -
        -
      • record audio: for audio messages
      • -
      -
    • -
    • Storage (can be disallowed) -
        -
      • modify or delete the contents of your SD card: to download message attachments
      • -
      • read the contents of your SD card: to share files with your contacts
      • -
      -
    • -
    • Other app capabilities -
        -
      • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
      • -
      • run at startup: so you don’t have to start Delta Chat manually
      • -
      • control vibration: for notifications
      • -
      • view network connections: to connect to your E-Mail provider
      • -
      • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
      • -
      • have full network access: to connect to your E-Mail provider
      • -
      • view Wi-Fi connections: to connect to your E-Mail provider
      • -
      • ask to ignore battery optimisations: for users who want to receive messages all the time
      • -
      -
    • -
    - -

    - - - What means Pinning, Muting, Archiving? + What do Pinning, Muting and Archiving mean?

    @@ -393,22 +335,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

    +

    - How can I delete my account? + How do disappearing messages work?

    -

    As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

    +

    You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

    -

    If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

    + +

    Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

    + +

    Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

    @@ -541,6 +501,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

    + + + Instant message delivery and Push Notifications + + +

    + +

    + + + What are Push Notifications? How can I get instant message delivery? + + +

    + +

    Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

    + +

    Push Notifications work with all chatmail servers on

    + +
      +
    • +

      iOS devices, by integrating with Apple Push services.

      +
    • +
    • +

      Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

      +
    • +
    + +

    As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

    + +

    + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

    + +

    Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

    + +

    + + + Are Push notifications enabled / needed on Android devices? + + +

    + +

    If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

    + +

    In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

    + +
      +
    • +

      Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

      +
    • +
    • +

      Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

      +
    • +
    • +

      Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

      +
    • +
    + +

    Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

    + +

    + + + How private are Delta Chat Push Notifications? + + +

    + +

    Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

    + +

    Here is how Delta Chat apps perform Push Notification delivery:

    + +
      +
    • +

      A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

      +
    • +
    • +

      When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

      +
    • +
    • +

      The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

      +
    • +
    • +

      The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

      +
    • +
    + +

    As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

    + +

    The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

    + +

    Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

    + +

    + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

    + +

    Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

    + +

    Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

    +

    @@ -563,7 +687,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

    -

    Secure-Join protocols +

    Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -594,49 +718,32 @@ guarantee end-to-end encrypted messages.

    -

    Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

    +

    If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

    -

    Inviter side:

    +

    If you are together in person, +you can show a QR code to your chat partner.

    • -

      Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

      +

      For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

    • -

      Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

      +

      For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

    -

    Joiner side:

    +

    Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

    -
      -
    • -

      Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

      -
    • -
    • -

      Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

      -
    • -
    • -

      Tap “OK”

      -
    • -
    - -

    Both Inviter and Joiner:

    - -

    Wait while Secure-Join network messages are exchanged between both devices.

    +

    Now wait while Secure-Join network messages are exchanged between both devices.

    • @@ -690,7 +797,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

      For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

      @@ -718,7 +825,7 @@ even if the contact is a member there.

      Your contact is using Delta Chat on a second device (phone or laptop)

      If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

      @@ -726,8 +833,8 @@ and guaranteed encryption is established with both devices of your contact.

      Your contact reinstalled Delta Chat using their old account login

      If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

      @@ -748,7 +855,7 @@ guaranteed end-to-end encryption will be automatically re-established.

      Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

      In any case, you can not do much else than accept the warning. @@ -914,12 +1021,12 @@ deliver messages to recipient’s devices.

      Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

      @@ -978,7 +1085,7 @@ and their non-Autocrypt e-mail app.

      If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -996,10 +1103,10 @@ even if the direct chat between you two has a

      The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

      +and turning on disappearing messages.

      -

      Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

      Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

      If you don’t need a longer-lived copy of your messages on the server, @@ -1078,11 +1185,12 @@ Caution: Make sure the key is not protected by a password, or remove the passwor -

      The most likely cause is that your key is encrypted and/or uses -a password. Such keys are not supported by Delta Chat. You could remove the -passphrase encryption and the password and try the import again. If you want -to keep your passphrase you’ll have to create an e-mail alias for use -with Delta Chat such that Delta Chat’s key is tied to this e-mail alias.

      +

      The most likely cause is that your key is encrypted and/or uses a password. +Such keys are not supported by Delta Chat. +You could remove the passphrase encryption and the password and try the import again.

      + +

      Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

      Delta Chat supports common OpenPGP private key formats, however, it is unlikely that private keys from all sources will be fully supported. This @@ -1097,6 +1205,67 @@ it + + + Was Delta Chat independently audited for security vulnerabilities? + + + + +

      The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

        +
      • +
      • +

        2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

        +
      • +
      • +

        2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

        +
      • +
      • +

        2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

        +
      • +
      +

      @@ -1113,7 +1282,7 @@ For other programs, you should be able to find a solution online.

      -

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

      +

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      • @@ -1151,10 +1320,19 @@ One device is not needed for the other to work.

      • Double-check both devices are in the same Wi-Fi or network

      • +
      • +

        On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

        +
      • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

        +
      • +
      • +

        Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

      • Ensure there is enough storage on the destination device

        @@ -1166,7 +1344,7 @@ Do not exit Delta Chat.
      • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

        +You can use multiple profiles per device, just add another profile

      • If you still have problems or if you cannot scan a QR code @@ -1189,8 +1367,8 @@ try the manual transfer described below

        screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
      • -
      • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
      • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
        • If you use iOS: and you encounter difficulties, maybe @@ -1221,56 +1399,6 @@ or the AppImage for Linux. You can find them on get.delta.chat.
        -

        - - - What is the “Send Copy to Self” setting good for? - - -

        - -

        Sending a copy of your messages to yourself ensures that you receive your own -messages on all devices. If you have multiple devices and don’t turn it on, you -see only the messages from other people, and the messages you send from the -current device.

        - -

        The copy is sent to the Inbox, and then moved to the DeltaChat folder; it’s not -put into the “Sent” folder. Delta Chat never uploads anything to the Sent -folder because this would mean uploading a message twice (once through SMTP, -and once through IMAP to Sent folder).

        - -

        The default setting for copy-to-self is “no”.

        - -

        - - - Why can I choose to watch the “Sent” folder? - - -

        - -

        The only reason one wants to watch the Sent folder is if you are using another -mail program (like Thunderbird) next to your Delta Chat app, and want your MUA -to participate in chat conversations.

        - -

        However, we recommend using the Delta Chat Desktop Client; you can download it -on get.delta.chat. The option to watch the “Sent” -folder might go away in the future. It was introduced at a time where there was -no Delta Chat Desktop client available on all platforms.

        - -

        - - - Why can I choose not to watch the DeltaChat folder? - - -

        - -

        Some people use Delta Chat as a regular email client, and want to use the Inbox -folder for their mail, instead of the DeltaChat folder. If you disable “Watch -DeltaChat folder”, you should also disable “move chat messages to DeltaChat”. -Otherwise, deleting messages or multi-device setups might not work properly.

        -

        @@ -1417,11 +1545,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

      • the chat.
      • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
      • -
      • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
      • +
      • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
      • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
      • @@ -1472,18 +1597,18 @@ would be done by the Delta Chat app.

        In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

        -

        +

        - How can I change my account to a different e-mail address? + How can I use a different e-mail address with my profile?

        1. -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        2. @@ -1514,6 +1639,60 @@ it.

          +

          + + + Which permissions does Delta Chat need? + + +

          + +

          Depending on the operating system in use, +you may be asked to grant permissions to the app. +This is what Delta Chat does with these permissions:

          + +
            +
          • Camera (can be disallowed) +
              +
            • take pictures and videos: for sending Photos
            • +
            +
          • +
          • Contacts (can be disallowed) +
              +
            • read your contacts: to discover contacts to chat with
            • +
            +
          • +
          • Location (can be disallowed) +
              +
            • access approximate location (network location sources): for the location streaming feature
            • +
            • access precise location (GPS and network location sources): for the location streaming feature
            • +
            +
          • +
          • Microphone (can be disallowed) +
              +
            • record audio: for audio messages
            • +
            +
          • +
          • Storage (can be disallowed) +
              +
            • modify or delete the contents of your SD card: to download message attachments
            • +
            • read the contents of your SD card: to share files with your contacts
            • +
            +
          • +
          • Other app capabilities +
              +
            • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
            • +
            • run at startup: so you don’t have to start Delta Chat manually
            • +
            • control vibration: for notifications
            • +
            • view network connections: to connect to your E-Mail provider
            • +
            • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
            • +
            • have full network access: to connect to your E-Mail provider
            • +
            • view Wi-Fi connections: to connect to your E-Mail provider
            • +
            • ask to ignore battery optimisations: for achieving “instant message delivery”
            • +
            +
          • +
          +

          @@ -1543,28 +1722,138 @@ blogpost.
        3. You can find an installation guide on our website.
      -

      +

      - If Delta Chat uses E-Mail, is it really an Instant Messenger? + Why do I have to enter my E-Mail password into Delta Chat? Is this secure?

      +

      As with other E-Mail programs like Thunderbird, K9-Mail, or Outlook, the +program needs the password so you can use it to send and receive mails. Of course, the +password is stored only on your device. The password is only transmitted to +your E-Mail provider (when you login), which has access to your mails anyway.

      + +

      If you use an E-Mail provider with OAuth2 support like gmail.com or yandex.ru, +there is no need to store your password on the device. In this case, only an +access token is used.

      + +

      As Delta Chat is Open Source, you can check the Source +Code +if you want to verify that your credentials are handled securely. We are happy +about feedback which makes the app more secure for all of our users.

      + +

      + + + Which messages do appear in Delta Chat? + + +

      + +

      By default, Delta Chat shows all e-mails.

      + +

      At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

      +
        -
      • Sending and receiving messages takes a few seconds, typically. Sometimes -there are cases where it takes longer but that is arguably true as well for -any other messenger.
      • -
      • Instant chatting works fast if both parties are actively using the app. It’s -sometimes slower if the app is running in the background.
      • -
      • Receiving messages then can take minutes because both Android and iOS often -stop Delta Chat from running in the background, and only wake it up -occasionally. This artificial delay is usually worse on iOS than on Android.
      • -
      • However, Android and iOS kill apps running in the background is a -problem for many legitimate apps. For more information, see -dontkillmyapp.com.
      • +
      • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
      • +
      • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
      • +
      • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
      +

      + + + Does Delta Chat support HTML e-mails? + + +

      + +

      Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

      + +

      + + + Can I set the E-Mail Subject with Delta Chat? + + +

      + +

      Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

      + +

      So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

      + +

      + + + What is the “Send Copy to Self” setting good for? + + +

      + +

      Sending a copy of your messages to yourself ensures that you receive your own +messages on all devices. If you have multiple devices and don’t turn it on, you +see only the messages from other people, and the messages you send from the +current device.

      + +

      The copy is sent to the Inbox, and then moved to the DeltaChat folder; it’s not +put into the “Sent” folder. Delta Chat never uploads anything to the Sent +folder because this would mean uploading a message twice (once through SMTP, +and once through IMAP to Sent folder).

      + +

      The default setting for “Send Copy to Self” is “on”.

      + +

      + + + Why can I choose to watch the “Sent” folder? + + +

      + +

      The only reason one wants to watch the Sent folder is if you are using another +mail program (like Thunderbird) next to your Delta Chat app, and want your MUA +to participate in chat conversations.

      + +

      However, we recommend using the Delta Chat Desktop Client; you can download it +on get.delta.chat. The option to watch the “Sent” +folder might go away in the future. It was introduced at a time where there was +no Delta Chat Desktop client available on all platforms.

      + +

      + + + Why can I choose not to watch the DeltaChat folder? + + +

      + +

      Some people use Delta Chat as a regular email client, and want to use the Inbox +folder for their mail, instead of the DeltaChat folder. If you disable “Watch +DeltaChat folder”, you should also disable “move chat messages to DeltaChat”. +Otherwise, deleting messages or multi-device setups might not work properly.

      +

      @@ -1586,6 +1875,23 @@ uses.

    • Autocrypt-enabled e-mail app.
    +

    + + + How can I delete my account? + + +

    + +

    As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

    + +

    If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    @@ -1598,59 +1904,6 @@ uses.
  • See Standards used in Delta Chat.
  • -

    - - - Was Delta Chat independently audited for security vulnerabilities? - - -

    - -

    The Delta Chat project underwent four independent security audits in the last years:

    - -
      -
    • -

      In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

      -
    • -
    • -

      In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

      -
    • -
    • -

      Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

      -
    • -
    • -

      Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

      -
    • -
    -

    @@ -1691,7 +1944,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

  • In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

    +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

  • From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/es/help.html b/src/main/assets/help/es/help.html similarity index 76% rename from assets/help/es/help.html rename to src/main/assets/help/es/help.html index 25be0540b..b1bf44fd2 100644 --- a/assets/help/es/help.html +++ b/src/main/assets/help/es/help.html @@ -4,17 +4,14 @@

  • Grupos @@ -28,6 +25,15 @@
  • ¿Qué pasa si activo “Borrar mensajes del dispositivo”?
  • +
  • Instant message delivery and Push Notifications + +
  • Cifrado y seguridad
  • Múltiples dispositivos @@ -59,9 +66,6 @@
  • Solución de problemas
  • Transferencia manual
  • ¿Tienen planeado crear un cliente web de Delta Chat?
  • -
  • ¿Para qué sirve la configuración “Enviar autocopia”?
  • -
  • ¿Por qué puedo elegir monitorear la carpeta “Enviados”?
  • -
  • ¿Por qué puedo elegir no monitorear la carpeta DeltaChat?
  • aplicaciones webxdc @@ -83,12 +87,19 @@
  • Miscelaneo
  • @@ -104,8 +115,14 @@

    -

    Delta Chat es una nueva aplicación de chat que envía mensajes por correo electrónico, encriptados si es posible, con Autocrypt. -No tiene que registrarse en ningún lugar, solo use su cuenta de correo electrónico existente con Delta Chat.

    +

    Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

    + +

    Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

    @@ -117,9 +134,15 @@ -

    Con Delta Chat, puede escribir en cada dirección de correo electrónico existente - incluso -si el destinatario no está utilizando la aplicación Delta Chat. No es necesario que el -destinatario instale la misma aplicación que usted, como ocurre con otros mensajeros.

    +

    To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

    + +

    If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

    @@ -130,42 +153,25 @@ destinatario instale la misma aplicación que usted, como ocurre con otros mensa

      -
    • Independent of any company or services. You own your data.
    • -
    • Your data is not saved on a central server unless all users are using -the same e-mail servers
    • -
    • You do not distribute your address book to anyone.
    • -
    • Fast by the use of Push-IMAP.
    • -
    • Largest userbase - recipients not using Delta Chat can be reached as well.
    • -
    • No Spam - only messages of known users are shown by default.
    • -
    • End-to-end encryption via Autocrypt.
    • -
    • Copyleft and Standards based libre software.
    • -
    • Flexible identity with built-in support for multiple accounts
    • -
    - -

    - - - ¿Qué mensajes se muestran en Delta Chat? - - -

    - -

    Por defecto, Delta Chat muestra todos los e-mail

    - -

    At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

    - -
      -
    • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
    • -
    • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
    • -
    • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
    • +
    • +

      Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

      +
    • +
    • +

      Pervasive multi-profile and multi-device support on all platforms.

      +
    • +
    • +

      Interactive web apps in chats for gaming and collaboration

      +
    • +
    • +

      Audited end-to-end encryption +safe against network and server attacks.

      +
    • +
    • +

      Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      +

    @@ -202,18 +208,25 @@ conversation in Delta Chat or in a “normal” e-mail app.

    - ¿Cómo puedo agregar o cambiar entre múltiples cuentas? + What are profiles? How can I switch between them?

    -

    Puedes trabajar fácilmente con cuentas adicionales en los clientes móviles y de escritorio de Delta Chat haciendo clic en cualquiera de las siguientes opciones:

    -
      -
    • en el botón de menú y luego en ‘Cambiar cuenta’ (Android y escritorio)
    • -
    • o en el icono de perfil y luego en ‘Agregar cuenta’ (iOS)
    • -
    +

    A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

    -

    También puedes desear aprender cómo agregar cuentas a múltiples dispositivos.

    +

    On first installation of Delta Chat a first profile is created.

    + +

    Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

    + +

    You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

    + +

    You may also wish to learn how to use the same profile on multiple devices.

    @@ -242,89 +255,21 @@ dispositivo.

    -

    +

    - ¿Delta Chat soporta mensajes con formato HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

    -

    Sí, los mensajes HTML entrantes vienen con un botón “Mostrar mensaje completo”. Los mensajes salientes siempre usan texto plano.

    - -

    - - - ¿Por qué debo ingresar mi contraseña de correo electrónico en Delta Chat? ¿Es esto seguro? - - -

    - -

    Al igual que con otros programas de correo electrónico como Thunderbird, K9-Mail o Outlook, el -programa necesita la contraseña para que pueda usarla para enviar correos. Por supuesto, la -contraseña se almacena solo en su dispositivo. La contraseña solo se transmite a -su proveedor de correo electrónico (cuando inicia sesión), que tiene acceso a sus correos de todos modos.

    - -

    Si utiliza un proveedor de correo electrónico con soporte de OAuth2 como gmail.com o yandex.ru, -no es necesario almacenar su contraseña en el dispositivo. En este caso, solo se usa un -token de acceso.

    - -

    Como Delta Chat es de Código Abierto, puedes investigar el Código Fuente si quieres verificar que tus credenciales son gestionadas de manera segura. -Estamos felices de recibir críticas que hagan la aplicación más segura para todos los usuarios.

    - -

    - - - ¿Qué permisos necesita Delta Chat? - - -

    - -

    Dependiendo del sistema operativo en uso, -quizás se te solicite garantizar permisos a la app. -Esto es lo que hace Delta Chat con esos permisos:

    - -
      -
    • Camera (puede ser desactivada) -
        -
      • tomar fotos y videos: para enviar fotos
      • -
      -
    • -
    • Contactos (puede ser desactivado) -
        -
      • lectura de tus contactos: para descubrir con que contactos chatear
      • -
      -
    • -
    • Ubicación (puede ser desactivada) -
        -
      • acceder a la ubicación aproximada (recursos de localización en red): para la función de transmitir ubicación
      • -
      • acceder a la ubicación precisa (recursos de ubicación en red y GPS): para la función de transmitir ubicación
      • -
      -
    • -
    • Micrófono (puede ser desactivado) -
        -
      • grabar audio: para mensajes de audio
      • -
      -
    • -
    • Almacenamiento (puede ser desactivado) -
        -
      • modificar o borrar el contenido de tu tarjeta SD: para descargar los adjuntos de los mensajes
      • -
      • leer el contenido de tu tarjeta SD: para compartir archivos con tus contactos
      • -
      -
    • -
    • Otras capacidades de la app -
        -
      • modificar los ajustes de audio: así puedas elegir los ringtones y volumen para las notificaciones y mensajes de audio
      • -
      • lanzarse al inicio: así no tengas que iniciar Delta Chat de forma manual
      • -
      • control de vibración: para notificaciones
      • -
      • observar las conexiones de red: para conectarte a tu proveedor de correo electrónico
      • -
      • evitar que el teléfono duerma: así puedes copiar de forma sencilla el código de seguridad durante el mensaje de configuración de autoencriptación
      • -
      • tener acceso completo a la red: para conectarse a tu servidor de correo electrónico
      • -
      • mirar las conexiones de Wi-Fi: para conectarse a tu servidor de correo electrónico
      • -
      • ignorar optimizaciones de batería: para los usuarios que deseen recibir notificaciones en todo momento
      • -
      -
    • -
    +

    Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

    @@ -353,8 +298,8 @@ Los chats silenciados permanecen archivados hasta que los desar -

    To archive or pin a chat, long tap (Android), use the chat’s menu (Android/Desktop) or swipe to the left (iOS); -to mute a chat, use the chat’s menu (Android/Desktop) or the chat’s profile (iOS).

    +

    Para archivar o fijar un chat, toque prolongadamente (Android), use el menú del chat (Android/Escritorio) o deslícese hacia la izquierda (iOS); +para silenciar un chat, use el menú del chat (Android/Escritorio) o el perfil del chat (iOS).

    @@ -384,20 +329,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

    +

    - ¿Cómo puedo eliminar mi cuenta? + ¿Cómo funciona la desaparición de mensajes?

    -

    As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

    +

    Puedes activar “desaparición de mensajes” +en la configuración de un chat, +en la parte superior derecha de la ventana de chat, +seleccionando un lapso de tiempo +entre 1 minuto y 5 semanas.

    -

    Si quieres mantener la cuenta, pero desinstalar Delta Chat, se recomienda salir de cualquier chat grupal antes de desinstalar Delta Chat.

    +

    Hasta que la configuración se desactive nuevamente, +La aplicación Delta Chat de cada miembro del chat se encarga +de borrar los mensajes +después del lapso de tiempo seleccionado. +Comienza el lapso de tiempo +cuando el receptor ve por primera vez el mensaje en Delta Chat. +Los mensajes se eliminan. +tanto en cada cuenta de correo electrónico en el servidor, +y en la propia aplicación.

    + +

    Tenga en cuenta que puede confiar en los mensajes que desaparecen +sólo mientras confíes en tus compañeros de chat; +compañeros de chat maliciosos pueden tomar fotos, +o guardar, copiar o reenviar mensajes antes de eliminarlos.

    + +

    Aparte de eso, +si un compañero de chat desinstala Delta Chat, +los mensajes no se eliminarán de su cuenta de correo electrónico. +Lo más probable es que ya no sean descifrables. +(siempre que estuvieran cifrados en primer lugar).

    @@ -493,11 +458,11 @@ por lo que aunque sólo veas una marca, el mensaje puede haber sido leído.
    • -

      By default, Delta Chat stores all messages locally on your device. -If you e.g. want to save storage space at your mail provider, -you can configure Delta Chat -to delete old already-received messages on the server automatically. -They still remain on your device until you delete them there, too.

      +

      De forma predeterminada, Delta Chat almacena todos los mensajes localmente en su dispositivo. +Si por ej. desea ahorrar espacio de almacenamiento en su proveedor de correo, +puedes configurar Delta Chat +para eliminar automáticamente los mensajes antiguos ya recibidos en el servidor. +Aún permanecen en su dispositivo hasta que los elimine allí también.

    • To turn it on, go to Delete Old Messages → Delete Messages from Server @@ -506,9 +471,9 @@ You can set a timeframe between “At once” and “After 1 year”. All e-mails received by Delta Chat will be deleted from the server after this timeframe.

    • -

      Note that if you use Delta Chat on more than one device, -you need to leave the message on the server with a sufficient timeframe -so that the other device(s) can download them, too.

      +

      Tenga en cuenta que si utiliza Delta Chat en más de un dispositivo, +debes dejar el mensaje en el servidor con un plazo de tiempo suficiente +para que los otros dispositivos también puedan descargarlos.

    @@ -529,6 +494,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

    + + + Instant message delivery and Push Notifications + + +

    + +

    + + + What are Push Notifications? How can I get instant message delivery? + + +

    + +

    Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

    + +

    Push Notifications work with all chatmail servers on

    + +
      +
    • +

      iOS devices, by integrating with Apple Push services.

      +
    • +
    • +

      Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

      +
    • +
    + +

    As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

    + +

    + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

    + +

    Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

    + +

    + + + Are Push notifications enabled / needed on Android devices? + + +

    + +

    If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

    + +

    In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

    + +
      +
    • +

      Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

      +
    • +
    • +

      Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

      +
    • +
    • +

      Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

      +
    • +
    + +

    Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

    + +

    + + + How private are Delta Chat Push Notifications? + + +

    + +

    Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

    + +

    Here is how Delta Chat apps perform Push Notification delivery:

    + +
      +
    • +

      A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

      +
    • +
    • +

      When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

      +
    • +
    • +

      The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

      +
    • +
    • +

      The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

      +
    • +
    + +

    As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

    + +

    The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

    + +

    Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

    + +

    + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

    + +

    Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

    + +

    Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

    +

    @@ -551,7 +680,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

    -

    Protocolos de Secure-Join +

    Protocolos de Secure-Join se utilizan para establecer chats con cifrado de extremo a extremo garantizado que protege contra ataques de red y servidores comprometidos. Los chats marcados con una estampilla verde @@ -582,45 +711,32 @@ garantizan mensajes cifrados de extremo a extremo.

    -

    Encuentrate con tu compañero de chat fuera de Delta Chat, preferiblemente en persona, pero también está bien utilizar un segundo canal como una videollamada o una applicaciónde chat diferente. Realiza el siguiente procedimiento de mostrar/escanear QR con tu compañero de chat.

    +

    If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

    -

    Inviter side:

    +

    If you are together in person, +you can show a QR code to your chat partner.

    • -

      Invitación de grupo: -Toca el título del grupo de chat para ver la lista de miembros y selecciona “Código de invitación QR”. -Comparte la imagen del código QR con la otra persona, ya sea en persona o a través de otro canal de comunicación.

      +

      For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

    • -

      Invitación de chat directo: -Toca el ícono del código QR -en la pantalla principal de la aplicación Delta Chat – -en el escritorio, el ícono del QR está en el menú de sándwich del lado izquierdo. -Comparte la imagen del QR con la otra persona, ya sea en persona o a través de otro canal de comunicación.

      +

      For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

    -

    Joiner side:

    +

    Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

    -
      -
    • -

      Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

      -
    • -
    • -

      Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

      -
    • -
    • -

      Tap “OK”

      -
    • -
    - -

    Both Inviter and Joiner:

    - -

    Espere mientras se intercambian los mensajes de Secure-Join entre ambos dispositivos.

    +

    Now wait while Secure-Join network messages are exchanged between both devices.

    • @@ -669,7 +785,7 @@ hasta llegar al que hizo un escaneo directo de QR conti

      Ten en cuenta que en un perfil de contacto puedes ver y tocar a las personas que te presentaron a ese contacto, pero puede pasar que no haya una estampilla verde en el título del perfil. Esto generalmente significa que el contacto “envió un mensaje desde otro dispositivo”.

      -

      Para obtener una discusión más detallada sobre “cifrado de extremo a extremo garantizado”, por favor consulta los protocolos Secure-Join y lee específicamente sobre “Grupos Verificados”, el término técnico de lo que aquí se llama chats “marcados con una estampilla verde” o “cifrados de extremo a extremo garantizado”.

      +

      Para obtener una discusión más detallada sobre “cifrado de extremo a extremo garantizado”, por favor consulta los protocolos Secure-Join y lee específicamente sobre “Grupos Verificados”, el término técnico de lo que aquí se llama chats “marcados con una estampilla verde” o “cifrados de extremo a extremo garantizado”.

      @@ -863,11 +979,11 @@ even if the message was not end-to-end encrypted.

    • WebRTC room URL
    -

    E-Mail servers do not get access to this protected metadata -but they do see the message date as well as the message size, -and, more importantly, the sender and receiver addresses. -E-mail servers need receiver addresses to route and -deliver messages to recipient’s devices.

    +

    Los servidores de correo electrónico no obtienen acceso a estos metadatos protegidos +pero sí ven la fecha del mensaje así como el tamaño del mensaje, +y, lo que es más importante, las direcciones del remitente y del destinatario. +Los servidores de correo electrónico necesitan direcciones de destinatarios para enrutar y +entregar mensajes a los dispositivos del destinatario.

    @@ -879,12 +995,12 @@ deliver messages to recipient’s devices.

    Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

    @@ -947,7 +1063,7 @@ and their non-Autocrypt e-mail app.

    La mejor manera de asegurar que cada mensaje esté cifrado de extremo a extremo y que los metadatos se borren lo más rápido posible es utilizando chats con cifrado de extremo a extremo garantizado -y activando la desaparición de mensajes.

    +y activando la desaparición de mensajes.

    Los chats con cifrado de extremo a extremo garantizado protegen contra ataques MITM y al activar “mensajes efímeros” se borran los mensajes @@ -1012,12 +1128,14 @@ which has been .asc.

    Delta Chat supports common OpenPGP private key formats, however, it is unlikely that private keys from all sources will be fully supported. This @@ -1048,6 +1167,67 @@ it + + + ¿Se auditó Delta Chat de forma independiente en busca de vulnerabilidades de seguridad? + + +

    + +

    The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

    + +
      +
    • +

      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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

      +
    • +
    • +

      2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

      +
    • +
    • +

      2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

      +
    • +
    • +

      2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

      +
    • +
    • +

      2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

      +
    • +
    +

    @@ -1081,14 +1261,14 @@ and wait a moment until a QR code is shown

    On the second device, start Delta Chat, select Add as Second Device, and scan the QR code from the old device

  • -

    Transfer should start after a few seconds and during transfer both devices will show the progress. -Wait until it is finished on both devices.

    +

    La transferencia debería comenzar después de unos segundos y durante la transferencia ambos dispositivos mostrarán el progreso. +Espere hasta que termine en ambos dispositivos.

  • -

    In contrast to many other messengers, after successful transfer, -both devices are completely independent. -One device is not needed for the other to work.

    +

    A diferencia de muchas otras aplicaciones de mensajería, después de una transferencia exitosa, +ambos dispositivos son completamente independientes. +No es necesario un dispositivo para que el otro funcione.

    @@ -1102,10 +1282,19 @@ One device is not needed for the other to work.

  • Vuelve a verificar que ambos dispositivos estén en la misma Wi-Fi o red

  • +
  • +

    On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

    +
  • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

    +
  • +
  • +

    Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

  • Asegurate que haya suficiente espacio en el dispositivo destino

    @@ -1117,7 +1306,7 @@ Do not exit Delta Chat.
  • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

    +You can use multiple profiles per device, just add another profile

  • If you still have problems or if you cannot scan a QR code @@ -1140,8 +1329,8 @@ try the manual transfer described below

    screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
  • -
  • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
  • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
    • If you use iOS: and you encounter difficulties, maybe @@ -1172,48 +1361,6 @@ o el AppImage para Linux. Puedes encontrarlos en get.delta.chat.
    -

    - - - ¿Para qué sirve la configuración “Enviar autocopia”? - - -

    - -

    Enviar una copia de sus mensajes a usted mismo asegura que recibirá sus propios mensajes en todos los dispositivos. Si tiene varios dispositivos y no habilita esta opción, solo verá los mensajes de otras personas y los mensajes que envíe desde el dispositivo actual.

    - -

    La copia se envía a la bandeja de entrada y luego se mueve a la carpeta DeltaChat; no se coloca en la carpeta “Enviados”. Delta Chat nunca carga nada en la carpeta Enviados porque esto significaría cargar un mensaje dos veces (una a través de SMTP y otra a través de IMAP en la carpeta Enviados).

    - -

    La configuración predeterminada para “Enviar autocopia” es “no”.

    - -

    - - - ¿Por qué puedo elegir monitorear la carpeta “Enviados”? - - -

    - -

    La única razón por la que uno quiere ver la carpeta Enviados es si está utilizando otro -programa de correo (como Thunderbird) a la vez que su aplicación Delta Chat, y desea que su MUA -también participe en conversaciones de chat.

    - -

    No obstante, recomendamos utilizar el cliente de escritorio Delta Chat; puede descargarlo -en get.delta.chat. 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 Delta Chat Desktop disponible en todas las plataformas.

    - -

    - - - ¿Por qué puedo elegir no monitorear la carpeta DeltaChat? - - -

    - -

    Algunas personas usan Delta Chat como un cliente de correo electrónico normal y desean mantener los correos en la bandeja de entrada, en lugar de la carpeta DeltaChat. Si deshabilita “Monitorear carpeta DeltaChat”, también debe deshabilitar “mover automáticamente a la carpeta DeltaChat”. -De lo contrario, eliminar mensajes o configuraciones de dispositivos múltiples podría no funcionar correctamente.

    -

    @@ -1235,15 +1382,15 @@ extendable messenger.

      -
    • webxdc apps can not send data to the Internet, or download anything.
    • -
    • A webxdc app can only exchange data within a Delta Chat chat, with its -copies on the devices of your chat partners. Other than that, it’s completely -isolated from the Internet.
    • -
    • The privacy a webxdc app offers is the privacy of your chat - as long as you -trust the people you chat with, you can trust the webxdc app as well.
    • -
    • This also means: it can be a privacy risk to open webxdc apps in chats where -you don’t trust the members - as you know it from e-mail attachments, where -you only open attachments from senders you trust, and not from spammers.
    • +
    • Las aplicaciones webxdc no pueden enviar datos a Internet ni descargar nada.
    • +
    • Una aplicación webxdc solo puede intercambiar datos dentro de un chat de Delta Chat, con su +copias en los dispositivos de tus compañeros de chat. Aparte de eso, es completamente +aislado de Internet.
    • +
    • La privacidad que ofrece una aplicación webxdc es la privacidad de tu chat, siempre y cuando +confíe en las personas con las que chateas, también puedes confiar en la aplicación webxdc.
    • +
    • Esto también significa: puede suponer un riesgo para la privacidad abrir aplicaciones webxdc en chats donde +no confías en los miembros, como lo sabes por los archivos adjuntos de correos electrónicos, donde +solo abre archivos adjuntos de remitentes en los que confía y no de spammers.

    @@ -1360,11 +1507,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

  • the chat.
  • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
  • -
  • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
  • +
  • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
  • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
  • @@ -1422,7 +1566,10 @@ platforms.
    1. -

      Cambia tu dirección en “Configuración - Contraseña y cuenta” e ingresa la contraseña de tu nueva cuenta (y si es necesario, la configuración del servidor). Recibirás un aviso informativo sobre el hecho de que te estás mudando a una nueva dirección. También aparecerá un aviso adicional en tu chat de “Mensajes del dispositivo”.

      +

      Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). +You will get an information notice about the fact that you are moving to a new address. +An additional notice will also show up in your “Device messages” chat.

    2. Si es posible, permite que tu antiguo proveedor de correo electrónico reenvíe todos los mensajes a tu nueva dirección.

      @@ -1448,6 +1595,60 @@ it.

    +

    + + + ¿Qué permisos necesita Delta Chat? + + +

    + +

    Dependiendo del sistema operativo en uso, +quizás se te solicite garantizar permisos a la app. +Esto es lo que hace Delta Chat con esos permisos:

    + +
      +
    • Camera (can be disallowed) +
        +
      • take pictures and videos: for sending Photos
      • +
      +
    • +
    • Contacts (can be disallowed) +
        +
      • read your contacts: to discover contacts to chat with
      • +
      +
    • +
    • Location (can be disallowed) +
        +
      • access approximate location (network location sources): for the location streaming feature
      • +
      • access precise location (GPS and network location sources): for the location streaming feature
      • +
      +
    • +
    • Microphone (can be disallowed) +
        +
      • record audio: for audio messages
      • +
      +
    • +
    • Storage (can be disallowed) +
        +
      • modify or delete the contents of your SD card: to download message attachments
      • +
      • read the contents of your SD card: to share files with your contacts
      • +
      +
    • +
    • Other app capabilities +
        +
      • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
      • +
      • run at startup: so you don’t have to start Delta Chat manually
      • +
      • control vibration: for notifications
      • +
      • view network connections: to connect to your E-Mail provider
      • +
      • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
      • +
      • have full network access: to connect to your E-Mail provider
      • +
      • view Wi-Fi connections: to connect to your E-Mail provider
      • +
      • ask to ignore battery optimisations: for achieving “instant message delivery”
      • +
      +
    • +
    +

    @@ -1476,28 +1677,127 @@ blogpost.
  • You can find an installation guide on our website.
  • -

    +

    - Si Delta Chat utiliza el correo electrónico, ¿es realmente una aplicación de mensajería instantánea? + ¿Por qué debo ingresar mi contraseña de correo electrónico en Delta Chat? ¿Es esto seguro?

    +

    Al igual que con otros programas de correo electrónico como Thunderbird, K9-Mail o Outlook, el +programa necesita la contraseña para que pueda usarla para enviar correos. Por supuesto, la +contraseña se almacena solo en su dispositivo. La contraseña solo se transmite a +su proveedor de correo electrónico (cuando inicia sesión), que tiene acceso a sus correos de todos modos.

    + +

    Si utiliza un proveedor de correo electrónico con soporte de OAuth2 como gmail.com o yandex.ru, +no es necesario almacenar su contraseña en el dispositivo. En este caso, solo se usa un +token de acceso.

    + +

    Como Delta Chat es de Código Abierto, puedes investigar el Código Fuente si quieres verificar que tus credenciales son gestionadas de manera segura. +Estamos felices de recibir críticas que hagan la aplicación más segura para todos los usuarios.

    + +

    + + + ¿Qué mensajes se muestran en Delta Chat? + + +

    + +

    Por defecto, Delta Chat muestra todos los e-mail

    + +

    At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

    +
      -
    • Sending and receiving messages takes a few seconds, typically. Sometimes -there are cases where it takes longer but that is arguably true as well for -any other messenger.
    • -
    • Instant chatting works fast if both parties are actively using the app. It’s -sometimes slower if the app is running in the background.
    • -
    • Receiving messages then can take minutes because both Android and iOS often -stop Delta Chat from running in the background, and only wake it up -occasionally. This artificial delay is usually worse on iOS than on Android.
    • -
    • However, Android and iOS kill apps running in the background is a -problem for many legitimate apps. For more information, see -dontkillmyapp.com.
    • +
    • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
    • +
    • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
    • +
    • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
    +

    + + + ¿Delta Chat soporta mensajes con formato HTML? + + +

    + +

    Sí, los mensajes HTML entrantes vienen con un botón “Mostrar mensaje completo”. Los mensajes salientes siempre usan texto plano.

    + +

    + + + Can I set the E-Mail Subject with Delta Chat? + + +

    + +

    Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

    + +

    So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

    + +

    + + + ¿Para qué sirve la configuración “Enviar autocopia”? + + +

    + +

    Enviar una copia de sus mensajes a usted mismo asegura que recibirá sus propios mensajes en todos los dispositivos. Si tiene varios dispositivos y no habilita esta opción, solo verá los mensajes de otras personas y los mensajes que envíe desde el dispositivo actual.

    + +

    La copia se envía a la bandeja de entrada y luego se mueve a la carpeta DeltaChat; no se coloca en la carpeta “Enviados”. Delta Chat nunca carga nada en la carpeta Enviados porque esto significaría cargar un mensaje dos veces (una a través de SMTP y otra a través de IMAP en la carpeta Enviados).

    + +

    The default setting for “Send Copy to Self” is “on”.

    + +

    + + + ¿Por qué puedo elegir monitorear la carpeta “Enviados”? + + +

    + +

    La única razón por la que uno quiere ver la carpeta Enviados es si está utilizando otro +programa de correo (como Thunderbird) a la vez que su aplicación Delta Chat, y desea que su MUA +también participe en conversaciones de chat.

    + +

    No obstante, recomendamos utilizar el cliente de escritorio Delta Chat; puede descargarlo +en get.delta.chat. 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 Delta Chat Desktop disponible en todas las plataformas.

    + +

    + + + ¿Por qué puedo elegir no monitorear la carpeta DeltaChat? + + +

    + +

    Algunas personas usan Delta Chat como un cliente de correo electrónico normal y desean mantener los correos en la bandeja de entrada, en lugar de la carpeta DeltaChat. Si deshabilita “Monitorear carpeta DeltaChat”, también debe deshabilitar “mover automáticamente a la carpeta DeltaChat”. +De lo contrario, eliminar mensajes o configuraciones de dispositivos múltiples podría no funcionar correctamente.

    +

    @@ -1519,6 +1819,21 @@ uses. Autocrypt-enabled e-mail app. +

    + + + ¿Cómo puedo eliminar mi cuenta? + + +

    + +

    Al utilizar una cuenta de correo electrónico para Delta Chat, +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.

    + +

    Si quieres mantener la cuenta, pero desinstalar Delta Chat, se recomienda salir de cualquier chat grupal antes de desinstalar Delta Chat.

    +

    @@ -1531,59 +1846,6 @@ uses.
  • Visita la página Estándares usados en Delta Chat.
  • -

    - - - ¿Se auditó Delta Chat de forma independiente en busca de vulnerabilidades de seguridad? - - -

    - -

    The Delta Chat project underwent four independent security audits in the last years:

    - -
      -
    • -

      In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

      -
    • -
    • -

      In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

      -
    • -
    • -

      Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

      -
    • -
    • -

      Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

      -
    • -
    -

    @@ -1624,7 +1886,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

  • In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

    +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

  • From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/fr/help.html b/src/main/assets/help/fr/help.html similarity index 79% rename from assets/help/fr/help.html rename to src/main/assets/help/fr/help.html index 7c76be623..671e4bd23 100644 --- a/assets/help/fr/help.html +++ b/src/main/assets/help/fr/help.html @@ -4,17 +4,14 @@

  • Groupes @@ -28,6 +25,15 @@
  • Que se passe-t-il si j’active l’option “Supprimer les anciens messages de l’appareil” ?
  • +
  • Instant message delivery and Push Notifications + +
  • Encryption and Security
  • Multi-client @@ -59,9 +66,6 @@
  • Dépannage
  • Manual Transfer
  • Le lancement d’un client Web Delta Chat est-il prévu ?
  • -
  • Quel est l’intérêt du paramètre “M’envoyer une copie”?
  • -
  • Pourquoi puis-je choisir de regarder le dossier “Envoyés”?
  • -
  • Pourquoi puis-je choisir de ne pas regarder le dossier Delta Chat?
  • webxdc apps @@ -83,12 +87,19 @@
  • Divers
  • @@ -104,8 +115,14 @@

    -

    Delta Chat est une application de clavardage qui utilise le courrier électronique pour délivrer ses messages et les chiffre avec Autocrypt lorsque c’est possible. -Vous n’avez pas besoin de vous créer un nouveau compte, vous pouvez simplement utiliser votre compte courriel existant avec Delta Chat.

    +

    Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

    + +

    Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

    @@ -117,7 +134,15 @@ -

    Avec Delta Chat, vous pouvez écrire à toutes les adresses courriels existantes, même si le destinataire n’utilise pas l’application. Votre correspondant pourra simplement répondre au courriel qu’il aura reçu. Contrairement aux autres messageries instantanées, il n’est pas nécessaire que vos amis installent le même client pour discuter avec vous.

    +

    To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

    + +

    If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

    @@ -128,34 +153,25 @@

      -
    • Independent of any company or services. You own your data.
    • -
    • Your data is not saved on a central server unless all users are using -the same e-mail servers
    • -
    • You do not distribute your address book to anyone.
    • -
    • Fast by the use of Push-IMAP.
    • -
    • Largest userbase - recipients not using Delta Chat can be reached as well.
    • -
    • No Spam - only messages of known users are shown by default.
    • -
    • End-to-end encryption via Autocrypt.
    • -
    • Copyleft and Standards based libre software.
    • -
    • Flexible identity with built-in support for multiple accounts
    • -
    - -

    - - - Quels sont les messages qui apparaissent dans Delta Chat ? - - -

    - -

    Par défaut, Delta Chat affiche tous les courriels.

    - -

    Vous pouvez changer cette préférence en vous rendant dans vos “Paramètres -> Discussions & fichiers multimédia -> Voir les courriels classiques”. Trois options sont disponibles :

    - -
      -
    • “Non, seulement les discussions”: vous verrez seulement les messages envoyés par d’autres utilisateurs de Delta Chat et les réponses à vos messages Delta Chat. Cette option est recommandée si vous utilisez le même compte pour recevoir aussi des courriels normaux.
    • -
    • “Tout”: vous verrez dans Delta Chat tous les courriels envoyés à votre adresse. Cette option est recommandée si vous souhaitez utiliser Delta Chat pour tous vos courriels, afin de ne rater aucun message.
    • -
    • “Pour les contacts acceptés”: vous verrez dans Delta Chat tous les courriels envoyés par les personnes avec qui vous avez déjà ouvert une discussion, mais les notifications de nouvelles conversations ne s’afficheront que pour des messages envoyés via Delta Chat. Cette option vous permet de décider au cas par cas si vous souhaitez échanger via Delta Chat ou via une application de courriel “classique”.
    • +
    • +

      Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

      +
    • +
    • +

      Pervasive multi-profile and multi-device support on all platforms.

      +
    • +
    • +

      Interactive web apps in chats for gaming and collaboration

      +
    • +
    • +

      Audited end-to-end encryption +safe against network and server attacks.

      +
    • +
    • +

      Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      +

    @@ -194,18 +210,25 @@ recevoir de messages de cette personne, nous vous conseillons de la bloquer<

    - Comment naviguer entre plusieurs comptes et comment en ajouter ? + What are profiles? How can I switch between them?

    -

    Vous pouvez facilement gérer des comptes supplémentaires sur les clients Delta Chat mobile ou de bureau en cliquant :

    -
      -
    • soit sur le bouton du menu, puis sur “Changer de compte” (Android et PC) ;
    • -
    • soit sur l’icône de profil, puis sur “Ajouter un compte” (iOS).
    • -
    +

    A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

    -

    Peut-être voudrez-vous aussi savoir comment ajouter un compte sur plusieurs appareils.

    +

    On first installation of Delta Chat a first profile is created.

    + +

    Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

    + +

    You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

    + +

    You may also wish to learn how to use the same profile on multiple devices.

    @@ -230,86 +253,21 @@ recevoir de messages de cette personne, nous vous conseillons de la bloquer< -

    +

    - Est-ce que Delta Chat gère les courriels en HTML ? + Can I set a Signature Text/Status/Motto with Delta Chat?

    -

    Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

    - -

    - - - Pourquoi dois-je entrer le mot de passe de mon compte de courriel dans Delta Chat ? Est-ce sécurisé ? - - -

    - -

    Comme pour les autres clients de courriel, Thunderbird, FairEmail, K9-Mail, Outlook, etc, celui-ci a besoin des identifiants / mots de passe pour recevoir et envoyer des courriels. -Bien sûr le mot de passe est uniquement stocké sur votre appareil. Et il est utilisé uniquement pour vous authentifier auprès de votre fournisseur de courriel, qui a, rappelons-le, accès à vos courriels non chiffrés.

    - -

    Si vous utilisez un fournisseur de courriel qui prend en charge OAuth2, comme gmail.com ou yandex.ru, -il n’est pas nécessaire de stocker votre mot de passe sur votre appareil. Dans ce cas, seul un jeton d’accès est utilisé.

    - -

    Comme Delta Chat est un logiciel libre, vous pouvez étudier le code source pour vérifier que vos identifiants / mots de passe sont utilisés de façon sécurisée. Nous sommes très heureux d’avoir des retours pour renforcer la sécurité de l’application.

    - -

    - - - De quelles autorisations Delta Chat a-t-il besoin? - - -

    - -

    Selon le système d’exploitation utilisé, -il vous sera peut-être demandé d’accorder des autorisations à l’application. -Voici ce que fait Delta Chat avec ces autorisations:

    - -
      -
    • Appareil photo * (peut être refusé) * -
        -
      • prendre des photos et des vidéos : pour envoyer des photos
      • -
      -
    • -
    • Contacts * (peut être refusé) * -
        -
      • lire vos contacts : pour trouver des contacts avec lesquels discuter
      • -
      -
    • -
    • Localisation * (peut être refusé) * -
        -
      • accéder à la localisation approximative (sources de localisation réseau) : pour la fonction de streaming de localisation
      • -
      • accéder à la localisation précise (GPS et sources de localisation réseau) : pour la fonction de localisation en continu
      • -
      -
    • -
    • Microphone * (peut être refusé) * -
        -
      • enregistrement audio : pour les messages audio
      • -
      -
    • -
    • Stockage * (peut être refusé) * -
        -
      • modifier ou supprimer le contenu de votre carte SD : pour télécharger les pièces jointes des messages
      • -
      • lire le contenu de votre carte SD : pour partager des fichiers avec vos contacts
      • -
      -
    • -
    • Autres capacités de l’application -
        -
      • modifier vos paramètres audio : pour choisir les sonneries et le volume des notifications et des messages audio
      • -
      • s’exécuter au démarrage : pour ne pas avoir besoin de démarrer Delta Chat manuellement
      • -
      • contrôler les vibrations : pour les notifications
      • -
      • afficher les connexions réseau : pour se connecter au fournisseur de messagerie
      • -
      • empêcher la veille du téléphone : pour copier plus facilement le code de sécurité pendant le message de configuration Autocrypt
      • -
      • avoir un accès complet au réseau : pour se connecter au fournisseur de messagerie
      • -
      • afficher les connexions Wi-Fi : pour se connecter au fournisseur de messagerie
      • -
      • demander d’ignorer les optimisations de batterie : pour les utilisateurs qui souhaitent recevoir des messages tout le temps
      • -
      -
    • -
    +

    Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

    @@ -363,18 +321,40 @@ pour mettre une discussion en sourdine, ouvrez le menu de la conversation (Andro
  • D’un autre côté, vos contacts ne vous voient pas forcément “en ligne”. Si vous avez désactivé les accusés de lecture, ils ne verront pas de point vert tant que vous ne leur écrivez pas directement ou n’écrivez pas dans un groupe dont ils font aussi partie.
  • -

    +

    - Comment supprimer mon compte ? + How do disappearing messages work?

    -

    Étant donné que vous utilisez Delta Chat à travers un compte courriel, la façon dont vous pouvez supprimer votre compte dépend de votre fournisseur de courriel. -Comme nous n’exerçons aucun contrôle sur votre compte courriel, nous ne sommes pas en mesure de vous aider à le supprimer.

    +

    You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

    -

    Si vous souhaitez conserver votre compte mais désinstaller Delta Chat, nous vous recommandons de quitter toutes les discussions de groupe avant de procéder à la désinstallation.

    +

    Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

    + +

    Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

    + +

    Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

    @@ -495,6 +475,170 @@ Tous les courriels reçus sur Delta Chat seront supprimés du serveur une fois l
  • Pour activer cette option, ouvrez les paramètres des “Discussions et fichiers multimédias” et cliquez sur “Supprimer les anciens messages de l’appareil”. Vous pouvez définir le délai après lequel tous les messages seront supprimés de votre appareil, parmi plusieurs choix allant de “Immédiatement” à “Après 1 année”.
  • +

    + + + Instant message delivery and Push Notifications + + +

    + +

    + + + What are Push Notifications? How can I get instant message delivery? + + +

    + +

    Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

    + +

    Push Notifications work with all chatmail servers on

    + +
      +
    • +

      iOS devices, by integrating with Apple Push services.

      +
    • +
    • +

      Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

      +
    • +
    + +

    As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

    + +

    + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

    + +

    Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

    + +

    + + + Are Push notifications enabled / needed on Android devices? + + +

    + +

    If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

    + +

    In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

    + +
      +
    • +

      Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

      +
    • +
    • +

      Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

      +
    • +
    • +

      Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

      +
    • +
    + +

    Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

    + +

    + + + How private are Delta Chat Push Notifications? + + +

    + +

    Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

    + +

    Here is how Delta Chat apps perform Push Notification delivery:

    + +
      +
    • +

      A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

      +
    • +
    • +

      When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

      +
    • +
    • +

      The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

      +
    • +
    • +

      The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

      +
    • +
    + +

    As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

    + +

    The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

    + +

    Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

    + +

    + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

    + +

    Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

    + +

    Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

    +

    @@ -517,7 +661,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

    -

    Secure-Join protocols +

    Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -548,49 +692,32 @@ guarantee end-to-end encrypted messages.

    -

    Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

    +

    If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

    -

    Inviter side:

    +

    If you are together in person, +you can show a QR code to your chat partner.

    • -

      Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

      +

      For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

    • -

      Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

      +

      For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

    -

    Joiner side:

    +

    Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

    -
      -
    • -

      Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

      -
    • -
    • -

      Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

      -
    • -
    • -

      Tap “OK”

      -
    • -
    - -

    Both Inviter and Joiner:

    - -

    Wait while Secure-Join network messages are exchanged between both devices.

    +

    Now wait while Secure-Join network messages are exchanged between both devices.

    • @@ -644,7 +771,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

      For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

      @@ -672,7 +799,7 @@ even if the contact is a member there.

      Your contact is using Delta Chat on a second device (phone or laptop)

      If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

      @@ -680,8 +807,8 @@ and guaranteed encryption is established with both devices of your contact.

      Your contact reinstalled Delta Chat using their old account login

      If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

      @@ -702,7 +829,7 @@ guaranteed end-to-end encryption will be automatically re-established.

      Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

      In any case, you can not do much else than accept the warning. @@ -868,12 +995,12 @@ deliver messages to recipient’s devices.

      Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

      @@ -932,7 +1059,7 @@ and their non-Autocrypt e-mail app.

    If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -950,10 +1077,10 @@ even if the direct chat between you two has a

    The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

    +and turning on disappearing messages.

    -

    Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

    Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

    If you don’t need a longer-lived copy of your messages on the server, @@ -1032,7 +1159,10 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

    -

    L’origine la plus probable de ce problème est que votre clé est chiffrée ou requiert un mot de passe, ou les deux. Ce type de clés n’est pas géré par Delta Chat. Vous pouvez tenter de retirer le chiffrement et le mot de passe puis réessayer l’importation. Si vous voulez garder votre mot de passe, vous devez créer un alias de courriel que vous utiliserez avec Delta Chat, de sorte que la clé de Delta Chat soit liée à cet alias.

    +

    L’origine la plus probable de ce problème est que votre clé est chiffrée ou requiert un mot de passe, ou les deux. Ce type de clés n’est pas géré par Delta Chat. Vous pouvez tenter de retirer le chiffrement et le mot de passe puis réessayer l’importation.

    + +

    Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

    Delta Chat gère les formats de clé privée OpenPGP les plus communs, néanmoins il est peu probable que les clés privées générées par toutes les sources soient prises en charge. Mais l’objectif principal de Delta Chat n’est pas là. En pratique, la majorité des nouveaux utilisateurs ne possèdent pas de clés de chiffrement avant d’utiliser Delta Chat. @@ -1041,6 +1171,50 @@ Néanmoins, nous essayons de gérer les clés privées d’autant de sources que

    La méthode pour retirer le mot de passe de la clé privée dépend du logiciel que vous utilisez pour gérer vos clés GPG. Avec Enigmail, vous pouvez définir votre mot de passe en laissant le champ vide dans la fenêtre de Gestion des Clés. Avec GnuPG, vous pouvez le définir avec la ligne de commande. Pour les autres programmes, vous devriez pouvoir trouver la solution en ligne.

    +

    + + + Est-ce qu’un audit indépendant des failles de sécurité a été réalisé sur Delta Chat ? + + +

    + +

    The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

    + +
      +
    • +

      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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

      +
    • +
    • +

      Début 2023, nous avons réparé les failles de sécurité et de confidentialité de la fonctionnalité “partage d’appli web dans une discussion” liées à des dysfonctionnements en mode bac à sable, en particulier avec Chromium. Après quoi, nous avons soumis Delta Chat à un nouvel audit de sécurité indépendant par Cure53, puis effectué les réparations de toutes les failles découvertes pour la version 1.36 de nos applications, publiée en avril 2023. +Vous trouverez ici un article de fond complet à propos de la sécurité du chiffrement de bout-en-bout sur internet.

      +
    • +
    • +

      Début 2023, Cure53 a analysé le chiffrement d’acheminement des connexions réseau de Delta Chat et testé une configuration de serveur de courriel reproductible, telle que recommandée sur ce site. +Vous trouverez plus d’informations sur cet audit sur notre blog ou dans le rapport complet ici.

      +
    • +
    • +

      En 2020, Include Security a analysé les bibliothèques principales Rust de Delta Chat, ainsi que ses bibliothèques IMAP, SMTP et TLS. +Aucun problème grave ou critique n’a été découvert. +Le rapport a tout de même révélé quelques vulnérabilités de gravité moyenne, qui ne représentent pas une menace en elles-mêmes pour les utilisateurs et les utilisatrices de Delta Chat, car elles dépendent de l’environnement dans lequel Delta Chat est utilisé. +Pour des raison de compatibilité et de facilité d’utilisation, nous ne pouvons pas les pallier toutes et avons préféré fournir des préconisations de sécurité aux personnes exposées. +Le rapport complet est consultable ici.

      +
    • +
    • +

      En 2019, Include Security a analysé les bibliothèques PGP et +RSA de Delta Chat. +Aucune faille critique n’a été trouvée, mais deux failles sévères ont été identifiées et immédiatement réparées par nos soins. +Une faille de gravité moyenne ainsi que quelques failles de gravité moindre ont également été découvertes, sans qu’il soit toutefois possible de les exploiter dans le fonctionnement de Delta Chat. +Nous en avons néanmoins réparées certaines depuis le rapport d’audit. +Le rapport complet est consultable ici.

      +
    • +
    +

    @@ -1057,7 +1231,7 @@ Pour les autres programmes, vous devriez pouvoir trouver la solution en ligne. -

    Oui. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

    +

    Oui. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

    • @@ -1093,10 +1267,19 @@ L’un n’a pas besoin de l’autre pour pouvoir fonctionner.

    • Vérifier à nouveau que les deux appareils sont sur le même réseau ou le même Wi-Fi.

    • +
    • +

      On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

      +
    • Il se peut que votre système dispose d’un “pare-feu personnalisé”, source bien connue de dysfonctionnements (en particulier sur Windows). Désactivez le pare-feu personnalisé sur chaque appareil pour Delta Chat et réessayez.

      +
    • +
    • +

      Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

    • Assurez-vous de disposer d’un espace de stockage suffisant sur l’appareil de destination.

      @@ -1130,8 +1313,8 @@ Vous pouvez utiliser plusieurs comptes par appareil : get.delta.chat.
    -

    - - - Quel est l’intérêt du paramètre “M’envoyer une copie”? - - -

    - -

    Envoyer une copie de vos messages à vous-même garantit que vous recevez vos propres - messages sur tous les appareils. Si vous avez de multiples appareils et que vous ne l’activez pas, vous voyez seulement les messages des autres personnes et les messages que vous avez envoyé depuis l’appareil en cours.

    - -

    La copie est envoyée dans la Boîte de réception puis déplacée dans le dossier DeltaChat; elle n’est pas mise dans le dossier “Envoyés”. Delta Chat ne téléverse jamais quelque chose dans le dossier Envoyés car ça signifierait de le téléverser deux fois (une fois via SMTP, puis une fois dans le dossier Envoyés via IMAP).

    - -

    Le paramètre par défaut pour l’envoi à soi-même est “Non”.

    - -

    - - - Pourquoi puis-je choisir de regarder le dossier “Envoyés”? - - -

    - -

    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 Delta Chat, et que vous voulez que votre client de messagerie participe aux discussions.

    - -

    Cependant, nous recommandons d’utiliser le client de bureau Delta Chat; vous pouvez le télécharger sur get.delta.chat. L’option de regarder le dossier “Envoyés” pourrait disparaître dans le futur. Elle a été introduite à une époque où il n’y avait pas de client de bureau Delta Chat disponible sur toutes les plateformes.

    - -

    - - - Pourquoi puis-je choisir de ne pas regarder le dossier Delta Chat? - - -

    - -

    Certaines personnes utilisent Delta Chat comme un client de messagerie normal, et veulent utiliser la Boîte de réception pour leurs mails au lieu d’utiliser le dossier DeltaChat. Si vous désactivez “Surveiller le dossier DeltaChat”, vous devriez aussi désactiver “déplacer les messages de discussions dans DeltaChat”. -Sinon, la suppression de messages dans une configuration multi-appareils pourrait ne pas marcher correctement.

    -

    @@ -1327,12 +1472,20 @@ this way, you will have a new random jitsi room every time you call someone.
      -
    • Vous pouvez activer l’envoi de la géolocalisation à la demande dans la section “Fonctionnalités expérimentales” des paramètres avancés.
    • -
    • Pour partager votre position dans une discussion, allez dans “Ajouter une pièce jointe” et sélectionnez “Position”. Vous pouvez alors choisir la durée pendant laquelle vous voulez partager votre position avec les membres de la discussion, de 5 minutes à 6 heures.
    • -
    • Quand vous vous déplacez, vos contacts voient votre position sur une carte dans la discussion.
    • -
    • Vous devez activer cette fonctionnalité dans les paramètres avancés pour pouvoir voir la carte et la position de vos contacts.
    • -
    • Cette fonctionnalité ne partage votre position avec personne d’autre que les membres de la discussion. Cependant, pour que la carte s’affiche, les tuiles de carte sont téléchargées depuis mapbox.com, donc si vous visualisez la carte, une requête pour afficher une zone spécifique est envoyée à mapbox.com. Si cela constitue un risque pour la protection de votre vie privée, cette fonctionnalité n’est probablement pas faite pour vous. Nous nous efforçons de trouver une alternative décentralisée à Mapbox.
    • -
    • Sur l’application de bureau, votre système d’exploitation ne peut généralement pas déterminer votre position. À la place, vous pouvez faire un clic droit sur la carte pour décrire votre position, qui sera ensuite envoyée dans la discussion en tant que message, tout en apparaissant sur la carte.
    • +
    • You can turn on location streaming in the “experimental features” section of +the advanced settings.
    • +
    • Now, if you want to share your location in a chat, go to “attach” and select +“location”. You can now set a time frame in which your location will be +streamed to your chat partners, between 5 minutes and 6 hours.
    • +
    • When your location changes, the others in the chat can view it on a map in +the chat.
    • +
    • To see the map and view locations of others, you need to turn on the feature +in the advanced settings.
    • +
    • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
    • +
    • On desktop, the OS typically can’t determine your location. Instead you can +right click on the map and describe a location, which is sent to the chat as +a message, but also appears on the map.

    @@ -1379,8 +1532,8 @@ this way, you will have a new random jitsi room every time you call someone.
  • -

    Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

    Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

  • @@ -1411,6 +1564,60 @@ it.

    +

    + + + De quelles autorisations Delta Chat a-t-il besoin? + + +

    + +

    Selon le système d’exploitation utilisé, +il vous sera peut-être demandé d’accorder des autorisations à l’application. +Voici ce que fait Delta Chat avec ces autorisations:

    + +
      +
    • Camera (can be disallowed) +
        +
      • take pictures and videos: for sending Photos
      • +
      +
    • +
    • Contacts (can be disallowed) +
        +
      • read your contacts: to discover contacts to chat with
      • +
      +
    • +
    • Location (can be disallowed) +
        +
      • access approximate location (network location sources): for the location streaming feature
      • +
      • access precise location (GPS and network location sources): for the location streaming feature
      • +
      +
    • +
    • Microphone (can be disallowed) +
        +
      • record audio: for audio messages
      • +
      +
    • +
    • Storage (can be disallowed) +
        +
      • modify or delete the contents of your SD card: to download message attachments
      • +
      • read the contents of your SD card: to share files with your contacts
      • +
      +
    • +
    • Other app capabilities +
        +
      • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
      • +
      • run at startup: so you don’t have to start Delta Chat manually
      • +
      • control vibration: for notifications
      • +
      • view network connections: to connect to your E-Mail provider
      • +
      • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
      • +
      • have full network access: to connect to your E-Mail provider
      • +
      • view Wi-Fi connections: to connect to your E-Mail provider
      • +
      • ask to ignore battery optimisations: for achieving “instant message delivery”
      • +
      +
    • +
    +

    @@ -1437,22 +1644,113 @@ Cependant, il faut activer des options spéciales pour que cela fonctionne corre
  • Vous trouverez un guide d’installation sur notre site internet.
  • -

    +

    - Si Delta Chat se base sur le courrier électronique, est-ce vraiment une messagerie instantanée? + Pourquoi dois-je entrer le mot de passe de mon compte de courriel dans Delta Chat ? Est-ce sécurisé ?

    +

    Comme pour les autres clients de courriel, Thunderbird, FairEmail, K9-Mail, Outlook, etc, celui-ci a besoin des identifiants / mots de passe pour recevoir et envoyer des courriels. +Bien sûr le mot de passe est uniquement stocké sur votre appareil. Et il est utilisé uniquement pour vous authentifier auprès de votre fournisseur de courriel, qui a, rappelons-le, accès à vos courriels non chiffrés.

    + +

    Si vous utilisez un fournisseur de courriel qui prend en charge OAuth2, comme gmail.com ou yandex.ru, +il n’est pas nécessaire de stocker votre mot de passe sur votre appareil. Dans ce cas, seul un jeton d’accès est utilisé.

    + +

    Comme Delta Chat est un logiciel libre, vous pouvez étudier le code source pour vérifier que vos identifiants / mots de passe sont utilisés de façon sécurisée. Nous sommes très heureux d’avoir des retours pour renforcer la sécurité de l’application.

    + +

    + + + Quels sont les messages qui apparaissent dans Delta Chat ? + + +

    + +

    Par défaut, Delta Chat affiche tous les courriels.

    + +

    At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

    +
      -
    • L’envoi et la réception de messages prennent généralement quelques secondes. Il arrive parfois que cela prenne plus de temps, mais c’est aussi le cas avec n’importe quelle autre messagerie.
    • -
    • La messagerie instantanée est rapide quand les deux parties utilisent activement l’application. Elle peut devenir plus lente si l’application fonctionne en arrière-plan.
    • -
    • La réception de messages peut alors prendre plusieurs minutes, car Android et iOS empêchent souvent Delta Chat de fonctionner en arrière-plan et ne le réveillent qu’occasionnellement. Ce délai artificiel est généralement pire sur iOS que sur Android.
    • -
    • Cependant, le fait qu’Android et iOS tuent les applications fonctionnant en arrière-plan constitue un problème pour de nombreuses applications reconnues. -Pour plus d’informations, voir dontkillmyapp.com.
    • +
    • “Non, seulement les discussions”: vous verrez seulement les messages envoyés par d’autres utilisateurs de Delta Chat et les réponses à vos messages Delta Chat. Cette option est recommandée si vous utilisez le même compte pour recevoir aussi des courriels normaux.
    • +
    • “Tout”: vous verrez dans Delta Chat tous les courriels envoyés à votre adresse. Cette option est recommandée si vous souhaitez utiliser Delta Chat pour tous vos courriels, afin de ne rater aucun message.
    • +
    • “Pour les contacts acceptés”: vous verrez dans Delta Chat tous les courriels envoyés par les personnes avec qui vous avez déjà ouvert une discussion, mais les notifications de nouvelles conversations ne s’afficheront que pour des messages envoyés via Delta Chat. Cette option vous permet de décider au cas par cas si vous souhaitez échanger via Delta Chat ou via une application de courriel “classique”.
    +

    + + + Est-ce que Delta Chat gère les courriels en HTML ? + + +

    + +

    Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

    + +

    + + + Can I set the E-Mail Subject with Delta Chat? + + +

    + +

    Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

    + +

    So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

    + +

    + + + Quel est l’intérêt du paramètre “M’envoyer une copie”? + + +

    + +

    Envoyer une copie de vos messages à vous-même garantit que vous recevez vos propres + messages sur tous les appareils. Si vous avez de multiples appareils et que vous ne l’activez pas, vous voyez seulement les messages des autres personnes et les messages que vous avez envoyé depuis l’appareil en cours.

    + +

    La copie est envoyée dans la Boîte de réception puis déplacée dans le dossier DeltaChat; elle n’est pas mise dans le dossier “Envoyés”. Delta Chat ne téléverse jamais quelque chose dans le dossier Envoyés car ça signifierait de le téléverser deux fois (une fois via SMTP, puis une fois dans le dossier Envoyés via IMAP).

    + +

    The default setting for “Send Copy to Self” is “on”.

    + +

    + + + Pourquoi puis-je choisir de regarder le dossier “Envoyés”? + + +

    + +

    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 Delta Chat, et que vous voulez que votre client de messagerie participe aux discussions.

    + +

    Cependant, nous recommandons d’utiliser le client de bureau Delta Chat; vous pouvez le télécharger sur get.delta.chat. L’option de regarder le dossier “Envoyés” pourrait disparaître dans le futur. Elle a été introduite à une époque où il n’y avait pas de client de bureau Delta Chat disponible sur toutes les plateformes.

    + +

    + + + Pourquoi puis-je choisir de ne pas regarder le dossier Delta Chat? + + +

    + +

    Certaines personnes utilisent Delta Chat comme un client de messagerie normal, et veulent utiliser la Boîte de réception pour leurs mails au lieu d’utiliser le dossier DeltaChat. Si vous désactivez “Surveiller le dossier DeltaChat”, vous devriez aussi désactiver “déplacer les messages de discussions dans DeltaChat”. +Sinon, la suppression de messages dans une configuration multi-appareils pourrait ne pas marcher correctement.

    +

    @@ -1474,6 +1772,19 @@ uses. Autocrypt-enabled e-mail app. +

    + + + Comment supprimer mon compte ? + + +

    + +

    Étant donné que vous utilisez Delta Chat à travers un compte courriel, la façon dont vous pouvez supprimer votre compte dépend de votre fournisseur de courriel. +Comme nous n’exerçons aucun contrôle sur votre compte courriel, nous ne sommes pas en mesure de vous aider à le supprimer.

    + +

    Si vous souhaitez conserver votre compte mais désinstaller Delta Chat, nous vous recommandons de quitter toutes les discussions de groupe avant de procéder à la désinstallation.

    +

    @@ -1486,45 +1797,6 @@ uses.
  • Consultez les standards utilisés dans Delta Chat.
  • -

    - - - Est-ce qu’un audit indépendant des failles de sécurité a été réalisé sur Delta Chat ? - - -

    - -

    Quatre audits indépendants ont été réalisés sur le projet Delta Chat ces dernières années :

    - -
      -
    • -

      En 2019, Include Security a analysé les bibliothèques PGP et -RSA de Delta Chat. -Aucune faille critique n’a été trouvée, mais deux failles sévères ont été identifiées et immédiatement réparées par nos soins. -Une faille de gravité moyenne ainsi que quelques failles de gravité moindre ont également été découvertes, sans qu’il soit toutefois possible de les exploiter dans le fonctionnement de Delta Chat. -Nous en avons néanmoins réparées certaines depuis le rapport d’audit. -Le rapport complet est consultable ici.

      -
    • -
    • -

      En 2020, Include Security a analysé les bibliothèques principales Rust de Delta Chat, ainsi que ses bibliothèques IMAP, SMTP et TLS. -Aucun problème grave ou critique n’a été découvert. -Le rapport a tout de même révélé quelques vulnérabilités de gravité moyenne, qui ne représentent pas une menace en elles-mêmes pour les utilisateurs et les utilisatrices de Delta Chat, car elles dépendent de l’environnement dans lequel Delta Chat est utilisé. -Pour des raison de compatibilité et de facilité d’utilisation, nous ne pouvons pas les pallier toutes et avons préféré fournir des préconisations de sécurité aux personnes exposées. -Le rapport complet est consultable ici.

      -
    • -
    • -

      Début 2023, Cure53 a analysé le chiffrement d’acheminement des connexions réseau de Delta Chat et testé une configuration de serveur de courriel reproductible, telle que recommandée sur ce site. -Vous trouverez plus d’informations sur cet audit sur notre blog ou dans le rapport complet ici.

      -
    • -
    • -

      Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

      -
    • -
    -

    diff --git a/assets/help/green-checkmark-screenshot.png b/src/main/assets/help/green-checkmark-screenshot.png similarity index 100% rename from assets/help/green-checkmark-screenshot.png rename to src/main/assets/help/green-checkmark-screenshot.png diff --git a/assets/help/green-checkmark.png b/src/main/assets/help/green-checkmark.png similarity index 100% rename from assets/help/green-checkmark.png rename to src/main/assets/help/green-checkmark.png diff --git a/assets/help/help.css b/src/main/assets/help/help.css similarity index 100% rename from assets/help/help.css rename to src/main/assets/help/help.css diff --git a/assets/help/id/help.html b/src/main/assets/help/id/help.html similarity index 77% rename from assets/help/id/help.html rename to src/main/assets/help/id/help.html index 8137d9706..db7fc9a2e 100644 --- a/assets/help/id/help.html +++ b/src/main/assets/help/id/help.html @@ -4,17 +4,14 @@
  • Grup @@ -28,6 +25,15 @@
  • What happens if I turn on “Delete old messages from device”?
  • +
  • Instant message delivery and Push Notifications + +
  • Encryption and Security
  • Multi-client @@ -59,9 +66,6 @@
  • Troubleshooting
  • Manual Transfer
  • Are there any plans for introducing a Delta Chat Web Client?
  • -
  • What is the “Send Copy to Self” setting good for?
  • -
  • Why can I choose to watch the “Sent” folder?
  • -
  • Why can I choose not to watch the DeltaChat folder?
  • webxdc apps @@ -78,17 +82,24 @@
  • How can I share my location with my chat partners?
  • What does the experimental database encryption actually protect?
  • Why can I choose to only watch the DeltaChat folder?
  • -
  • How can I change my account to a different e-mail address?
  • +
  • How can I use a different e-mail address with my profile?
  • Miscellaneous
  • @@ -104,8 +115,14 @@

    -

    Delta Chat adalah aplikasi obrolan baru yang mengirim pesan melalui email, diekripsi jika memungkinkan, dengan Autocrypt -Anda tidak harus mendaftar di mana saja, cukup gunakan akun email Anda yang ada dengan Delta Chat.

    +

    Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

    + +

    Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

    @@ -117,9 +134,15 @@ -

    Dengan Delta Chat, anda dapat mengetik ke semua alamat email yang ada - meskipun -si penerima tidak menggunakan aplikasi Delta Chat. Tidak perlu bagi -penerima untuk menginstal aplikasi yang sama seperti milik Anda, seperti halnya dengan messenger-messanger lain.

    +

    To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

    + +

    If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

    @@ -130,42 +153,25 @@ penerima untuk menginstal aplikasi yang sama seperti milik Anda, seperti halnya

      -
    • Independent of any company or services. You own your data.
    • -
    • Your data is not saved on a central server unless all users are using -the same e-mail servers
    • -
    • You do not distribute your address book to anyone.
    • -
    • Fast by the use of Push-IMAP.
    • -
    • Largest userbase - recipients not using Delta Chat can be reached as well.
    • -
    • No Spam - only messages of known users are shown by default.
    • -
    • End-to-end encryption via Autocrypt.
    • -
    • Copyleft and Standards based libre software.
    • -
    • Flexible identity with built-in support for multiple accounts
    • -
    - -

    - - - Pesan mana yang muncul di Delta Chat? - - -

    - -

    Secara default, Delta Chat menampilkan semua email.

    - -

    Pada “Pengaturan -> Obrolan & -Media -> Tampilkan Email Klasik”, Anda dapat mengubahnya. Anda memiliki opsi-opsi ini:

    - -
      -
    • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
    • -
    • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
    • -
    • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
    • +
    • +

      Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

      +
    • +
    • +

      Pervasive multi-profile and multi-device support on all platforms.

      +
    • +
    • +

      Interactive web apps in chats for gaming and collaboration

      +
    • +
    • +

      Audited end-to-end encryption +safe against network and server attacks.

      +
    • +
    • +

      Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      +

    @@ -207,18 +213,25 @@ receive messages from this person, consider blocking them.

    - How can I add or switch between multiple accounts? + What are profiles? How can I switch between them?

    -

    You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

    -
      -
    • on the menu button and then ‘Switch Account’ (Android and desktop)
    • -
    • or the profile icon and then ‘Add Account’ (iOS)
    • -
    +

    A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

    -

    You may also wish to learn how to add accounts to multiple devices.

    +

    On first installation of Delta Chat a first profile is created.

    + +

    Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

    + +

    You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

    + +

    You may also wish to learn how to use the same profile on multiple devices.

    @@ -248,79 +261,26 @@ baru

    -

    +

    - Apakah Delta Chat mendukung email HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

    -

    Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

    +

    Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

    -

    +

    - Mengapa saya harus memasukkan kata sandi E-Mail saya ke Delta Chat? Apakah ini aman? - - -

    - -

    Seperti program E-Mail lainnya seperti Thunderbird, K9-Mail, atau Outlook, -program membutuhkan kata sandi sehingga Anda dapat menggunakannya untuk mengirim email. Tentu saja, -kata sandi hanya disimpan di perangkat Anda. Kata sandi hanya dikirimkan ke -penyedia E-Mail Anda (saat Anda login), yang tetap memiliki akses ke email Anda.

    - -

    Jika Anda menggunakan penyedia E-Mail dengan dukungan OAuth2 seperti gmail.com atau yandex.ru, -tidak perlu menyimpan kata sandi Anda di perangkat. Dalam hal ini, hanya -token akses digunakan.

    - -

    Karena Delta Chat adalah Open Source, Anda dapat memeriksa file Source -Code -jika Anda ingin memverifikasi bahwa kredensial Anda ditangani dengan aman. Kami bahagia -tentang umpan balik yang membuat aplikasi lebih aman untuk semua pengguna kami.

    - -

    - - - Izin apa yang dibutuhkan Delta Chat? - - -

    - -

    Tergantung operasi sistem yang digunakan, -Anda mungkin diminta untuk memberikan izin ke aplikasi. -Inilah yang dilakukan Delta Chat dengan izin ini:

    - -
      -
    • Kamera (dapat dianulir)
    • -
    • ambil gambar dan video: untuk mengirim Foto
    • -
    • Kontak (dapat dianulir)
    • -
    • baca kontak Anda: untuk menemukan kontak untuk diajak ngobrol
    • -
    • Lokasi (dapat dianulir)
    • -
    • Akses perkiraan lokasi (sumber lokasi jaringan): untuk fitur streaming lokasi
    • -
    • Akses lokasi yang tepat (GPS dan sumber lokasi jaringan): untuk fitur streaming lokasi
    • -
    • Mikrofon (dapat dianulir)
    • -
    • rekam audio: untuk pesan audio
    • -
    • Penyimpanan (dapat dianulir)
    • -
    • memodifikasi atau menghapus isi kartu SD Anda: untuk mengunduh lampiran pesan
    • -
    • baca isi kartu SD Anda: untuk berbagi file dengan kontak Anda
    • -
    • Kemampuan aplikasi lainnya
    • -
    • ubah pengaturan audio Anda: sehingga Anda dapat memilih nada dering dan volume untuk pemberitahuan dan pesan audio
    • -
    • berjalan saat startup: jadi Anda tidak harus memulai Delta Chat secara manual
    • -
    • Kontrol getaran: untuk notifikasi
    • -
    • lihat koneksi jaringan: untuk terhubung ke penyedia E-Mail Anda
    • -
    • mencegah ponsel dari tidur: sehingga Anda dapat lebih mudah menyalin kode keamanan selama Pesan Pengaturan Autocrypt
    • -
    • memiliki akses jaringan penuh: untuk terhubung ke penyedia E-Mail Anda
    • -
    • lihat koneksi Wi-Fi: untuk terhubung ke penyedia E-Mail Anda
    • -
    • minta untuk mengabaikan optimisasi baterai: untuk pengguna yang ingin menerima pesan setiap saat
    • -
    - -

    - - - What means Pinning, Muting, Archiving? + What do Pinning, Muting and Archiving mean?

    @@ -375,22 +335,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

    +

    - How can I delete my account? + How do disappearing messages work?

    -

    As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

    +

    You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

    -

    If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

    + +

    Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

    + +

    Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

    @@ -523,6 +501,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

    + + + Instant message delivery and Push Notifications + + +

    + +

    + + + What are Push Notifications? How can I get instant message delivery? + + +

    + +

    Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

    + +

    Push Notifications work with all chatmail servers on

    + +
      +
    • +

      iOS devices, by integrating with Apple Push services.

      +
    • +
    • +

      Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

      +
    • +
    + +

    As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

    + +

    + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

    + +

    Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

    + +

    + + + Are Push notifications enabled / needed on Android devices? + + +

    + +

    If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

    + +

    In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

    + +
      +
    • +

      Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

      +
    • +
    • +

      Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

      +
    • +
    • +

      Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

      +
    • +
    + +

    Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

    + +

    + + + How private are Delta Chat Push Notifications? + + +

    + +

    Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

    + +

    Here is how Delta Chat apps perform Push Notification delivery:

    + +
      +
    • +

      A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

      +
    • +
    • +

      When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

      +
    • +
    • +

      The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

      +
    • +
    • +

      The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

      +
    • +
    + +

    As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

    + +

    The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

    + +

    Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

    + +

    + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

    + +

    Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

    + +

    Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

    +

    @@ -545,7 +687,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

    -

    Secure-Join protocols +

    Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -576,49 +718,32 @@ guarantee end-to-end encrypted messages.

    -

    Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

    +

    If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

    -

    Inviter side:

    +

    If you are together in person, +you can show a QR code to your chat partner.

    • -

      Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

      +

      For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

    • -

      Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

      +

      For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

    -

    Joiner side:

    +

    Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

    -
      -
    • -

      Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

      -
    • -
    • -

      Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

      -
    • -
    • -

      Tap “OK”

      -
    • -
    - -

    Both Inviter and Joiner:

    - -

    Wait while Secure-Join network messages are exchanged between both devices.

    +

    Now wait while Secure-Join network messages are exchanged between both devices.

    • @@ -672,7 +797,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

      For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

      @@ -700,7 +825,7 @@ even if the contact is a member there.

      Your contact is using Delta Chat on a second device (phone or laptop)

      If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

      @@ -708,8 +833,8 @@ and guaranteed encryption is established with both devices of your contact.

      Your contact reinstalled Delta Chat using their old account login

      If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

      @@ -730,7 +855,7 @@ guaranteed end-to-end encryption will be automatically re-established.

      Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

      In any case, you can not do much else than accept the warning. @@ -896,12 +1021,12 @@ deliver messages to recipient’s devices.

      Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

      @@ -960,7 +1085,7 @@ and their non-Autocrypt e-mail app.

      If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -978,10 +1103,10 @@ even if the direct chat between you two has a

      The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

      +and turning on disappearing messages.

      -

      Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

      Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

      If you don’t need a longer-lived copy of your messages on the server, @@ -1060,11 +1185,12 @@ Caution: Make sure the key is not protected by a password, or remove the passwor -

      The most likely cause is that your key is encrypted and/or uses -a password. Such keys are not supported by Delta Chat. You could remove the -passphrase encryption and the password and try the import again. If you want -to keep your passphrase you’ll have to create an e-mail alias for use -with Delta Chat such that Delta Chat’s key is tied to this e-mail alias.

      +

      The most likely cause is that your key is encrypted and/or uses a password. +Such keys are not supported by Delta Chat. +You could remove the passphrase encryption and the password and try the import again.

      + +

      Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

      Delta Chat supports common OpenPGP private key formats, however, it is unlikely that private keys from all sources will be fully supported. This @@ -1079,6 +1205,67 @@ it + + + Was Delta Chat independently audited for security vulnerabilities? + + + + +

      The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

        +
      • +
      • +

        2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

        +
      • +
      • +

        2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

        +
      • +
      • +

        2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

        +
      • +
      +

      @@ -1095,7 +1282,7 @@ For other programs, you should be able to find a solution online.

      -

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

      +

      Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      • @@ -1133,10 +1320,19 @@ One device is not needed for the other to work.

      • Double-check both devices are in the same Wi-Fi or network

      • +
      • +

        On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

        +
      • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

        +
      • +
      • +

        Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

      • Ensure there is enough storage on the destination device

        @@ -1148,7 +1344,7 @@ Do not exit Delta Chat.
      • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

        +You can use multiple profiles per device, just add another profile

      • If you still have problems or if you cannot scan a QR code @@ -1171,8 +1367,8 @@ try the manual transfer described below

        screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
      • -
      • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
      • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
        • If you use iOS: and you encounter difficulties, maybe @@ -1203,56 +1399,6 @@ or the AppImage for Linux. You can find them on get.delta.chat.
        -

        - - - What is the “Send Copy to Self” setting good for? - - -

        - -

        Sending a copy of your messages to yourself ensures that you receive your own -messages on all devices. If you have multiple devices and don’t turn it on, you -see only the messages from other people, and the messages you send from the -current device.

        - -

        The copy is sent to the Inbox, and then moved to the DeltaChat folder; it’s not -put into the “Sent” folder. Delta Chat never uploads anything to the Sent -folder because this would mean uploading a message twice (once through SMTP, -and once through IMAP to Sent folder).

        - -

        The default setting for copy-to-self is “no”.

        - -

        - - - Why can I choose to watch the “Sent” folder? - - -

        - -

        The only reason one wants to watch the Sent folder is if you are using another -mail program (like Thunderbird) next to your Delta Chat app, and want your MUA -to participate in chat conversations.

        - -

        However, we recommend using the Delta Chat Desktop Client; you can download it -on get.delta.chat. The option to watch the “Sent” -folder might go away in the future. It was introduced at a time where there was -no Delta Chat Desktop client available on all platforms.

        - -

        - - - Why can I choose not to watch the DeltaChat folder? - - -

        - -

        Some people use Delta Chat as a regular email client, and want to use the Inbox -folder for their mail, instead of the DeltaChat folder. If you disable “Watch -DeltaChat folder”, you should also disable “move chat messages to DeltaChat”. -Otherwise, deleting messages or multi-device setups might not work properly.

        -

        @@ -1399,11 +1545,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

      • the chat.
      • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
      • -
      • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
      • +
      • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
      • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
      • @@ -1454,18 +1597,18 @@ would be done by the Delta Chat app.

        In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

        -

        +

        - How can I change my account to a different e-mail address? + How can I use a different e-mail address with my profile?

        1. -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        2. @@ -1496,6 +1639,60 @@ it.

          +

          + + + Izin apa yang dibutuhkan Delta Chat? + + +

          + +

          Tergantung operasi sistem yang digunakan, +Anda mungkin diminta untuk memberikan izin ke aplikasi. +Inilah yang dilakukan Delta Chat dengan izin ini:

          + +
            +
          • Camera (can be disallowed) +
              +
            • take pictures and videos: for sending Photos
            • +
            +
          • +
          • Contacts (can be disallowed) +
              +
            • read your contacts: to discover contacts to chat with
            • +
            +
          • +
          • Location (can be disallowed) +
              +
            • access approximate location (network location sources): for the location streaming feature
            • +
            • access precise location (GPS and network location sources): for the location streaming feature
            • +
            +
          • +
          • Microphone (can be disallowed) +
              +
            • record audio: for audio messages
            • +
            +
          • +
          • Storage (can be disallowed) +
              +
            • modify or delete the contents of your SD card: to download message attachments
            • +
            • read the contents of your SD card: to share files with your contacts
            • +
            +
          • +
          • Other app capabilities +
              +
            • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
            • +
            • run at startup: so you don’t have to start Delta Chat manually
            • +
            • control vibration: for notifications
            • +
            • view network connections: to connect to your E-Mail provider
            • +
            • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
            • +
            • have full network access: to connect to your E-Mail provider
            • +
            • view Wi-Fi connections: to connect to your E-Mail provider
            • +
            • ask to ignore battery optimisations: for achieving “instant message delivery”
            • +
            +
          • +
          +

          @@ -1525,28 +1722,138 @@ blogpost.
        3. You can find an installation guide on our website.
      -

      +

      - If Delta Chat uses E-Mail, is it really an Instant Messenger? + Mengapa saya harus memasukkan kata sandi E-Mail saya ke Delta Chat? Apakah ini aman?

      +

      Seperti program E-Mail lainnya seperti Thunderbird, K9-Mail, atau Outlook, +program membutuhkan kata sandi sehingga Anda dapat menggunakannya untuk mengirim email. Tentu saja, +kata sandi hanya disimpan di perangkat Anda. Kata sandi hanya dikirimkan ke +penyedia E-Mail Anda (saat Anda login), yang tetap memiliki akses ke email Anda.

      + +

      Jika Anda menggunakan penyedia E-Mail dengan dukungan OAuth2 seperti gmail.com atau yandex.ru, +tidak perlu menyimpan kata sandi Anda di perangkat. Dalam hal ini, hanya +token akses digunakan.

      + +

      Karena Delta Chat adalah Open Source, Anda dapat memeriksa file Source +Code +jika Anda ingin memverifikasi bahwa kredensial Anda ditangani dengan aman. Kami bahagia +tentang umpan balik yang membuat aplikasi lebih aman untuk semua pengguna kami.

      + +

      + + + Pesan mana yang muncul di Delta Chat? + + +

      + +

      Secara default, Delta Chat menampilkan semua email.

      + +

      At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

      +
        -
      • Sending and receiving messages takes a few seconds, typically. Sometimes -there are cases where it takes longer but that is arguably true as well for -any other messenger.
      • -
      • Instant chatting works fast if both parties are actively using the app. It’s -sometimes slower if the app is running in the background.
      • -
      • Receiving messages then can take minutes because both Android and iOS often -stop Delta Chat from running in the background, and only wake it up -occasionally. This artificial delay is usually worse on iOS than on Android.
      • -
      • However, Android and iOS kill apps running in the background is a -problem for many legitimate apps. For more information, see -dontkillmyapp.com.
      • +
      • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
      • +
      • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
      • +
      • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
      +

      + + + Apakah Delta Chat mendukung email HTML? + + +

      + +

      Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

      + +

      + + + Can I set the E-Mail Subject with Delta Chat? + + +

      + +

      Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

      + +

      So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

      + +

      + + + What is the “Send Copy to Self” setting good for? + + +

      + +

      Sending a copy of your messages to yourself ensures that you receive your own +messages on all devices. If you have multiple devices and don’t turn it on, you +see only the messages from other people, and the messages you send from the +current device.

      + +

      The copy is sent to the Inbox, and then moved to the DeltaChat folder; it’s not +put into the “Sent” folder. Delta Chat never uploads anything to the Sent +folder because this would mean uploading a message twice (once through SMTP, +and once through IMAP to Sent folder).

      + +

      The default setting for “Send Copy to Self” is “on”.

      + +

      + + + Why can I choose to watch the “Sent” folder? + + +

      + +

      The only reason one wants to watch the Sent folder is if you are using another +mail program (like Thunderbird) next to your Delta Chat app, and want your MUA +to participate in chat conversations.

      + +

      However, we recommend using the Delta Chat Desktop Client; you can download it +on get.delta.chat. The option to watch the “Sent” +folder might go away in the future. It was introduced at a time where there was +no Delta Chat Desktop client available on all platforms.

      + +

      + + + Why can I choose not to watch the DeltaChat folder? + + +

      + +

      Some people use Delta Chat as a regular email client, and want to use the Inbox +folder for their mail, instead of the DeltaChat folder. If you disable “Watch +DeltaChat folder”, you should also disable “move chat messages to DeltaChat”. +Otherwise, deleting messages or multi-device setups might not work properly.

      +

      @@ -1568,6 +1875,23 @@ uses.

    • Autocrypt-enabled e-mail app.
    +

    + + + How can I delete my account? + + +

    + +

    As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

    + +

    If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

    +

    @@ -1580,59 +1904,6 @@ uses.
  • See Standards used in Delta Chat.
  • -

    - - - Was Delta Chat independently audited for security vulnerabilities? - - -

    - -

    The Delta Chat project underwent four independent security audits in the last years:

    - -
      -
    • -

      In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

      -
    • -
    • -

      In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

      -
    • -
    • -

      Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

      -
    • -
    • -

      Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

      -
    • -
    -

    @@ -1673,7 +1944,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

  • In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

    +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

  • From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/it/help.html b/src/main/assets/help/it/help.html similarity index 78% rename from assets/help/it/help.html rename to src/main/assets/help/it/help.html index ae0454b69..05cd7a136 100644 --- a/assets/help/it/help.html +++ b/src/main/assets/help/it/help.html @@ -4,17 +4,14 @@

  • Gruppi @@ -28,6 +25,15 @@
  • Cosa succede se attivo “Elimina Messaggi dal Dispositivo”?
  • +
  • Consegna messaggi istantanei e Notifiche Push + +
  • Crittografia e Sicurezza
  • Multi-client @@ -59,9 +66,6 @@
  • Risoluzione dei problemi
  • Trasferimento manuale
  • Sono previsti piani per l’introduzione di un client Web Delta Chat?
  • -
  • A cosa serve l’impostazione “Invia copia a se stessi”?
  • -
  • Perché posso scegliere di guardare la cartella “Inviata”?
  • -
  • Perché posso scegliere di non guardare la cartella DeltaChat?
  • apps webxdc @@ -78,17 +82,24 @@
  • Come posso condividere la mia posizione con i miei partner di chat?
  • Cosa protegge effettivamente la crittografia sperimentale del database?
  • Perché posso scegliere di guardare solo la cartella DeltaChat?
  • -
  • Come posso cambiare il mio account con un indirizzo e-mail diverso?
  • +
  • Come posso cambiare il mio profilo con un indirizzo e-mail diverso?
  • Varie
  • @@ -104,8 +115,14 @@

    -

    Delta Chat è una nuova app di chat che invia messaggi tramite e-mail, se possibile crittografati, con Autocrypt. -Non devi registrarti da nessuna parte, usa semplicemente il tuo account e-mail esistente con Delta Chat.

    +

    Delta Chat è un’app di messaggistica affidabile, decentralizzata e sicura, +disponibile per piattaforme mobili e desktop.

    + +

    Delta Chat sembra Whatsapp o Telegram ma puoi anche usarlo e considerarlo come un’app e-mail. +Puoi iscriverti in modo anonimo a una varietà di server chatmail interoperabili +che sono server e-mail minimi ottimizzati per operazioni veloci e sicure. +Oppure puoi utilizzare i classici server e-mail e un profilo e-mail esistente +nel qual caso Delta Chat funge da app e-mail.

    @@ -117,9 +134,15 @@ -

    Con Delta Chat puoi scrivere a qualsiasi indirizzo e-mail esistente, anche -se il destinatario non sta utilizzando l’app Delta Chat. Non c’è bisogno per il -destinatario di installare la tua stessa app, come con altri messenger.

    +

    Per impostare in modo sicuro il contatto con gli altri scansiona un codice QR di invito +o condividi un link di invito. +Ciò è necessario quando si utilizza un profilo chat basato su chatmail (predefinito). +perché i server chatmail rifiutano i messaggi in uscita non crittografati.

    + +

    Se crei un profilo di chat con un indirizzo e-mail classico +puoi creare manualmente un contatto se conosci il loro indirizzo e-mail +e poi scrivi loro un messaggio +anche se il destinatario non utilizza Delta Chat.

    @@ -130,42 +153,25 @@ destinatario di installare la tua stessa app, come con altri messenger.

      -
    • Indipendente da qualsiasi azienda o servizio. Tu possiedi i tuoi dati.
    • -
    • I tuoi dati non vengono salvati su un server centrale a meno che non vengano utilizzati da tutti gli utenti -gli stessi server e-mail
    • -
    • Non distribuisce la tua rubrica a nessuno.
    • -
    • Veloce grazie all’uso di Push-IMAP.
    • -
    • Base utenti più numerosa: è possibile raggiungere anche i destinatari che non utilizzano Delta Chat.
    • -
    • No Spam: per impostazione predefinita vengono visualizzati solo i messaggi di utenti conosciuti.
    • -
    • Crittografia end-to-end tramite Autocrypt.
    • -
    • Software libero basato su Copyleft e Standards.
    • -
    • Identità flessibile con supporto integrato per più account
    • -
    - -

    - - - Quali messaggi vengono mostrati in Delta Chat? - - -

    - -

    Per impostazione predefinita, Delta Chat mostra tutte le e-mails.

    - -

    In “Impostazioni -> Chat e -Media -> Mostra E-mail Tradizionali”, puoi modificare questa impostazione. Hai queste opzioni:

    - -
      -
    • “No, solo chat”: solo i messaggi inviati da altri utenti di Delta Chat e le “risposte a” -vengono visualizzati i tuoi messaggi di Delta Chat. Questo ha più senso se usi lo stesso -account di posta elettronica anche per le normali e-mail.
    • -
    • “Per i contatti accettati”: Delta Chat mostra tutte le e-mail dei contatti con cui -hai già una chat, ma le nuove chat vengono visualizzate solo per i messaggi di Delta Chat. -Questo aiuta a decidere caso per caso se si desidera avere una -conversazione in Delta Chat o in una “normale” app di posta elettronica.
    • -
    • “Sì”: Delta Chat mostra tutte l’e-mail inviate al tuo indirizzo e-mail. Questo -ha senso se vuoi usare Delta Chat per tutte le tue e-mail, quindi nessun messaggio -si perde. Questa è l’impostazione predefinita.
    • +
    • +

      Profili chat anonimi con [server chatmail] veloci, sicuri e interoperabili (https://delta.chat/chatmail) +che offrono notifiche push istantanee per dispositivi iOS e Android.

      +
    • +
    • +

      Pervasivo multi-profilo e supporto multi-dispositivo su tutte le piattaforme.

      +
    • +
    • +

      Interattive web app nelle chat per giochi e collaborazione

      +
    • +
    • +

      Crittografia end-to-end controllata +sicuro contro gli attacchi alla rete e al server.

      +
    • +
    • +

      Software Libero e Open Source, sia lato app che lato server. +Basato su Standard E-mail e Web Internet, +per evitare “l’ennesima sindrome standard (xkcd 927)”

      +

    @@ -207,18 +213,25 @@ messaggi da questa persona, prendete in considerazione la possibilità di bl

    - Come posso aggiungere o passare da un account all'altro? + Cosa sono i profili? Come posso passare dall’uno all’altro?

    -

    Puoi facilmente lavorare con account aggiuntivi sui client mobili e desktop di Delta Chat facendo clic su:

    -
      -
    • sul pulsante del menu e poi su “Cambia Account” (Android e desktop)
    • -
    • o l’icona del profilo e poi ‘Aggiungi account’ (iOS)
    • -
    +

    Un profilo è un nome, un’immagine e alcune informazioni aggiuntive per crittografare i messaggi. +Un profilo risiede solo sui tuoi dispositivo(i) +e utilizza una chatmail o un classico server e-mail per trasportare i messaggi.

    -

    Potresti anche voler imparare come aggiungere account a più dispositivi.

    +

    Alla prima installazione di Delta Chat viene creato un primo profilo.

    + +

    Successivamente, puoi toccare l’immagine del tuo profilo nell’angolo in alto a sinistra per Aggiungere Profili +o Cambiare Profili.

    + +

    Potresti voler utilizzare profili separati per attività politiche, familiari o lavorative, +o es. per un “profilo spam” dedicato con il quale ti registri su siti web e piattaforme +che prima o poi tendono a causare messaggi non richiesti (“spam”).

    + +

    Potresti anche voler imparare come utilizzare lo stesso profilo su più dispositivi.

    @@ -247,73 +260,21 @@ dispositivo.

    -

    +

    - Delta Chat supporta le e-mail HTML? + Posso impostare una Firma Testo/Stato/Motto con Delta Chat?

    -

    Sì, i messaggi HTML in arrivo sono dotati di un pulsante “Mostra messaggio completo”. -I messaggi in uscita utilizzano sempre testo normale.

    - -

    - - - Perché devo inserire la mia password E-Mail in Delta Chat? È sicuro? - - -

    - -

    Come con altri programmi di posta elettronica quali Thunderbird, K9-Mail o Outlook,il -programma ha bisogno della password in modo da poterla utilizzare per inviare mail. Naturalmente, la -password è memorizzata solo sul tuo dispositivo. La password viene trasmessa solo a -il tuo fornitore E-Mail (quando effettui il login), che ha comunque accesso alla tua posta.

    - -

    Se utilizzi un provider E-Mail con supporto OAuth2 come gmail.com o yandex.ru, -non è necessario memorizzare la password sul dispositivo. In questo caso, solo un -token di accesso viene utilizzato.

    - -

    Poiché Delta Chat è Open Source, puoi controllare il Codice -Sorgente -se vuoi verificare che le tue credenziali siano gestite in modo sicuro. Siamo felici dei feedback che rendono l’app più sicura per tutti i nostri utenti.

    - -

    - - - Di quali autorizzazioni ha bisogno Delta Chat? - - -

    - -

    A seconda del sistema operativo in uso, -potrebbe esserti chiesto di concedere le autorizzazioni all’app. -Questo è ciò che fa Delta Chat con queste autorizzazioni:

    - -
      -
    • Fotocamera (può essere disabilitata)
    • -
    • scattare foto e video: per l’invio di foto
    • -
    • Contatti (possono essere disabilitati)
    • -
    • leggi i tuoi contatti: per scoprire i contatti con cui chattare
    • -
    • Posizione (può essere non consentita)
    • -
    • accedere alla posizione approssimativa (fonti di posizione di rete): per la funzione di trasmissione della posizione
    • -
    • accedere alla posizione precisa (GPS e fonti di localizzazione di rete): per la funzione di trasmissione della posizione
    • -
    • Microfono (può essere disattivato)
    • -
    • registra audio: per i messaggi audio
    • -
    • Memoria (può essere disabilitata)
    • -
    • modificare o eliminare il contenuto della scheda SD: per scaricare gli allegati dei messaggi
    • -
    • leggere il contenuto della tua scheda SD: per condividere file con i tuoi contatti
    • -
    • Altre funzionalità dell’app
    • -
    • modificare le impostazioni audio: così puoi scegliere suonerie e volume per notifiche e messaggi audio
    • -
    • esegui all’avvio: così non devi avviare Delta Chat manualmente
    • -
    • controllo vibrazione: per le notifiche
    • -
    • visualizzare le connessioni di rete: per connettersi al proprio fornitore E-Mail
    • -
    • impedisce al telefono di andare in sospensione: così puoi copiare più facilmente il codice di sicurezza durante il messaggio di configurazione di Autocrypt
    • -
    • avere pieno accesso alla rete: per connettersi al proprio fornitore E-Mail
    • -
    • visualizzare le connessioni Wi-Fi: per connettersi al proprio fornitore E-Mail
    • -
    • chiedi di ignorare le ottimizzazioni della batteria: per gli utenti che vogliono ricevere immediatamente i messaggi
    • -
    +

    SÌ, +puoi farlo in “Impostazioni > Profilo > Firma”. +I tuoi contatti che utilizzano Delta Chat lo vedranno +quando visualizzano i tuoi dettagli di contatto. +A tutti gli altri, +apparirà come una firma di posta elettronica +sotto il testo di tutti i tuoi messaggi.

    @@ -370,22 +331,40 @@ hai disattivato le conferme di lettura, non vedranno il punto verde finché non invia loro un messaggio o scrivi anche a un gruppo a cui appartengono. -

    +

    - Come posso eliminare il mio account? + Come funzionano i messaggi a scomparsa?

    -

    Poiché utilizzi un account e-mail per Delta Chat, -il modo in cui puoi eliminare il tuo account dipende dal tuo provider e-mail. -Non abbiamo alcun controllo sul tuo account e-mail, -quindi purtroppo non possiamo aiutarti in questo.

    +

    Puoi attivare i “messaggi che scompaiono” +nelle impostazioni di una chat, +in alto a destra nella finestra della chat, +selezionando un intervallo di tempo +tra 1 minuto e 5 settimane.

    -

    Se vuoi mantenere l’account, -ma disinstallare Delta Chat, -si consiglia di uscire da qualsiasi chat di gruppo prima di disinstallare Delta Chat.

    +

    Fino a quando l’impostazione non viene nuovamente disattivata, +l’app Delta Chat di ogni membro della chat si prende cura +di eliminare i messaggi +dopo l’intervallo di tempo selezionato. +Inizia il lasso di tempo +quando il destinatario vede per la prima volta il messaggio in Delta Chat. +I messaggi vengono eliminati +entrambi in ciascun profilo e-mail sul server, +e nell’app stessa.

    + +

    Tieni presente che puoi fare affidamento sui messaggi che scompaiono +solo finché ti fidi dei tuoi partner di chat; +i partner di chat dannosi possono scattare foto, +o altrimenti salvare, copiare o inoltrare messaggi prima della cancellazione.

    + +

    A parte quello, +se un partner di chat disinstalla Delta Chat, +i messaggi non verranno eliminati dal loro profilo e-mail. +Molto probabilmente non saranno più decifrabili +(a patto che siano stati crittografati in primo luogo).

    @@ -515,6 +494,170 @@ in questo modo, tutti i messaggi saranno eliminati dal dispositivo non più vecchi di quel periodo. +

    + + + Consegna messaggi istantanei e Notifiche Push + + +

    + +

    + + + Cosa sono le Notifiche Push? Come posso ottenere la consegna dei messaggi istantanei? + + +

    + +

    Le Notifiche Push vengono inviate dai “Servizi push” di Apple e Google al dispositivo di un utente +in modo che un’app Delta Chat inattiva possa recuperare i messaggi in background +e mostrare le notifiche sul telefono di un utente, se necessario.

    + +

    Le Notifiche Push funzionano con tutti i server chatmail attivi

    + +
      +
    • +

      Dispositivi iOS, attraverso l’integrazione con i servizi Push di Apple.

      +
    • +
    • +

      Dispositivi Android, attraverso l’integrazione con il servizio Google FCM Push, +anche sui dispositivi che utilizzano microG +invece del codice proprietario di Google sul telefono.

      +
    • +
    + +

    A partire da Maggio 2024, i server e-mail classici non supportano le Notifiche Push +per gli utenti di Delta Chat.

    + +

    + + + Le Notifiche Push sono abilitate sui dispositivi iOS? Esiste un’alternativa? + + +

    + +

    Sì, Delta Chat utilizza automaticamente le notifiche push per i profili chatmail. +E no, non esiste alcuna alternativa sui telefoni Apple per ottenere la consegna dei messaggi istantanei +perché i dispositivi Apple non consentono a Delta Chat di recuperare i dati in background. +Le notifiche push vengono attivate automaticamente per gli utenti iOS perché +Sistema di notifiche push che tutela la privacy di Delta Chat +non espone ad Apple i dati che non possiede già.

    + +

    + + + Le Notifiche Push sono abilitate / necessarie sui dispositivi Android? + + +

    + +

    Se è disponibile un “Servizio Push”, Delta Chat abilita le Notifiche Push +per ottenere la consegna di messaggi istantanei a tutti gli utenti chatmail. +Se utilizzi un provider e-mail classico anziché i server chatmail, +Le notifiche push non sono disponibili.

    + +

    Nelle impostazioni “Notifiche” di Delta Chat per “Consegna istantanea” +puoi modificare le seguenti impostazioni che interessano tutti i profili chat:

    + +
      +
    • +

      Utilizza Servizio Push: l’impostazione predefinita quando si utilizzano i profili chatmail e se +sul telefono è disponibile un servizio Push. +Se disponi sia di profili chatmail che di e-mail classica, +la Notifica Push funzionerà solo +per i messaggi in arrivo sui profili chatmail.

      +
    • +
    • +

      Utilizza Connessione in Background: se non stai utilizzando un servizio Push, +puoi disattivare le “ottimizzazioni della batteria” per Delta Chat, +permettendogli di recuperare i messaggi in background. +Tuttavia potrebbero verificarsi ritardi da minuti ad ore. +Alcuni fornitori Android limitano addirittura completamente le app +(vedi dontkillmyapp.com) +e Delta Chat potrebbe non mostrare i messaggi in arrivo +finché non riapri manualmente l’app.

      +
    • +
    • +

      Forza Connessione Background: questa è l’opzione di ripiego +se le opzioni precedenti non sono disponibili o non raggiungono la “consegna immediata”. +Abilitandolo si genera una notifica permanente sul tuo telefono +che a volte può essere “minimizzato” con i recenti telefoni Android.

      +
    • +
    + +

    Entrambe le opzioni “Connessione in Background” sono efficienti dal punto di vista energetico ed +è sicuro provarlo se riscontri che i messaggi arrivano solo con lunghi ritardi.

    + +

    + + + Quanto sono private le Notifiche Push di Delta Chat? + + +

    + +

    Il supporto delle Notifiche Push di Delta Chat evita la fuga di informazioni private. +Non perde e-mail, indirizzo IP o contenuto dei messaggi (nemmeno crittografati) +a qualsiasi sistema coinvolto nella consegna di Notifiche Push.

    + +

    Ecco come le app Delta Chat eseguono l’invio delle Notifiche Push:

    + +
      +
    • +

      Un’app Delta Chat ottiene un “gettone del dispositivo” localmente e lo memorizza +sul server chatmail.

      +
    • +
    • +

      Quando un server chatmail riceve un’e-mail per un utente Delta Chat +inoltra il “gettone del dispositivo” al proxy di notifica centrale di Delta Chat.

      +
    • +
    • +

      Il proxy di notifica centrale di Delta Chat inoltra +il “gettone del dispositivo” al rispettivo servizio Push (Apple, Google, ecc.), +senza mai conoscere l’IP o l’indirizzo e-mail degli utenti Delta Chat.

      +
    • +
    • +

      Il Servizio Push centrale (Apple, Google, ecc.) +attiva l’app Delta Chat sul tuo dispositivo +per verificare la presenza di nuovi messaggi in background. +Non conosce chatmail o l’indirizzo e-mail del dispositivo che si attiva. +I servizi centrali Apple/Google Push non vedono mai un indirizzo e-mail (mittente o destinatario) +e inoltre non vedono mai il contenuto del messaggio (anche non in forma crittografata).

      +
    • +
    + +

    A partire da Maggio 2024, i server chatmail conoscono i “gettoni del dispositivo” +ma prevediamo di crittografare queste informazioni nel proxy di notifica +in modo tale che il server chatmail non apprenda mai il gettone del dispositivo.

    + +

    Il proxy di notifica centrale di Delta Chat è piccolo e completamente implementato in Rust +e si dimentica dei gettoni del dispositivo non appena Apple/Google/ecc li elabora, +di solito nel giro di pochi millisecondi.

    + +

    Come risultato di questo disegno complessivo sulla riservatezza, anche il sequestro di un server chatmail, +o il sequestro totale del proxy di notifica centrale di Delta Chat +non rivelerebbe informazioni private che i servizi Push non abbiano già.

    + +

    + + + Perché Delta Chat si integra con i servizi push centralizzati proprietari di Apple/Google? + + +

    + +

    Delta Chat è un messenger decentralizzato gratuito e open source con scelta libera del server, +ma vogliamo che gli utenti sperimentino in modo affidabile la “consegna istantanea” dei messaggi, +come sperimentano dalle app Whatsapp, Signal o Telegram, +senza porre domande in anticipo, più adatte a utenti esperti o sviluppatori.

    + +

    Tieni presente che Delta Chat dispone di un sistema di Notifiche Push piccolo e rispettoso della privacy +che consente la “consegna istantanea” dei messaggi a tutti i server chatmail +incluso uno potenziale potresti configurarlo tu stesso senza la nostra autorizzazione. +Benvenuti nella potenza del sistema interoperabile e massiccio di chatmail ed e-mail :)

    +

    @@ -534,7 +677,7 @@ più vecchi di quel periodo.

    Autocrypt viene utilizzato automaticamente per stabilire la crittografia end-to-end con contatti e chat di gruppo. Autocrypt utilizza un sottoinsieme limitato e sicuro dello standard OpenPGP. I messaggi crittografati end-to-end sono contrassegnati da un lucchetto padlock.

    -

    Protocolli Secure-Join +

    Protocolli Secure-Join vengono utilizzati per stabilire chat con crittografia end-to-end garantita che protegge dagli attacchi di rete e dai server compromessi. Chat contrassegnata da un segno di spunta verde @@ -565,49 +708,32 @@ garantisce messaggi crittografati end-to-end.

    -

    Incontra il tuo partner di chat fuori Delta Chat, preferibilmente di persona -ma un secondo canale come una chat video -oppure va bene anche un altro messenger. -Esegui la seguente procedura di presentazione/scansione QR con il tuo partner di chat. -Uno di voi è l’“Invitante”, l’altro è l’“Invitato”.

    +

    Se disponi di un secondo canale di comunicazione con il tuo partner di chat, +come una chat video o un altro messenger, +puoi generare un link d’invito.

    -

    Lato invito:

    +

    Se siete insieme di persona, +puoi mostrare un codice QR al tuo partner di chat.

    • -

      Invito di gruppo: -Tocca il titolo del gruppo di chat per visualizzare l’elenco dei membri e seleziona “Codice QR di invito”. -Condividi l’immagine QR con l’altra parte di persona o tramite un secondo canale.

      +

      Per Inviti di gruppo, +tocca il titolo del gruppo di chat per vedere l’elenco dei membri, +e seleziona “Codice QR di Invito”.

    • -

      Invito diretto alla chat 1:1: -Tocca l’icona del Codice QR -nella schermata principale dell’app Delta Chat – -sul desktop l’icona QR si trova nel menu a sandwich sul lato sinistro. -Condividi l’immagine QR con l’altra parte di persona o tramite un secondo canale.

      +

      Per inviti diretti alla chat 1:1, +tocca l’icona del codice QR +nella schermata principale dell’app Delta Chat.

    -

    Lato invitato:

    +

    Lascia che il tuo partner di chat esegua la scansione dell’immagine QR +con la loro app Delta Chat, +oppure fai clic su “Copia” o “Condividi” per creare un collegamento di invito +e condividilo con il tuo partner di chat.

    -
      -
    • -

      Tocca l’icona del Codice QR - nella schermata principale dell’app Delta Chat – - sul desktop l’icona QR si trova nel menu a sandwich sul lato sinistro.

      -
    • -
    • -

      Scegli “SCANSIONE CODICE QR” e scansiona il Codice QR -che vedi dal tuo partner di chat in un secondo canale.

      -
    • -
    • -

      Tocca “OK”.

      -
    • -
    - -

    Sia Invitante che Invitato:

    - -

    Attendere mentre i messaggi di rete Secure-Join vengono scambiati tra entrambi i dispositivi.

    +

    Ora attendi che i messaggi di rete Secure-Join vengano scambiati tra entrambi i dispositivi.

    • @@ -652,14 +778,14 @@ o è stato presentato da un altro contatto contrassegnato da un segno di spunta Le presentazioni avvengono automaticamente quando si aggiungono membri ai gruppi. Chi aggiunge un contatto a un gruppo contrassegnato da un segno di spunta verde diventa un introduttore a quei membri che non erano ancora a conoscenza del contatto aggiunto. In un profilo di contatto è possibile toccare ripetutamente il testo “Presentato da…”. -fino ad arrivare a quello con cui hai effettuato direttamente una QR-scan.

      +fino ad arrivare a quello con cui hai effettuato direttamente una scansione QR.

      Tieni presente che nel profilo di un contatto potresti vedere e toccare gli introduttori ma non c’è il segno di spunta verde nel titolo del profilo. Questo di solito significa che il contatto “ha inviato un messaggio da un altro dispositivo”.

      Per una discussione più approfondita sulla “crittografia end-to-end garantita” -consultare Protocolli Secure-Join +consultare Protocolli Secure-Join e leggi nello specifico i “Gruppi Verificati”, il termine tecnico di quelle che qui vengono chiamate chat “con segno di spunta verde” o “crittografate end-to-end garantite”.

      @@ -687,16 +813,16 @@ anche se il contatto è un membro.

      Il tuo contatto sta utilizzando Delta Chat su un secondo dispositivo (telefono o laptop)

      Se hanno un altro dispositivo con l’app Delta Chat in esecuzione, -dovrebbero rimuovere l’account dal nuovo dispositivo +dovrebbero rimuovere il profilo dal nuovo dispositivo e aggiungerlo come secondo dispositivo come descritto qui. Non appena ti invieranno un messaggio, l’avviso scomparirà e la crittografia garantita viene stabilita con entrambi i dispositivi del tuo contatto.

      -

      Il tuo contatto ha reinstallato Delta Chat utilizzando il vecchio login dell’account

      +

      Il tuo contatto ha reinstallato Delta Chat utilizzando il vecchio login del profilo

      Se hanno un file di backup, -dovrebbero rimuovere l’account dal nuovo dispositivo -e piuttosto importare il file di backup per ricreare il proprio account. +dovrebbero rimuovere il profilo dal nuovo dispositivo +e piuttosto importare il file di backup per ricreare il proprio profilo. Non appena ti invieranno un messaggio, l’avviso scomparirà e la crittografia garantita viene ristabilita per questo contatto.

      @@ -883,11 +1009,11 @@ consegnare messaggi ai dispositivi del destinatario.

      Entrambi per la protezione dai server e-mail che raccolgono metadati nonché contro il pericolo di sequestro del dispositivo consigliamo di utilizzare un’istanza del server e-mail ottimizzata per Delta Chat -per creare account temporanei pseudonimi tramite scansioni di codici QR. -Tieni presente che le app Delta Chat su tutte le piattaforme supportano più account -in questo modo puoi utilizzare facilmente account “1 settimana” o “1 mese” specifici per azioni accanto al tuo account “principale”. -con la consapevolezza che tutti i dati temporanei dell’account, insieme a tutti i metadati, verranno cancellati. -Inoltre, se un dispositivo viene sequestrato, i contatti utilizzano account di posta elettronica temporanei +per creare profili temporanei pseudonimi tramite scansioni di codici QR. +Tieni presente che le app Delta Chat su tutte le piattaforme supportano più profili +in questo modo puoi utilizzare facilmente profili “1 settimana” o “1 mese” specifici per azioni accanto al tuo profilo “principale”. +con la consapevolezza che tutti i dati temporanei del profilo, insieme a tutti i metadati, verranno cancellati. +Inoltre, se un dispositivo viene sequestrato, i contatti utilizzano profili e-mail temporanei non possono essere identificati facilmente, rispetto ai messaggeri che rivelano numeri di telefono nei gruppi di chat che a loro volta sono spesso associati a identità legali.

      @@ -930,8 +1056,8 @@ senza supporto per la crittografia end-to-end.

      Se un contatto utilizza un’app e-mail non Autocrypt, tutti i messaggi che coinvolgono questo contatto (in un gruppo o in una chat 1:1) non sarà crittografato end-to-end e quindi non mostrerà un “lucchetto” con i messaggi. -Tieni presente che anche se i tuoi contatti utilizzano Delta Chat sul proprio account, -potrebbero anche utilizzare un’app di posta elettronica non Autocrypt su quell’account +Tieni presente che anche se i tuoi contatti utilizzano Delta Chat sul proprio profilo, +potrebbero anche utilizzare un’app di posta elettronica non Autocrypt su quel profilo che quindi potrebbe causare messaggi non crittografati in modo intermittente. La risposta non crittografata a messaggi non crittografati è richiesta da Autocrypt per evitare messaggi illeggibili tra i tuoi contatti @@ -946,7 +1072,7 @@ e la loro app e-mail non Autocrypt.

    Se hai bisogno di una chat crittografata end-to-end sicura con un contatto -chi utilizza il proprio account sia con Delta Chat che con app non Autocrypt (ad esempio webmail), +chi utilizza il proprio profilo sia con Delta Chat che con app non Autocrypt (ad esempio webmail), è meglio configurare la crittografia end-to-end garantita con loro e quindi crea una chat di gruppo crittografata end-to-end garantita con voi due come membri. In questa chat di gruppo tutti i messaggi verranno crittografati end-to-end @@ -964,7 +1090,7 @@ anche se la chat diretta tra voi due ha a

    Il modo migliore per garantire che ogni messaggio sia crittografato end-to-end, e i metadati vengono eliminati il ​​più rapidamente possibile è utilizzare chat con crittografia end-to-end garantita -e l’attivazione dei messaggi a scomparsa.

    +e l’attivazione dei messaggi a scomparsa.

    Le chat crittografate end-to-end garantiscono la protezione dagli attacchi MITM e l’attivazione dei “messaggi che scompaiono” elimina i messaggi @@ -1046,11 +1172,12 @@ Attenzione: assicurarsi che la chiave non sia protetta da password oppure rimuov -

    La causa più probabile è che la tua chiave sia crittografata e/o utilizzi -una password. Tali chiavi non sono supportate da Delta Chat. Potresti rimuovere la -crittografia della passphrase e la password e riprovare l’importazione. Se vuoi -per mantenere la tua passphrase dovrai creare un alias e-mail per l’uso -con Delta Chat in modo che la chiave di Delta Chat sia collegata a questo alias e-mail.

    +

    Con molta probabilità, il problema sta nel fatto che la tua chiave è cifata e/o usa +una password. Queste chiavi non sono supportate da Delta Chat. Rimuovi la +cifratura e la password e prova ad importarla nuovamente.

    + +

    Un altro errore comune è avere la fine del file sbagliata. +Utilizza il formato corazzato ASCII e l’estensione del file “.asc”.

    Delta Chat supporta i formati di chiave privata OpenPGP comuni, tuttavia, è improbabile che le chiavi private di tutte le fonti siano completamente supportate. Questo @@ -1065,6 +1192,67 @@ password su un valore vuoto nella finestra Gestione chiavi. Con GnuPG puoi impos di comando. Per altri programmi, dovresti essere in grado di trovare una soluzione online.

    +

    + + + Delta Chat è stata verificata in modo indipendente per le vulnerabilità di sicurezza? + + +

    + +

    Il progetto Delta Chat è stato sottoposto a quattro controlli di sicurezza indipendenti e +un’analisi di sicurezza indipendente, dal più recente al più vecchio:

    + +
      +
    • +

      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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

      +
    • +
    • +

      A partire dal 2023, abbiamo risolto i problemi di sicurezza e privacy con il servizio “web +app condivise in una chat”, relativa ai guasti del sandboxing +soprattutto con Chromium. Successivamente abbiamo ottenuto una sicurezza indipendente +audit da Cure53 e tutti i problemi rilevati sono stati risolti nella serie di app 1.36 rilasciata nell’aprile 2023. +Vedi qui per la storia completa sulla sicurezza end-to-end nel web.

      +
    • +
    • +

      A partire dal 2023, Cure53 ha analizzato sia la crittografia del trasporto delle +Connessioni di rete di Delta Chat e una configurazione del server di posta riproducibile come +consigliato su questo sito. +Puoi leggere ulteriori informazioni sull’audit sul nostro blog +o leggere il rapporto completo qui.

      +
    • +
    • +

      Nel 2020, Include Security ha analizzato il Delta +Chat’s Rust core, +IMAP, +SMTP e +TLS librerie. +Non ha rilevato problemi critici o di elevata gravità. +Il rapporto ha sollevato alcuni punti deboli di media gravità: +da soli non rappresentano una minaccia per gli utenti di Delta Chat +perché dipendono dall’ambiente in cui viene utilizzato Delta Chat. +Per motivi di usabilità e compatibilità, +non possiamo mitigarli tutti +e ha deciso di fornire consigli sulla sicurezza agli utenti minacciati. +Puoi leggere il rapporto completo qui.

      +
    • +
    • +

      Nel 2019, Include Security ha analizzato le librerie +PGP e +RSA di Delta Chat. +Non ha riscontrato criticità, +ma due problemi di elevata gravità che abbiamo successivamente risolto. +Ne sono emersi anche uno di media gravità e alcuni problemi meno gravi, +ma non c’era modo di sfruttare queste vulnerabilità nell’implementazione di Delta Chat. +Alcuni di essi sono stati comunque corretti dopo la conclusione dell’audit. +Puoi leggere il rapporto completo qui.

      +
    • +
    +

    @@ -1081,7 +1269,7 @@ Per altri programmi, dovresti essere in grado di trovare una soluzione online. -

    Sì. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

    +

    Sì. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

    • @@ -1119,10 +1307,19 @@ Un dispositivo non è necessario perché l’altro funzioni.

    • Verificare che entrambi i dispositivi siano nella stessa rete o Wi-Fi.

    • +
    • +

      Su Windows, vai su Pannello di controllo / Rete e Internet +e assicurati che Rete Privata sia selezionata come “Tipo di profilo di rete” +(dopo il trasferimento è possibile ripristinare il valore originale)

      +
    • Il sistema potrebbe avere un “personal firewall”, che è noto per causare problemi (soprattutto su Windows). Disattivare il firewall personale per Delta Chat su entrambe le estremità e riprovare.

      +
    • +
    • +

      Reti Ospite potrebbero non consentire ai dispositivi di comunicare tra loro. +Se possibile, utilizza una rete non ospite.

    • Assicurarsi che sul dispositivo di destinazione ci sia disponibilità di memoria sufficiente.

      @@ -1134,7 +1331,7 @@ Non uscire da Delta Chat.
    • Delta Chat è già connesso sul dispositivo di destinazione? -È possibile utilizzare più account per dispositivo, basta aggiungere un altro account

      +È possibile utilizzare più profili per dispositivo, basta aggiungere un altro profilo

    • Se si riscontrano ancora problemi o se non si riesce a scansionare un codice QR @@ -1157,8 +1354,8 @@ provate il trasferimento manuale descritto di seguito

      PIN, sequenza o password di sblocco dello schermo. Quindi puoi fare clic su “Avvia Backup”. Questo salva il file di backup sul tuo dispositivo. Ora devi trasferirlo in qualche modo all’altro dispositivo.
    • -
    • Sul nuovo dispositivo, nella schermata di accesso, invece di accedere alla tua email -account, seleziona “Importa backup”. Dopo l’importazione, le tue conversazioni, la crittografia +
    • Sul nuovo dispositivo, nella schermata di accesso, invece di accedere al tuo profilo +e-mail, seleziona “Importa backup”. Dopo l’importazione, le tue conversazioni, la crittografia i tasti e i supporti devono essere copiati sul nuovo dispositivo.
    • Se usi iOS: e incontri difficoltà, forse questa guida @@ -1186,56 +1383,6 @@ o l’AppImage per Linux. Le trovi su get.delta.chat.
    -

    - - - A cosa serve l’impostazione “Invia copia a se stessi”? - - -

    - -

    L’invio di una copia dei tuoi messaggi a te stesso ti assicura di ricevere i tuoi -messaggi su tutti i dispositivi. Se disponi di più dispositivi e non lo attivi, -vedrai solo i messaggi di altre persone e i messaggi che invii dal -dispositivo attuale.

    - -

    La copia viene inviata alla Posta in arrivo, quindi spostata nella cartella DeltaChat; non è -messa nella cartella “Inviata”. Delta Chat non carica mai nulla su Posta -Inviata perché questo significherebbe caricare un messaggio due volte (una volta tramite SMTP, -e una volta tramite IMAP nella cartella Posta Inviata).

    - -

    L’impostazione predefinita per la copia su se stesso è “no”.

    - -

    - - - Perché posso scegliere di guardare la cartella “Inviata”? - - -

    - -

    L’unico motivo per cui si vuole guardare la cartella Inviata è se ne stai usando un’altro -programma di posta (come Thunderbird) accanto alla tua app Delta Chat e desideri il tuo MUA -per partecipare a conversazioni in chat.

    - -

    Tuttavia, consigliamo di utilizzare il client desktop Delta Chat; puoi scaricarlo -su get.delta.chat. L’opzione per guardare la cartella -“Inviata” potrebbe scomparire in futuro. È stato introdotto in un momento in cui non c’era -nessun client Delta Chat Desktop disponibile su tutte le piattaforme.

    - -

    - - - Perché posso scegliere di non guardare la cartella DeltaChat? - - -

    - -

    Alcune persone usano Delta Chat come un normale client di posta elettronica e desiderano utilizzare la cartella Posta in arrivo -per la loro posta, invece della cartella DeltaChat. Se disabiliti “Controlla -cartella DeltaChat”, dovresti anche disabilitare “sposta messaggi chat in DeltaChat”. -In caso contrario, l’eliminazione dei messaggi o configurazioni multi-dispositivo potrebbero non funzionare correttamente.

    -

    @@ -1370,22 +1517,19 @@ consumo di rete).

      -
    • Puoi attivare la trasmissione della posizione nella sezione “Funzionalità Sperimentali” nelle +
    • Puoi attivare lo streaming della posizione nella sezione “funzionalità sperimentali” di impostazioni avanzate.
    • Ora, se vuoi condividere la tua posizione in una chat, vai su “allega” e seleziona -“Posizione”. Ora puoi impostare un intervallo di tempo in cui verrà trasmessa la tua posizione -ai tuoi partner di chat, tra 5 minuti e 6 ore.
    • -
    • Quando la tua posizione cambia, gli altri nella chat possono visualizzarla su una mappa nella +“posizione”. Ora puoi impostare un intervallo di tempo in cui sarà la tua posizione +trasmessa in streaming ai tuoi partner di chat, tra 5 minuti e 6 ore.
    • +
    • Quando la tua posizione cambia, gli altri nella chat possono visualizzarla su una mappa in chat.
    • -
    • Per vedere la mappa e visualizzare le posizioni degli altri, devi attivare la funzione +
    • Per vedere la mappa e visualizzare le posizioni degli altri, è necessario attivare la funzione nelle impostazioni avanzate.
    • -
    • Questa funzione non condividerà la tua posizione con nessuno tranne che con i tuoi partner di chat. -Ma: per mostrare la mappa, dobbiamo scaricare i riquadri della mappa da -mapbox.com, quindi se visualizzi la mappa, a mapbox.com viene richiesta la mappa di un -area specifica. Se questo è un rischio per la privacy per te, questa funzione potrebbe non esserlo più. -Stiamo lavorando per trovare un’alternativa decentralizzata per Mapbox.
    • +
    • Questa funzione non condividerà la tua posizione con nessuno tranne i tuoi partner di chat. +I riquadri della mappa vengono scaricati da OpenStreetMap.
    • Su desktop, il sistema operativo in genere non è in grado di determinare la tua posizione. Invece puoi -fare clic con il tasto destro sulla mappa e descrivere una posizione, che viene inviata alla chat come +fare clic con il tasto destro sulla mappa e descrivere una posizione, che verrà inviata alla chat come un messaggio, ma appare anche sulla mappa.
    @@ -1434,18 +1578,18 @@ verrebbe eseguito dall’app Delta Chat.

    In questo caso, Delta Chat non ha bisogno di guardare la Posta in arrivo ed è sufficiente guardare solo la cartella DeltaChat.

    -

    +

    - Come posso cambiare il mio account con un indirizzo e-mail diverso? + Come posso cambiare il mio profilo con un indirizzo e-mail diverso?

    1. -

      Cambia il tuo indirizzo in “Impostazioni - Password e Account” e -inserisci la password del tuo nuovo account (e se necessario, le impostazioni del server). +

      Cambia il tuo indirizzo in “Impostazioni → Avanzate → Password e Profilo” e +inserisci la password del tuo nuovo profilo (e se necessario, le impostazioni del server). Riceverai un avviso informativo sul fatto che ti trasferirai ad un nuovo indirizzo. Un ulteriore avviso verrà visualizzato anche nella chat “Messaggi del dispositivo”.

    2. @@ -1476,6 +1620,42 @@ it.

      +

      + + + Di quali autorizzazioni ha bisogno Delta Chat? + + +

      + +

      A seconda del sistema operativo in uso, +potrebbe esserti chiesto di concedere le autorizzazioni all’app. +Questo è ciò che fa Delta Chat con queste autorizzazioni:

      + +
        +
      • Fotocamera (può essere disabilitata)
      • +
      • scattare foto e video: per inviare foto
      • +
      • Contatti (può essere disabilitato)
      • +
      • leggi i tuoi contatti: per scoprire i contatti con cui chattare
      • +
      • Posizione (può essere disabilitato)
      • +
      • accedere alla posizione approssimativa (fonti di localizzazione della rete): per la funzione di streaming della posizione
      • +
      • accedere alla posizione precisa (fonti di localizzazione GPS e di rete): per la funzionalità di streaming della posizione
      • +
      • Microfono (può essere disattivato)
      • +
      • registra audio: per messaggi audio
      • +
      • Archiviazione (può essere disabilitato)
      • +
      • modificare o eliminare il contenuto della scheda SD: per scaricare gli allegati dei messaggi
      • +
      • leggere il contenuto della scheda SD: per condividere file con i tuoi contatti
      • +
      • Altre funzionalità dell’app
      • +
      • modificare le impostazioni audio: così puoi scegliere suonerie e volume per notifiche e messaggi audio
      • +
      • esegui all’avvio: quindi non è necessario avviare Delta Chat manualmente
      • +
      • controllo vibrazione: per le notifiche
      • +
      • visualizzare le connessioni di rete: per connettersi al proprio fornitore e-mail
      • +
      • impedisce al telefono di andare in stop: così puoi copiare più facilmente il codice di sicurezza durante il messaggio di configurazione di Autocrypt
      • +
      • avere accesso completo alla rete: per connettersi al proprio fornitore e-mail
      • +
      • visualizzare le connessioni Wi-Fi: per connettersi al proprio fornitore e-mail
      • +
      • chiedere di ignorare le ottimizzazioni della batteria: per ottenere la “consegna istantanea dei messaggi”
      • +
      +

      @@ -1505,28 +1685,137 @@ blogpost.
    3. È possibile trovare una guida all’installazione sul nostro sito Web.
    4. -

      +

      - Se Delta Chat utilizza l’ E-Mail, è davvero una Messaggistica Istantanea? + Perché devo inserire la mia password E-Mail in Delta Chat? È sicuro?

      +

      Come con altri programmi di posta elettronica quali Thunderbird, K9-Mail o Outlook,il +programma ha bisogno della password in modo da poterla utilizzare per inviare mail. Naturalmente, la +password è memorizzata solo sul tuo dispositivo. La password viene trasmessa solo a +il tuo fornitore E-Mail (quando effettui il login), che ha comunque accesso alla tua posta.

      + +

      Se utilizzi un provider E-Mail con supporto OAuth2 come gmail.com o yandex.ru, +non è necessario memorizzare la password sul dispositivo. In questo caso, solo un +token di accesso viene utilizzato.

      + +

      Poiché Delta Chat è Open Source, puoi controllare il Codice +Sorgente +se vuoi verificare che le tue credenziali siano gestite in modo sicuro. Siamo felici dei feedback che rendono l’app più sicura per tutti i nostri utenti.

      + +

      + + + Quali messaggi vengono mostrati in Delta Chat? + + +

      + +

      Per impostazione predefinita, Delta Chat mostra tutte le e-mails.

      + +

      In “Impostazioni → Avanzate → Mostra E-mail Classiche”, +puoi cambiarlo. Hai queste opzioni:

      +
        -
      • L’invio e la ricezione dei messaggi richiedono generalmente alcuni secondi. Qualche volta -ci sono casi in cui ci vuole più tempo, ma questo è probabilmente vero anche per -qualsiasi altro messenger.
      • -
      • La chat istantanea funziona velocemente se entrambe le parti utilizzano attivamente l’app. È -a volte più lento se l’app è in esecuzione in background.
      • -
      • La ricezione dei messaggi può richiedere minuti perché spesso sia Android che iOS -interrompono l’esecuzione di Delta Chat in background e riattivandola solo -occasionalmente. Questo ritardo artificiale è solitamente peggiore su iOS che su Android.
      • -
      • Tuttavia, Android e iOS uccidono le app in esecuzione in background ed è un -problema per molte app legittime. Per ulteriori informazioni, vedi -dontkillmyapp.com.
      • +
      • “No, solo chat”: solo i messaggi inviati da altri utenti di Delta Chat e le “risposte a” +vengono visualizzati i tuoi messaggi di Delta Chat. Questo ha più senso se usi lo stesso +profilo e-mail anche per le normali e-mail.
      • +
      • “Per i contatti accettati”: Delta Chat mostra tutte le e-mail dei contatti con cui +hai già una chat, ma le nuove chat vengono visualizzate solo per i messaggi di Delta Chat. +Questo aiuta a decidere caso per caso se si desidera avere una +conversazione in Delta Chat o in una “normale” app di posta elettronica.
      • +
      • “Sì”: Delta Chat mostra tutte l’e-mail inviate al tuo indirizzo e-mail. Questo +ha senso se vuoi usare Delta Chat per tutte le tue e-mail, quindi nessun messaggio +si perde. Questa è l’impostazione predefinita.
      +

      + + + Delta Chat supporta le e-mail HTML? + + +

      + +

      Sì, i messaggi HTML in arrivo sono dotati di un pulsante “Mostra messaggio completo”. +I messaggi in uscita utilizzano sempre testo normale.

      + +

      + + + Posso impostare l’Oggetto dell’E-MAIL con Delta Chat? + + +

      + +

      Delta Chat imposta (e crittografa!) il classico oggetto dell’e-mail +automaticamente al nome del gruppo o al nome del mittente.

      + +

      Quindi, se vuoi impostare tu stesso l’oggetto, +ad esempio per un’e-mail formale a un contatto commerciale, +puoi creare un gruppo +solo con te stesso e il/i destinatario/(i). +Imposta il titolo della chat sull’oggetto che desideri, +e poi invia la tua email come primo messaggio. +Se i destinatari non utilizzano Delta Chat, +sembrerà come, +un’e-mail formale. +Otterrai punti professionalità bonus +se imposti un testo della firma.

      + +

      + + + A cosa serve l’impostazione “Invia copia a se stessi”? + + +

      + +

      L’invio di una copia dei tuoi messaggi a te stesso ti assicura di ricevere i tuoi +messaggi su tutti i dispositivi. Se disponi di più dispositivi e non lo attivi, +vedrai solo i messaggi di altre persone e i messaggi che invii dal +dispositivo attuale.

      + +

      La copia viene inviata alla Posta in arrivo, quindi spostata nella cartella DeltaChat; non è +messa nella cartella “Inviata”. Delta Chat non carica mai nulla su Posta +Inviata perché questo significherebbe caricare un messaggio due volte (una volta tramite SMTP, +e una volta tramite IMAP nella cartella Posta Inviata).

      + +

      L’impostazione predefinita per “Auto-invia Copia” è “attivato”.

      + +

      + + + Perché posso scegliere di guardare la cartella “Inviata”? + + +

      + +

      L’unico motivo per cui si vuole guardare la cartella Inviata è se ne stai usando un’altro +programma di posta (come Thunderbird) accanto alla tua app Delta Chat e desideri il tuo MUA +per partecipare a conversazioni in chat.

      + +

      Tuttavia, consigliamo di utilizzare il client desktop Delta Chat; puoi scaricarlo +su get.delta.chat. L’opzione per guardare la cartella +“Inviata” potrebbe scomparire in futuro. È stato introdotto in un momento in cui non c’era +nessun client Delta Chat Desktop disponibile su tutte le piattaforme.

      + +

      + + + Perché posso scegliere di non guardare la cartella DeltaChat? + + +

      + +

      Alcune persone usano Delta Chat come un normale client di posta elettronica e desiderano utilizzare la cartella Posta in arrivo +per la loro posta, invece della cartella DeltaChat. Se disabiliti “Controlla +cartella DeltaChat”, dovresti anche disabilitare “sposta messaggi chat in DeltaChat”. +In caso contrario, l’eliminazione dei messaggi o configurazioni multi-dispositivo potrebbero non funzionare correttamente.

      +

      @@ -1537,7 +1826,7 @@ problema per molte app legittime. Per ulteriori informazioni, vedi
      • Sì e no.
      • -
      • No, non puoi utilizzare il tuo account Protonmail, Tutanota o Criptext con Delta +
      • No, non puoi utilizzare il tuo profilo Protonmail, Tutanota o Criptext con Delta Chat; non offrono la ricezione di posta tramite IMAP.
      • In ogni caso puoi utilizzare Delta Chat per inviare messaggi alle persone che lo utilizzano Protonmail, Tutanota o Criptext. Tali messaggi non saranno end-to-end @@ -1548,6 +1837,23 @@ che usa.
      • App di posta elettronica abilitata per Autocrypt.
      +

      + + + Come posso eliminare il mio profilo? + + +

      + +

      Poiché utilizzi un profilo e-mail per Delta Chat, +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.

      + +

      Se vuoi mantenere il profilo, +ma disinstallare Delta Chat, +si consiglia di uscire da qualsiasi chat di gruppo prima di disinstallare Delta Chat.

      +

      @@ -1560,59 +1866,6 @@ che usa.
    5. Vedi Standard usati in Delta Chat.
    6. -

      - - - Delta Chat è stata verificata in modo indipendente per le vulnerabilità di sicurezza? - - -

      - -

      Il progetto Delta Chat è stato sottoposto a quattro verifiche di sicurezza indipendenti negli ultimi anni:

      - -
        -
      • -

        Nel 2019, Include Security ha analizzato le librerie -PGP e -RSA di Delta Chat. -Non ha riscontrato criticità, -ma due problemi di elevata gravità che abbiamo successivamente risolto. -Ne sono emersi anche uno di media gravità e alcuni problemi meno gravi, -ma non c’era modo di sfruttare queste vulnerabilità nell’implementazione di Delta Chat. -Alcuni di essi sono stati comunque corretti dopo la conclusione dell’audit. -Puoi leggere il rapporto completo qui.

        -
      • -
      • -

        Nel 2020, Include Security ha analizzato il Delta -Chat’s Rust core, -IMAP, -SMTP e -TLS librerie. -Non ha rilevato problemi critici o di elevata gravità. -Il rapporto ha sollevato alcuni punti deboli di media gravità: -da soli non rappresentano una minaccia per gli utenti di Delta Chat -perché dipendono dall’ambiente in cui viene utilizzato Delta Chat. -Per motivi di usabilità e compatibilità, -non possiamo mitigarli tutti -e ha deciso di fornire consigli sulla sicurezza agli utenti minacciati. -Puoi leggere il rapporto completo qui.

        -
      • -
      • -

        A partire dal 2023, Cure53 ha analizzato sia la crittografia del trasporto delle -Connessioni di rete di Delta Chat e una configurazione del server di posta riproducibile come -consigliato su questo sito. -Puoi leggere ulteriori informazioni sull’audit sul nostro blog -o leggere il rapporto completo qui.

        -
      • -
      • -

        A partire dal 2023, abbiamo risolto i problemi di sicurezza e privacy con il servizio “web -app condivise in una chat”, relativa ai guasti del sandboxing -soprattutto con Chromium. Successivamente abbiamo ottenuto una sicurezza indipendente -audit da Cure53 e tutti i problemi rilevati sono stati risolti nella serie di app 1.36 rilasciata nell’aprile 2023. -Vedi qui per la storia completa sulla sicurezza end-to-end nel web.

        -
      • -
      -

      @@ -1653,7 +1906,7 @@ completando i collegamenti Rust/Python e avviando un ecosistema Chat-bot.

    7. Nel 2021 abbiamo ricevuto ulteriori finanziamenti dell’UE per due Next-Generation-Internet -proposte, in particolare per EPPD - directory di portabilità del provider di posta elettronica (~97K EUR) e AEAP - portabilità dell’indirizzo e-mail (~90K EUR) che ha portato a un migliore supporto multi-account, contatti QR-code migliorati e configurazioni di gruppo e molti miglioramenti della rete su tutte le piattaforme.

      +proposte, in particolare per EPPD - directory di portabilità del provider e-mail (~97K EUR) e AEAP - portabilità dell’indirizzo e-mail (~90K EUR) che ha portato a un migliore supporto multi-profilo, contatti QR-code migliorati e configurazioni di gruppo e molti miglioramenti della rete su tutte le piattaforme.

    8. Dalla fine del 2021 fino a Marzo 2023 abbiamo ricevuto finanziamenti Internet Freedom (500.000 USD) dall’Ufficio per la democrazia, i diritti umani e il lavoro degli Stati Uniti (DRL). Questo finanziamento ha supportato i nostri obiettivi a lungo termine per rendere Delta Chat più utilizzabile e compatibile con un’ampia gamma di server di posta elettronica in tutto il mondo e più resiliente e sicuro in luoghi spesso colpiti dalla censura e dalla chiusura di Internet.

      diff --git a/assets/help/lock-icon.png b/src/main/assets/help/lock-icon.png similarity index 100% rename from assets/help/lock-icon.png rename to src/main/assets/help/lock-icon.png diff --git a/assets/help/lock-screenshot.png b/src/main/assets/help/lock-screenshot.png similarity index 100% rename from assets/help/lock-screenshot.png rename to src/main/assets/help/lock-screenshot.png diff --git a/assets/help/nl/help.html b/src/main/assets/help/nl/help.html similarity index 78% rename from assets/help/nl/help.html rename to src/main/assets/help/nl/help.html index 1756a310b..4d6056f1d 100644 --- a/assets/help/nl/help.html +++ b/src/main/assets/help/nl/help.html @@ -4,17 +4,14 @@
    9. Groepen @@ -28,6 +25,15 @@
    10. Wat gebeurt er als ik ‘Oude berichten van server verwijderen’ inschakel?
    11. +
    12. Instant message delivery and Push Notifications + +
    13. Beveiliging en versleuteling
    14. Multi-client @@ -59,9 +66,6 @@
    15. Probleemoplossing
    16. Manual Transfer
    17. Bestaan er plannen om een Delta Chat-webclient te maken?
    18. -
    19. Waarvoor dient de optie ‘Kopie versturen aan mijzelf’?
    20. -
    21. Waarom kan ik kiezen om de map ‘Verzonden’ te controleren?
    22. -
    23. Waarom kan ik kiezen om de DeltaChat-map te negeren?
    24. webxdc apps @@ -83,12 +87,19 @@
    25. Overig
    26. @@ -104,8 +115,14 @@

      -

      Delta Chat is een nieuw soort gespreksapp waarmee je chat via e-mail, indien mogelijk extra versleuteld middels Autocrypt. -Je hoeft je nergens te registreren - je kunt gewoon je bestaande e-mailaccount gebruiken.

      +

      Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

      + +

      Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

      @@ -117,9 +134,15 @@ -

      Met Delta Chat kun je berichten schrijven naar elk bestaand e-mailadres, zelfs -als de ontvanger (nog) geen gebruik maakt van de Delta Chat-app. De ontvanger hoeft dus niet -per se dezelfde app te gebruiken als jij zoals bij andere chatapps.

      +

      To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

      + +

      If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

      @@ -130,41 +153,25 @@ per se dezelfde app te gebruiken als jij zoals bij andere chatapps.

        -
      • Onafhankelijk: niet verbonden aan een bedrijf of bepaalde diensten. Jij beschikt over jóuw gegevens.
      • -
      • Je gegevens worden niet opgeslagen op een centrale server. Op deze manier beschermt Delta Chat zélfs je metagegevens (wie verstuurt iets aan wie?).
      • -
      • Je deelt je adresboek met niets of niemand.
      • -
      • Snel, dankzij het gebruik van Push-IMAP.
      • -
      • Grootst aantal gebruikers: ontvangers hoeven Delta Chat niet te gebruiken.
      • -
      • Compatibel, en niet alleen met zichzelf.
      • -
      • Elegant, en eenvoudig te gebruiken.
      • -
      • Verspreid systeem.
      • -
      • Geen ongewenste berichten: standaard worden alleen berichten van bekenden getoond.
      • -
      • Eind-tot-eindversleuteling met behulp van Autocrypt.
      • -
      • Volledig open source en gebaseerd op standaarden.
      • -
      • _Flexibel: ingebouwde ondersteuning voor meerdere accounts.
      • -
      - -

      - - - Welke berichten vind ik terug in Delta Chat? - - -

      - -

      Standaard toont Delta Chat alle e-mails.

      - -

      Je kunt dit aanpassen via Instellingen → Gesprekken en media → Klassieke e-mails tonen. Vervolgens heb je keuze uit de volgende opties:

      - -
        -
      • ‘Alleen gesprekken’: er worden alleen berichten en antwoorden van andere - Delta Chat-gebruikers getoond. Dit is handig als je hetzelfde account ook voor - normale e-mails gebruikt en is de standaardinstelling.
      • -
      • ‘Alles’: alle e-mails worden getoond. Dit is handig als je Delta Chat voor al je e-mails gebruikt, zodat je geen bericht hoeft te missen.
      • -
      • ‘Alleen goedgekeurde contactpersonen’: Delta Chat toont alle e-mails van contactpersonen - waarmee je al gecommuniceerd hebt. Nieuwe berichten verschijnen - alleen als ze vanuit Delta Chat verstuurd zijn. - Hiermee kun je per keer bepalen of je een gesprek in Delta Chat of je e-mailapp wilt voeren.
      • +
      • +

        Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

        +
      • +
      • +

        Pervasive multi-profile and multi-device support on all platforms.

        +
      • +
      • +

        Interactive web apps in chats for gaming and collaboration

        +
      • +
      • +

        Audited end-to-end encryption +safe against network and server attacks.

        +
      • +
      • +

        Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

        +

      @@ -205,18 +212,25 @@ per se dezelfde app te gebruiken als jij zoals bij andere chatapps.

      - Hoe kan ik wisselen van account? + What are profiles? How can I switch between them?

      -

      Je kunt meerdere accounts toevoegen, zowel in de mobiele als computerapp:

      -
        -
      • Via de menuknop → ‘Ander account’ (Android en computer);
      • -
      • Via je profielfoto → ‘Account toevoegen’ (iOS)
      • -
      +

      A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

      -

      Lees ook hoe je accounts aan meerdere apparaten toevoegt.

      +

      On first installation of Delta Chat a first profile is created.

      + +

      Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

      + +

      You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

      + +

      You may also wish to learn how to use the same profile on multiple devices.

      @@ -245,88 +259,21 @@ Je contactpersonen ontvangen hem dan opnieuw, zelfs als ze een nieuw apparaat to -

      +

      - Ondersteunt Delta Chat HTML-e-mails? + Can I set a Signature Text/Status/Motto with Delta Chat?

      -
        -
      • Ja. Indien nodig wordt er bij inkomende berichten een knop ‘Volledig bericht tonen’ getoond. -Uitgaande e-mails gebruiken altijd platte tekst.
      • -
      - -

      - - - Waarom moet ik mijn e-mailwachtwoord invoeren in Delta Chat? Is dat wel veilig? - - -

      - -

      Delta Chat heeft, net zoals andere e-mailprogramma’s (Thunderbird, K9-Mail, Outlook, etc.), je wachtwoord nodig om berichten te versturen. Het wordt alleen opgeslagen op je apparaat en alleen uitgewisseld met je e-mailprovider, die toch al toegang heeft tot je mails.

      - -

      Als je een e-mailprovider gebruikt die OAuth2 ondersteunt, zoals Gmail of Yandex, dan hoeft je wachtwoord niet lokaal te worden opgeslagen. Er wordt dan alleen een toegangssleutel gebruikt.

      - -

      Delta Chat is open source. Dit betekent dat je de bron- -code -kunt bekijken om er zeker van te zijn dat er veilig wordt omgegaan met je inloggegevens. We ontvangen graag feedback hierover.

      - -

      - - - Welke Android-rechten heeft Delta Chat nodig? - - -

      - -

      Op bepaalde besturingssystemen kun je gevraagd -worden bepaalde rechten toe te kennen aan de app. -Delta Chat doet het volgende met deze rechten:

      - -
        -
      • Camera (kan worden ingetrokken) -
          -
        • foto’s en video’s maken: voor het versturen van foto’s
        • -
        -
      • -
      • Contactpersonen (kan worden ingetrokken -
          -
        • contactpersonen uitlezen: voor het vinden van gesprekspartners
        • -
        -
      • -
      • Locatie (kan worden ingetrokken) -
          -
        • toegang tot je locatie, bij benadering (netwerklocatiebronnen): voor de locatie-streamingfunctie
        • -
        • toegang tot je precieze locatie (GPS en netwerklocatiebronnen): voor de locatie-streamingfunctie
        • -
        -
      • -
      • Microfoon (kan worden ingetrokken) -
          -
        • audio opnemen: voor het versturen van audioberichten
        • -
        -
      • -
      • Opslag (kan worden ingetrokken) -
          -
        • de inhoud van je sd-kaart aanpassen of wissen: om bijlagen op te slaan
        • -
        • de inhoud uitlezen van je sd-kaart: om bestanden te delen met je contactpersonen
        • -
        -
      • -
      • Andere mogelijkheden: -
          -
        • je audio-instellingen aanpassen: zodat je beltonen en het meldingsvolume kunt aanpassen en audioberichten kunt ontvangen en versturen
        • -
        • automatisch opstarten: zodat je Delta Chat niet zelf hoeft op te starten
        • -
        • trillen beheren: voor meldingen
        • -
        • netwerkverbindingen bekijken: om je e-mailprovider te koppelen
        • -
        • slaapstand onderdrukken: zodat je de code van het Autocrypt-instelbericht eenvoudiger kunt overtypen
        • -
        • volledige netwerktoegang: om je e-mailprovider te koppelen
        • -
        • Wi-Fi-verbindingen bekijken: om je e-mailprovider te koppelen
        • -
        • vraag om accu-optimalisatie te negeren: voor gebruikers die continue berichten willen blijven ontvangen
        • -
        -
      • -
      +

      Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

      @@ -384,22 +331,40 @@ leesbevestigingen hebt uitgeschakeld, dan wordt er geen groen stipje getoond tot iemand benaderd of iets in een groep plaatst.. -

      +

      - Hoe kan ik mijn account verwijderen? + How do disappearing messages work?

      -

      Delta Chat 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.

      +

      You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

      -

      Als je je account wilt behouden maar Delta Chat -niet wilt verwijderen, verlaat dan groeps- -gesprekken voordat je Delta Chat verwijdert.

      +

      Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

      + +

      Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

      + +

      Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

      @@ -529,6 +494,170 @@ berichten automatisch te verwijderen. ‘na één uur’ en ‘na één jaar’ kiezen. *Alle berichten die ouder zijn, worden verwijderd. +

      + + + Instant message delivery and Push Notifications + + +

      + +

      + + + What are Push Notifications? How can I get instant message delivery? + + +

      + +

      Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

      + +

      Push Notifications work with all chatmail servers on

      + +
        +
      • +

        iOS devices, by integrating with Apple Push services.

        +
      • +
      • +

        Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

        +
      • +
      + +

      As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

      + +

      + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Are Push notifications enabled / needed on Android devices? + + +

      + +

      If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

      + +

      In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

      + +
        +
      • +

        Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

        +
      • +
      • +

        Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

        +
      • +
      • +

        Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

        +
      • +
      + +

      Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

      + +

      + + + How private are Delta Chat Push Notifications? + + +

      + +

      Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

      + +

      Here is how Delta Chat apps perform Push Notification delivery:

      + +
        +
      • +

        A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

        +
      • +
      • +

        When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

        +
      • +
      • +

        The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

        +
      • +
      • +

        The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

        +
      • +
      + +

      As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

      + +

      The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

      + +

      Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

      + +

      + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

      + +

      Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

      + +

      Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

      +

      @@ -551,7 +680,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

      -

      Secure-Join protocols +

      Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -582,49 +711,32 @@ guarantee end-to-end encrypted messages.

      -

      Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

      +

      If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

      -

      Inviter side:

      +

      If you are together in person, +you can show a QR code to your chat partner.

      • -

        Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

        +

        For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

      • -

        Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

        +

        For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

      -

      Joiner side:

      +

      Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

      -
        -
      • -

        Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

        -
      • -
      • -

        Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

        -
      • -
      • -

        Tap “OK”

        -
      • -
      - -

      Both Inviter and Joiner:

      - -

      Wait while Secure-Join network messages are exchanged between both devices.

      +

      Now wait while Secure-Join network messages are exchanged between both devices.

      • @@ -678,7 +790,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

        For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

        @@ -706,7 +818,7 @@ even if the contact is a member there.

        Your contact is using Delta Chat on a second device (phone or laptop)

        If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

        @@ -714,8 +826,8 @@ and guaranteed encryption is established with both devices of your contact.

        Your contact reinstalled Delta Chat using their old account login

        If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

        @@ -736,7 +848,7 @@ guaranteed end-to-end encryption will be automatically re-established.

        Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

        In any case, you can not do much else than accept the warning. @@ -902,12 +1014,12 @@ deliver messages to recipient’s devices.

        Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

        @@ -966,7 +1078,7 @@ and their non-Autocrypt e-mail app.

        If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -984,10 +1096,10 @@ even if the direct chat between you two has a

        The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

        +and turning on disappearing messages.

        -

        Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

        Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

        If you don’t need a longer-lived copy of your messages on the server, @@ -1068,9 +1180,10 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

        Het is goed mogelijk dat je sleutel versleuteld is en/of een wachtwoord vereist. Zulke sleutels worden niet ondersteund. Verwijder de versleuteling -en het wachtwoord en probeer het opnieuw. Als je je wachtwoord - koste wat kost wilt behouden, maak dan een e-mailalias aan - die je alleen in Delta Chat gebruikt. Zo is de sleutel niet gekoppeld aan je hoofdadres.

        +en het wachtwoord en probeer het opnieuw.

        + +

        Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

        Delta Chat heeft ondersteuning voor alle veelvoorkomende OpenPGP-privésleutelformaten. Echter, het in onmogelijk om álle soorten sleutels te ondersteunen. Onze @@ -1084,6 +1197,67 @@ instellen + + + Heeft Delta Chat ooit onafhankelijke beveiligingscontroles ondergaan? + + + + +

        The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

        + +
          +
        • +

          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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

          +
        • +
        • +

          Sinds begin 2023 hebben we diverse beveiligings- en privacyproblemen met ‘webapps +gedeeld in een gesprek’. Deze waren allen te wijten aan fouten in de sandboxing, +vooral die van Chromium. Daarna is er een beveiligings- +onderzoek van Cure53 geweest en zijn alle problemen opgelost in versie 1.36 van de uit april 2023. +Lees hier het volledige verhaal omtrent E2E-beveiliging op het web.

          +
        • +
        • +

          Aan het begin van 2023 heeft Cure53 de transportversleuteling van +Delta Chats netwerkverbindingen getest, evenals de e-mailserveropzet zoals +beschreven op onze site. +Meer informatie over deze test is te lezen op ons blog +of in het volledige verslag.

          +
        • +
        • +

          In 2020 heeft Include Security Delta Chats +Rust-kern, +imap-, +smtp- en +tls-bibliotheken geanalyseerd. +Er werden geen grote problemen aangetroffen. +Wél werden er een paar redelijk belangrijke zwakheden aangetroffen, +maar geen die de meeste Delta Chat-gebruikers direct trof +omdat ze afhankelijk waren van de gebruikte omgeving. +Omwille van gebruiks- en compatibiliteitsredenen, +konden we ze niet allemaal oplossen +en besloten we om beveiligingsaanbevelingen aan getroffen gebruikers te doen. +Het volledige verslag is hier na te lezen.

          +
        • +
        • +

          In 2019 heeft Include Security Delta Chats +PGP- en +RSA-bibliotheken geanalyseerd. +Er werden geen grote problemen aangetroffen, +maar wel twee belangrijke die nadien werden opgelost. +Ook werden enkele redelijk belangrijke en minder belangrijke aan het licht gebracht, +maar die konden in Delta Chats specifieke implementatie niet worden misbruikt. +Ondanks dat zijn enkele daarvan nadien alsnog opgelost. +Het volledige verslag is hier na te lezen.

          +
        • +
        +

        @@ -1137,10 +1311,19 @@ op beide apparaten. Hierdoor hoef je niet het ene apparaat bij de hand
      • Controleer of beide apparaten verbonden zijn met hetzelfde (wifi)netwerk

      • +
      • +

        On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

        +
      • Wellicht is een firewall actief op je apparaat, welke problemen kan veroorzaken (met name op Windows). Schakel de firewall op beide apparaten uit of voeg een uitzondering voor Delta Chat toe en probeer het opnieuw.

        +
      • +
      • +

        Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

      • Zorg voor voldoende ruimte op het bestemmingsapparaat

        @@ -1175,8 +1358,8 @@ volg dan onderstaande stappen omtrent handmatige overzetting

        screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
      • -
      • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
      • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
        • If you use iOS: and you encounter difficulties, maybe @@ -1207,55 +1390,6 @@ of de AppImage van de Linux-client. Deze kun je downloaden op get.delta.chat.
        -

        - - - Waarvoor dient de optie ‘Kopie versturen aan mijzelf’? - - -

        - -

        Door een kopie aan jezelf te sturen, weet je zeker dat je je eigen berichten -op alle apparaten ontvangt. Als je meerdere apparaten hebt en dit niet -inschakelt, dan zie je alleen berichten van anderen en de berichten die je vanaf het -huidige apparaat verstuurt.

        - -

        De kopie wordt verstuurd naar je Postvak IN en vervolgens verplaatst naar de DeltaChat-map - -het verschijnt nooit in de map ‘Verzonden’. Delta Chat werkt zo omdat het bericht -anders twee keer verstuurd zou worden (eenmaal middels smtp, -en eenmaal middels imap naar de map ‘Verzonden’).

        - -

        Standaard is deze optie uitgeschakeld.

        - -

        - - - Waarom kan ik kiezen om de map ‘Verzonden’ te controleren? - - -

        - -

        Dit is alleen nuttig als een ander e-mailprogramma (zoals Thunderbird) naast de -Delta Chat-app gebruikt en wilt dat je andere apparaten deel uitmaken van gesprekken.

        - -

        Wij raden echter aan om in dat geval de Delta Chat-app te installeren op je computer: -get.delta.chat. 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 Delta Chat-client beschikbaar was.

        - -

        - - - Waarom kan ik kiezen om de DeltaChat-map te negeren? - - -

        - -

        Sommige mensen gebruiken Delta Chat als een normale e-mailclient en willen daarom Postvak IN -gebruiken voor hun e-mail in plaats van de DeltaChat-map. Als je deze optie uitschakelt, -schakel dan ook de optie ‘Berichten verplaatsen naar de DeltaChat-map’ uit. -Anders kun je mogelijk geen berichten verwijderen of problemen ervaren op andere apparaten.

        -

        @@ -1393,23 +1527,20 @@ netwerkverbruik).

        • -
        • Je kunt locatiedeling inschakelen in de sectie ‘experimentele functies’ in -de geavanceerde instellingen.
        • -
        • Als je vervolgens een locatie wilt delen, dan kun je dat doen door ‘locatie’ te kiezen als -“bijlage”. Vervolgens kun je een tijdspanne kiezen zodat je locatie niet onbeperkt -wordt gedeeld met gesprekspartners. De tijdspanne ligt tussen 5 minuten en 6 uur.
        • -
        • Als je locatie wijzigt, dan zien anderen dat op de kaart in het -gesprek.
        • -
        • Als je kaarten en locaties van anderen wilt bekijken, schakel deze functie dan ook in -in de geavanceerde instellingen.
        • -
        • Let op: met deze functie deel je je locatie met iedereen. -Om de kaart te tonen worden er kaartdelen opgehaald van -mapbox.com. Als je dus de kaart bekijkt, dan wordt aan mapbox.com gevraagd om een kaart van een -bepaald gebied te tonen. Als je dit privacygevoelig vindt, dan kun je deze functie beter niet gebruiken. -We zijn echter hard aan het zoeken naar een gedecentraliseerd alternatief voor Mapbox!
        • -
        • Op computers kan je locatie doorgaans niet worden bepaald. In zulke gevallen kun je -rechts klikken op de kaart en handmatig een locatie aangeven, welke vervolgens als bericht met kaart -wordt verstuurd.
        • +
        • You can turn on location streaming in the “experimental features” section of +the advanced settings.
        • +
        • Now, if you want to share your location in a chat, go to “attach” and select +“location”. You can now set a time frame in which your location will be +streamed to your chat partners, between 5 minutes and 6 hours.
        • +
        • When your location changes, the others in the chat can view it on a map in +the chat.
        • +
        • To see the map and view locations of others, you need to turn on the feature +in the advanced settings.
        • +
        • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
        • +
        • On desktop, the OS typically can’t determine your location. Instead you can +right click on the map and describe a location, which is sent to the chat as +a message, but also appears on the map.

        @@ -1464,8 +1595,8 @@ Normaal doet de Delta Chat-app dit uit zichzelf.

        1. -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        2. @@ -1496,6 +1627,60 @@ it.

        +

        + + + Welke Android-rechten heeft Delta Chat nodig? + + +

        + +

        Op bepaalde besturingssystemen kun je gevraagd +worden bepaalde rechten toe te kennen aan de app. +Delta Chat doet het volgende met deze rechten:

        + +
          +
        • Camera (can be disallowed) +
            +
          • take pictures and videos: for sending Photos
          • +
          +
        • +
        • Contacts (can be disallowed) +
            +
          • read your contacts: to discover contacts to chat with
          • +
          +
        • +
        • Location (can be disallowed) +
            +
          • access approximate location (network location sources): for the location streaming feature
          • +
          • access precise location (GPS and network location sources): for the location streaming feature
          • +
          +
        • +
        • Microphone (can be disallowed) +
            +
          • record audio: for audio messages
          • +
          +
        • +
        • Storage (can be disallowed) +
            +
          • modify or delete the contents of your SD card: to download message attachments
          • +
          • read the contents of your SD card: to share files with your contacts
          • +
          +
        • +
        • Other app capabilities +
            +
          • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
          • +
          • run at startup: so you don’t have to start Delta Chat manually
          • +
          • control vibration: for notifications
          • +
          • view network connections: to connect to your E-Mail provider
          • +
          • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
          • +
          • have full network access: to connect to your E-Mail provider
          • +
          • view Wi-Fi connections: to connect to your E-Mail provider
          • +
          • ask to ignore battery optimisations: for achieving “instant message delivery”
          • +
          +
        • +
        +

        @@ -1524,31 +1709,131 @@ blog.

      • In de installatiehandleiding op onze website lees je hoe je dit opzet.
      -

      +

      - Delta Chat gebruik e-mail. Is het dan wel een Instant Messenger? + Waarom moet ik mijn e-mailwachtwoord invoeren in Delta Chat? Is dat wel veilig? + + +

      + +

      Delta Chat heeft, net zoals andere e-mailprogramma’s (Thunderbird, K9-Mail, Outlook, etc.), je wachtwoord nodig om berichten te versturen. Het wordt alleen opgeslagen op je apparaat en alleen uitgewisseld met je e-mailprovider, die toch al toegang heeft tot je mails.

      + +

      Als je een e-mailprovider gebruikt die OAuth2 ondersteunt, zoals Gmail of Yandex, dan hoeft je wachtwoord niet lokaal te worden opgeslagen. Er wordt dan alleen een toegangssleutel gebruikt.

      + +

      Delta Chat is open source. Dit betekent dat je de bron- +code +kunt bekijken om er zeker van te zijn dat er veilig wordt omgegaan met je inloggegevens. We ontvangen graag feedback hierover.

      + +

      + + + Welke berichten vind ik terug in Delta Chat? + + +

      + +

      Standaard toont Delta Chat alle e-mails.

      + +

      At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

      + +
        +
      • ‘Alleen gesprekken’: er worden alleen berichten en antwoorden van andere + Delta Chat-gebruikers getoond. Dit is handig als je hetzelfde account ook voor + normale e-mails gebruikt en is de standaardinstelling.
      • +
      • ‘Alles’: alle e-mails worden getoond. Dit is handig als je Delta Chat voor al je e-mails gebruikt, zodat je geen bericht hoeft te missen.
      • +
      • ‘Alleen goedgekeurde contactpersonen’: Delta Chat toont alle e-mails van contactpersonen + waarmee je al gecommuniceerd hebt. Nieuwe berichten verschijnen + alleen als ze vanuit Delta Chat verstuurd zijn. + Hiermee kun je per keer bepalen of je een gesprek in Delta Chat of je e-mailapp wilt voeren.
      • +
      + +

      + + + Ondersteunt Delta Chat HTML-e-mails?

        -
      • Het versturen en ontvangen van berichten gebeurt doorgaans binnen enkele seconden. Soms -duurt het iets langer, maar dat komt ook wel eens voor bij -andere IM’s.
      • -
      • Het werkt het snelst als beide partijen de app actief gebruiken. Soms duurt het -iets langer als de app op de achtergrond draait.
      • -
      • Het ontvangen van berichten kan dan enkele minuten duren omdat zowel Android als iOS Delta Chat -regelmatig onderbreken, en slecht soms weer -hervatten. Deze vertraging is doorgaans merkbaarder op iOS dan op Android.
      • -
      • Let op: Delta Chat maakt geen gebruik van Google Cloud Messaging (GCM) of Apple’s -Push Notification Service (APNS) omdat deze gebruikersacties bijhouden en -centraal beheer vereisen, wat Delta Chat zoveel mogelijk wil voorkomen.
      • -
      • Maar dat Android en iOS achtergrondapps onderbreken is een -algemeen probleem waar veel apps last van hebben. Ga naar -dontkillmyapp.com voor meer informatie hieromtrent.
      • +
      • Ja. Indien nodig wordt er bij inkomende berichten een knop ‘Volledig bericht tonen’ getoond. +Uitgaande e-mails gebruiken altijd platte tekst.
      +

      + + + Can I set the E-Mail Subject with Delta Chat? + + +

      + +

      Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

      + +

      So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

      + +

      + + + Waarvoor dient de optie ‘Kopie versturen aan mijzelf’? + + +

      + +

      Door een kopie aan jezelf te sturen, weet je zeker dat je je eigen berichten +op alle apparaten ontvangt. Als je meerdere apparaten hebt en dit niet +inschakelt, dan zie je alleen berichten van anderen en de berichten die je vanaf het +huidige apparaat verstuurt.

      + +

      De kopie wordt verstuurd naar je Postvak IN en vervolgens verplaatst naar de DeltaChat-map - +het verschijnt nooit in de map ‘Verzonden’. Delta Chat werkt zo omdat het bericht +anders twee keer verstuurd zou worden (eenmaal middels smtp, +en eenmaal middels imap naar de map ‘Verzonden’).

      + +

      The default setting for “Send Copy to Self” is “on”.

      + +

      + + + Waarom kan ik kiezen om de map ‘Verzonden’ te controleren? + + +

      + +

      Dit is alleen nuttig als een ander e-mailprogramma (zoals Thunderbird) naast de +Delta Chat-app gebruikt en wilt dat je andere apparaten deel uitmaken van gesprekken.

      + +

      Wij raden echter aan om in dat geval de Delta Chat-app te installeren op je computer: +get.delta.chat. 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 Delta Chat-client beschikbaar was.

      + +

      + + + Waarom kan ik kiezen om de DeltaChat-map te negeren? + + +

      + +

      Sommige mensen gebruiken Delta Chat als een normale e-mailclient en willen daarom Postvak IN +gebruiken voor hun e-mail in plaats van de DeltaChat-map. Als je deze optie uitschakelt, +schakel dan ook de optie ‘Berichten verplaatsen naar de DeltaChat-map’ uit. +Anders kun je mogelijk geen berichten verwijderen of problemen ervaren op andere apparaten.

      +

      @@ -1570,6 +1855,23 @@ uses. Autocrypt-enabled e-mail app. +

      + + + Hoe kan ik mijn account verwijderen? + + +

      + +

      Delta Chat 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.

      + +

      Als je je account wilt behouden maar Delta Chat +niet wilt verwijderen, verlaat dan groeps- +gesprekken voordat je Delta Chat verwijdert.

      +

      @@ -1582,59 +1884,6 @@ uses.
    27. Bekijk de pagina Door Delta Chat gebruikte standaarden.
    28. -

      - - - Heeft Delta Chat ooit onafhankelijke beveiligingscontroles ondergaan? - - -

      - -

      Delta Chat onderging al drie onafhankelijke beveiligingscontroles:

      - -
        -
      • -

        In 2019 heeft Include Security Delta Chats -PGP- en -RSA-bibliotheken geanalyseerd. -Er werden geen grote problemen aangetroffen, -maar wel twee belangrijke die nadien werden opgelost. -Ook werden enkele redelijk belangrijke en minder belangrijke aan het licht gebracht, -maar die konden in Delta Chats specifieke implementatie niet worden misbruikt. -Ondanks dat zijn enkele daarvan nadien alsnog opgelost. -Het volledige verslag is hier na te lezen.

        -
      • -
      • -

        In 2020 heeft Include Security Delta Chats -Rust-kern, -imap-, -smtp- en -tls-bibliotheken geanalyseerd. -Er werden geen grote problemen aangetroffen. -Wél werden er een paar redelijk belangrijke zwakheden aangetroffen, -maar geen die de meeste Delta Chat-gebruikers direct trof -omdat ze afhankelijk waren van de gebruikte omgeving. -Omwille van gebruiks- en compatibiliteitsredenen, -konden we ze niet allemaal oplossen -en besloten we om beveiligingsaanbevelingen aan getroffen gebruikers te doen. -Het volledige verslag is hier na te lezen.

        -
      • -
      • -

        Aan het begin van 2023 heeft Cure53 de transportversleuteling van -Delta Chats netwerkverbindingen getest, evenals de e-mailserveropzet zoals -beschreven op onze site. -Meer informatie over deze test is te lezen op ons blog -of in het volledige verslag.

        -
      • -
      • -

        Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

        -
      • -
      -

      diff --git a/src/main/assets/help/pl/help.html b/src/main/assets/help/pl/help.html new file mode 100644 index 000000000..3a0d2cae2 --- /dev/null +++ b/src/main/assets/help/pl/help.html @@ -0,0 +1,1433 @@ + + + + + +

      + + + Czym jest Delta Chat? + + +

      + +

      Delta Chat to niezawodna, zdecentralizowana i bezpieczna aplikacja do przesyłania wiadomości, dostępna na platformy mobilne i stacjonarne.

      + +

      Delta Chat przypomina Whatsapp lub Telegram, ale możesz go również używać i traktować jako aplikację e-mail. Możesz zarejestrować się anonimowo na różnych interoperacyjnych serwerach chatmail, które są minimalnymi serwerami poczty e-mail zoptymalizowanymi pod kątem szybkich i bezpiecznych operacji. Możesz też skorzystać z klasycznych serwerów pocztowych i istniejącego konta e-mail, w którym to przypadku Delta Chat będzie pełnić funkcję aplikacji pocztowej. 

      + +

      + +

      + + + Jak mogę znaleźć ludzi, z którymi mogę czatować? + + +

      + +

      Aby bezpiecznie skonfigurować kontakt z innymi, zeskanuj kod QR zaproszenia lub udostępnij link zaproszenia. Jest to wymagane w przypadku korzystania z (domyślnego) profilu czatu opartego na poczcie chatmail, ponieważ serwery chatmail odrzucają niezaszyfrowane wiadomości wychodzące.

      + +

      Jeśli utworzysz profil czatu z klasycznym adresem e-mail, możesz ręcznie utworzyć kontakt, jeśli znasz jego adres e-mail, a następnie napisać do niego wiadomość, nawet jeśli odbiorca nie korzysta z Delta Chat.

      + +

      + + + Jakie są zalety Delta Chat w porównaniu z innymi komunikatorami? + + +

      + +

      Anonimowe profile czatów z szybkimi, bezpiecznymi i interoperacyjnymi serwerami chatmail, które oferują natychmiastowe powiadomienia push dla urządzeń iOS i Android.

      + + + +

      + + + Co zrobić, jeśli oczekuję wiadomości od osoby, do której nie pisałem w przeszłości? + + +

      + +
        +
      • Jeśli wiadomość przychodzi od nieznanego kontaktu, pojawia się jako prośba. Musisz zaakceptować prośbę, zanim będziesz mógł odpowiedzieć.
      • +
      • Możesz również „usunąć” ją, jeśli nie chcesz na razie z nią rozmawiać. To nie usuwa wiadomości na serwerze, tylko na Twoim urządzeniu. Możesz więc nadal zajmować się tą wiadomością w innej aplikacji pocztowej.
      • +
      • Jeśli usuniesz prośbę, przyszłe wiadomości od tego kontaktu będą nadal wyświetlane jako prośba o wiadomość, więc możesz zmienić zdanie. Jeśli naprawdę nie chcesz otrzymywać wiadomości od tej osoby, rozważ zablokowanie jej.
      • +
      + +

      + + + Czy Delta Chat obsługuje obrazy, filmy i inne załączniki? + + +

      + +
        +
      • +

        Tak. Oprócz zwykłego tekstu wszystkie załączniki wiadomości e-mail są wyświetlane jako oddzielne wiadomości. Wiadomości wychodzące automatycznie otrzymują załączniki w razie potrzeby.

        +
      • +
      • +

        Ze względu na wydajność obrazy są domyślnie optymalizowane i wysyłane w mniejszym rozmiarze, ale można je wysłać jako „plik”, aby zachować oryginał.

        +
      • +
      + +

      + + + Czym są profile? Jak mogę przełączać się między nimi? + + +

      + +

      Profil to nazwa, zdjęcie i dodatkowe informacje umożliwiające szyfrowanie wiadomości. Profil znajduje się wyłącznie na twoim urządzeniu (urządzeniach) i do przesyłania wiadomości wykorzystuje chatmail lub klasyczny serwer e-mail.

      + +

      Podczas pierwszej instalacji Delta Chat tworzony jest pierwszy profil.

      + +

      Później możesz dotknąć swojego zdjęcia profilowego w lewym górnym rogu, aby Dodać profile lub Przełączyć profile.

      + +

      Możesz chcieć używać oddzielnych profili do działań związanych z polityką, rodziną lub pracą, lub np. dla dedykowanego „profilu spamowego”, za pomocą którego rejestrujesz się na stronach internetowych i platformach, które prędzej czy później generują niechciane wiadomości („spam”).

      + +

      Możesz także dowiedzieć się, jak używać tego samego profilu na wielu urządzeniach.

      + +

      + + + Kto widzi moje zdjęcie profilowe? + + +

      + +
        +
      • +

        Możesz dodać zdjęcie profilowe w swoich ustawieniach. Jeśli napiszesz do swoich kontaktów lub dodasz je za pomocą kodu QR, automatycznie zobaczą je jako Twoje zdjęcie profilowe.

        +
      • +
      • +

        Kontakty, które nie korzystają z Delta Chat nie widzą zdjęcia profilowego (jednak oczywiście mogą zainstalować Delta Chat :)

        +
      • +
      • +

        Ze względów prywatności nikt nie widzi Twojego zdjęcia profilowego, dopóki nie napiszesz do niego wiadomości.

        +
      • +
      • +

        Twoje zdjęcie profilowe nie jest wysyłane z każdą wiadomością, ale wystarczająco regularnie, aby kontakty ponownie otrzymały Twoje zdjęcie profilowe, nawet jeśli dodadzą nowe urządzenie.

        +
      • +
      + +

      + + + Czy w Delta Chat mogę ustawić tekst podpisu/status/motto? + + +

      + +

      Tak, możesz to zrobić w „Ustawienia » Profil » Tekst podpisu”. Twoje kontakty korzystające z Delta Chat, zobaczą go, przeglądając twoje dane kontaktowe. Dla wszystkich innych będzie on widoczny jako podpis e-mail pod tekstem wszystkich twoich wiadomości.

      + +

      + + + Co oznacza przypinanie, wyciszanie i archiwizowanie? + + +

      + +

      Użyj tych narzędzi, aby uporządkować swoje czaty i mieć wszystko na swoim miejscu:

      + +
        +
      • +

        Przypięte czaty zawsze pozostają na szczycie listy czatów. Możesz ich używać, aby szybko lub tymczasowo uzyskać dostęp do swoich ulubionych czatów, aby o czymś nie zapomnieć.

        +
      • +
      • +

        Wycisz czaty, jeśli nie chcesz otrzymywać z nich powiadomień. Wyciszone czaty pozostają na swoim miejscu i możesz też przypiąć wyciszony czat.

        +
      • +
      • +

        Archiwizuj czaty, jeśli nie chcesz ich już widzieć na liście czatów. Zarchiwizowane czaty pozostają dostępne nad listą czatów lub poprzez wyszukiwanie.

        +
      • +
      • +

        Gdy zarchiwizowany czat otrzyma nową wiadomość, o ile nie zostanie wyciszony, wyskoczy z archiwum i wróci na twoją listę czatów. +Wyciszone czaty pozostają zarchiwizowane do czasu ich ręcznego przywrócenia.

        +
      • +
      + +

      Aby zarchiwizować lub przypiąć czat, dotknij i przytrzymaj (Android), użyj menu czatu (Android/Desktop) lub przesuń palcem w lewo (iOS); +aby wyciszyć czat, użyj menu czatu (Android/Desktop) lub profilu czatu (iOS).

      + +

      + + + Co oznacza zielona kropka? + + +

      + +
        +
      • Od wersji Delta Chat 1.34 czasami można zobaczyć „zieloną kropkę” obok awatara kontaktu. Oznacza to, że był on „niedawno widziany”.
      • +
      • Dokładnie oznacza to, że w ciągu ostatnich 10 minut Delta Chat widział go:
      • +
      • dlatego, że wysłał Ci bezpośrednio wiadomość,
      • +
      • ponieważ napisał coś do grupy, której oboje jesteście członkami,
      • +
      • ponieważ wysłał Ci potwierdzenie przeczytania napisanej przez Ciebie wiadomości,
      • +
      • lub dlatego, że wysłał dane do Twojej aplikacji Delta Chat za pomocą Webxdc aplikacji.
      • +
      • Nie jest to więc status online w czasie rzeczywistym – a jeśli ktoś nie odpowie od razu, mimo że wydaje się, że jest online, nie martw się i daj mu trochę miejsca ;-)
      • +
      • Z drugiej strony inni nie zawsze „zobaczą, że jesteś online”. Jeśli wyłączyłeś potwierdzenia odczytu, nie zobaczą oni zielonej kropki, dopóki nie wyślesz do nich wiadomości lub nie napiszesz do grupy, w której również się znajdują.
      • +
      + +

      + + + Jak działają znikające wiadomości? + + +

      + +

      Możesz włączyć „znikające wiadomości” w ustawieniach czatu, w prawym górnym rogu okna czatu, wybierając przedział czasu od 1 minuty do 5 tygodni.

      + +

      Dopóki ustawienie nie zostanie ponownie wyłączone, aplikacja Delta Chat u każdego członka czatu zajmie się usuwaniem wiadomości po wybranym okresie. Przedział czasu rozpoczyna się w momencie, gdy odbiorca po raz pierwszy zobaczy wiadomość w Delta Chat. Wiadomości są usuwane zarówno na każdym koncie e-mail na serwerze, jak i w samej aplikacji.

      + +

      Pamiętaj, że na znikających wiadomościach możesz polegać tylko wtedy, gdy ufasz swoim partnerom czatu; złośliwi partnerzy czatu mogą robić zdjęcia lub w inny sposób zapisywać, kopiować lub przesyłać dalej wiadomości przed usunięciem.

      + +

      Poza tym, jeśli jeden z partnerów czatu odinstaluje Delta Chat, wiadomości nie zostaną usunięte z jego konta e-mail. Najprawdopodobniej nie będzie już można ich odszyfrować (o ile zostały najpierw zaszyfrowane).

      + +

      + + + Grupy + + +

      + +

      + + + Tworzenie grupy + + +

      + +
        +
      • Wybierz Nowy czat, a następnie Nowa grupa z menu w prawym górnym rogu lub naciśnij odpowiedni przycisk na Androidzie / iOS.
      • +
      • Na następnym ekranie wybierz członków grupy i zdefiniuj nazwę grupy. Możesz też wybrać awatar grupy.
      • +
      • Zaraz po napisaniu pierwszej wiadomości w grupie wszyscy członkowie zostaną poinformowani o nowej grupie i mogą odpowiedzieć w grupie (jeżeli nie napiszesz wiadomości w grupie, grupa jest niewidoczna dla członków).
      • +
      + +

      + + + Dodanie członków do grupy + + +

      + +
        +
      • Każdy członek grupy ma takie same prawa jak każdy inny. Z tego powodu każdy może usunąć każdego członka lub dodać nowego.
      • +
      • Aby dodać lub usunąć członków, kliknij nazwę grupy na czacie.
      • +
      + +

      + + + Usunąłem się przez przypadek. + + +

      + +
        +
      • Ponieważ nie jesteś członkiem grupy, nie możesz dodać siebie ponownie. +Jednak nie ma problemu, po prostu poproś dowolnego członka grupy na normalnym czacie, aby dodał cię ponownie.
      • +
      + +

      + + + Nie chcę już otrzymywać wiadomości od grupy. + + +

      + +
        +
      • +

        Usuń siebie z listy członków lub usuń cały czat. +Jeśli później będziesz chciał ponownie dołączyć do grupy, poproś innego członka grupy, aby dodał cię do grupy.

        +
      • +
      • +

        Alternatywnie możesz też „Wyłączyć powiadomienia” dla grupy dzięki temu otrzymasz wszystkie wiadomości i +nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych nowych wiadomościach.

        +
      • +
      + +

      + + + Co oznaczają znaczniki wyświetlane obok wiadomości wychodzących? + + +

      + +
        +
      • Jeden znacznik oznacza, że wiadomość została pomyślnie wysłana do Twojego dostawcy.
      • +
      • Dwa znaczniki oznaczają, że co najmniej jedno urządzenie odbiorcy zgłosiło otrzymanie wiadomości.
      • +
      • Odbiorcy mogli wyłączyć potwierdzenia odczytu, więc nawet jeśli widzisz tylko jeden znacznik, wiadomość mogła zostać przeczytana.
      • +
      • Odwrotnie, dwa znaczniki nie oznaczają automatycznie, że człowiek przeczytał lub zrozumiał wiadomość ;)
      • +
      + +

      + + + Co się stanie, jeśli włączę opcję „Usuń wiadomości z serwera”? + + +

      + +
        +
      • +

        Domyślnie Delta Chat przechowuje wszystkie wiadomości lokalnie na Twoim urządzeniu. Jeśli np. chcesz zaoszczędzić miejsce u swojego dostawcy poczty, możesz wybrać automatyczne usuwanie starych wiadomości. Pozostają one nadal na Twoim urządzeniu, dopóki nie usuniesz ich również tam.

        +
      • +
      • +

        Aby ją włączyć, w ustawieniach „Czaty i media” przejdź do Usuwanie starych wiadomości → Usuń wiadomości z serwera. Możesz ustawić przedział czasowy pomiędzy „Od razu” a „Po 1 roku”. Wszystkie e-maile otrzymane przez Delta Chat zostaną usunięte z serwera po tym czasie.

        +
      • +
      • +

        Zauważ, że jeśli używasz Delta Chat na więcej niż jednym urządzeniu, powinieneś pozostawić wiadomości na serwerze, do czasu, aż inne urządzenie/urządzenia będzie mogło je pobrać.

        +
      • +
      + +

      + + + Co się stanie, jeśli włączę opcję „Usuń wiadomości z urządzenia”? + + +

      + +
        +
      • Jeśli chcesz zaoszczędzić miejsce na urządzeniu, możesz wybrać opcję automatycznego usuwania starych wiadomości.
      • +
      • Aby ją włączyć, przejdź do „Usuń wiadomości z urządzenia” w ustawieniach w sekcji „Czaty i media”. Możesz ustawić przedział czasowy pomiędzy „po 1 godzinie” a „po 1 roku”; w ten sposób wszystkie wiadomości zostaną usunięte z urządzenia, gdy tylko staną się starsze.
      • +
      + +

      + + + Natychmiastowe dostarczanie wiadomości i powiadomienia push + + +

      + +

      + + + Co to są powiadomienia push? Jak mogę uzyskać natychmiastowe dostarczenie wiadomości? + + +

      + +

      Powiadomienia push są wysyłane przez „usługi push” Apple i Google do urządzenia użytkownika, dzięki czemu nieaktywna aplikacja Delta Chat może pobierać wiadomości w tle i w razie potrzeby wyświetlać powiadomienia na telefonie użytkownika.

      + +

      Powiadomienia push działają na wszystkich włączonych serwerach chatmail

      + +
        +
      • +

        Urządzeń z iOS, poprzez integrację z usługami Apple Push.

        +
      • +
      • +

        Urządzenia z Androidem, poprzez integrację z usługą Google FCM Push, w tym na urządzeniach korzystających z microG zamiast autorskiego kodu Google w telefonie.

        +
      • +
      + +

      Od maja 2024 r. klasyczne serwery poczty e-mail nie obsługują powiadomień push dla użytkowników Delta Chat.

      + +

      + + + Czy powiadomienia push są włączone na urządzeniach z iOS? Czy istnieje alternatywa? + + +

      + +

      Tak, Delta Chat automatycznie korzysta z powiadomień push dla profili chatmail +. I nie, w telefonach Apple nie ma alternatywy umożliwiającej natychmiastowe dostarczanie wiadomości, ponieważ urządzenia Apple nie pozwalają Delta Chat na pobieranie danych w tle. Powiadomienia push są automatycznie aktywowane dla użytkowników iOS, ponieważ system prywatności powiadomień Delta Chat nie udostępnia Apple danych, których jeszcze nie posiada.

      + +

      + + + Czy powiadomienia Push są włączone/potrzebne na urządzeniach z Androidem? + + +

      + +

      Jeśli dostępna jest „Usługa Push”, Delta Chat włącza Powiadomienia Push w celu zapewnienia natychmiastowego dostarczania wiadomości dla wszystkich użytkowników chatmail. Jeśli zamiast serwerów chatmail korzystasz z klasycznego dostawcy poczty e-mail, powiadomienia push nie są dostępne.

      + +

      W ustawieniach „Powiadomień” Delta Chat dla „Natychmiastowej dostawy” możesz zmienić następujące ustawienia wpływające na wszystkie profile czatu:

      + +
        +
      • +

        Użyj usługi Push: ustawienie domyślne podczas korzystania z profili czatu i jeśli w telefonie dostępna jest usługa Push. Jeśli masz zarówno chatmail, jak i klasyczny profil e-mail, powiadomienie push będzie działać tylko w przypadku wiadomości przychodzących z profili chatmail.

        +
      • +
      • +

        Użyj połączenia w tle: Jeśli nie korzystasz z usługi Push, możesz wyłączyć „optymalizację baterii” dla Delta Chat, umożliwiając mu pobieranie wiadomości w tle. Mogą jednak wystąpić opóźnienia od minut do godzin. Niektórzy dostawcy Androida nawet całkowicie ograniczają aplikacje (zobacz dontkillmyapp.com), a Delta Chat może nie wyświetlać wiadomości przychodzących, dopóki ręcznie ponownie nie otworzysz aplikacji.

        +
      • +
      + +

      Wymuś połączenie w tle: Jest to opcja awaryjna, jeśli poprzednie opcje nie są dostępne lub nie zapewniają „natychmiastowej dostawy”. Włączenie tej opcji powoduje stałe powiadomienie na twoim telefonie, które czasami może zostać „minifikowane” w przypadku najnowszych telefonów z Androidem.

      + +

      Obie opcje „Połączenia w tle” są energooszczędne i można je bezpiecznie wypróbować, jeśli wiadomości docierają do ciebie z dużym opóźnieniem.

      + +

      + + + Jak prywatne są powiadomienia push na Delta Chat? + + +

      + +

      Obsługa powiadomień push w Delta Chat pozwala uniknąć wycieku prywatnych informacji. Nie powoduje wycieku wiadomości e-mail, adresu IP ani zawartości wiadomości (nawet niezaszyfrowanej) do żadnego systemu zaangażowanego w dostarczanie powiadomień push.

      + +

      Oto jak aplikacje Delta Chat realizują dostarczanie powiadomień push:

      + +
        +
      • +

        Aplikacja Delta Chat uzyskuje lokalnie „token urządzenia” i przechowuje go na serwerze chatmail.

        +
      • +
      • +

        Kiedy serwer chatmail odbierze wiadomość e-mail od użytkownika Delta Chat, przekazuje „token urządzenia” do centralnego serwera proxy powiadomień Delta Chat.

        +
      • +
      • +

        Centralny serwer proxy powiadomień Delta Chat przekazuje „token urządzenia” do odpowiedniej usługi Push (Apple, Google itp.), nie znając nawet adresu IP ani adresu e-mail użytkowników Delta Chat.

        +
      • +
      • +

        Centralna usługa Push (Apple, Google itp.) budzi aplikację Delta Chat na twoim urządzeniu, aby sprawdzić w tle nowe wiadomości. Nie zna chatmaila ani adresu e-mail urządzenia, na którym się budzi. Centralne usługi push Apple/Google nigdy nie widzą adresu e-mail (nadawcy ani odbiorcy), a także nigdy nie widzą treści wiadomości (również w formie zaszyfrowanej).

        +
      • +
      + +

      Od maja 2024 r. serwery chatmail znają „tokeny urządzenia”, ale planujemy szyfrować te informacje na serwerze proxy powiadomień, tak aby serwer chatmail nigdy nie poznał tokena urządzenia.

      + +

      Centralny serwer proxy powiadomień Delta Chat jest mały i w pełni zaimplementowany w Rust i zapomina o tokenach urządzeń zaraz po ich przetworzeniu przez Apple/Google/itp, zwykle w ciągu kilku milisekund.

      + +

      W wyniku tego ogólnego projektu ochrony prywatności nawet przejęcie serwera chatmail lub pełne przejęcie centralnego serwera proxy powiadomień Delta Chat nie spowodowałoby ujawnienia prywatnych informacji, których usługi Push jeszcze nie posiadają.

      + +

      + + + Dlaczego Delta Chat integruje się ze scentralizowanymi, zastrzeżonymi usługami push Apple/Google? + + +

      + +

      Delta Chat to darmowy i otwartoźródłowy zdecentralizowany komunikator z możliwością wyboru serwera, ale chcemy, aby użytkownicy mogli niezawodnie doświadczać „natychmiastowego dostarczania” wiadomości, tak jak w przypadku aplikacji Whatsapp, Signal lub Telegram, bez zadawania z góry pytań, które są bardziej odpowiednie dla doświadczonych użytkowników lub programistów.

      + +

      Pamiętaj, że Delta Chat posiada mały i chroniący prywatność system powiadomień push, który zapewnia „natychmiastowe dostarczanie” wiadomości ze wszystkich serwerów chatmail, w tym potencjalnego, który możesz skonfigurować samodzielnie bez naszej zgody. Witamy w potędze interoperacyjnego i ogromnego systemu chatmail i e-mail :)

      + +

      + + + Szyfrowanie i bezpieczeństwo + + +

      + +

      + + + Jakie standardy są stosowane do szyfrowania end-to-end? + + +

      + +

      Autocrypt służy do automatycznego ustanawiania szyfrowania end-to-end kontaktów i czatów grupowych. Autocrypt wykorzystuje ograniczony i bezpieczny podzbiór standardu OpenPGP. W pełni zaszyfrowane wiadomości są oznaczone kłódką padlock.

      + +

      Protokoły Secure-Join służą do nawiązywania rozmów z gwarantowanym szyfrowaniem typu end-to-end, które chroni przed atakami sieciowymi i zagrożonymi serwerami. Czaty oznaczone zielonym znacznikiem wyboru green checkmark gwarantują szyfrowanie end-to-end wiadomości.

      + +

      + + + Skąd mogę wiedzieć, czy wiadomości są szyfrowane metodą e2e? + + +

      + +

      Wszystkie całkowicie zaszyfrowane wiadomości są oznaczone kłódką:

      + +

      padlock in bubble

      + +

      Pełne szyfrowanie jest gwarantowane, jeśli obok tytułu czatu znajduje się zielony znacznik wyboru:

      + +

      green checkmark in title

      + +

      + + + Jak mogę uzyskać gwarancję kompleksowego szyfrowania i zielone znaczniki wyboru? + + +

      + +

      Jeśli masz drugi kanał komunikacji ze swoim partnerem na czacie, np. czat wideo lub inny komunikator, możesz wygenerować link zaproszenia.

      + +

      Jeśli jesteście razem osobiście, możesz pokazać kod QR swojemu rozmówcy.

      + +
        +
      • +

        W przypadku zaproszeń grupowych dotknij tytułu czatu grupy, aby wyświetlić listę jej członków, i wybierz „Kod QR zaproszenia”.

        +
      • +
      • +

        Aby uzyskać bezpośrednie zaproszenia na czat 1:1, dotknij ikony kodu QR na ekranie głównym aplikacji Delta Chat.

        +
      • +
      + +

      Pozwól swojemu partnerowi czatu zeskanować obraz QR za pomocą aplikacji Delta Chat lub dotknij „Kopiuj” lub „Udostępnij”, aby utworzyć link zaproszenia i udostępnić go swojemu partnerowi czatu.

      + +

      Teraz poczekaj, aż między obydwoma urządzeniami nastąpi wymiana wiadomości sieciowych Secure-Join.

      + +
        +
      • +

        Jeśli oba urządzenia są w trybie online, obie strony ostatecznie zobaczą czat (grupowy lub bezpośredni) z zielonym znacznikiem wyboru green checkmark obok tytułu.

        +
      • +
      • +

        Jeśli jedno z urządzeń jest w trybie offline, zielone znaczniki wyboru pojawią się później, dopiero gdy urządzenie zostanie ponownie połączone z Internetem i zostanie zrealizowany protokół sieciowy Secure-Join.

        +
      • +
      + +

      Gratulacje! Teraz będziecie automatycznie korzystać z gwarantowanego kompleksowego szyfrowania tego kontaktu i oboje będziecie mogli dodawać się nawzajem do grup oznaczonych zielonym znacznikiem wyboru green checkmark , w ten sposób automatycznie rozpowszechniając gwarantowane kompleksowe szyfrowanie wśród swoich członków.

      + +

      + + + Co oznacza zielony znacznik wyboru i „gwarantowane kompleksowe szyfrowanie”? + + +

      + +

      Tytuły czatów z zielonymi znacznikami wyboru green checkmark oznaczają, że wszystkie wiadomości na czacie będą w pełni szyfrowane i nie będą mogły zostać odczytane ani zmodyfikowane przez zhakowane serwery poczty e-mail lub dostawców Internetu. Dołączanie do czatów grupowych oznaczonych zielonym znacznikiem bezpiecznie rozpowszechnia informacje o szyfrowaniu wszystkich osób (i zielone znaczniki wyboru) w sposób gwarantujący kompleksowe szyfrowanie w grupie i pomiędzy członkami.

      + +

      Profile kontaktów z zielonymi znacznikami wyboru green checkmark oznaczają, że obecnie gwarantujemy, że wiadomości kontaktu będą szyfrowane metodą end-to-end. Każdy kontakt oznaczony zielonym znacznikiem albo wykonał z tobą bezpośrednie skanowanie QR, albo został zweryfikowany przez inny kontakt oznaczony zielonym znacznikiem. Weryfikacje odbywają się automatycznie podczas dodawania członków do grup. Ktokolwiek doda kontakt do grupy oznaczonej zielonym znacznikiem, staje się osobą weryfikującą dla tych członków, którzy jeszcze nie wiedzieli o dodanym kontakcie. W profilu kontaktu możesz wielokrotnie dotykać tekstu „Zweryfikowano przez…”, aż dojdziesz do osoby, z którą bezpośrednio wykonałeś skanowanie QR.

      + +

      Pamiętaj, że w profilu kontaktu możesz widzieć i klikać osoby weryfikujące, ale w tytule profilu nie ma zielonego znacznika wyboru. Zwykle oznacza to, że kontakt „wysłał wiadomość z innego urządzenia”.

      + +

      Aby uzyskać bardziej szczegółowe omówienie „gwarantowanego szyfrowania typu end-to-end”, zobacz Protokoły Secure-Join, a w szczególności przeczytaj o „zweryfikowanych grupach”, technicznym określeniu tak zwanego tutaj „zielonego znacznika wyboru” lub „gwarantowanego szyfrowania end-to-end” czatów.

      + +

      + + + Kontakt „wysłał wiadomość z innego urządzenia”, co mogę zrobić? + + +

      + +

      Twój czat z kontaktem utracił gwarantowane szyfrowanie typu end-to-end. Gdy zobaczysz to ostrzeżenie, zielony znacznik wyboru dla tego czatu i kontaktu został usunięty. Jeśli zdziwi cię nagły spadek gwarantowanego szyfrowania end-to-end tego kontaktu, nie akceptuj ostrzeżenia! Zamiast tego skontaktuj się ze swoim kontaktem za pośrednictwem drugiego kanału, takiego jak rozmowa wideo, inny komunikator lub rozmowa telefoniczna, aby dowiedzieć się, co się stało.

      + +

      Jeśli twój kontakt rzeczywiście spowodował spadek gwarantowanego szyfrowania typu end-to-end, zapoznaj się z kolejnymi akapitami, aby poznać typowe przyczyny i sposoby ich łagodzenia. Niezależnie od tego, wszystkie inne czaty oznaczone zielonym znacznikiem są w pełni szyfrowane, nawet jeśli kontakt jest ich członkiem.

      + +

      Twój kontakt korzysta z Delta Chat na drugim urządzeniu (telefonie lub laptopie)

      + +

      Jeśli ma inne urządzenie z uruchomioną aplikacją Delta Chat, powinien usunąć konto z nowego urządzenia i dodać je jako drugie urządzenie zgodnie z opisem tutaj. Gdy tylko skontaktuje się z tobą później, ostrzeżenie zniknie, a na obu urządzeniach twojego kontaktu zostanie ustanowione gwarantowane szyfrowanie.

      + +

      Twój kontakt ponownie zainstalował Delta Chat, używając swojego starego loginu do konta

      + +

      Jeśli ma plik kopii zapasowej, powinien usunąć konto z nowego urządzenia i zamiast tego zaimportować plik kopii zapasowej, aby ponownie utworzyć konto. Gdy tylko skontaktuje się z tobą później, ostrzeżenie zniknie, a dla tego kontaktu zostanie przywrócone gwarantowane szyfrowanie.

      + +

      Jeśli nie ma pliku kopii zapasowej, najlepiej wykonać skanowanie QR ze swoim partnerem czatu, aby przywrócić gwarantowane szyfrowanie end-to-end.

      + +

      Twój kontakt wysłał wiadomość e-mail za pośrednictwem interfejsu poczty internetowej lub innej aplikacji e-mail i wkrótce ponownie zacznie korzystać z Delta Chat.

      + +

      Jeśli masz pewność, że kontakt czasami korzysta z poczty internetowej lub innej aplikacji pocztowej, która nie zapewnia szyfrowania end-to-end, możesz zaakceptować ostrzeżenie. Gdy tylko twój kontakt ponownie skorzysta z Delta Chat, gwarantowane szyfrowanie end-to-end zostanie automatycznie przywrócone.

      + +

      Twój kontakt całkowicie przestał korzystać z Delta Chat

      + +

      Czasami utrzymanie kontaktu jest ważniejsze niż szyfrowanie end-to-end. „Szyfrowanie warstwy transportowej” (TLS) może w dalszym ciągu w znaczący sposób chronić poufność wiadomości przesyłanych między urządzeniem a serwerem poczty e-mail. Jednak bez kompleksowego szyfrowania Ty i Twój kontakt ufacie swojemu serwerowi poczty e-mail, że nie będzie czytać ani manipulować waszymi wiadomościami i nie będzie przekazywać ich osobom trzecim.

      + +

      W każdym razie nie możesz zrobić nic innego, jak zaakceptować ostrzeżenie. Usuń także kontakt z aktywnej grupy oznaczonej zielonym znacznikiem, którą znajdziesz w sekcji „Współdzielone czaty” w profilu kontaktu. Dzięki temu twój kontakt nie otrzyma „nieczytelnych” wiadomości.

      + +

      Jeśli kontakt usunął Delta Chat z powodu błędów lub niepożądanego zachowania, rozważ opublikowanie postu na naszym forum pomocy, aby pomóc nam zidentyfikować i rozwiązać typowe problemy. Dzięki!

      + +

      + + + Czy załączniki (zdjęcia, pliki, pliki audio itp.) są szyfrowane metodą end-to-end? + + +

      + +

      Tak.

      + +

      Kiedy mówimy o „wiadomości zaszyfrowanej metodą end-to-end”, zawsze mamy na myśli, że zaszyfrowana jest cała wiadomość, łącznie ze wszystkimi załącznikami i metadanymi załączników, takimi jak nazwy plików.

      + +

      + + + Czy OpenPGP jest bezpieczny? + + +

      + +

      Tak, Delta Chat korzysta z bezpiecznego podzbioru OpenPGP i wyświetla wskaźnik bezpieczeństwa kłódki na wiadomości tylko wtedy, gdy cała wiadomość jest prawidłowo zaszyfrowana i podpisana. Na przykład „Odłączone podpisy” nie są traktowane jako bezpieczne.

      + +

      OpenPGP samo w sobie nie jest niebezpieczne. Większość publicznie omawianych problemów związanych z bezpieczeństwem OpenPGP tak naprawdę wynika ze złej użyteczności lub złej implementacji narzędzi, lub aplikacji (lub obu). Szczególnie ważne jest rozróżnienie pomiędzy OpenPGP, standardem szyfrowania IETF, a GnuPG (GPG), narzędziem wiersza poleceń implementującym OpenPGP. Wiele publicznych komentarzy krytycznych na temat OpenPGP tak naprawdę omawia GnuPG, którego Delta Chat nigdy nie używał. Delta Chat korzysta raczej z implementacji OpenPGP Rust rPGP, dostępnej jako niezależny pakiet „pgp” i poddanej audytowi bezpieczeństwa w 2019 roku.

      + +

      Naszym celem, wraz z innymi wdrażającymi OpenPGP, jest dalsza poprawa parametrów bezpieczeństwa poprzez wdrożenie nowego IETF OpenPGP Crypto-Refresh, który na szczęście został przyjęty latem 2023 roku.

      + +

      + + + Czy rozważałeś użycie alternatyw dla OpenPGP do szyfrowania typu end-to-end? + + +

      + +

      Tak, podążamy za rozwiązaniami takimi jak MLS lub Saltpack, ale przyjęcie ich oznaczałoby zerwanie kompleksowej interoperacyjności szyfrowania ze wszystkimi innymi aplikacjami e-mail, które zazwyczaj obsługują szyfrowanie OpenPGP. Nie byłaby to więc łatwa decyzja i użytkownicy muszą wprowadzić wymierne ulepszenia.

      + +

      Delta Chat przyjmuje holistyczne podejście do „użytecznego bezpieczeństwa” i współpracuje z szeroką gamą grup aktywistów, a także renomowanymi badaczami, takimi jak TeamUSEC, aby poprawić rzeczywiste wyniki użytkowników przed zagrożeniami bezpieczeństwa. Protokół przewodowy i standard ustanawiania szyfrowania end-to-end to tylko jedna część „wyników użytkownika”. Zobacz także nasze odpowiedzi na pytania dotyczące przejęcia urządzenia i metadanych wiadomości.

      + +

      + + + Czy Delta Chat jest podatny na EFAIL? + + +

      + +

      Nie, Delta Chat nigdy nie był podatny na atak EFAIL, ponieważ jego implementacja OpenPGP rPGP używa kodu wykrywania modyfikacji podczas szyfrowania wiadomości i zwraca błąd, jeśli kod wykrywania modyfikacji jest nieprawidłowy.

      + +

      Delta Chat również nigdy nie był podatny na atak EFAIL „Direct Exfiltration”, ponieważ odszyfrowuje jedynie wiadomości multipart/encrypted, które zawierają dokładnie jedną zaszyfrowaną i podpisaną część, zgodnie ze specyfikacją Autocrypt Level 1.

      + +

      + + + Czy wiadomość jest udostępniana w postaci zwykłego tekstu, jeśli szyfrowanie end-to-end nie jest dostępne? + + +

      + +

      Nawet jeśli nie ma gwarancji, że twoje wiadomości będą zaszyfrowane metodą end-to-end, nadal są chronione przed dostawcami Internetu, takimi jak operatorzy komórkowi lub telewizji kablowej. Jednakże dostawcy poczty e-mail zarówno twoi, jak i twojego odbiorcy mogą czytać, analizować, a nawet modyfikować twoje wiadomości, w tym wszelkie załączniki, jeśli nie są one w pełni zaszyfrowane.

      + +

      Delta Chat domyślnie korzysta ze ścisłego szyfrowania TLS, które zabezpiecza połączenia pomiędzy twoim urządzeniem a dostawcą poczty e-mail. Cała obsługa TLS Delta Chat została poddana niezależnemu audytowi bezpieczeństwa. Co więcej, połączenie między tobą a dostawcą poczty e-mail odbiorcy będzie zazwyczaj również szyfrowane. Jeśli zaangażowane serwery poczty e-mail obsługują MTA-STS, pomiędzy dostawcami poczty e-mail będzie egzekwowane szyfrowanie transportu. W takim przypadku komunikacja Delta Chat nigdy nie będzie udostępniana w Internecie w postaci zwykłego tekstu, nawet jeśli wiadomość nie została zaszyfrowana metodą end-to-end.

      + +

      Pamiętaj, że utrzymywanie gwarantowanego szyfrowania typu end-to-end oprócz szyfrowania TLS zapewnia wszechstronne bezpieczeństwo między urządzeniami twoimi i odbiorców. Nawet twój dostawca poczty e-mail lub Internetu nie będzie w stanie przeczytać ani zmodyfikować twoich wiadomości.

      + +

      + + + W jaki sposób Delta Chat chroni metadane w wiadomościach? + + +

      + +

      Delta Chat chroni większość metadanych wiadomości, umieszczając następujące informacje w całkowicie zaszyfrowanej części wiadomości:

      + +
        +
      • Wiersz tematu
      • +
      • Awatar i nazwa grupy
      • +
      • Żądania MDN (potwierdzenie odczytu) (Chat-Disposition-Notification-To)
      • +
      • Licznik czasu znikania wiadomości (Ephemeral-Timer)
      • +
      • Chat-Group-Member-Removed, Chat-Group-Member-Added
      • +
      • Nagłówek Secure-Join zawierający polecenia bezpiecznego łączenia
      • +
      • Powiadomienie o włączeniu przesyłania strumieniowego lokalizacji
      • +
      • Adres URL pokoju WebRTC
      • +
      + +

      Serwery poczty e-mail nie mają dostępu do chronionych metadanych, ale widzą datę wiadomości, jej rozmiar oraz, co ważniejsze, adresy nadawcy i odbiorcy. Serwery poczty e-mail potrzebują adresów odbiorców, aby kierować i dostarczać wiadomości do urządzeń odbiorców.

      + +

      + + + Jak chronić metadane i kontakty w przypadku przejęcia urządzenia? + + +

      + +

      Zarówno w celu ochrony przed serwerami poczty e-mail gromadzącymi metadane, jak i przed zagrożeniem przejęcia urządzenia, zalecamy użycie zoptymalizowanej instancji serwera poczty e-mail Delta Chat w celu tworzenia pseudonimowych kont tymczasowych poprzez skanowanie kodów QR. Pamiętaj, że aplikacje Delta Chat na wszystkich platformach obsługują wiele kont, dzięki czemu możesz z łatwością korzystać z kont „1-tygodniowych” lub „1-miesięcznych” związanych z konkretnymi działaniami obok konta „głównego”, wiedząc, że wszystkie tymczasowe dane konta wraz ze wszystkimi metadanymi zostaną usunięte. Co więcej, jeśli urządzenie zostanie przejęte, nie będzie można łatwo zidentyfikować kontaktów korzystających z tymczasowych kont e-mail, w porównaniu z komunikatorami, które ujawniają numery telefonów w grupach czatów, które z kolei często są powiązane z tożsamością prawną.

      + +

      + + + Jak mogę sprawdzić informacje o szyfrowaniu? + + +

      + +

      Możesz sprawdzić stan szyfrowania end-to-end ręcznie w oknie dialogowym „Szyfrowanie” (profil użytkownika w systemie Android/iOS lub kliknij prawym przyciskiem myszy element listy czatu użytkownika na komputerze). Delta Chat pokazuje tam dwa odciski palców. Jeśli te same odciski palców pojawią się u ciebie i urządzeniu twojego kontaktu, połączenie jest bezpieczne.

      + +

      + + + Jak mogę sprawdzić stan szyfrowania wiadomości? + + +

      + +

      Mała kłódka w dymku wiadomości oznacza, że wiadomość od danego nadawcy została prawidłowo zaszyfrowana. Jeśli nie ma kłódki, wiadomość nie została prawidłowo zaszyfrowana metodą end-to-end, najprawdopodobniej dlatego, że nadawca korzysta z aplikacji lub interfejsu poczty internetowej bez obsługi szyfrowania typu end-to-end.

      + +

      + + + Dlaczego widzę niezaszyfrowane wiadomości? + + +

      + +

      Jeśli kontakt korzysta z aplikacji e-mail bez Autocrypt, wszystkie wiadomości od tego kontaktu (w czacie grupowym lub 1:1) nie będą w pełni szyfrowane, w związku z czym nie będą wyświetlane z „kłódką” przy wiadomościach. Pamiętaj, że nawet jeśli twoje kontakty korzystają z Delta Chat na swoim koncie, mogą również używać na tym koncie aplikacji e-mail bez Autocrypt, co może powodować sporadyczne wysyłanie niezaszyfrowanych wiadomości. Odpowiadanie niezaszyfrowanych wiadomości na niezaszyfrowane wiadomości jest wymagane przez funkcję Autocrypt, aby zapobiec nieczytelnym wiadomościom po stronie twoich kontaktów i ich aplikacji e-mail bez Autocrypt.

      + +

      + + + Jak mogę uzyskać zaszyfrowany ened-to-end czat z kontaktem Delta Chat, który czasami korzysta z poczty internetowej lub innej aplikacji e-mail bez Autocrypt? + + +

      + +

      Jeśli potrzebujesz bezpiecznie, kompleksowo zaszyfrowanego czatu z kontaktem, który korzysta ze swojego konta zarówno w Delta Chat, jak i w aplikacjach bez Autocrypt (np. poczta internetowa), najlepiej skonfigurować z nim gwarantowane szyfrowanie typu end-to-end, a następnie utworzyć gwarantowany zaszyfrowany end-to-end czat grupowy z wami dwoma jako członkami. W tym czacie grupowym wszystkie wiadomości będą w pełni szyfrowane, nawet jeśli bezpośredni czat między wami zawiera ostrzeżenie „…wysłano wiadomość z innego urządzenia”.

      + +

      + + + Jak mogę zapewnić kompleksowe szyfrowanie i usuwanie wiadomości? + + +

      + +

      Najlepszym sposobem, aby mieć pewność, że każda wiadomość jest kompleksowo zaszyfrowana, a metadane usunięte tak szybko, jak to możliwe, jest korzystanie z czatów z gwarantowanym szyfrowaniem end-to-end i włączonymi znikającymi wiadomościami.

      + +

      Gwarantowane szyfrowane metodą end-to-end czaty chronią przed atakami MITM attacks, a włączenie znikających wiadomości powoduje usunięcie wiadomości z serwera po upływie czasu skonfigurowanego przez użytkownika.

      + +

      Jeśli nie potrzebujesz dłuższej kopii wiadomości na serwerze, możesz także włączyć opcję „automatycznie usuń wiadomości z serwera”.

      + +

      + + + Czy Delta Chat obsługuje funkcję Perfect Forward Secrecy? + + +

      + +

      Nie, Delta Chat nie obsługuje funkcji Perfect Forward Secrecy (PFS). Oznacza to, że jeśli twój prywatny klucz deszyfrujący Delta Chat wycieknie i ktoś zdobędzie twoje wcześniejsze wiadomości w trakcie przesyłania, będzie mógł je odszyfrować i odczytać przy użyciu ujawnionego klucza deszyfrowania.

      + +

      Należy jednak pamiętać, że jeśli ktoś zdobędzie twoje klucze deszyfrujące, zazwyczaj będzie mógł również uzyskać twoje wiadomości, niezależnie od tego, czy obowiązuje zasada Perfect Forward Secrecy, czy nie. Typową sytuacją w świecie rzeczywistym w przypadku wycieku kluczy deszyfrujących jest przejęcie urządzenia, które omawiamy w naszej odpowiedzi na temat przejęcia metadanych i urządzenia.

      + +

      Możliwe, że Delta Chat ewoluuje, aby wspierać Perfect Forward Secrecy, ponieważ OpenPGP to tylko kontener na zaszyfrowane wiadomości, ale zarządzanie kluczami szyfrowania (a tym samym rotacja kluczy lub „zapadanie kluczy”) mogłoby być zorganizowane w elastyczny sposób. Zobacz prototyp PFS firmy Seqouia, aby zapoznać się z istniejącymi eksperymentami w społeczności implementatorów OpenPGP.

      + +

      + + + Czy szyfrowanie end-to-end Delta Chat jest tak samo bezpieczne jak Signal? + + +

      + +

      To zależy od tego, co jest dla ciebie ważne. Delta Chat nie obsługuje PFS tak jak Signal, ale zapewnia gwarantowane szyfrowane end-to-end czatów, które jest zabezpieczeniem przed zaatakowanymi serwerami lub uszkodzonymi sieciami. Signal i większość innych komunikatorów obsługujących PFS nie zapewniają praktycznego schematu ochrony czatów grupowych przed atakami sieciowymi, które są prawdopodobnie bardziej niepokojące niż potencjalny atakujący, który przejmuje twój telefon i prywatne ustawienia szyfrowania i w ten sposób nie twoje wiadomości i mimo to ma pełny zapis wszystkich poprzednio zaszyfrowanych wiadomości.

      + +

      W każdym razie szyfrowanie end-to-end Delta Chat wykorzystuje bezpieczny podzbiór OpenPGP, który został poddany niezależnemu audytowi bezpieczeństwa.

      + +

      + + + Czy mogę ponownie wykorzystać mój istniejący klucz prywatny? + + +

      + +

      Tak. +The best way is to send an Autocrypt Setup Message from the other e-mail client. +Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

      + +

      Alternatywnie możesz zaimportować klucz ręcznie w „Ustawienia » Zaawansowane » Importuj tajne klucze”. Uwaga: Upewnij się, że klucz nie jest chroniony hasłem lub wcześniej usuń hasło.

      + +

      Jeśli nie masz klucza lub nawet nie wiesz, że go potrzebujesz nie przejmuj się: Delta Chat generuje go w razie potrzeby, nie trzeba naciskać przycisku, aby to zrobić.

      + +

      + + + Nie mogę zaimportować istniejącego klucza PGP do Delta Chat. + + +

      + +

      Jest wielce prawdopodobne, że problemem jest klucz, który jest zaszyfrowany i/lub używa hasła. Takie klucze nie są obsługiwane przez Delta Chat. Usuń szyfrowanie i hasło i spróbować ponownie zaimportować klucz.

      + +

      Innym częstym błędem jest nieprawidłowe zakończenie pliku. +Użyj opancerzonego formatu ASCII i końcówki pliku .asc.

      + +

      Rozsądny format, Delta Chat obsługuje popularne formaty kluczy prywatnych OpenPGP, jednak jest mało prawdopodobne, że będziemy obsługiwać 100% wszystkich kluczy prywatnych z dowolnych źródeł. To również nie jest głównym celem Delta Chat (w rzeczywistości, znaczna większość użytkowników Delta Chat nie będzie miała żadnego klucza przed rozpoczęciem korzystania z Delta). Jednak staramy się wspierać klucze prywatne z innych źródeł tak dobrze jak to tylko możliwe.

      + +

      Usunięcie hasła z klucza prywatnego będzie się różnić w zależności od +oprogramowania używanego do zarządzania kluczami PGP. Za pomocą programu Enigmail można ustawić +hasło na pustą wartość w oknie zarządzania kluczami. Z GnuPG możesz ustawić je z linii poleceń. +W przypadku innych programów można znaleźć rozwiązanie online.

      + +

      + + + Czy Delta Chat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach? + + +

      + +

      Projekt Delta Chat przeszedł cztery niezależne audyty bezpieczeństwa i jedną niezależną analizę bezpieczeństwa, od najnowszego do najstarszego:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        W kwietniu 2023 r. naprawiliśmy problemy z bezpieczeństwem i prywatnością w funkcji „aplikacje internetowe udostępniane na czacie”, związane z awariami piaskownicy, szczególnie w przypadku Chromium. Następnie przeprowadziliśmy niezależny audyt bezpieczeństwa od Cure53 i wszystkie wykryte problemy zostały naprawione w aplikacji z serii 1.36 wydanej w kwietniu 2023 r. Pełną historię bezpieczeństwa end-to-end w sieci można znaleźć tutaj.

        +
      • +
      • +

        W marcu 2023 r. firma Cure53 przeanalizowała zarówno szyfrowanie transportu połączeń sieciowych Delta Chat, jak i powtarzalną konfigurację serwera pocztowego zgodnie z zaleceniami na tej stronie. Możesz przeczytać więcej o audycie na naszym blogu lub przeczytać pełny raport tutaj.

        +
      • +
      • +

        W 2020 r. firma Include Security przeanalizowała biblioteki Rust core, IMAP, SMTP i TLS Delta Chat. Nie znalazła żadnych problemów krytycznych ani poważnych. W raporcie zwrócono uwagę na kilka słabych punktów o średniej wadze – same w sobie nie stanowią zagrożenia dla użytkowników Delta Chat, ponieważ zależą od środowiska, w którym używany jest Delta Chat. Ze względu na użyteczność i kompatybilność nie możemy złagodzić wszystkich z nich i zdecydowaliśmy się przedstawić zalecenia dotyczące bezpieczeństwa zagrożonym użytkownikom. Pełny raport można przeczytać tutaj.

        +
      • +
      • +

        W 2019 r. firma Include Security przeanalizowała biblioteki PGP i RSA Delta Chat. Nie znaleziono żadnych krytycznych problemów, ale dwa poważne problemy, które później naprawiliśmy. Ujawniła również jeden problem o średniej wadze i kilka mniej poważnych, ale nie było możliwości wykorzystania tych luk w implementacji Delta Chat. Niektóre z nich jednak naprawiliśmy od czasu zakończenia kontroli. Pełny raport można przeczytać tutaj.

        +
      • +
      + +

      + + + Multi-klient + + +

      + +

      + + + Czy mogę korzystać z Delta Chat na wielu urządzeniach w tym samym czasie? + + +

      + +

      Tak. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      + +
        +
      • +

        Upewnij się, że oba urządzenia są połączone z tego samego Wi-Fi lub sieci

        +
      • +
      • +

        Na pierwszym urządzeniu przejdź do Ustawienia → Dodaj kolejne urządzenie, w razie potrzeby odblokuj ekran i poczekaj chwilę, aż pojawi się kod QR

        +
      • +
      • +

        Na drugim urządzeniu zainstaluj Delta Chat

        +
      • +
      • +

        Na drugim urządzeniu uruchom Delta Chat, wybierz Dodaj jako kolejne urządzenie i zeskanuj kod QR z pierwszego urządzenia

        +
      • +
      + +

      Przenoszenie powinno rozpocząć się po kilku sekundach, a podczas przenoszenia oba urządzenia będą pokazywać postęp. Poczekaj, aż zakończy się na obu urządzeniach.

      + +

      W przeciwieństwie do wielu innych komunikatorów, po udanym przenoszeniu oba urządzenia są całkowicie niezależne. Jedno urządzenie nie jest potrzebne do działania drugiego.

      + +

      + + + Rozwiązywanie problemów + + +

      + +
        +
      • +

        Sprawdź dokładnie, czy oba urządzenia są w tym samym Wi-Fi lub tej samej sieci

        +
      • +
      • +

        Na Windowsie, przejdź do Panel sterowania / Sieć i internet i upewnij się, że Sieć prywatna jest wybrana jako “Typ profilu sieci” +(po przeniesieniu możesz wrócić do pierwotnej wartości)

        +
      • +
      • +

        Twój system może mieć „zaporę ogniową”, o której wiadomo, że powoduje problemy (szczególnie w systemie Windows). +Wyłącz zaporę dla Delta Chat po obu stronach i spróbuj ponownie

        +
      • +
      • +

        Sieci dla gości mogą nie pozwalać urządzeniom na komunikację między sobą. Jeśli to możliwe, korzystaj z sieci innej niż gość.

        +
      • +
      • +

        Upewnij się, że na urządzeniu docelowym jest wystarczająca ilość miejsca

        +
      • +
      • +

        Jeśli przenoszenie się rozpoczęło, upewnij się, że urządzenia pozostają aktywne i nie zasypiają. Nie wychodź z Delta Chat. (dokładamy wszelkich starań, aby aplikacja działała w tle, ale systemy mają tendencję do ubijania aplikacji, niestety)

        +
      • +
      • +

        Delta Chat jest już zalogowany na urządzeniu docelowym? Możesz używać wielu kont na urządzeniu, po prostu dodaj kolejne konto

        +
      • +
      • +

        Jeśli nadal masz problemy lub nie możesz zeskanować kodu QR, wypróbuj ręczne przenoszenie opisane poniżej

        +
      • +
      + +

      + + + Ręczny transfer + + +

      + +

      Ta metoda jest zalecana tylko wtedy, gdy opisana powyżej opcja „Dodaj kolejne urządzenie” nie działa.

      + +
        +
      • Na starym urządzeniu przejdź do „Ustawienia » Czaty i media » Eksport kopii zapasowej”. Wprowadź swój PIN odblokowania ekranu, wzór lub hasło. Następnie możesz nacisnąć „Utwórz kopię”. Spowoduje to zapisanie pliku kopii zapasowej na urządzeniu. Teraz musisz jakoś przenieść go na inne urządzenie.
      • +
      • Na nowym urządzeniu, na ekranie logowania, zamiast logować się na swoje konto e-mail, wybierz „Przywróć z kopii zapasowej”. Po zaimportowaniu Twoje rozmowy, klucze szyfrujące i multimedia powinny zostać skopiowane na nowe urządzenie. +
          +
        • Jeśli korzystasz z iOS i napotykasz trudności, może ten poradnik Ci pomoże.
        • +
        +
      • +
      • Jesteś teraz zsynchronizowany i możesz używać obu urządzeń do wysyłania i odbierania wiadomości zaszyfrowanych end-to-end w komunikacji ze swoimi partnerami.
      • +
      + +

      + + + Czy są jakieś plany wprowadzenia klienta Web Delta Chat? + + +

      + +
        +
      • Nie ma bezpośrednich planów, ale wstępne przemyślenia.
      • +
      • Istnieją 2-3 możliwości wprowadzenia klienta Web Delta Chat, 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.
      • +
      • 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 get.delta.chat.
      • +
      + +

      + + + Aplikacje webxdc + + +

      + +

      W Delta Chat możesz udostępniać aplikacje webxdc i załączniki z rozszerzeniem pliku .xdc. Mogą robić bardzo różne rzeczy i uczynić Delta Chat naprawdę rozszerzalnym komunikatorem.

      + +

      + + + Jak prywatne są aplikacje webxdc? + + +

      + +
        +
      • Aplikacje webxdc nie mogą wysyłać danych do Internetu ani niczego pobierać.
      • +
      • Aplikacja webxdc może wymieniać dane wyłącznie w ramach czatu Delta Chat, a ich kopie znajdują się na urządzeniach twoich partnerów czatu. Poza tym jest całkowicie odizolowana od Internetu.
      • +
      • Prywatność, jaką oferuje aplikacja webxdc, to prywatność twojego czatu – jeśli ufasz osobom, z którymi rozmawiasz, możesz ufać także aplikacji webxdc.
      • +
      • Oznacza to również: otwieranie aplikacji webxdc na czatach, w przypadku których nie ufa się członkom, może stanowić ryzyko dla prywatności – tak jak załączniki do wiadomości e-mail, gdzie otwiera się tylko załączniki od nadawców, którym ufasz, a nie od spamerów.
      • +
      + +

      + + + Gdzie mogę zdobyć aplikacje webxdc? + + +

      + +
        +
      • Ogólnie rzecz biorąc, każdy może udostępniać sobie aplikacje webxdc bez ograniczeń.
      • +
      • Możesz wysłać „hi” na adres xstore@testrun.org, aby zobaczyć eksperymentalny sklep z aplikacjami webxdc. Wszystkie aplikacje są otwarto źródłowe i są bezpłatne.
      • +
      • Wiele osób pisze własne, aplikacje webxdc i publikuje je na forum Delta Chat.
      • +
      + +

      + + + Jak mogę tworzyć własne aplikacje webxdc? + + +

      + + + +

      + + + Funkcje eksperymentalne + + +

      + +

      Jesteśmy bardzo wdzięczni za opinie na temat tych funkcji — chcesz podzielić się swoimi pomysłami? Dołącz do forum, aby wnieść swój wkład. Możesz wygodnie zalogować się za pośrednictwem Delta Chat i skanowaniu kodu QR, co jest kolejnym dość stabilnym eksperymentem, który przeprowadzamy na boku (sic!).

      + +

      + + + Jak mogę korzystać z połączeń audio/wideo z Delta Chat? + + +

      + +
        +
      • Aby włączyć połączenia audio/wideo, przejdź do sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych i wybierz „Instancja czatu wideo”.
      • +
      • Kiedy zapraszasz innych do czatu wideo, jest on od razu otwierany w Twojej przeglądarce/aplikacji. Inne osoby otrzymują e-mail z linkiem do twojego czatu wideo. W ten sposób jest to kompatybilne również wtedy, gdy partnerzy czatu nie używają Delta Chat.
      • +
      • Zwróć uwagę, że po drugiej stronie nie ma dzwonka, a Twoim rozmówcom nie zostanie przerwana praca przez zaproszenie do czatu wideo.
      • +
      • Możesz użyć dowolnej usługi czatu wideo, która pozwala na dołączenie przez link. Wystarczy dodać link w ustawieniach.
      • +
      • Na przykład, aby użyć flagowej instancji Jitsi Meet, możesz wpisać https://meet.jit.si/$ROOM. Zmienna $ROOM będzie wartością losową; w ten sposób będziesz miał nowy losowy pokój jitsi za każdym razem, gdy do kogoś zadzwonisz.
      • +
      + +

      + + + Co to są Listy rozgłoszeniowe i jak mogę ich używać? + + +

      + +
        +
      • Dzięki liście rozgłoszeniowej możesz wysłać wiadomość do wielu odbiorców jednocześnie; kiedy ci odpowiedzą, otrzymasz odpowiedź w bezpośrednim czacie 1: 1 z nimi. Odbiorcy nie widzą siebie nawzajem.
      • +
      • Technicznie, jest to e-mail z wieloma odbiorcami w „ukrytej kopii”.
      • +
      • Możesz włączyć tę funkcję w sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych. Następnie możesz utworzyć listę rozgłoszeniową z okna dialogowego „Nowy czat”.
      • +
      • Jeśli używasz więcej niż jednego urządzenia, listy rozgłoszeniowe nie są obecnie synchronizowane między nimi.
      • +
      • Wiadomości wysyłane do list rozgłoszeniowych nie są szyfrowane. Szyfrowanie złamałoby anonimowość, ponieważ wtedy wszyscy odbiorcy wiedzieliby, kto jeszcze je otrzymał (wysyłanie indywidualnych wiadomości do wszystkich byłoby gorsze z powodu limitu prędkości i zużycia sieci).
      • +
      + +

      + + + Jak mogę udostępnić swoją lokalizację moim rozmówcom? + + +

      + +
        +
      • Możesz włączyć przesyłanie strumieniowe lokalizacji w sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych.
      • +
      • Teraz, jeśli chcesz udostępnić swoją lokalizację na czacie, przejdź do „załącz” i wybierz „Lokalizacja”. Możesz teraz ustawić przedział czasowy, w którym Twoja lokalizacja będzie przesyłana strumieniowo do rozmówców, od 5 minut do 6 godzin.
      • +
      • Gdy twoja lokalizacja się zmienia, inni uczestnicy czatu mogą ją zobaczyć na mapie w czacie.
      • +
      • Aby zobaczyć mapę i wyświetlić lokalizacje innych osób, musisz włączyć tę funkcję w ustawieniach zaawansowanych.
      • +
      • Ta funkcja nie będzie udostępniać twojej lokalizacji nikomu poza partnerami czatu. Mapy są pobierane z OpenStreetMap.
      • +
      • Na komputerze system operacyjny zwykle nie może określić twojej lokalizacji. Zamiast tego możesz kliknąć prawym przyciskiem myszy na mapie i opisać lokalizację, która jest wysyłana do czatu jako wiadomość, ale także pojawia się na mapie.
      • +
      + +

      + + + Co właściwie chroni eksperymentalne szyfrowanie bazy danych? + + +

      + +
        +
      • W tej chwili szyfrowanie bazy danych jest jeszcze bardzo eksperymentalne. Nie polegaj na nim w kwestii ochrony, powinieneś dodatkowo użyć szyfrowania systemu operacyjnego, jeśli takie zapewnia.
      • +
      • Szyfrowanie bazy danych nie szyfruje jeszcze obiektów blob, tylko wiersze i kolumny bazy danych. Oznacza to mniej więcej tyle, że Twoje wiadomości są bezpieczne, ale nie załączniki.
      • +
      • W systemach iOS i Android klucze szyfrujące są przechowywane w pęku kluczy systemowych. Oznacza to, że szyfrowanie jest tak bezpieczne, jak system operacyjny, na którym działa.
      • +
      • Klient Delta Chat na komputer nie oferuje jeszcze szyfrowania bazy danych, ponieważ nie ma standardowego sposobu przechowywania kluczy szyfrowania na różnych obsługiwanych platformach.
      • +
      + +

      + + + Dlaczego mogę wybrać, aby widzieć tylko folder DeltaChat? + + +

      + +

      To jest ustawienie eksperymentalne dla niektórych osób, które eksperymentują z regułami po stronie serwera. Nie wszyscy dostawcy to obsługują, ale w przypadku niektórych możesz przenieść wszystkie wiadomości z nagłówkiem „Chat-Version” do folderu DeltaChat. Zwykle byłoby to zrobione przez aplikację Delta Chat.

      + +

      Włączenie „Pobieraj tylko z folderu DeltaChat” ma sens, jeśli masz:

      + +
        +
      • włączoną regułę po stronie serwera, aby przenosić wszystkie wiadomości z nagłówkiem Chat-Version do folderu DeltaChat i,
      • +
      • ustawioną opcję „Pokaż klasyczne e-maile” na „Nie, tylko czaty”.
      • +
      + +

      W tym przypadku Delta Chat nie musi obserwować skrzynki odbiorczej, a wystarczy, że będzie obserwować tylko folder DeltaChat.

      + +

      + + + Jak mogę zmienić moje konto na inny adres e-mail? + + +

      + +
        +
      1. +

        Zmień swój adres w „Ustawienia → Zaawansowane → Hasło i konto” i wprowadź hasło do swojego nowego konta (i jeśli to konieczne, ustawienia serwera). Otrzymasz informację o przeniesieniu na nowy adres. Dodatkowe powiadomienie pojawi się również na czacie „Komunikaty urządzenia”.

        +
      2. +
      3. +

        Jeśli to możliwe, pozwól, aby twój stary dostawca poczty e-mail przekazywał wszystkie wiadomości na twój nowy adres.

        +
      4. +
      5. +

        Poinformuj swoje kontakty, że zmieniłeś adres. Pisanie do gwarantowanych szyfrowaniem end-to-end czatów i grup sprawi, że automatycznie zauważą twoją przenosiny i będą kontynuować rozmowę z tobą, korzystając z twojego nowego adresu.

        +
      6. +
      + +

      Pamiętaj, że Delta Chat nie będzie już pobierać wiadomości od twojego starego dostawcy poczty e-mail. Jeśli nie skonfigurowałeś swojego dostawcy poczty e-mail do przekazywania wiadomości (krok 2.), tylko te kontakty, do których wysłałeś wiadomość w gwarantowanym szyfrowaniem end-to-end czacie, wyślą wiadomości na twój nowy adres.

      + +

      Aby dowiedzieć się więcej na ten temat, przeczytaj nasz wpis na blogu na ten temat.

      + +

      + + + Różne + + +

      + +

      + + + Jakich uprawnień potrzebuje Delta Chat? + + +

      + +

      W zależności od używanego systemu operacyjnego możesz +zostać poproszony o przyznanie uprawnień aplikacji. +Oto, co robi Delta Chat z tymi uprawnieniami:

      + +
        +
      • Aparat (można zablokować)
      • +
      • robi zdjęcia i filmy: do wysyłania zdjęć
      • +
      • Kontakty (można zablokować)
      • +
      • czyta twoje kontakty: aby znaleźć kontakty do czatu
      • +
      • Lokalizacja (można zablokować)
      • +
      • dostęp do przybliżonej lokalizacji (sieciowe źródła lokalizacji): dla funkcji przesyłania strumieniowego lokalizacji
      • +
      • dostęp do dokładnej lokalizacji (GPS i sieciowe źródła lokalizacji): dla funkcji przesyłania strumieniowego lokalizacji
      • +
      • Mikrofon (można zablokować)
      • +
      • nagrywanie dźwięku: dla wiadomości audio
      • +
      • Przechowywanie (można zablokować)
      • +
      • modyfikowanie lub usuwanie zawartości karty SD: pobieranie załączników do wiadomości
      • +
      • czytanie zawartość twojej karty SD: aby udostępniać pliki swoim kontaktom
      • +
      • Inne możliwości aplikacji
      • +
      • zmiana ustawienia dźwięku: możesz wybrać dzwonki i głośność dla powiadomień i wiadomości audio
      • +
      • uruchamianie przy starcie: więc nie musisz ręcznie uruchamiać Delta Chat
      • +
      • kontrola wibracji: do powiadomień
      • +
      • przeglądanie połączenia sieciowych: aby połączyć się z dostawcą poczty e-mail
      • +
      • zapobieganie uśpieniu telefonu: dzięki czemu możesz łatwiej skopiować kod zabezpieczający podczas komunikatu konfiguracyjnego Autocrypt
      • +
      • pełny dostęp do sieci: aby połączyć się z dostawcą poczty e-mail
      • +
      • wyświetlanie połączenia Wi-Fi: aby połączyć się z dostawcą poczty e-mail
      • +
      • prośba o zignorowanie optymalizacji baterii: w celu osiągnięcia „natychmiastowego dostarczania wiadomości”
      • +
      + +

      + + + Czy Delta Chat działa z moim dostawcą poczty e-mail? + + +

      + +
        +
      • Z dość dużym prawdopodobieństwem: Tak :) +Jednak niektórzy dostawcy potrzebują specjalnych opcji, aby działać poprawnie, zobacz Przegląd dostawców
      • +
      + +

      + + + Chcę zarządzać własnym serwerem e-mail dla Delta Chat. Co polecacie? + + +

      + + + +

      + + + Dlaczego muszę wpisać moje hasło e-mail do Delta Chat? Czy to jest bezpieczne? + + +

      + +

      Podobnie jak w przypadku innych programów pocztowych, takich jak Thunderbird, K9-Mail lub Outlook, program potrzebuje hasła, aby można było go używać do wysyłania i odbierania e-maili. Oczywiście hasło jest przechowywane tylko na Twoim urządzeniu. Hasło jest przesyłane tylko do Twojego dostawcy poczty e-mail (po zalogowaniu), który i tak ma dostęp do Twojej poczty

      + +

      Jeśli korzystasz z dostawcy poczty e-mail z obsługą OAuth2, takiego jak gmail.com lub yandex.ru, nie musisz przechowywać hasła na urządzeniu. W takim przypadku używany jest tylko token dostępu.

      + +

      Ponieważ Delta Chat jest Open Source, możesz sprawdzić Kod źródłowy +jeśli chcesz sprawdzić, czy Twoje poświadczenia są przetwarzane w bezpieczny sposób. Cieszymy się z opinii, które sprawiają, że aplikacja jest bezpieczniejsza dla wszystkich naszych użytkowników.

      + +

      + + + Jakie wiadomości pojawiają się w Delta Chat? + + +

      + +

      Domyślnie Delta Chat pokazuje wszystkie e-maile.

      + +

      Możesz to zmienić w „Ustawienia → Zaawansowane → Pokaż klasyczne e-maile”. Masz następujące opcje:

      + +
        +
      • „Nie, tylko czaty”: Wyświetlane są tylko wiadomości wysłane przez innych użytkowników Delta Chat i odpowiedzi na Twoje wiadomości Delta Chat. Ma to największy sens, jeśli używasz tego samego konta e-mail również do wysyłania zwykłych wiadomości e-mail. To jest ustawienie domyślne.
      • +
      • „Wszystkie”: Delta Chat pokazuje wszystkie e-maile, które są wysyłane na Twój adres e-mail. Ma to sens, jeśli chcesz używać Delta Chat do wszystkich swoich e-maili, więc żadna wiadomość nie zostanie utracona. To jest ustawienie domyślne.
      • +
      • „Dla zaakceptowanych kontaktów”: Delta Chat pokazuje wszystkie e-maile od kontaktów, z którymi już prowadzisz czat, ale nowe czaty pojawiają się tylko dla wiadomości Delta Chat. Pomaga to zdecydować indywidualnie dla każdego przypadku, czy chcesz prowadzić rozmowę w Delta Chat, czy w „normalnej” aplikacji e-mail.
      • +
      + +

      + + + Czy Delta Chat obsługuje wiadomości e-mail w formacie HTML? + + +

      + +

      Tak, przychodzące wiadomości HTML otrzymują przycisk „Pokaż całą wiadomość”. Wychodzące wiadomości zawsze zawierają zwykły tekst.

      + +

      + + + Czy w Delta Chat mogę ustawić temat wiadomości e-mail? + + +

      + +

      Delta Chat automatycznie ustawia (i szyfruje!) klasyczny temat wiadomości e-mail na nazwę grupy lub nazwę nadawcy.

      + +

      Jeśli więc chcesz samodzielnie ustawić temat, na przykład w przypadku oficjalnego e-maila do kontaktu biznesowego, możesz utworzyć grupę składającą się tylko z ciebie i odbiorców. Ustaw tytuł czatu na żądany temat, a następnie wyślij swój e-mail jako pierwszą wiadomość. Jeśli odbiorcy nie korzystają z Delta Chat, będzie to dla nich wyglądać jak zwykły, formalny e-mail. Jeśli ustawisz tekst podpisu, otrzymasz dodatkowe punkty profesjonalizmu.

      + +

      + + + Do czego służy ustawienie „Wyślij kopię do siebie”? + + +

      + +

      Wysłanie kopii wiadomości do siebie zapewnia otrzymywanie własnych wiadomości na wszystkich urządzeniach. Jeśli masz wiele urządzeń i jej nie włączysz, zobaczysz tylko wiadomości od innych osób oraz wiadomości, które wysyłasz z bieżącego urządzenia.

      + +

      Kopia jest wysyłana do skrzynki odbiorczej, a następnie przenoszona do folderu DeltaChat; nie jest umieszczana w folderze „Wysłane”. Delta Chat nigdy nie przesyła niczego do folderu Wysłane, ponieważ oznaczałoby to dwukrotne przesłanie wiadomości (raz przez SMTP i raz przez IMAP do folderu Wysłane).

      + +

      Domyślne ustawienie „Wyślij kopię do siebie” jest „włączone”.

      + +

      + + + Po co mam wybrać opcję oglądania folderu „Wysłane”? + + +

      + +

      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ą Delta Chat i chce, aby jego program pocztowy „uczestniczył” w rozmowach na czacie.

      + +

      Jednak zalecamy używanie klienta Delta Chat Desktop; możesz go pobrać z get.delta.chat. 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 Delta Chat Desktop.

      + +

      + + + Dlaczego mogę nie widzieć folderu DeltaChat? + + +

      + +

      Niektórzy używają Delta Chat jako zwykłego klienta poczty e-mail i chcą używać folderu Skrzynka odbiorcza dla swojej poczty zamiast folderu DeltaChat. Jeśli wyłączysz opcję „Oglądaj folder DeltaChat”, powinieneś również wyłączyć opcję „Automatyczne przenoszenie do folderu DeltaChat”. W przeciwnym razie usuwanie wiadomości lub konfiguracja wielu urządzeń może nie działać poprawnie.

      + +

      + + + Czy Delta Chat jest kompatybilny z Protonmail / Tutanota / Criptext? + + +

      + +
        +
      • I tak i nie.
      • +
      • Nie, nie możesz używać swojego konta Protonmail, Tutanota lub Criptext z Delta Chat; nie oferują one odbierania poczty przez IMAP.
      • +
      • W każdym przypadku możesz użyć Delta Chat do wysyłania wiadomości do osób, które używają Protonmail, Tutanota lub Criptext. Te wiadomości nie będą jednak szyfrowane metodą end-to-end. Szyfrowanie typu end-to-end, które oferują ci dostawcy, nie jest kompatybilne z Autocrypt stosowanym standardowo w Delta Chat.
      • +
      • Delta Chat może zaszyfrować metodą end-to-end za pośrednictwem dowolnego dostawcy poczty e-mail z dowolną aplikacją e-mail z włączoną funkcją Autocrypt.
      • +
      + +

      + + + Jak mogę usunąć swoje konto? + + +

      + +

      Gdy korzystasz z konta e-mail w Delta Chat, 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.

      + +

      Jeśli chcesz zachować konto, ale odinstalować Delta Chat, zaleca się opuszczenie każdego czatu grupowego przed odinstalowaniem Delta Chat.

      + +

      + + + Interesują mnie szczegóły techniczne. Możesz powiedzieć mi coś więcej? + + +

      + + + +

      + + + W jaki sposób finansowany jest rozwój Delta Chat? + + +

      + +

      Delta Chat nie otrzymuje żadnego kapitału wysokiego ryzyka, nie jest zadłużony i nie jest pod presją generowania ogromnych zysków lub sprzedawania reklamodawcom użytkowników i ich przyjaciół oraz rodziny (lub gorzej). +Raczej korzystamy z publicznych źródeł finansowania, jak dotąd pochodzących z UE i USA, aby wspomóc nasze wysiłki w inicjowaniu zdecentralizowanego i zróżnicowanego ekosystemu komunikatora, opartego na rozwoju społeczności Free i Open-Source.

      + +

      Konkretnie, rozwój Delta Chat był dotychczas finansowany z tych źródeł:

      + +
        +
      • +

        Unijny projekt NEXTLEAP sfinansował badania i wdrożenie zweryfikowanych grup i ustawień protokołów kontaktowych w latach 2017 i 2018, a także pomógł zintegrować szyfrowanie end-to-end poprzez Autocrypt.

        +
      • +
      • +

        Open Technology Fund przyznał nam pierwszy grant w 2018/2019 (~200 000 $), dzięki któremu znacznie ulepszyliśmy aplikację na Androida i wydaliśmy pierwszą wersję beta aplikacji na komputery stacjonarne, a także ugruntował rozwój naszych funkcji w badaniach UX w kontekście praw człowieka, zobacz nasz końcowy raport Needfinding and UX. +Druga dotacja w 2019/2020 (~300 000 4) pomogła nam wydać wersje Delta/iOS, przekonwertować naszą podstawową bibliotekę na Rust i zapewnić nowe funkcje dla wszystkich platform.

        +
      • +
      • +

        Fundacja NLnet przekazała w latach 2019/2020 kwotę 46 tys. EUR na wykonanie wiązań Rust/Python i uruchomienie ekosystemu Chat-bot.

        +
      • +
      • +

        W 2021 r. otrzymaliśmy kolejne dofinansowanie z UE na dwie propozycje dotyczące Internetu nowej generacji, a mianowicie na EPPD – katalog przenośności dostawcy poczty e-mail ( ~97 tys. EUR) i AEAP – przenoszenie adresu e-mail (~90 tys. EUR), co zaowocowało lepszą obsługą wielu kont, ulepszonymi kontaktami i ustawieniami grup za pomocą kodów QR oraz wieloma ulepszeniami sieciowymi na wszystkich platformach.

        +
      • +
      • +

        Od końca 2021 do marca 2023 otrzymaliśmy dofinansowanie Wolność Internetu (~500 tys. $) z amerykańskiego Biura Demokracji, Praw Człowieka i Pracy (DRL). +Fundusze te wspierają nasze długofalowe cele, aby uczynić Delta Chat bardziej użytecznym i kompatybilnym z szeroką gamą serwerów e-mail na całym świecie, a także bardziej odpornym i bezpiecznym w miejscach często dotkniętych cenzurą i wyłączeniami Internetu.

        +
      • +
      • +

        Od 2023 roku zostaliśmy zaakceptowani w programie Next Generation Internet (NGI) Entrust dla naszych propozycji „Prywatnych zdecentralizowanych aplikacji”. Dokładna kwota do ustalenia (około 100 tys. EUR). Finansowanie to wspiera dalszy rozwój „aplikacji udostępnianych na czacie” webxdc.

        +
      • +
      • +

        Czasami otrzymujemy jednorazowe darowizny od osób prywatnych. Na przykład w 2021 roku pewna hojna osoba przekazała nam 4K EUR w formie przelewu bankowego tytułem “kontynuujcie dobry rozwój!”. 💜 Takie pieniądze przeznaczamy na finansowanie spotkań rozwojowych lub na doraźne wydatki, których nie da się łatwo przewidzieć lub zrefundować z publicznych dotacji. Otrzymywanie większej ilości darowizn pomaga nam również stać się bardziej niezależnymi i długoterminowo rentownymi jako społeczność współpracowników.

        +
      • +
      + + + +
        +
      • Wreszcie, ale zdecydowanie nie najmniej ważne, kilku ekspertów i entuzjastów pro-bono wniosło wkład i przyczyniło się do rozwoju Delta Chat bez otrzymywania pieniędzy lub tylko niewielkich kwot. Bez nich Delta Chat nie byłby tam, gdzie jest dzisiaj, nawet w pobliżu.
      • +
      + +

      Wspomniane powyżej finansowanie pieniężne jest w większości organizowane przez merlinux GmbH we Freiburgu (Niemcy) i jest dystrybuowane do kilkunastu podmiotów na całym świecie.

      + +

      Zapoznaj się z kanałami wpłat dla Delta Chat, aby uzyskać informacje o możliwościach wpłat zarówno pieniężnych, jak i innych.

      + + + + + \ No newline at end of file diff --git a/assets/help/pt/help.html b/src/main/assets/help/pt/help.html similarity index 78% rename from assets/help/pt/help.html rename to src/main/assets/help/pt/help.html index f69911dcf..f7d33226b 100644 --- a/assets/help/pt/help.html +++ b/src/main/assets/help/pt/help.html @@ -4,17 +4,14 @@
    29. Grupos @@ -28,6 +25,15 @@
    30. What happens if I turn on “Delete old messages from device”?
    31. +
    32. Instant message delivery and Push Notifications + +
    33. Encryption and Security
    34. Multi-cliente @@ -59,9 +66,6 @@
    35. Troubleshooting
    36. Manual Transfer
    37. Existe algum plano para a introdução de um cliente Web para Delta Chat?
    38. -
    39. Para que serve o ajuste “Enviar cópia para si mesmo”?
    40. -
    41. Por que eu posso escolher assistir à pasta “Enviado”?
    42. -
    43. Por que eu posso escolher não observar a pasta DeltaChat?
    44. webxdc apps @@ -78,17 +82,24 @@
    45. How can I share my location with my chat partners?
    46. What does the experimental database encryption actually protect?
    47. Why can I choose to only watch the DeltaChat folder?
    48. -
    49. How can I change my account to a different e-mail address?
    50. +
    51. How can I use a different e-mail address with my profile?
    52. Diverso
    53. @@ -104,8 +115,14 @@ -

      O Delta Chat é um novo aplicativo de bate-papo que envia mensagens por e-mail, criptografadas se possível, com o Autocrypt. -** Você não precisa se inscrever em nenhum lugar, basta usar sua conta de e-mail existente no Delta Chat. **

      +

      Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

      + +

      Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

      @@ -117,10 +134,15 @@ -

      Com Delta Chat, você pode escrever para todos os emails existentes - -mesmo que o destinatário não esteja usando o aplicativo do Delta Chat. -Diferente do que acontece com os outros mensageiros, não é preciso -que o destinatário instale o mesmo aplicativo que você.

      +

      To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

      + +

      If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

      @@ -131,42 +153,25 @@ que o destinatário instale o mesmo aplicativo que você.

        -
      • Independent of any company or services. You own your data.
      • -
      • Your data is not saved on a central server unless all users are using -the same e-mail servers
      • -
      • You do not distribute your address book to anyone.
      • -
      • Fast by the use of Push-IMAP.
      • -
      • Largest userbase - recipients not using Delta Chat can be reached as well.
      • -
      • No Spam - only messages of known users are shown by default.
      • -
      • End-to-end encryption via Autocrypt.
      • -
      • Copyleft and Standards based libre software.
      • -
      • Flexible identity with built-in support for multiple accounts
      • -
      - -

      - - - Quais mensagens aparecem no Delta Chat? - - -

      - -

      By default, Delta Chat shows all e-mails.

      - -

      At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

      - -
        -
      • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
      • -
      • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
      • -
      • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
      • +
      • +

        Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

        +
      • +
      • +

        Pervasive multi-profile and multi-device support on all platforms.

        +
      • +
      • +

        Interactive web apps in chats for gaming and collaboration

        +
      • +
      • +

        Audited end-to-end encryption +safe against network and server attacks.

        +
      • +
      • +

        Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

        +

      @@ -208,18 +213,25 @@ receive messages from this person, consider blocking them.

      - How can I add or switch between multiple accounts? + What are profiles? How can I switch between them?

      -

      You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

      -
        -
      • on the menu button and then ‘Switch Account’ (Android and desktop)
      • -
      • or the profile icon and then ‘Add Account’ (iOS)
      • -
      +

      A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

      -

      You may also wish to learn how to add accounts to multiple devices.

      +

      On first installation of Delta Chat a first profile is created.

      + +

      Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

      + +

      You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

      + +

      You may also wish to learn how to use the same profile on multiple devices.

      @@ -245,87 +257,26 @@ receive messages from this person, consider blocking them. -

      +

      - O Delta Chat suporta emails HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

      -

      Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

      +

      Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

      -

      +

      - Por que preciso entrar com a senha do meu email no Delta Chat? Isso é seguro? - - -

      - -

      Como acontece em qualquer outro programa de comunicação que usa email, como Thunderbird, K9-Mail ou Outlook, sua senha é necessária para poder receber e enviar emails. Obviamente, sua senha fica guardada no seu dispositivo. E ela só é transmitida para o seu provedor de email (no momento que você faz login), que é quem já tem inevitavelmente acesso aos seus emails.

      - -

      Se você usa um provedor de email com suporte para OAuth2 como gmail.com ou yandex.ru, não é preciso guardar sua senha no dispositivo. Neste caso, somente um token de acesso é usado.

      - -

      Como o Delta Chat é um programa de Código Aberto, você pode revisar seu Código Fonte se você quiser verificar que as suas credenciais estão sendo manuseadas de forma segura. Ficaremos felizes de receber comentários que contribuam para fazer o aplicativo mais seguro para todos os nossos usuários.

      - -

      - - - Quais permissões o Delta Chat precisa? - - -

      - -

      Dependendo do sistema operacional usado, é possível que você precise autorizar algumas permissões. O seguinte é o que o Delta Chat faz com essas permissões:

      - -
        -
      • Câmera (pode ser rejeitada) -
          -
        • para enviar fotos
        • -
        -
      • -
      • Contatos (pode ser rejeitada) -
          -
        • ler seus contatos: para encontrar pessoas para conversar
        • -
        -
      • -
      • Localização (pode ser rejeitada) -
          -
        • acesso à localização aproximada (das fontes de localização de rede): para usar a funcionalidade de streaming de localização
        • -
        • acesso à localização precisa (GPS e fontes de localização de rede): para usar a funcionalidade de streaming de localização
        • -
        -
      • -
      • Microfone (pode ser rejeitada) -
          -
        • gravar áudio: para mensagens de áudio
        • -
        -
      • -
      • Armazenamento (pode ser rejeitada) -
          -
        • modificar ou apagar conteúdo do seu cartão SD: para baixar os anexos das mensagens
        • -
        • ler o conteúdo do seu cartão SD: para compartilhar arquivos com seus contatos
        • -
        -
      • -
      • Outras capacidades do aplicativo -
          -
        • mudar as configurações de áudio: para que você possa escolher o som da chamada e o volume das notificações e das mensagens de áudio
        • -
        • rodar ao iniciar: para que você não precise ligar o Delta Chat manualmente
        • -
        • controlar a vibração: para as notificações
        • -
        • ver as conexões de rede: para se conectar ao seu provedor de email
        • -
        • evitar que o telefone durma: para que você possa copiar facilmente o código de segurança durante a Mensagem de Configuração do Autocrypt
        • -
        • ter acesso total à rede: para se conectar ao seu provedor de email
        • -
        • ver as conexões Wi-Fi: para se conectar ao seu provedor de email
        • -
        • perguntar sobre ignorar as otimizações de bateria: para usuários que querem receber mensagens a todo momento
        • -
        -
      • -
      - -

      - - - What means Pinning, Muting, Archiving? + What do Pinning, Muting and Archiving mean?

      @@ -380,22 +331,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

      +

      - How can I delete my account? + How do disappearing messages work?

      -

      As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

      +

      You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

      -

      If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

      + +

      Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

      + +

      Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

      @@ -526,6 +495,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

      + + + Instant message delivery and Push Notifications + + +

      + +

      + + + What are Push Notifications? How can I get instant message delivery? + + +

      + +

      Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

      + +

      Push Notifications work with all chatmail servers on

      + +
        +
      • +

        iOS devices, by integrating with Apple Push services.

        +
      • +
      • +

        Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

        +
      • +
      + +

      As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

      + +

      + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Are Push notifications enabled / needed on Android devices? + + +

      + +

      If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

      + +

      In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

      + +
        +
      • +

        Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

        +
      • +
      • +

        Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

        +
      • +
      • +

        Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

        +
      • +
      + +

      Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

      + +

      + + + How private are Delta Chat Push Notifications? + + +

      + +

      Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

      + +

      Here is how Delta Chat apps perform Push Notification delivery:

      + +
        +
      • +

        A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

        +
      • +
      • +

        When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

        +
      • +
      • +

        The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

        +
      • +
      • +

        The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

        +
      • +
      + +

      As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

      + +

      The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

      + +

      Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

      + +

      + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

      + +

      Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

      + +

      Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

      +

      @@ -548,7 +681,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

      -

      Secure-Join protocols +

      Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -579,49 +712,32 @@ guarantee end-to-end encrypted messages.

      -

      Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

      +

      If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

      -

      Inviter side:

      +

      If you are together in person, +you can show a QR code to your chat partner.

      • -

        Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

        +

        For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

      • -

        Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

        +

        For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

      -

      Joiner side:

      +

      Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

      -
        -
      • -

        Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

        -
      • -
      • -

        Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

        -
      • -
      • -

        Tap “OK”

        -
      • -
      - -

      Both Inviter and Joiner:

      - -

      Wait while Secure-Join network messages are exchanged between both devices.

      +

      Now wait while Secure-Join network messages are exchanged between both devices.

      • @@ -675,7 +791,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

        For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

        @@ -703,7 +819,7 @@ even if the contact is a member there.

        Your contact is using Delta Chat on a second device (phone or laptop)

        If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

        @@ -711,8 +827,8 @@ and guaranteed encryption is established with both devices of your contact.

        Your contact reinstalled Delta Chat using their old account login

        If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

        @@ -733,7 +849,7 @@ guaranteed end-to-end encryption will be automatically re-established.

        Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

        In any case, you can not do much else than accept the warning. @@ -899,12 +1015,12 @@ deliver messages to recipient’s devices.

        Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

        @@ -963,7 +1079,7 @@ and their non-Autocrypt e-mail app.

        If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -981,10 +1097,10 @@ even if the direct chat between you two has a

        The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

        +and turning on disappearing messages.

        -

        Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

        Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

        If you don’t need a longer-lived copy of your messages on the server, @@ -1065,9 +1181,10 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

        A causa mais provável é que sua chave está criptografada e/ou usa uma senha. Tais chaves não são suportadas pelo Delta Chat. Você poderia remover a -criptografia por senha e a senha e tentar a importação novamente. Se você quiser -para manter sua senha, você terá que criar um e-mail para uso -com o Delta Chat de tal forma que a chave do Delta Chat está vinculada a este e-mail.

        +criptografia por senha e a senha e tentar a importação novamente.

        + +

        Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

        O Delta Chat apoia formatos comuns de chave privada OpenPGP, porém, é improvável que chaves privadas de todas as fontes sejam totalmente suportadas. Isso @@ -1082,6 +1199,67 @@ ele + + + Was Delta Chat independently audited for security vulnerabilities? + + + + +

        The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

        + +
          +
        • +

          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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

          +
        • +
        • +

          2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

          +
        • +
        • +

          2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

          +
        • +
        • +

          2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

          +
        • +
        • +

          2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

          +
        • +
        +

        @@ -1098,7 +1276,7 @@ Para outros programas, você deveria achar uma solução online.

        -

        Sim. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

        +

        Sim. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

        • @@ -1136,10 +1314,19 @@ One device is not needed for the other to work.

        • Double-check both devices are in the same Wi-Fi or network

        • +
        • +

          On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

          +
        • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

          +
        • +
        • +

          Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

        • Ensure there is enough storage on the destination device

          @@ -1151,7 +1338,7 @@ Do not exit Delta Chat.
        • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

          +You can use multiple profiles per device, just add another profile

        • If you still have problems or if you cannot scan a QR code @@ -1174,8 +1361,8 @@ try the manual transfer described below

          screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
        • -
        • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
        • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
          • If you use iOS: and you encounter difficulties, maybe @@ -1206,56 +1393,6 @@ ou o AppImage para Linux. Você pode encontrá-los em get.delta.chat.
          -

          - - - Para que serve o ajuste “Enviar cópia para si mesmo”? - - -

          - -

          O envio de uma cópia de suas mensagens para você mesmo garante que você receba suas próprias mensagens -mensagens em todos os dispositivos. Se você tem vários dispositivos e não activar isso, você -ver apenas as mensagens de outras pessoas, e as mensagens que você envia do -dispositivo atual.

          - -

          A cópia é enviada para a caixa de entrada e depois movida para a pasta DeltaChat; não é -colocado na pasta “Enviado”. Delta Chat nunca carrega qualquer coisa para a pasta “Enviados -porque isso significaria carregar uma mensagem duas vezes (uma vez através do SMTP, -e uma vez através do IMAP para a pasta Enviada).

          - -

          A configuração padrão para copy-to-self é “não”.

          - -

          - - - Por que eu posso escolher assistir à pasta “Enviado”? - - -

          - -

          A única razão pela qual se quer ver a pasta Enviada é se você estiver usando outra -programa de correio (como Thunderbird) ao lado de seu aplicativo Delta Chat, e quer seu MUA -para participar numa conversa de chat.

          - -

          No entanto, recomendamos o uso do Delta Chat cliente Desktop; você pode baixá-lo -no get.delta.chat. A opção de observar o “Enviado -pasta pode ir embora no futuro. Ela foi introduzida num momento em que havia -nenhum cliente Delta Chat no desktop disponível em todas as plataformas.

          - -

          - - - Por que eu posso escolher não observar a pasta DeltaChat? - - -

          - -

          Algumas pessoas usam o Delta Chat como um cliente regular de e-mail, e querem usar a Caixa de Entrada -pasta para seus correios, em vez da pasta DeltaChat. Se você desativar o “Observar -pasta DeltaChat”, você também deve desativar “mover mensagens de conversa para DeltaChat”. -Caso contrário, apagar mensagens ou configurações de vários dispositivos pode não funcionar corretamente.

          -

          @@ -1402,11 +1539,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

        • the chat.
        • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
        • -
        • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
        • +
        • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
        • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
        • @@ -1457,18 +1591,18 @@ seria feito pelo aplicativo Delta Chat.

          In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

          -

          +

          - How can I change my account to a different e-mail address? + How can I use a different e-mail address with my profile?

          1. -

            Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

            Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

          2. @@ -1499,6 +1633,58 @@ it.

            +

            + + + Quais permissões o Delta Chat precisa? + + +

            + +

            Dependendo do sistema operacional usado, é possível que você precise autorizar algumas permissões. O seguinte é o que o Delta Chat faz com essas permissões:

            + +
              +
            • Camera (can be disallowed) +
                +
              • take pictures and videos: for sending Photos
              • +
              +
            • +
            • Contacts (can be disallowed) +
                +
              • read your contacts: to discover contacts to chat with
              • +
              +
            • +
            • Location (can be disallowed) +
                +
              • access approximate location (network location sources): for the location streaming feature
              • +
              • access precise location (GPS and network location sources): for the location streaming feature
              • +
              +
            • +
            • Microphone (can be disallowed) +
                +
              • record audio: for audio messages
              • +
              +
            • +
            • Storage (can be disallowed) +
                +
              • modify or delete the contents of your SD card: to download message attachments
              • +
              • read the contents of your SD card: to share files with your contacts
              • +
              +
            • +
            • Other app capabilities +
                +
              • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
              • +
              • run at startup: so you don’t have to start Delta Chat manually
              • +
              • control vibration: for notifications
              • +
              • view network connections: to connect to your E-Mail provider
              • +
              • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
              • +
              • have full network access: to connect to your E-Mail provider
              • +
              • view Wi-Fi connections: to connect to your E-Mail provider
              • +
              • ask to ignore battery optimisations: for achieving “instant message delivery”
              • +
              +
            • +
            +

            @@ -1528,28 +1714,130 @@ blogpost.
          3. You can find an installation guide on our website.
        -

        +

        - Se o Delta Chat usa o E-Mail, ela é realmente um Instant Messenger? + Por que preciso entrar com a senha do meu email no Delta Chat? Isso é seguro?

        +

        Como acontece em qualquer outro programa de comunicação que usa email, como Thunderbird, K9-Mail ou Outlook, sua senha é necessária para poder receber e enviar emails. Obviamente, sua senha fica guardada no seu dispositivo. E ela só é transmitida para o seu provedor de email (no momento que você faz login), que é quem já tem inevitavelmente acesso aos seus emails.

        + +

        Se você usa um provedor de email com suporte para OAuth2 como gmail.com ou yandex.ru, não é preciso guardar sua senha no dispositivo. Neste caso, somente um token de acesso é usado.

        + +

        Como o Delta Chat é um programa de Código Aberto, você pode revisar seu Código Fonte se você quiser verificar que as suas credenciais estão sendo manuseadas de forma segura. Ficaremos felizes de receber comentários que contribuam para fazer o aplicativo mais seguro para todos os nossos usuários.

        + +

        + + + Quais mensagens aparecem no Delta Chat? + + +

        + +

        By default, Delta Chat shows all e-mails.

        + +

        At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

        +
          -
        • Sending and receiving messages takes a few seconds, typically. Sometimes -there are cases where it takes longer but that is arguably true as well for -any other messenger.
        • -
        • Instant chatting works fast if both parties are actively using the app. It’s -sometimes slower if the app is running in the background.
        • -
        • Receiving messages then can take minutes because both Android and iOS often -stop Delta Chat from running in the background, and only wake it up -occasionally. This artificial delay is usually worse on iOS than on Android.
        • -
        • However, Android and iOS kill apps running in the background is a -problem for many legitimate apps. For more information, see -dontkillmyapp.com.
        • +
        • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
        • +
        • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
        • +
        • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
        +

        + + + O Delta Chat suporta emails HTML? + + +

        + +

        Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

        + +

        + + + Can I set the E-Mail Subject with Delta Chat? + + +

        + +

        Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

        + +

        So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

        + +

        + + + Para que serve o ajuste “Enviar cópia para si mesmo”? + + +

        + +

        O envio de uma cópia de suas mensagens para você mesmo garante que você receba suas próprias mensagens +mensagens em todos os dispositivos. Se você tem vários dispositivos e não activar isso, você +ver apenas as mensagens de outras pessoas, e as mensagens que você envia do +dispositivo atual.

        + +

        A cópia é enviada para a caixa de entrada e depois movida para a pasta DeltaChat; não é +colocado na pasta “Enviado”. Delta Chat nunca carrega qualquer coisa para a pasta “Enviados +porque isso significaria carregar uma mensagem duas vezes (uma vez através do SMTP, +e uma vez através do IMAP para a pasta Enviada).

        + +

        The default setting for “Send Copy to Self” is “on”.

        + +

        + + + Por que eu posso escolher assistir à pasta “Enviado”? + + +

        + +

        A única razão pela qual se quer ver a pasta Enviada é se você estiver usando outra +programa de correio (como Thunderbird) ao lado de seu aplicativo Delta Chat, e quer seu MUA +para participar numa conversa de chat.

        + +

        No entanto, recomendamos o uso do Delta Chat cliente Desktop; você pode baixá-lo +no get.delta.chat. A opção de observar o “Enviado +pasta pode ir embora no futuro. Ela foi introduzida num momento em que havia +nenhum cliente Delta Chat no desktop disponível em todas as plataformas.

        + +

        + + + Por que eu posso escolher não observar a pasta DeltaChat? + + +

        + +

        Algumas pessoas usam o Delta Chat como um cliente regular de e-mail, e querem usar a Caixa de Entrada +pasta para seus correios, em vez da pasta DeltaChat. Se você desativar o “Observar +pasta DeltaChat”, você também deve desativar “mover mensagens de conversa para DeltaChat”. +Caso contrário, apagar mensagens ou configurações de vários dispositivos pode não funcionar corretamente.

        +

        @@ -1571,6 +1859,23 @@ uses.

      • Autocrypt-enabled e-mail app.
      +

      + + + How can I delete my account? + + +

      + +

      As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

      + +

      If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      @@ -1583,59 +1888,6 @@ uses.
    54. Veja As normas usadas no Delta Chat.
    55. -

      - - - Was Delta Chat independently audited for security vulnerabilities? - - -

      - -

      The Delta Chat project underwent four independent security audits in the last years:

      - -
        -
      • -

        In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

        -
      • -
      • -

        In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

        -
      • -
      • -

        Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

        -
      • -
      • -

        Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

        -
      • -
      -

      @@ -1676,7 +1928,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

    56. In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

      +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

    57. From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/qr-icon.png b/src/main/assets/help/qr-icon.png similarity index 100% rename from assets/help/qr-icon.png rename to src/main/assets/help/qr-icon.png diff --git a/src/main/assets/help/ru/help.html b/src/main/assets/help/ru/help.html new file mode 100644 index 000000000..1f8812bb1 --- /dev/null +++ b/src/main/assets/help/ru/help.html @@ -0,0 +1,1956 @@ + +

      + + + +

      + + + Что такое Delta Chat? + + +

      + +

      Delta Chat — надежное, децентрализованное и безопасное приложение для обмена сообщениями. +доступен для мобильных и ПК.

      + +

      Delta Chat похож на WhatsApp или Telegram, но вы также можете использовать его как приложение электронной почты. +Вы можете анонимно зарегистрироваться на различных совместимых с chatmail серверах +которые представляют собой минимальные серверы эл. почты, оптимизированные для быстрых и безопасных операций. +Или вы можете использовать классические почтовые серверы и существующую учетную запись электронной почты. +в этом случае Delta Chat действует как приложение электронной почты.

      + +

      + +

      + + + Как мне найти людей для общения? + + +

      + +

      Чтобы безопасно настроить контакт с другими отсканируйте QR-код приглашения +или поделитесь ссылкой для приглашения. +Это необходимо при использовании профиля чата на основе почты (по умолчанию). +потому что серверы чата отвергают незашифрованные исходящие сообщения.

      + +

      Если вы создаете профиль чата с классическим адресом эл.почты +вы можете вручную создать контакт, если знаете его адрес эл.почты +а потом напиши им сообщение +даже если получатель не использует Delta Chat.

      + +

      + + + Каковы преимущества Delta Chat по сравнению с другими мессенджерами? + + +

      + + + +

      + + + Что если я ожидаю сообщение от кого-то кому я ранее не писал? + + +

      + +
        +
      • Если сообщение приходит от неизвестного контакта, оно отображается как запрос. Вам +необходимо принять запрос, чтобы ответить.
      • +
      • Вы также можете “удалить” его, если не хотите общаться с ним в данный момент. Это +не удаляет сообщение на сервере, а только на вашем устройстве. Таким образом, вы можете +по-прежнему работать с сообщением в другом почтовом приложении.
      • +
      • Если вы удалите запрос, будущие сообщения от этого контакта по-прежнему будут отображаться +как запрос сообщения, так что вы можете передумать. Если вы действительно не хотите +получать сообщения от этого человека, подумайте о том, чтобы заблокировать его.
      • +
      + +

      + + + Поддерживает ли Delta Chat вложения фото, видео или другие? + + +

      + +
        +
      • +

        Да. Помимо обычного текста, все вложения электронной почты отображаются в виде отдельных сообщений. В исходящие сообщения вложения встраиваются по мере необходимости автоматически.

        +
      • +
      • +

        Для лучшей производительности изображения по умолчанию оптимизируются и отправляются в меньшем размере, но вы можете отправить его в виде “файла”, чтобы сохранить оригинал.

        +
      • +
      + +

      + + + Что такое профили? Как я могу переключатся между ними? + + +

      + +

      Профиль это имя, изображения и некоторая другая информация для шифрования сообщений. +Профиль живёт только на вашем устройстве(ах) +и пользователи chatmail и серверы классической почты передают сообщения.

      + +

      При первой установке Delta Chat создаётся первый профиль.

      + +

      Позже вы можете нажать на изображение своего профиля в левом верхнем углу, чтобы Добавить Профили +или Переключить Профили.

      + +

      Возможно, вы захотите использовать отдельные профили для политической, семейной или профессиональной деятельности +или например, для специального “спам-профиля”, с помощью которого вы регистрируетесь на веб-сайтах и ​​платформах +которые рано или поздно приводят к появлению нежелательных сообщений (“спама”).

      + +

      Вы также можете изучить как использовать один и тот же профиль на нескольких устройствах.

      + +

      + + + Кто видит моё изображение в профиле? + + +

      + +
        +
      • +

        Вы можете добавить изображение профиля в настройках. Если вы пишете своим + контактам или добавляете их с помощью QR-кода, они автоматически видят его как + изображение вашего профиля.

        +
      • +
      • +

        Контакты, которые не используют Delta Chat не видят ваше изображение профиля +(однако, конечно, они могут установить Delta Chat :)

        +
      • +
      • +

        Из соображений конфиденциальности никто не увидит ваше изображение + в профиле, пока вы не напишете им сообщение.

        +
      • +
      • +

        Изображение вашего профиля отправляется не с каждым сообщением, но достаточно +регулярно, чтобы ваши контакты снова его получили, даже если они добавят + новое устройство.

        +
      • +
      + +

      + + + Могу ли я установить текст подписи/статус/девиз в Delta Chat? + + +

      + +

      Да, +вы можете сделать это в разделе “Настройки > Профиль > Текст подписи”. +Ваши собеседники, использующие Delta Chat, увидят его +когда будут просматривать ваши контактные данные. +Для всех остальных, +Он будет отображаться в виде подписи +под текстом всех ваших сообщений.

      + +

      + + + Что означают Прикрепить, Заглушить и Архивировать? + + +

      + +

      Используйте эти инструменты чтобы организовать ваши чаты:

      + +
        +
      • +

        Закрепленные чаты всегда находятся наверху списка чатов. Вы можете использовать их чтобы быстро получать доступ к вашим любимым чатам или чтобы не забыть о важных вещах.

        +
      • +
      • +

        Заглушить чаты, если не хотите получать звуки и уведомления от них. Заглушённые чаты остаются на месте, и вы также можете закрепить заглушённый чат.

        +
      • +
      • +

        Архивировать чаты, если не хотите больше видеть их в списке чатов. +Заархивированные чаты остаются доступными в списке чатов или через поиск.

        +
      • +
      • +

        Когда в архивированный чат приходит новое сообщение, если он не отключен, он выходит из архива и возвращается в ваш список чатов. +Заглушённые чаты остаются в архиве до тех пор, пока вы не разархивируете их вручную.

        +
      • +
      + +

      Чтобы заархивировать или закрепить чат, нажмите на него долгим нажатием (Android), воспользуйтесь меню чата (Android/Desktop) или проведите пальцем влево (iOS); +чтобы заглушить чат, воспользуйтесь меню чата (Android/Desktop) или профиль чата (iOS).

      + +

      + + + Что означает зеленая точка? + + +

      + +
        +
      • Начиная с версии Delta Chat 1.34 вы можете иногда видеть “зеленую точку” рядом с аватаром +контакта. Это означает, что они были “недавно замечены”.
      • +
      • Подробнее: это значит, что за последние 10 минут Delta Chat видел их: +
          +
        • либо потому, что они написали вам прямое сообщение,
        • +
        • потому что они написали что-то в группу, в которой вы обое состоите,
        • +
        • потому что они отправили вам подтверждения о прочтении сообщения, которое вы написали,
        • +
        • или потому, что они отправили данные в ваше приложение Delta Chat, используя +webxdc app.
        • +
        +
      • +
      • Таким образом, это не онлайн-статус в реальном времени - и если кто-то не отвечает +сразу, даже если кажется, что он в сети, не волнуйтесь и дайте ему немного +пространства ;-)
      • +
      • С другой стороны, другие не всегда будут “видеть, что вы в сети”. Если вы +отключены подтверждения о прочтении, они не увидят зеленую точку, пока вы не +пока вы не напишете им сообщение или не напишете в группу, в которой они тоже находятся.
      • +
      + +

      + + + Как работают исчезающие сообщения? + + +

      + +

      Вы можете включить “исчезающие сообщения” +в настройках чата, +в правом верхнем углу окна чата, +выбрав временной интервал +от 1 минуты до 5 недель.

      + +

      Пока настройка не будет снова отключена, +приложение Delta Chat каждого участника чата позаботится +об удалении сообщений +по истечении выбранного периода времени. +Отсчет времени начинается +когда получатель впервые видит сообщение в Delta Chat. +Сообщения удаляются +как в каждой учетной записи электронной почты на сервере, +и в самом приложении.

      + +

      Обратите внимание, что на исчезающие сообщения можно полагаться +только до тех пор, пока вы доверяете своим собеседникам; +злонамеренные собеседники могут делать фотографии, +или иным образом сохранить, скопировать или переслать сообщения перед удалением.

      + +

      Кроме того, +если один из партнеров по чату удалит Delta Chat, +сообщения не будут удалены из его почтового ящика. +Скорее всего, их также нельзя будет расшифровать. +(при условии, что они были зашифрованы изначально).

      + +

      + + + Группы + + +

      + +

      + + + Создание группы + + +

      + +
        +
      • Выберите Новый чат, а затем Новая группа из меню в правом верхнем углу или нажмите соответствующую кнопку на Android/iOS.
      • +
      • На следующем экране выберите участников и придумайте название группы. Вы также можете выбрать изображение группы.
      • +
      • Как только вы напишете первое сообщение в группе, все участники будут проинформированы о новой группе и смогут ответить (до тех пор, пока вы не напишете сообщение в группе, группа будет невидима для участников).
      • +
      + +

      + + + Добавление участников в группу + + +

      + +
        +
      • Каждый участник группы имеет те же права, что и любой другой. По этой причине каждый может удалить любого участника или добавить нового.
      • +
      • Чтобы добавить или удалить участников, нажмите на название группы в чате.
      • +
      + +

      + + + Я случайно себя удалил. + + +

      + +
        +
      • Поскольку вы больше не являетесь членом группы, вы не можете добавлять себя снова. +Тем не менее, проблемы нет, просто попросите любого другого члена группы в обычном чате повторно добавить вас.
      • +
      + +

      + + + Я больше не хочу получать сообщения группы. + + +

      + +
        +
      • +

        Либо удалите себя из списка участников, либо удалите весь чат. +Если позже вы снова захотите присоединиться к группе, попросите другого члена группы добавить вас.

        +
      • +
      • +

        Или, в качестве альтернативы, вы также можете отключить уведомления для группы - это означает, что вы будете получать все сообщения и сможете их писать, но больше не будете получать уведомления о новых сообщениях.

        +
      • +
      + +

      + + + Что означают галочки рядом с исходящими сообщениями? + + +

      + +
        +
      • Одна галочка означает, что сообщение было успешно отправлено вашему провайдеру.
      • +
      • Две галочки означают, что хотя бы одно устройство получателя +сообщило о получении сообщения.
      • +
      • Получатели могут отключить функцию чтения сообщений, +поэтому даже если вы видите только одну галочку, сообщение может быть прочитано.
      • +
      • И наоборот, две галочки не означают, + что человек прочитал или понял сообщение ;)
      • +
      + +

      + + + Что произойдет, если я включу функцию “Удалять старые сообщения с сервера”? + + +

      + +
        +
      • +

        По умолчанию Delta Chat хранит все сообщения локально на вашем устройстве. +Если вы, например, хотите сэкономить место у своего почтового провайдера, +вы можете настроить Delta Chat +автоматически удалять старые, уже полученные сообщения на сервере. +Они по-прежнему остаются на вашем устройстве, пока вы не удалите их там же.

        +
      • +
      • +

        Чтобы включить эту функцию, перейдите в раздел Удаление старых сообщений → Удаление сообщений с сервера +в настройках “Чаты и медиа”. +Вы можете установить срок между “Сразу” и “Через 1 год”. +По истечении этого срока все сообщения, полученные Delta Chat, будут удалены с сервера.

        +
      • +
      • +

        Обратите внимание, что если вы используете Delta Chat на нескольких устройствах, +необходимо оставлять сообщения на сервере с достаточным временным интервалом +чтобы другое устройство(а) тоже смогло их загрузить.

        +
      • +
      + +

      + + + Что произойдет, если я включу функцию “Удалять старые сообщения с устройства”? + + +

      + +
        +
      • Если вы хотите сэкономить место на устройстве, +можно выбрать функцию автоматического удаления старых сообщений.
      • +
      • Чтобы включить эту функцию, перейдите к пункту “Удалять старые сообщения с устройства” в настройках “Чаты и медиа”. + Вы можете установить временной интервал от “через час” до “через год”; +таким образом, все сообщения будут удаляться с устройства, +как только они станут старше этого срока.
      • +
      + +

      + + + Мгновенная доставка сообщений и Push-уведомления + + +

      + +

      + + + Что такое Push-уведомления? Как я могу получить мгновенную доставку сообщений? + + +

      + +

      Push-уведомления отправляются “Push-сервисами” Apple и Google на устройство пользователя чтобы неактивное приложение Delta Chat могло получать сообщения в фоновом режиме +и при необходимости показывать уведомления на телефоне пользователя.

      + +

      Push-уведомления работают со всеми chatmail серверами на

      + +
        +
      • +

        iOS устройствах, путем интеграции с сервисами Apple Push.

        +
      • +
      • +

        Android устройствах, путем интеграции с сервисом Google FCM Push, +в том числе на устройствах, использующих microG +вместо проприетарного кода Google на телефоне.

        +
      • +
      + +

      По состоянию на май 2024 г. классические почтовые серверы не поддерживают push-уведомления. +для пользователей Delta Chat.

      + +

      + + + Включены ли Push-уведомления на устройствах iOS? Есть ли альтернатива? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Включены / нужны ли Push-уведомления на устройствах Android? + + +

      + +

      Если доступна “Push-служба”, Delta Chat включает Push-уведомления. +обеспечивая мгновенную доставку сообщений всем пользователям чата. +Если вы используете классический поставщик электронной почты вместо сервера chatmail, +Push-уведомления недоступны.

      + +

      В Delta Chat “Уведомления” опцию “Мгновенной доставки” +вы можете изменить в следующих настройках, влияющие на все профили чата:

      + +
        +
      • +

        Использовать службу Push: значение по умолчанию при использовании профилей chatmail и если +на телефоне доступна служба Push. +Если у вас есть как chatmail, так и классический профиль электронной почты, +тогда Push-уведомление будет работать только +для входящих сообщений в профилях chatmail.

        +
      • +
      • +

        Использовать Фоновое Соединение: если вы не используете службу Push, +вы можете отключить “оптимизацию заряда батареи” для Delta Chat, +позволяя ему получать сообщения в фоновом режиме. +Однако могут быть задержки от минут до часов. +Некоторые производители Android даже полностью ограничивают приложения + (смотрите dontkillmyapp.com) +и Delta Chat может не отображать входящие сообщения. +пока вы снова не откроете приложение вручную.

        +
      • +
      • +

        Принудительное фоновое подключение: это запасной вариант +если предыдущие варианты недоступны или не удается добиться “мгновенной доставки”. +Включение этого параметра приводит к постоянному уведомлению на вашем телефоне +который иногда может быть “минимизирован” на последних телефонах Android.

        +
      • +
      + +

      Оба варианта “Фонового подключения” являются энергоэффективными и +безопасно попробовать, если вы заметили, что сообщения приходят только с большой задержкой.

      + +

      + + + Насколько конфиденциальны Push-уведомления Delta Chat? + + +

      + +

      Поддержка Push-уведомлений Delta Chat позволяет избежать утечки личной информации. +Они не передают эл. почту, IP-адрес или содержимое сообщения (даже не зашифрованное) +в любую систему, участвующую в доставке Push-уведомлений.

      + +

      Вот как приложения Delta Chat выполняют доставку Push-уведомлений:

      + +
        +
      • +

        Приложение Delta Chat локально получает “токен устройства” и сохраняет его +на сервере chatmail server.

        +
      • +
      • +

        Когда chatmail сервер получает эл. почту для пользователя Delta Chat + он пересылает «токен устройства» центральному прокси-серверу уведомлений Delta Chat.

        +
      • +
      • +

        Центральный прокси-сервер уведомлений Delta Chat пересылает +“токен устройства” для соответствующей службы Push (Apple, Google и т. д.), +даже не зная IP-адреса или адреса эл.почты пользователей Delta Chat.

        +
      • +
      • +

        Центральный Push-сервис (Apple, Google и т. д.) +пробуждает приложение Delta Chat на вашем устройстве +для проверки новых сообщений в фоновом режиме. +Он не знает о chatmail или адреса эл.почты устройства, на котором просыпается. +Центральные службы Apple/Google Push никогда не видят адрес эл.почты (отправителя или получателя). +а также никогда не видят содержимого сообщения (даже в незашифрованном виде).

        +
      • +
      + +

      По состоянию на май 2024 года chatmail серверы знают о «токенах устройств» +но мы планируем зашифровать эту информацию для прокси-сервера уведомлений +так что сервер chatmail никогда не узнает токен устройства.

      + +

      Центральный прокси-сервер уведомлений Delta Chat небольшой и полностью реализован на Rust +и забывает о токенах устройств, как только Apple/Google/и т. д. их обработает, +обычно в течение миллисекунд.

      + +

      В результате такого общего подхода к обеспечению конфиденциальности даже захват почтового сервера chatmail, +или полный захват центрального прокси-сервера уведомлений Delta Chat +не раскроет личную информацию, которой нет в службах Push.

      + +

      + + + Почему Delta Chat интегрируется с централизованными проприетарными Push-сервисами Apple/Google? + + +

      + +

      Delta Chat бесплатный децентрализованный мессенджер с открытым исходным кодом и с свободным выбором сервера, +но мы хотим, чтобы пользователи гарантированно получали “мгновенную доставку” сообщений, +такую же, что и в приложениях WhatsApp, Signal или Telegram, +не задавая вопросов, которые больше подходят опытным пользователям или разработчикам.

      + +

      Обратите внимание, что в Delta Chat есть небольшая и сохраняющая конфиденциальность система Push-уведомлений +которая обеспечивает “мгновенную доставку” сообщений для всех серверов chatmail +включая потенциальный ваш вы можете настроить для себя без нашего разрешения. +Добро пожаловать в силу совместимой и масштабной системы chatmail и эл.почты :)

      + +

      + + + Шифрование и безопасность + + +

      + +

      + + + Какие стандарты используются для сквозного шифрования? + + +

      + +

      Autocrypt используется для автоматической +установки сквозного шифрования при работе с контактами и групповыми чатами. +Autocrypt использует ограниченное и подмножество стандарта OpenPGP. +Зашифрованные сообщения помечаются замком +padlock.

      + +

      Secure-Join protocols +используются для создания чатов с гарантированным сквозным шифрованием. +что защищает от сетевых атак и взлома серверов. +Чаты, отмеченные зелёной галочкой +green checkmark +гарантируют сквозное шифрование сообщений.

      + +

      + + + Как узнать зашифрованы ли сообщения сквозным шифрованием? + + +

      + +

      Все сквозные зашифрованные сообщения отображаются с замком:

      + +

      padlock in bubble

      + +

      Сквозное шифрование гарантировано, если рядом с заголовком чата стоит зелёная галочка:

      + +

      green checkmark in title

      + +

      + + + Как получить гарантированное сквозное шифрование и зелёные галочки? + + +

      + +

      Если у вас есть второй канал связи с вашим собеседником, +например видеочат или другой мессенджер, +вы можете создать ссылку для приглашения.

      + +

      Если вы встретились лично с собеседником, +вы можете показать ему свой QR-код.

      + +
        +
      • +

        Для Групповых Приглашений: +коснитесь названия чат группы, чтобы просмотреть список её участников, +и выберите “QR-код приглашения”.

        +
      • +
      • +

        Дляпрямых 1:1 приглашений чата, +коснитесь значка QR-кода +на главном экране приложения Delta Chat.

        +
      • +
      + +

      Позвольте вашему чат собеседнику отсканировать QR-изображение +с помощью его приложения Delta Chat, +или нажмите “Копировать” или “Поделиться”, чтобы создать ссылку для приглашения. +и поделитесь с ним.

      + +

      Теперь подожди, пока Сообщения в сети Secure-Join обменяются между обоими устройствами.

      + +
        +
      • +

        Если оба устройства находятся в сети, +обе стороны в конечном итоге увидят (групповой или прямой) чат с зелёной галочкой + green checkmark +рядом с названием.

        +
      • +
      • +

        Если одно из устройств находится в автономном режиме, зелёные галочки появятся позже только +когда устройство снова будет подключено к Интернету +и сетевой протокол Secure-Join будет завершён.

        +
      • +
      + +

      Поздравляем! +Теперь вы будете автоматически использовать гарантированное сквозное шифрование +с этим контактом и вы оба сможете добавлять друг друга в группы, отмеченные зелёной галочкой +green checkmark, +тем самым автоматически распространяя гарантированное сквозное шифрование среди её членов.

      + +

      + + + Что означает зелёная галочка и “гарантированное сквозное шифрование”? + + +

      + +

      Чаты помеченные зелёными галочками +green checkmark +означают, что все сообщения в чате будут зашифрованы сквозным шифрованием +и не могут быть прочитаны или изменены если серверы эл.почты или интернет-провайдер скомпрометированы. +Присоединение к групповым чатам с зелёными галочками +безопасно распространяет информацию о шифровании (и зелёные галочки) +таким образом, чтобы гарантировать сквозное шифрование в группе и между её участниками.

      + +

      Профили контактов с зелёными галочками +green checkmark +означают, что обмен сообщениями с контактом в настоящее время гарантированно зашифрован. +Каждый контакт с зелёной галочкой либо совершил с вами прямое QR-сканирование +либо был представлен другим контактом с зеленой галочкой. +Знакомство происходит автоматически при добавлении участников в группы. +Тот, кто добавляет контакт в группу, отмеченную зелёной галочкой, становится представителем +для тех участников, которые еще не знают о добавленном контакте. +В профиле контакта можно несколько раз нажать на текст “Представлен …” +пока не дойдете до того, с кем вы непосредственно провели QR-сканирование.

      + +

      Обратите внимание, что в профиле контакта вы можете увидеть и присоеденённых знакомых +но в заголовке профиля нет зелёной галочки. +Обычно это означает, что контакт “отправил сообщение с другого устройства”.

      + +

      Для более подробного обсуждения “гарантированного сквозного шифрования” +пожалуйста, смотрите Secure-Join protocols +и в частности, читайте о “Проверенных Группах”, техническом термине, +означающем что здесь называется “чатами с зелёными галочками” или “чатами с гарантированным сквозным шифрованием”.

      + +

      + + + Контакт “отправил сообщение с другого устройства”, что делать? + + +

      + +

      Ваш чат с контактом утратил гарантированное сквозное шифрование. +Зеленая галочка была удалёна для этого чата и контакта и когда вы увидели предупреждение. +Если вы обнаружили внезапное прекращение гарантированного сквозного шифрования +необычного для этого контакта, не принимайте предупреждение! +Вместо этого свяжитесь со своим контактом по второму каналу +например видеозвонок, другой мессенджер или телефонный звонок, +чтобы узнать, что произошло.

      + +

      Если ваш контакт действительно привел к снижению уровня гарантированного сквозного шифрования +пожалуйста, ознакомьтесь с распространёнными причинами и способами их устранения в следующих параграфах. +Независимо от этого, все остальные чаты, отмеченные зелёной галочкой, остаются гарантированно зашифрованными +даже если контакт является его участником.

      + +

      Ваш контакт использует Delta Chat на втором устройстве (телефоне или ноутбуке)

      + +

      Если у них есть другое устройство с запущенным приложением Delta Chat, +им следует удалить учётную запись с нового устройства +и добавить как второе устройство, как описано здесь. +Как только они сообщат вам об этом, предупреждение исчезнет +и гарантированное шифрование будет установлено на обоих устройствах вашего собеседника.

      + +

      Ваш контакт переустановил Delta Chat, используя старый логин учетной записи

      + +

      Если у них есть файл резервной копии, +им следует удалить профиль с нового устройства +и вместо этого импортировать файл резервной копии, чтобы воссоздать свой профиль. +Как только они отправят вам сообщение, предупреждение исчезнет +и для этого контакта восстанавливается гарантированное шифрование.

      + +

      Если у них нет файла резервной копии, лучше всего выполнить QR-сканирование +со своим партнёром по чату, чтобы восстановить гарантированное сквозное шифрование.

      + +

      Ваш контакт отправил письмо через интерфейс веб-почты или другое приложение эл.почты +и снова вернулся к использованию Delta Chat.

      + +

      Если вы уверены, что контакт иногда пользуется веб-почтой, +или другим почтовым приложением , в котором отсутствует сквозное шифрование, +тогда вы можете принять предупреждение. +Как только ваш контакт снова воспользуется Delta Chat, +гарантированное сквозное шифрование будет автоматически восстановлено.

      + +

      Ваш контакт полностью прекратил использование Delta Chat

      + +

      Иногда оставаться на связи важнее, чем сквозное шифрование. +“Протокол защиты транспортного уровня” (TLS) все еще может существенно защитить +конфиденциальность ваших сообщений между вашим устройством и сервером электронной почты. +Но без сквозного шифрования вы и ваш контакт доверяете своему почтовому серверу, +не читать и не манипулировать вашими сообщениями, а также не передавать их третьим лицам.

      + +

      В любом случае, вы ничего не можете сделать, кроме как принять предупреждение. +Также удалите контакт из любой активной группы, отмеченной зелёной галочкой +который вы можете найти в разделе “Общие чаты” в профиле Контакта. +Это избавит ваш контакт от получения “не читаемых” сообщений.

      + +

      Если контакт удалил Delta Chat из-за ошибок или нежелательного поведения, +пожалуйста, рассмотрите возможность публикации на нашем форуме поддержки +чтобы помочь нам выявить и решить общие проблемы. Спасибо!

      + +

      + + + Зашифрованы ли вложения (изображения, файлы, аудио и т. д.) сквозным шифрованием? + + +

      + +

      Да.

      + +

      Когда мы говорим о “сквозном зашифрованном сообщении” +мы всегда имеем в виду, что всё сообщение зашифровано, +включая все вложения +и метаданные вложений, такие как имена файлов.

      + +

      + + + OpenPGP безопасен? + + +

      + +

      Да, Delta Chat использует безопасное подмножество OpenPGP +и отображает только замок, как индикатор безопасности в сообщении +если всё сообщение правильно зашифровано и подписано. +Например, “Отдельные подписи” не считаются безопасными.

      + +

      OpenPGP сам по себе не является небезопасным. +Наиболее публично обсуждаемые проблемы безопасности OpenPGP +на самом деле возникают из-за плохого удобства использования или плохой реализации инструментов или приложений (или того и другого). +Особенно важно различать OpenPGP, стандарт шифрования IETF, +и GnuPG (GPG), инструмент командной строки, реализующий OpenPGP. +Многие публичные критики OpenPGP на самом деле обсуждают GnuPG, который Delta Chat никогда не использовал. +Delta Chat скорее использует реализацию OpenPGP Rust rPGP, +доступен как независимый пакет “pgp”, +и проверен на безопасность в 2019 году.

      + +

      Вместе с другими разработчиками OpenPGP мы стремимся, +улучшить характеристики в дальнейшем, за счёт безопасности +нового IETF OpenPGP Crypto-RefreshP +который, к счастью, был принят летом 2023 года.

      + +

      + + + Рассматривали ли вы возможность использования альтернатив OpenPGP для сквозного шифрования? + + +

      + +

      Да, мы следим за такими усилиями, как MLS +или Saltpack +но их принятие означало бы нарушение совместимости сквозного шифрования. +со всеми другими приложениями эл.почты, которые обычно поддерживают шифрование OpenPGP. +Так что это было бы непростое решение +и для пользователей должны быть представлены действительно ощутимые улучшения.

      + +

      Delta Chat использует целостный подход “полезной безопасности” +и работает с широким кругом групп активистов, а также +известных исследователей, таких как TeamUSEC +для улучшения реальных результатов пользователей в борьбе с угрозами безопасности. +Проводной протокол и стандарт для установления сквозного шифрования: +только одна часть “результатов пользователя”, +см. также наши ответы на захват устройстваметаданные сообщения questions.

      + +

      + + + Уязвим ли Delta Chat для EFAIL? + + +

      + +

      Нет, Delta Chat никогда не был уязвим для EFAIL +потому что его реализация OpenPGP rPGP +использует код обнаружения модификации при шифровании сообщений +и возвращает ошибку +если Код Обнаружения Модификации неверен.

      + +

      Delta Chat также никогда не был уязвим для “Direct Exfiltration” EFAIL атак +потому что он расшифровывает только многочастные/зашифрованные сообщения +которые содержат ровно одну зашифрованную и подписанную часть, +как определено спецификацией Autocrypt Level 1.

      + +

      + + + Выдается ли сообщение в открытом виде, если сквозное шифрование недоступно? + + +

      + +

      Даже если не гарантируется сквозное шифрование ваших сообщений, +они все равно защищены от интернет-провайдеров, таких как сотовые или кабельные компании. +Однако провайдеры эл. почты, как ваши, так и ваших получателей +могут читать, анализировать или даже изменять ваши сообщения, +включая любые вложения, +если они без сквозного шифрования.

      + +

      Delta Chat по умолчанию использует строгое +TLS-шифрование +которое защищает соединения между вашим устройством и поставщиком эл. почты. +Вся обработка TLS в Delta Chat прошла независимый аудит безопасности. +Более того, соединение между вашим устройством и поставщиком эл. почты получателя +как правило, также шифруется Протоколом защиты транспортного уровня. +Если задействованные серверы эл. почты поддерживают MTA-STS +то между провайдерами эл. почты будет применяться Протокол защиты транспортного уровня +В этом случае сообщения Delta Chat никогда не будут открыты для Интернета в даже если сообщение без сквозного шифрования.

      + +

      Обратите внимание, что поддержание гарантированного сквозного шифрования поверх шифрования TLS +обеспечивает повсеместную безопасность между вашими устройствами и устройствами получателя. +Даже ваш провайдер эл. почты или Интернета не сможет прочитать или изменить ваши сообщения.

      + +

      + + + Как Delta Chat защищает метаданные в сообщениях? + + +

      + +

      Delta Chat защищает большинство метаданных сообщений, помещая следующую информацию: +в сквозную зашифрованную часть сообщений:

      + +
        +
      • Тема письма
      • +
      • Аватар и название группы
      • +
      • Запросы MDN (уведомление о прочтении) (Chat-Disposition-Notification-To)
      • +
      • Таймер исчезающего сообщения (Ephemeral-Timer)
      • +
      • Участник-Группы-Чата-Удалён, Участник-Группы-Чата-Добавлен
      • +
      • Заголовок Secure-Join, содержащий команды безопасного соединения
      • +
      • Уведомление о включении потоковой передачи местоположения
      • +
      • URL-адрес комнаты WebRTC
      • +
      + +

      Серверы эл.почты не получают доступа к этим защищенным метаданным +но они видят дату сообщения, а также его размер, +и что более важно, адреса отправителя и получателя. +Серверам эл.почты нужны адреса получателей для маршрутизации и +доставки сообщения на устройства получателя.

      + +

      + + + Как защитить метаданные и контакты при захвате устройства? + + +

      + +

      Оба для защиты от серверов эл.почты, собирающих метаданные. +а также от угрозы захвата устройства +мы рекомендуем использовать chatmail сервер +создавать псевдонимные временные профили посредством сканирования QR-кода. +Обратите внимание, что приложения Delta Chat на всех платформах поддерживают несколько профилей +поэтому вы можете легко использовать профили для конкретной ситуации рядом с вашим “основным” профилем. +зная, что все их данные вместе со всеми метаданными будут удалены. +Более того, если устройство захвачено, то контакты осуществляются с использованием временных профилей +и не могут быть легко идентифицированы по сравнению с мессенджерами, которые раскрывают +номера телефонов в чат-группах, которые, в свою очередь, часто связаны с юридическую идентичность.

      + +

      + + + Как я могу проверить информацию о шифровании? + + +

      + +

      Вы можете проверить статус сквозного шифрования вручную в диалоговом окне «Шифрование» +(профиль пользователя на Android/iOS или щелкните правой кнопкой мыши элемент списка чата пользователя в приложении для ПК). +Delta Chat показывает там два отпечатка пальца. +Если на вашем устройстве и на устройстве вашего контакта появляются одинаковые отпечатки пальцев, +соединение безопасно.

      + +

      + + + Как я могу проверить статус шифрования сообщений? + + +

      + +

      Маленький замочек в пузыре сообщения означает, что +что сообщение было правильно зашифровано от данного отправителя. +Если нет замка, сообщение не было должным образом зашифровано +скорее всего, потому что отправитель использует приложение или интерфейс веб-почты +без поддержки сквозного шифрования.

      + +

      + + + Почему я вижу незашифрованные сообщения? + + +

      + +

      Если контакт использует приложение эл.почты, не поддерживающее Autocrypt, +все сообщения с участием этого контакта (в группе или чате 1:1) +не будет подвергаться сквозному шифрованию и, следовательно, не будет отображать “замок” в сообщениях. +Обратите внимание: даже если ваши контакты используют Delta Chat в своей учётной записи, +они также могут использовать приложение эл.почты без Autocrypt для этой учётной записи +это может привести к периодическим незашифрованным сообщениям. +Ответ на незашифрованные сообщения на незашифрованные сообщения предусмотрен функцией Autocrypt +чтобы предотвратить не читаемые сообщения на стороне ваших контактов +и их почтовое приложение, не поддерживающее Autocrypt.

      + +

      + + + Как я могу получить сквозной зашифрованный чат с контактом Delta Chat, который иногда использует веб-почту или другое приложение эл.почты, не поддерживающее Autocrypt? + + +

      + +

      Если вам нужен безопасный сквозной зашифрованный чат с контактом +который использует свою учётную запись эл.почты как с Delta Chat, так и с приложениями, не поддерживающими Autocrypt (например, веб-почту), +лучше всего установить с ними гарантированное сквозное шифрование +а затем создайте групповой чат с гарантированным сквозным шифрованием, в котором вы оба будете участниками. +В этом групповом чате все сообщения будут зашифрованы сквозным шифрованием +даже если в прямом чате между вами есть предупреждение +“… отправил сообщение с другого устройства”

      + +

      + + + Как я могу обеспечить сквозное шифрование и удаление сообщений? + + +

      + +

      Лучший способ обеспечить сквозное шифрование каждого сообщения, +где метаданные удаляются как можно быстрее +это использовать чаты с гарантированным сквозным шифрованием +и включить исчезающие сообщения.

      + +

      Гарантированные сквозные зашифрованные чаты защищают от MITM атак +и включение исчезающих сообщений удаляет сообщения +на сервере через заданное пользователем время.

      + +

      Если вам не нужна долгоживущая копия ваших сообщений на сервере, +вы также можете включить “удалять сообщения с сервера автоматически”.

      + +

      + + + Поддерживает ли Delta Chat Совершенную Прямую Секретность? + + +

      + +

      Нет, Delta Chat не поддерживает Совершенную Прямую Секретность (СПС). +Это означает, что если ваш личный ключ расшифровки Delta Chat станет известен, +и кто-то собрал ваши предыдущие сообщения в пути, +они смогут расшифровать и прочитать их, используя утёкший ключ дешифрования.

      + +

      Однако учтите, что если кто-нибудь получит ваши ключи дешифрования, +они, как правило, также смогут получить ваши сообщения, +независимо от того, присутствует Совершенная Прямая Секретность или нет. +Типичной реальной ситуацией утечки ключей дешифрования является захват устройства, +который мы обсуждаем в нашем ответе о метаданных и изъятии устройства.

      + +

      Вполне возможно, что Delta Chat будет развиваться для поддержки Совершенной Прямой Секретности +потому что OpenPGP это лишь контейнер для зашифрованных сообщений, +но управление ключами шифрования (и, следовательно, ротация ключей или “храповик”) +могут быть организованы гибким образом. +См. Прототип PFS Seqouia +для существующих экспериментов в сообществе разработчиков OpenPGP.

      + +

      + + + Является ли сквозное шифрование Delta Chat таким же безопасным как Signal? + + +

      + +

      Это зависит от того, что для вас важно. +Delta Chat не поддерживает PFS как это делает Signal +но он обеспечивает гарантированные сквозные зашифрованные чаты +которые защищены от скомпрометированных серверов или поврежденных сетей. +Signal и большинство других мессенджеров, поддерживающих PFS, не предоставляют +практическая схема защиты чат-групп от сетевых атак +которые, возможно, вызывают больше беспокойства +чем потенциальный злоумышленник, который завладев вашим телефоном и настройками частного шифрования +но почему-то не ваши сообщения, но есть полная запись всех +прошлых зашифрованных сообщений.

      + +

      В любом случае, сквозное шифрование Delta Chat использует безопасное подмножество OpenPGP +которое прошло независимую проверку безопасности.

      + +

      + + + Можно ли повторно использовать существующий секретный ключ? + + +

      + +

      Да. +The best way is to send an Autocrypt Setup Message from the other e-mail client. +Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

      + +

      Альтернативно, вы можете импортировать ключ вручную в “Настройки -> Дополнительные настройки -> Импортировать секретные ключи”. +Внимание: Убедитесь, что ключ не защищён паролем, или заранее удалите пароль.

      + +

      Если у вас нет ключа или вы даже не знаете, что он вам понадобится, не волнуйтесь: Delta Chat генерирует ключи по мере необходимости, вам не нужно для этого нажимать кнопку.

      + +

      + + + Я не могу импортировать мой существующий ключ PGP в Delta Chat. + + +

      + +

      С очень большой вероятностью проблема заключается в том, что ваш ключ зашифрован и/или использует пароль. Такие ключи не поддерживаются Delta Chat. Пожалуйста, удалите шифрование и пароль, после чего повторите попытку импорта.

      + +

      Другая распространенная ошибка, неправильное окончание файла. +Используйте бронированный формат ASCII и в окончании файла .asc.

      + +

      Delta Chat поддерживает расспространённые форматы закрытых ключей OpenPGP, однако +маловероятно, что мы будем поддерживать все закрытые ключи из любых источников. Это + не является главным фокусом Delta Chat. На самом деле, подавляющее большинство +пользователей Delta Chat не будут иметь никакого ключа, прежде чем они начнут использовать его. +Однако мы стараемся поддерживать закрытые ключи из как можно большего числа источников.

      + +

      Удаление пароля закрытого ключа будет отличаться в зависимости от программного обеспечения, используемого для управления ключами PGP. +В Enigmail вы можете установить пустой пароль в окне управления ключами. +В GnuPG вы можете установить его через командную строку. +Для других программ ищите решение в интернете.

      + +

      + + + Проходил ли Delta Chat независимую проверку на наличие уязвимостей безопасности? + + +

      + +

      Проект Delta Chat прошёл четыре независимых аудита безопасности и один +независимый анализ безопасности, от самого последнего к более старому:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        В Апреле 2023 г. мы исправили проблемы безопасности и конфиденциальности в веб-интерфейсе, +функция “приложения, которыми делятся в чате”, связанная со сбоями в песочнице +особенно с Chromium. Впоследствии мы получили независимую охранный +аудит от Cure53 и все обнаруженные проблемы были исправлены в серии приложений 1.36, выпущенных в апреле 2023 года. +См. здесь полная информацию о безопасности сквозного шифрования в Интернете.

        +
      • +
      • +

        Март 2023 г. Cure53 проанализировал Протокол защиты транспортного уровня + сетевого соединения Delta Chat и воспроизводимой настройка почтового сервера, как +рекомендуется на этом сайте. +Подробнее об аудите можно прочитать в нашем блоге +или прочитайте полный отчёт здесь.

        +
      • +
      • +

        2020 г., Include Security проанализировала Delta +Chat Rust ядро, +IMAP, +SMTP и +Библиотеки TLS. +Никаких критических или серьёзных проблем обнаружено не было. +В отчете выявлено несколько слабых мест средней серьёзности: +они сами по себе не представляют угрозы для пользователей Delta Chat +поскольку они зависят от среды, в которой используется Delta Chat. +По соображениям удобства использования и совместимости, +мы не можем смягчить их все +и решили предоставить рекомендации по безопасности пользователям, находящимся под угрозой. +Вы можете прочитать полный отчет здесь.

        +
      • +
      • +

        2019 г. Include Security проанализировало Delta +Чат PGP и +Библиотеки RSA. +Критических проблем не обнаружено, +но были две серьёзные проблемы, которые мы впоследствии исправили. +Также были выявлены, одна проблема средней серьёзности и несколько менее серьёзных проблем, +но в реализации Delta Chat не было возможности использовать эти уязвимости. +Некоторые из них мы всё же исправили после завершения проверки. +Вы можете прочитать полный отчет здесь.

        +
      • +
      + +

      + + + Мультиклиент + + +

      + +

      + + + Можно ли использовать Delta Chat на нескольких устройствах одновременно? + + +

      + +

      Да. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      + +
        +
      • +

        Убедитесь, что оба устройства подключены к одному и тому же Wi-Fi или сети.

        +
      • +
      • +

        На первом устройстве перейдите в Настройки → Добавить второе устройство, при необходимости разблокируйте экран +и подождите немного, пока не появится QR-код

        +
      • +
      • +

        На втором устройстве, установите Delta Chat

        +
      • +
      • +

        На втором устройстве запустите Delta Chat, выберите Добавить как второе устройство и отсканируйте QR-код со старого устройства

        +
      • +
      • +

        Передача должна начаться через несколько секунд и во время передачи на обоих устройствах будет отображаться прогресс. +Подождите пока он не завершится на обоих устройствах.

        +
      • +
      + +

      В отличие от многих других мессенджеров, после успешного перевода +оба устройства полностью независимы. +Одно устройство не обязательно для работы другого.

      + +

      + + + Устранение неполадок + + +

      + +
        +
      • +

        Перепроверьте, что оба устройства находятся в в одной Wi-Fi или сети.

        +
      • +
      • +

        В Windows перейдите в Панель управления / Сеть и Интернет +и убедитесь, что в качестве “Типа сетевого профиля” выбрана Частная сеть. +(после переноса можно вернуть исходное значение)

        +
      • +
      • +

        В вашей системе может быть установлен “персональный брандмауэр”, +который, как известно, вызывает проблемы (особенно в Windows). +Отключите персональный брандмауэр для Delta Chat на обоих сторонах и попробуйте снова

        +
      • +
      • +

        Гостевые Сети не позволяют устройствам взаимодействовать друг с другом. +По возможности используйте сеть не для гостей.

        +
      • +
      • +

        Убедитесь, что на устройстве имеется достаточно места

        +
      • +
      • +

        Если передача началась, убедитесь, что устройства остаются активными и не засыпают. +Не выходите из Delta Chat. +(мы стараемся сделать так, чтобы приложение работало в фоновом режиме, но системы склонны убивать приложения, к сожалению)

        +
      • +
      • +

        Delta Chat уже вошёл в систему на заданном устройстве? +Вы можете использовать несколько учётных записей на одном устройстве, просто добавьте еще одну учётную запись

        +
      • +
      • +

        Если у вас все еще возникают проблемы или вы не можете отсканировать QR-код +попробуйте воспользоваться ручной передачей, описанной ниже

        +
      • +
      + +

      + + + Ручная передача + + +

      + +

      Этот метод рекомендуется только в том случае, если «Добавить Второе Устройство», как описано выше, не работает.

      + +
        +
      • На старом устройстве зайдите в «Настройки -> Чаты и медиа -> Экспортировать Резервную Копию». Введите ваш +PIN-код разблокировки экрана, графический ключ или пароль. Затем вы можете нажать «Начать резервное копирование». +Резервное копирование». При этом файл резервной копии сохраняется на вашем устройстве. Теперь вам нужно +его каким-то образом перенесите на другое устройство.
      • +
      • На новом устройстве в меню “У меня уже есть профиль”, +выберите «восстановить из резервной копии». После импорта, ваши разговоры, ключи шифрования, медиа файлы +будут скопированы на новое устройство.
      • +
      • Если вы используете iOS: и у вас возникли трудности, возможно, +это руководство поможет.
      • +
      • Теперь вы синхронизированы и можете использовать оба устройства для отправки и получения +сообщений со сквозным шифрованием с вашими партнерами по связи.
      • +
      + +

      + + + Есть ли какие-либо планы по внедрению веб-клиента Delta Chat? + + +

      + +
        +
      • Ближайших планов нет, но есть некоторые предварительные идеи.
      • +
      • Существуют 2-3 способа внедрения веб-клиента Delta Chat, но все +они требуют значительных усилий. На данный момент мы сосредоточены на выпуске стабильных релизов во всех +магазинах приложений (Google Play/iOS/Windows/macOS/Linux).
      • +
      • Если вам нужен веб-клиент, поскольку вы не можете устанавливать программное обеспечение на +компьютере, на которым вы работаете, вы можете использовать портативный настольный клиент Windows +или AppImage для Linux. Вы можете найти их на +get.delta.chat.
      • +
      + +

      + + + Приложения webxdc + + +

      + +

      В Delta Chat вы можете делиться webxdc-приложениями, вложениями с расширением файла .xdc. Они могут делать совершенно разные вещи и делают Delta Chat по-настоящему +расширяемым мессенджером.

      + +

      + + + Насколько приватными являются приложения webxdc? + + +

      + +
        +
      • Приложения webxdc не могут отправлять данные в Интернет или скачивать что-либо.
      • +
      • Приложение webxdc может обмениваться данными только в чате Delta Chat, причем его +копиями на устройствах ваших партнеров по чату. В остальном оно полностью +изолировано от Интернета.
      • +
      • Конфиденциальность, которую обеспечивает приложение webxdc - это конфиденциальность вашего чата: пока +вы доверяете людям, с которыми общаетесь, вы можете доверять и приложению webxdc.
      • +
      • Это также означает, что открытие приложений webxdc в чатах с участниками которым вы не доверяете, тоже самое что и с вложениями электронной почты, когда вы открываете вложения только от тех отправителей, которым доверяете, а не от спамеров.
      • +
      + +

      + + + Где я могу взять приложения webxdc? + + +

      + +
        +
      • В общем, все желающие могут делиться друг с другом приложениями webxdc +друг с другом без ограничений.
      • +
      • Вы можете послать сообщение ‘hi’ на xstore@testrun.org +чтобы посмотреть на экспериментальный магазин приложений webxdc. +Все приложения с открытым исходным кодом и бесплатны.
      • +
      • Многие люди пишут свои собственные приложения для webxdc и публикуют их на форуме Delta Chat.
      • +
      + +

      + + + Как я могу создавать свои собственные приложения webxdc? + + +

      + +
        +
      • +

        Приложения webxdc представляют собой просто zip-файлы, содержащие код HTML, CSS и JavaScript.

        +
      • +
      • Вы можете расширить пример приложения Hello World +для начала.
      • +
      • Все остальное, что вам нужно знать, написано в +документация.
      • +
      • Если у вас есть вопросы, вы можете задать их опытным людям на форуме Delta Chat.
      • +
      + +

      + + + Экспериментальные Возможности + + +

      + +

      Мы очень признательны за отзывы и функционале - хотите поделиться +вашими идеями? Присоединяйтесь к Форуму, чтобы внести свой вклад. +Вы можете удобно войти в систему через Delta Chat и отсканировав QR-код, +еще один довольно стабильный эксперимент, который мы проводим на стороне (sic!).

      + +

      + + + Как использовать аудио и видео звонки в Delta Chat? + + +

      + +
        +
      • Чтобы включить аудио/видео звонки, перейдите в раздел “Экспериментальные возможности” в +расширенных настройках и выберите “Сервер видеочата”.
      • +
      • Когда вы приглашаете других в видеочат, он сразу открывается в вашем браузере/приложении. Остальные получают электронное письмо со ссылкой на видеочат. +Таким образом, видеочат можно использовать и в том случае, если ваши собеседники не пользуются Delta Chat.
      • +
      • Обратите внимание, что на другой стороне нет звука звонка, и ваши собеседники +не будут прерваны приглашением в видеочат.
      • +
      • Вы можете использовать любой сервис видеочата, который позволяет присоединиться по ссылке. Просто добавьте +ссылку в настройках.
      • +
      • Например, чтобы использовать сервер Jitsi Meet, вы можете ввести +https://meet.jit.si/$ROOM. Переменная $ROOM будет случайным идентификатором комнаты; +Таким образом, каждый раз, когда вы будете кого-то вызывать, у вас будет новая случайная комната Jitsi.
      • +
      + +

      + + + Что такое Списки Рассылок и как их использовать? + + +

      + +
        +
      • С помощью Списка Рассылки вы можете отправить сообщение множеству получателей одновременно; когда +они отвечают вам, вы получаете ответ в прямом чате с ними 1:1. +получатели не могут видеть друг друга.
      • +
      • Технически это эл.письмо со многими получателями в скрытой копии.
      • +
      • Включить функцию можно в разделе “экспериментальные функции” в разделе +расширенные настройки. Затем вы можете создать Список Рассылки в диалоге «Нового чата».
      • +
      • Если вы используете более одного устройства, Списки Рассылки в настоящее время не синхронизируются между ними.
      • +
      • Сообщения, отправляемые в Списки Рассылки, не шифруются. Шифрование лишает +анонимность, потому что тогда все получатели будут знать, кто ещё получил это письмо. +(Отправка отдельных писем всем будет хуже из-за ограничения скорости и из за причины потребления сети).
      • +
      + +

      + + + Как я могу поделиться своим местоположением с партнерами по чату? + + +

      + +

      В- Вы можете включить потоковую передачу местоположения в разделе «экспериментальные функции» +расширенные настройки.

      +
        +
      • Теперь, если вы хотите поделиться своим местоположением в чате, перейдите в “Прикрепить” и выберите +“местоположение”. Теперь вы можете установить временной интервал, в течение которого ваше местоположение будет +транслироватся вашим партнерам по чату в течение от 5 минут до 6 часов.
      • +
      • Когда ваше местоположение изменится, другие участники чата смогут увидеть его на карте в +чате.
      • +
      • Чтобы видеть карту и просматривать местоположения других людей, вам необходимо включить эту функцию +в расширенных настройках.
      • +
      • Эта функция не будет передавать ваше местоположение никому, кроме ваших собеседников. +Фрагменты карты загружаются с сайта OpenStreetMap.
      • +
      • На настольном ПК ОС обычно не может определить ваше местоположение. Вместо этого вы можете +щелкните правой кнопкой мыши “Вставить” и опишите локацию, которая будет отправлена ​​в чат как +сообщение, но также появляется на карте.
      • +
      + +

      + + + Что на самом деле защищает экспериментальное шифрование базы данных? + + +

      + +
        +
      • На данный момент шифрование базы данных все еще находится на стадии эксперимента. Не полагайтесь на +неё, для защиты вам следует дополнительно использовать шифрование вашей операционной +система, если она её предоставляет.
      • +
      • Шифрование базы данных пока не шифрует большие двоичные объекты, а только строки и +столбцы базы данных. Это более или менее означает, что ваши сообщения в безопасности, +но не ваши прикреплённые файлы.
      • +
      • Для iOS и Android ключи шифрования хранятся в системной связке ключей. +Это означает, что шифрование так же безопасно, как и операционная система, на которой оно работает
      • +
      • Настольный клиент Delta Chat пока не поддерживает шифрование базы данных, так как +не существует стандартного способа хранения ключей шифрования на различных поддерживаемых +платформах.
      • +
      + +

      + + + Почему я могу выбрать слежение только папки DeltaChat? + + +

      + +

      Это экспериментальная функция для некоторых людей, которые экспериментируют с +правилами на стороне сервера. Не все провайдеры поддерживают это, но с некоторыми вы можете переместить +все письма с заголовком “Chat-Version” в папку DeltaChat. Обычно это +делается с помощью приложения Delta Chat.

      + +

      Включение «Извлекать Только из Папки DeltaChat» имеет смысл, если у вас есть оба:

      + +
        +
      • включено правило на стороне сервера для перемещения всех сообщений с заголовком “Chat-Version” в папку Delta Chat, и
      • +
      • установлен параметр “Показывать классические электронные письма” со значеним “Нет, только чаты”.
      • +
      + +

      В этом случае Delta Chat не нужно смотреть папку Входящие и этого достаточно чтобы просмотреть только папку DeltaChat.

      + +

      + + + Как я могу изменить свою учётную запись на другой адрес эл.почты? + + +

      + +
        +
      1. +

        Изменение вашего адреса в “Настройки → Дополнительные параметры → Пароль и Учётная запись” и +введите пароль для вашей новой учётной записи эл.почты (и при необходимости в настройках Сервер). +Вы получите информационное уведомление о том, что переезжаете на новый адрес. +Дополнительное уведомление также появится в вашем чате “Сообщения устройства”.

        +
      2. +
      3. +

        Если возможно, позвольте своему старому провайдеру эл.почты пересылать все сообщения на ваш новый адрес.

        +
      4. +
      5. +

        Сообщите своим контактам, что вы изменили адрес. +Запись гарантирует сквозное шифрование в чатах и группах, +заставит их автоматически отметить переезд и +они продолжат общаться с вами, используя ваш новый адрес.

        +
      6. +
      + +

      Обратите внимание, что Delta Chat больше не будет получать сообщения от вашего старого поставщика эл.почты. +Если вы не настроили для своего провайдера электронной почты пересылку сообщений (шаг 2.) +только те контакты, которым вы отправили сообщение в гарантированным сквозным шифрованием чате +будет отправлять сообщения на ваш новый адрес.

      + +

      Чтобы узнать больше об этом и подробностях этого, прочитайте наш блог здесь.

      + +

      + + + Другое + + +

      + +

      + + + Какие разрешения нужны Delta Chat? + + +

      + +

      В зависимости от используемой операционной системы +вам может быть предложено предоставить разрешения для приложения. +Вот что делает Delta Chat с этими разрешениями:

      + +
        +
      • Камера (может быть запрещена)
      • +
      • фотографировать и снимать видео: для отправки фотографий
      • +
      • Контакты (можно запретить)
      • +
      • читать свои контакты: чтобы найти контакты для общения
      • +
      • Местоположение (можно запретить)
      • +
      • доступ к приблизительному местоположению (сетевые источники местоположения): для функции потоковой передачи местоположения.
      • +
      • доступ к точному местоположению (GPS и сетевые источники местоположения): для функции потоковой передачи местоположения
      • +
      • Микрофон (можно запретить)
      • +
      • запись аудио: для аудиосообщений
      • +
      • Хранение (можно запретить)
      • +
      • изменить или удалить содержимое вашей SD-карты: для загрузки вложений к сообщениям
      • +
      • прочитать содержимое вашей SD-карты: чтобы поделиться файлами со своими контактами
      • +
      • Другие возможности приложения
      • +
      • измените настройки звука: чтобы вы могли выбирать мелодии звонка и громкость уведомлений и аудиосообщений
      • +
      • запускать при запуске: вам не придется запускать Delta Chat вручную
      • +
      • управление вибрацией: для уведомлений
      • +
      • просмотр сетевых подключений: для подключения к вашему провайдеру электронной почты.
      • +
      • запретить переход телефона в спящий режим: чтобы вам было проще скопировать код безопасности во время сообщения о настройке Autocrypt.
      • +
      • иметь полный доступ к сети: для подключения к вашему провайдеру эл.почты.
      • +
      • просмотр подключений Wi-Fi: для подключения к вашему провайдеру эл.почты.
      • +
      • попросить игнорировать оптимизацию батареи: для достижения “мгновенной доставки сообщений”
      • +
      + +

      + + + Поддерживает ли Delta Chat работу с моим провайдером электронной почты? + + +

      + +
        +
      • В большинстве случаев - да :)
        +Тем не менее, для корректной работы некоторых почтовых служб (провайдеров) +требуются специфические настройки; +смотрите Обзор провайдеров
      • +
      + +

      + + + Я хочу управлять собственным сервером эл. почты для Delta Chat. Что вы посоветуете? + + +

      + + + +

      + + + Почему я должен вводить свой пароль от электронной почты в Delta Chat? Это безопасно? + + +

      + +

      Как и в случае других программ электронной почты, таких как Thunderbird, + K9-Mail или Outlook, программе необходим пароль, чтобы использовать его + для отправки почты. Конечно, пароль хранится только на вашем устройстве. + Пароль передаётся только вашему провайдеру электронной почты (при входе + в систему), который в любом случае имеет доступ к вашей почте.

      + +

      Если вы используете провайдера электронной почты с поддержкой OAuth2, + например, gmail.com или yandex.ru, нет необходимости хранить пароль на + устройстве, так как в этом случае используется токен доступа.

      + +

      Поскольку Delta Chat является программой открытым исходным кодом, вы + можете изучить исходный код, если хотите убедиться, что ваши + учётные данные обрабатываются безопасно. Мы будем рады вашим отзывам + и предложениям, которые сделают приложение более безопасным для всех.

      + +

      + + + Какие сообщения отображаются в Delta Chat? + + +

      + +

      По умолчанию Delta Chat показывает все сообщения электронной почты.

      + +

      В “Настройки → Дополнительные настройки → Показывать Обычную эл.почту” +вы можете это изменить. У вас есть следующие варианты:

      + +
        +
      • “Нет, только чаты”: Отображаются только сообщения и ответы отправленные другими пользователями Delta Chat. +Это наиболее целесообразно, если вы используете одну и ту же +учётную запись эл. почты и для обычной почты.
      • +
      • “Все”: Delta Chat показывает все сообщения, отправленные на ваш электронный адрес. +Это имеет смысл, если вы хотите использовать Delta Chat для всех своих писем, +чтобы ни одно сообщение не было потеряно. Это настройка по умолчанию.
      • +
      • “Для принятых контактов”: Delta Chat показывает все сообщения эл. почты от контактов, +с которыми у вас уже есть чат, но новые чаты появляются только для сообщений Delta Chat. +Это помогает в каждом конкретном случае решить, хотите ли вы вести разговор +в Delta Chat или в “обычном” приложении эл. почты.
      • +
      + +

      + + + Поддерживает ли Delta Chat электронную почту в формате HTML? + + +

      + +

      Да, входящие HTML-сообщения сопровождаются кнопкой “Показать сообщение полностью”. +Исходящие сообщения всегда используют простой текст.

      + +

      + + + Могу ли я установить тему письма в Delta Chat? + + +

      + +

      Delta Chat устанавливает (и шифрует!) тему классического письма +автоматически к названию группы или имени отправителя.

      + +

      Поэтому, если вы хотите задать тему самостоятельно, +например, для официального письма деловому контакту, +вы можете создать группу +в которой будут только вы и получатель(и). +Установите в заголовке чата нужную тему, +а затем отправьте свое письмо первым сообщением. +Если получатели не используют Delta Chat, +оно будет выглядеть как обычное, +эл. письмо. +Вы получите бонусные очки профессионализма +если вы установите текст подписи.

      + +

      + + + Для чего нужен параметр “Отправить копию себе”? + + +

      + +

      Отправка копии ваших сообщений себе гарантирует, что вы получите свои собственные +сообщения на всех устройствах. Если у вас есть несколько устройств и вы не включили его, вы +увидите только сообщения от других людей и сообщения, которые вы отправляете с +текущего устройства.

      + +

      Копия отправляется в папку “Входящие”, а затем перемещается в папку DeltaChat; она не +помещается в папку “Отправлено”. Delta Chat никогда ничего не загружает в папку Отправлено +, потому что это означало бы загрузку сообщения дважды (один раз через SMTP +и один раз через IMAP в папку Отправлено).

      + +

      По умолчанию для параметра “Отправить Копию Себе” установлено значение “Включено”.

      + +

      + + + Для чего нужен параметр “следить за папкой Отправлено”? + + +

      + +

      Этот параметр, важен для тех, кто использует другую +почтовую программу (например, Thunderbird) вместе с приложением Delta Chat.

      + +

      Однако мы рекомендуем использовать настольный клиент Delta Chat; вы можете скачать его +на get.delta.chat. Опция для слежения за папкой “Отправлено” +может быть убрана в будущем. Эта функция была представлена в то время, когда не было + настольного клиента Delta Chat доступного на всех платформах.

      + +

      + + + Почему я могу отключить “следить за папкой Delta Chat”? + + +

      + +

      Некоторые люди используют Delta Chat в качестве обычного почтового клиента и хотят использовать папку “Входящие” +для своей почты вместо папки DeltaChat. Если вы отключите функцию “следить за +папкой DeltaChat”, вы также должны отключить “переместить сообщения чата в DeltaChat”. +В противном случае удаление сообщений или настройки могут работать неправильно.

      + +

      + + + Совместим ли Delta Chat с Protonmail / Tutanota / Criptext? + + +

      + +
        +
      • И да и нет.
      • +
      • Нет, вы не можете использовать свою учётную запись Protonmail, Tutanota или Criptext с Delta Chat; они не предлагают получать почту через IMAP.
      • +
      • В любом случае вы можете использовать Delta Chat для отправки сообщений людям, которые используют +Protonmail, Tutanota или Criptext. Однако, эти сообщения не будут +зашифрованы сквозным шифрованием. Сквозное шифрование, предлагаемое этими поставщиками, не +совместимо с используемым Autocrypt, стандартом в Delta Chat
      • +
      • Delta Chat может осуществлять сквозное шифрование через любого поставщика эл.почты с любым +Приложением эл.почты с поддержкой Autocrypt.
      • +
      + +

      + + + Как я могу удалить аккаунт? + + +

      + +

      Поскольку вы используете учётную запись эл.почты для Delta Chat, +способ удаления своей учетной записи зависит от вашего провайдера эл.почты. +Мы не имеем никакого контроля над вашей учётной записью эл.почты, +поэтому, к сожалению, мы не можем вам с этим помочь.

      + +

      Если вы хотите сохранить учётную запись, +но удаляете Delta Chat, +перед удалением Delta Chat рекомендуется выйти из группового чата.

      + +

      + + + Меня интересуют технические детали. Можете рассказать больше? + + +

      + + + +

      + + + Как финансируются разработки Delta Chat? + + +

      + +

      Delta Chat не получает никакого венчурного капитала, +не имеет долгов, и не ставит целью заработать огромную прибыль или +продавать пользователей, их друзей и семью рекламодателям (или ещё кому-либо). +Мы предпочитаем использовать государственные источники финансирования далёкие от Евросоюза и США, чтобы +продолжить создавать децентрализованную экосистему обмена сообщениями, +основанную на Свободном и Открытом исходном коде.

      + +

      Конкретно до этого момента, разработки Delta Chat финансировались из этих источников:

      + +
        +
      • +

        Проект ЕС NEXTLEAP финансировал исследование +и внедрение проверенных групп и настройку протоколов контактов +в 2017 и 2018 годах, а также помог интегрировать сквозное шифрование +через Autocrypt.

        +
      • +
      • +

        Фонд открытых технологий предоставил нам +два гранта. Первый грант 2018/2019 года (~$200 тыс.) помог значительно улучшить Android приложение +и выпустить бета-версию настольного клиента, кроме того +закрепил наши разработки в области исследований UX в контексте прав человека, +смотрите наш отчёт Needfinding and UX report. +Второй грант 2019/2020 года (~$300 тыс.) помог нам +выпустить Delta/iOS версии, преобразовать нашу основную библиотеку Rust, а также +предоставить новые функции для всех платформ.

        +
      • +
      • +

        Фонд NLnet выделил в 2019/2020 году 46 тыс. евро на +завершение привязки Rust/Python и создание экосистемы чат-ботов.

        +
      • +
      • +

        В 2021 г. мы получили дополнительное финансирование из ЕС для двух Next-Generation-Internet +целей, а именно для EPPD - e-mail provider portability directory (~97 тыс. евро) и AEAP - email address porting (~90 тыс. евро). Это привело к улучшению поддержки мультиклиентности, QR-кодов, настройки контактов и групп и множеству улучшений в работе сети для всех платформ.

        +
      • +
      • +

        С конца 2021 года по март 2023 года мы получили финансирование Свобода Интернета (500 тысяч долларов США) от

        +
      • +
      + +

      Бюро демократии, прав человека и труда США (DRL). +Это финансирование поддержало наши долгосрочные цели, сделать Delta Chat более удобным для использования. +и совместимость с широким спектром серверов эл. почты по всему миру, а также большую отказоустойчивость и безопасеность +в местах, часто подвергающихся интернет-цензуре и отключениям.

      + +
        +
      • +

        С 2023 года нас приняли в Интернет Следующего Поколения (NGI). +Программа доверия для наших предложений «Частные Децентрализованные Приложения». +Точная сумма еще не определена (около 100 тыс. евро). +Это финансирование поддерживает дальнейшее развитие webxdc “приложений, которыми можно делиться в чате”.

        +
      • +
      • +

        Иногда мы получаем разовые пожертвования от физических лиц. +Например, в 2021 году щедрый индивидуальный банк перевел нам 4 тыс. евро. +с темой «Так держать!». 💜 +Мы используем эти деньги для финансирования встреч разработчиков или для покрытия специальных расходов +это нелегко предсказать или возместить за счет государственных грантов. +Получение большего количества пожертвований также помогает нам стать более независимыми и жизнеспособными в долгосрочной перспективе +как сообщество участников.

        + + +
      • +
      • +

        И последнее, но далеко не менее важное: несколько экспертов и энтузиастов на общественных началах внесли + и вносят свой вклад в развитие Delta Chat, не получая денег, а только +небольшие суммы. Без них Delta Chat не был бы там, где он есть сегодня, +даже близко.

        +
      • +
      + +

      Упомянутые выше денежные сборы было организованы компанией merlinux GmbH в городе +Фрайбург (Германия), и распределяются среди более чем дюжины участников по всему миру.

      + +

      Пожалуйста, смотрите Каналы пожертвований в Delta Chat +для денежных и других взносов.

      + + + + + \ No newline at end of file diff --git a/assets/help/sk/help.html b/src/main/assets/help/sk/help.html similarity index 78% rename from assets/help/sk/help.html rename to src/main/assets/help/sk/help.html index 2b3938229..08ab17561 100644 --- a/assets/help/sk/help.html +++ b/src/main/assets/help/sk/help.html @@ -4,17 +4,14 @@
    58. Skupiny @@ -28,6 +25,15 @@
    59. What happens if I turn on “Delete old messages from device”?
    60. +
    61. Instant message delivery and Push Notifications + +
    62. Encryption and Security
    63. Multiklient @@ -59,9 +66,6 @@
    64. Troubleshooting
    65. Manual Transfer
    66. Máte nejaké plány na zavedenie webového klienta Delta Chat?
    67. -
    68. Na čo je dobré nastavenie „Odoslať kópiu sebe“?
    69. -
    70. Prečo si môžem vybrať sledovanie priečinka „Odoslané“?
    71. -
    72. Prečo sa môžem rozhodnúť nesledovať priečinok DeltaChat?
    73. webxdc apps @@ -78,17 +82,24 @@
    74. How can I share my location with my chat partners?
    75. What does the experimental database encryption actually protect?
    76. Why can I choose to only watch the DeltaChat folder?
    77. -
    78. How can I change my account to a different e-mail address?
    79. +
    80. How can I use a different e-mail address with my profile?
    81. Rôzne
    82. @@ -104,8 +115,14 @@

      -

      Delta Chat je nová chatovacia aplikácia, ktorá odosiela správy prostredníctvom e-mailov, ak je to možné, šifrované pomocou funkcie Autocrypt. -*Nemusíte sa nikde prihlasovať, stačí použiť svoj existujúci e-mailový účet s Delta Chat.

      +

      Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

      + +

      Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

      @@ -117,9 +134,15 @@ -

      S Delta Chatom môžete písať na každú existujúcu e-mailovú adresu – dokonca -aj ak príjemca nepoužíva aplikáciu Delta Chat. Nie je potrebné -pre príjemcu, aby si nainštaloval rovnakú aplikáciu, ako je tá vaša, ako pri iných messengeroch.

      +

      To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

      + +

      If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

      @@ -130,42 +153,25 @@ pre príjemcu, aby si nainštaloval rovnakú aplikáciu, ako je tá vaša, ako p

        -
      • Independent of any company or services. You own your data.
      • -
      • Your data is not saved on a central server unless all users are using -the same e-mail servers
      • -
      • You do not distribute your address book to anyone.
      • -
      • Fast by the use of Push-IMAP.
      • -
      • Largest userbase - recipients not using Delta Chat can be reached as well.
      • -
      • No Spam - only messages of known users are shown by default.
      • -
      • End-to-end encryption via Autocrypt.
      • -
      • Copyleft and Standards based libre software.
      • -
      • Flexible identity with built-in support for multiple accounts
      • -
      - -

      - - - Ktoré správy sa zobrazujú v Delta Chate? - - -

      - -

      By default, Delta Chat shows all e-mails.

      - -

      At “Settings -> Chats & -Media -> Show Classic E-Mails”, you can change this. You have these options:

      - -
        -
      • “No, chats only”: Only messages sent by other Delta Chat users and replies to -your Delta Chat messages are shown. This makes most sense if you use the same -e-mail account for normal e-mails as well.
      • -
      • “All”: Delta Chat shows all e-mails that are sent to your email address. This -makes sense if you want to use Delta Chat for all your e-mails, so no message -gets lost. This is the default setting.
      • -
      • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom -you already have a chat, but new chats only pop up for Delta Chat messages. -This helps to decide on a case-by-case basis whether you want to have a -conversation in Delta Chat or in a “normal” e-mail app.
      • +
      • +

        Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

        +
      • +
      • +

        Pervasive multi-profile and multi-device support on all platforms.

        +
      • +
      • +

        Interactive web apps in chats for gaming and collaboration

        +
      • +
      • +

        Audited end-to-end encryption +safe against network and server attacks.

        +
      • +
      • +

        Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

        +

      @@ -207,18 +213,25 @@ receive messages from this person, consider blocking them.

      - How can I add or switch between multiple accounts? + What are profiles? How can I switch between them?

      -

      You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

      -
        -
      • on the menu button and then ‘Switch Account’ (Android and desktop)
      • -
      • or the profile icon and then ‘Add Account’ (iOS)
      • -
      +

      A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

      -

      You may also wish to learn how to add accounts to multiple devices.

      +

      On first installation of Delta Chat a first profile is created.

      + +

      Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

      + +

      You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

      + +

      You may also wish to learn how to use the same profile on multiple devices.

      @@ -248,96 +261,26 @@ zariadenie.

      -

      +

      - Podporuje Delta Chat e-maily HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

      -

      Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

      +

      Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

      -

      +

      - Prečo musím zadávať svoje e-mailové heslo do Delta Chat? Je to bezpečné? - - -

      - -

      Rovnako ako v prípade iných e-mailových programov, ako sú Thunderbird, K9-Mail alebo Outlook, -program potrebuje heslo, aby ste ho mohli používať na odosielanie e-mailov. Samozrejme, -heslo je uložené iba vo vašom zariadení. Heslo sa prenáša iba na vášho poskytovateľa e-mailu (keď sa prihlásite), ktorý má aj tak prístup k vašim e-mailom.

      - -

      Ak používate poskytovateľa e-mailu s podporou OAuth2, ako je gmail.com alebo yandex.ru, -nie je potrebné ukladať heslo do zariadenia. V tomto prípade iba -používa sa prístupový token.

      - -

      Keďže Delta Chat je Open Source, môžete skontrolovať Zdrojový -Kód -ak chcete overiť, že vaše poverenia sú spracované bezpečne. Sme radi -o spätnej väzbe, vďaka ktorej je aplikácia bezpečnejšia pre všetkých našich používateľov.

      - -

      - - - Aké povolenia potrebuje Delta Chat? - - -

      - -

      V závislosti od používaného operačného systému -môžete byť požiadaní o udelenie povolení aplikácii. -Delta Chat robí toto s týmito povoleniami:

      - -
        -
      • Fotoaparát (možno zakázať) -
          -
        • fotografujte a natáčajte videá: na odosielanie fotografií
        • -
        -
      • -
      • Kontakty (možno zakázať) -
          -
        • prehliadnite si svoje kontakty: objavte kontakty, s ktorými môžete chatovať
        • -
        -
      • -
      • Poloha (možno zakázať) -
          -
        • prístup k približnej polohe (zdrojom polohy v sieti): pre funkciu streamovania polohy
        • -
        • prístup k presnej polohe (GPS a sieťové zdroje polohy): pre funkciu streamovania polohy
        • -
        -
      • -
      • Mikrofón (možno zakázať) -
          -
        • nahrávať zvuk: pre zvukové správy
        • -
        -
      • -
      • Úložisko (možno zakázať) -
          -
        • upraviť alebo odstrániť obsah vašej SD karty: na stiahnutie príloh správ
        • -
        • čítať obsah SD karty: zdieľať súbory so svojimi kontaktmi
        • -
        -
      • -
      • Ďalšie možnosti aplikácie -
          -
        • zmeniť nastavenia zvuku: aby ste si mohli si vybrať vyzváňacie tóny a hlasitosť pre upozornenia a zvukové správy
        • -
        • spustiť pri štarte: takže nemusíte spúšťať Delta Chat manuálne
        • -
        • ovládanie vibrácií: pre upozornenia
        • -
        • zobraziť sieťové pripojenia: na pripojenie k vášmu poskytovateľovi e-mailu
        • -
        • zabrániť spánku telefónu: takže môžete jednoduchšie skopírovať bezpečnostný kód počas správy nastavenia automatického šifrovania
        • -
        • mať úplný prístup k sieti: na pripojenie k vášmu poskytovateľovi e-mailu
        • -
        • zobraziť pripojenia Wi-Fi: na pripojenie k poskytovateľovi e-mailu
        • -
        • požiadať o ignorovanie optimalizácie batérie: pre používateľov, ktorí chcú neustále dostávať správy
        • -
        -
      • -
      - -

      - - - What means Pinning, Muting, Archiving? + What do Pinning, Muting and Archiving mean?

      @@ -392,22 +335,40 @@ have turned off read receipts, they will not see the green dot until you message them or write to a group they’re in as well. -

      +

      - How can I delete my account? + How do disappearing messages work?

      -

      As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

      +

      You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

      -

      If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

      + +

      Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

      + +

      Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

      @@ -540,6 +501,170 @@ this way, all messages will be deleted from your device as soon as they older than that. +

      + + + Instant message delivery and Push Notifications + + +

      + +

      + + + What are Push Notifications? How can I get instant message delivery? + + +

      + +

      Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

      + +

      Push Notifications work with all chatmail servers on

      + +
        +
      • +

        iOS devices, by integrating with Apple Push services.

        +
      • +
      • +

        Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

        +
      • +
      + +

      As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

      + +

      + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Are Push notifications enabled / needed on Android devices? + + +

      + +

      If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

      + +

      In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

      + +
        +
      • +

        Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

        +
      • +
      • +

        Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

        +
      • +
      • +

        Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

        +
      • +
      + +

      Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

      + +

      + + + How private are Delta Chat Push Notifications? + + +

      + +

      Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

      + +

      Here is how Delta Chat apps perform Push Notification delivery:

      + +
        +
      • +

        A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

        +
      • +
      • +

        When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

        +
      • +
      • +

        The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

        +
      • +
      • +

        The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

        +
      • +
      + +

      As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

      + +

      The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

      + +

      Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

      + +

      + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

      + +

      Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

      + +

      Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

      +

      @@ -562,7 +687,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

      -

      Secure-Join protocols +

      Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -593,49 +718,32 @@ guarantee end-to-end encrypted messages.

      -

      Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

      +

      If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

      -

      Inviter side:

      +

      If you are together in person, +you can show a QR code to your chat partner.

      • -

        Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

        +

        For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

      • -

        Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

        +

        For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

      -

      Joiner side:

      +

      Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

      -
        -
      • -

        Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

        -
      • -
      • -

        Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

        -
      • -
      • -

        Tap “OK”

        -
      • -
      - -

      Both Inviter and Joiner:

      - -

      Wait while Secure-Join network messages are exchanged between both devices.

      +

      Now wait while Secure-Join network messages are exchanged between both devices.

      • @@ -689,7 +797,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

        For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

        @@ -717,7 +825,7 @@ even if the contact is a member there.

        Your contact is using Delta Chat on a second device (phone or laptop)

        If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

        @@ -725,8 +833,8 @@ and guaranteed encryption is established with both devices of your contact.

        Your contact reinstalled Delta Chat using their old account login

        If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

        @@ -747,7 +855,7 @@ guaranteed end-to-end encryption will be automatically re-established.

        Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

        In any case, you can not do much else than accept the warning. @@ -913,12 +1021,12 @@ deliver messages to recipient’s devices.

        Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

        @@ -977,7 +1085,7 @@ and their non-Autocrypt e-mail app.

        If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -995,10 +1103,10 @@ even if the direct chat between you two has a

        The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

        +and turning on disappearing messages.

        -

        Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

        Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

        If you don’t need a longer-lived copy of your messages on the server, @@ -1079,9 +1187,10 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

        Najpravdepodobnejšou príčinou je, že váš kľúč je zašifrovaný a/alebo používa heslo. Delta Chat takéto kľúče nepodporuje. Mohli by ste odstrániť -zašifrovanie prístupovej frázy a heslo a skúsiť import znova. Ak chcete -aby ste si zachovali svoju prístupovú frázu, budete si musieť vytvoriť e-mailový alias -s Delta Chatom tak, že kľúč Delta Chat je zviazaný s týmto e-mailovým aliasom.

        +zašifrovanie prístupovej frázy a heslo a skúsiť import znova.

        + +

        Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

        Delta Chat podporuje bežné formáty súkromných kľúčov OpenPGP avšak je nepravdepodobné, že budú plne podporované súkromné kľúče zo všetkých zdrojov. Toto @@ -1096,6 +1205,67 @@ heslo na prázdnu hodnotu v okne Key Management. Pomocou GnuPG to môžete nasta riadok. Pre iné programy by ste mali vedieť nájsť riešenie online.

        +

        + + + Was Delta Chat independently audited for security vulnerabilities? + + +

        + +

        The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

        + +
          +
        • +

          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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

          +
        • +
        • +

          2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

          +
        • +
        • +

          2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

          +
        • +
        • +

          2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

          +
        • +
        • +

          2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

          +
        • +
        +

        @@ -1112,7 +1282,7 @@ Pre iné programy by ste mali vedieť nájsť riešenie online.

        -

        Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

        +

        Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

        • @@ -1150,10 +1320,19 @@ One device is not needed for the other to work.

        • Double-check both devices are in the same Wi-Fi or network

        • +
        • +

          On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

          +
        • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

          +
        • +
        • +

          Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

        • Ensure there is enough storage on the destination device

          @@ -1165,7 +1344,7 @@ Do not exit Delta Chat.
        • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

          +You can use multiple profiles per device, just add another profile

        • If you still have problems or if you cannot scan a QR code @@ -1188,8 +1367,8 @@ try the manual transfer described below

          screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
        • -
        • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
        • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
          • If you use iOS: and you encounter difficulties, maybe @@ -1220,53 +1399,6 @@ alebo AppImage pre Linux. Nájdete ich na get.delta.chat.
          -

          - - - Na čo je dobré nastavenie „Odoslať kópiu sebe“? - - -

          - -

          Odoslaním kópie správ sebe samému zaistíte, že dostanete svoje vlastné -správy na všetkých zariadeniach. Ak máte viacero zariadení a nezapnete ich, vy -uvidíte iba správy od iných ľudí a správy, ktoré vy odošlete z - aktuálneho zariadenia.

          - -

          Kópia sa odošle do priečinka Doručená pošta a potom sa presunie do priečinka DeltaChat; nie je vložená do priečinka „Odoslané“. Delta Chat nikdy nič neodovzdáva do priečinka “Odoslané”, pretože by to znamenalo nahrať správu dvakrát (raz cez SMTP, a raz cez IMAP do priečinka Odoslané).

          - -

          Predvolené nastavenie pre kópia pre seba je “nie”.

          - -

          - - - Prečo si môžem vybrať sledovanie priečinka „Odoslané“? - - -

          - -

          Jediný dôvod, prečo chcete sledovať priečinok Odoslané, je, ak používate iný -poštový program (napríklad Thunderbird) vedľa vašej aplikácie Delta Chat a chcete svoj MUA - aby sa zúčastňoval chatových konverzácií.

          - -

          Odporúčame však použiť Delta Chat Desktop Client; môžete si ho stiahnuť -na get.delta.chat. Možnosť sledovať „Odoslané“ -priečinok môže v budúcnosti zmiznúť. Bolo to zavedené v čase, kedy nebol -Delta Chat Desktop dostupný na všetkých platformách.

          - -

          - - - Prečo sa môžem rozhodnúť nesledovať priečinok DeltaChat? - - -

          - -

          Niektorí ľudia používajú Delta Chat ako bežný e-mailový klient a chcú používať priečinok Doručená pošta -pre ich mail, namiesto priečinku DeltaChat. Ak zakážete „Sledovať -priečinok DeltaChat“, mali by ste tiež zakázať „presunúť chatové správy do DeltaChat“. -V opačnom prípade nemusí odstraňovanie správ alebo nastavenia viacerých zariadení fungovať správne.

          -

          @@ -1413,11 +1545,8 @@ streamed to your chat partners, between 5 minutes and 6 hours.

        • the chat.
        • To see the map and view locations of others, you need to turn on the feature in the advanced settings.
        • -
        • This feature will not share your location with anyone except your chat -partners. But: to show the map, we need to download map tiles from -mapbox.com, so if you view the map, mapbox.com is asked for the map of a -specific area. If this is a privacy risk for you, this feature might not be -for you. We are working on finding a decentralized alternative for Mapbox.
        • +
        • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
        • On desktop, the OS typically can’t determine your location. Instead you can right click on the map and describe a location, which is sent to the chat as a message, but also appears on the map.
        • @@ -1468,18 +1597,18 @@ vykonáva aplikácia Delta Chat.

          In this case, Delta Chat doesn’t need to watch the Inbox, and it’s enough to only watch the DeltaChat folder.

          -

          +

          - How can I change my account to a different e-mail address? + How can I use a different e-mail address with my profile?

          1. -

            Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

            Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

          2. @@ -1510,6 +1639,60 @@ it.

            +

            + + + Aké povolenia potrebuje Delta Chat? + + +

            + +

            V závislosti od používaného operačného systému +môžete byť požiadaní o udelenie povolení aplikácii. +Delta Chat robí toto s týmito povoleniami:

            + +
              +
            • Camera (can be disallowed) +
                +
              • take pictures and videos: for sending Photos
              • +
              +
            • +
            • Contacts (can be disallowed) +
                +
              • read your contacts: to discover contacts to chat with
              • +
              +
            • +
            • Location (can be disallowed) +
                +
              • access approximate location (network location sources): for the location streaming feature
              • +
              • access precise location (GPS and network location sources): for the location streaming feature
              • +
              +
            • +
            • Microphone (can be disallowed) +
                +
              • record audio: for audio messages
              • +
              +
            • +
            • Storage (can be disallowed) +
                +
              • modify or delete the contents of your SD card: to download message attachments
              • +
              • read the contents of your SD card: to share files with your contacts
              • +
              +
            • +
            • Other app capabilities +
                +
              • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
              • +
              • run at startup: so you don’t have to start Delta Chat manually
              • +
              • control vibration: for notifications
              • +
              • view network connections: to connect to your E-Mail provider
              • +
              • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
              • +
              • have full network access: to connect to your E-Mail provider
              • +
              • view Wi-Fi connections: to connect to your E-Mail provider
              • +
              • ask to ignore battery optimisations: for achieving “instant message delivery”
              • +
              +
            • +
            +

            @@ -1539,28 +1722,134 @@ blogpost.
          3. You can find an installation guide on our website.
        -

        +

        - Ak Delta Chat používa e-mail, je to naozaj Instantný Messenger? + Prečo musím zadávať svoje e-mailové heslo do Delta Chat? Je to bezpečné?

        +

        Rovnako ako v prípade iných e-mailových programov, ako sú Thunderbird, K9-Mail alebo Outlook, +program potrebuje heslo, aby ste ho mohli používať na odosielanie e-mailov. Samozrejme, +heslo je uložené iba vo vašom zariadení. Heslo sa prenáša iba na vášho poskytovateľa e-mailu (keď sa prihlásite), ktorý má aj tak prístup k vašim e-mailom.

        + +

        Ak používate poskytovateľa e-mailu s podporou OAuth2, ako je gmail.com alebo yandex.ru, +nie je potrebné ukladať heslo do zariadenia. V tomto prípade iba +používa sa prístupový token.

        + +

        Keďže Delta Chat je Open Source, môžete skontrolovať Zdrojový +Kód +ak chcete overiť, že vaše poverenia sú spracované bezpečne. Sme radi +o spätnej väzbe, vďaka ktorej je aplikácia bezpečnejšia pre všetkých našich používateľov.

        + +

        + + + Ktoré správy sa zobrazujú v Delta Chate? + + +

        + +

        By default, Delta Chat shows all e-mails.

        + +

        At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

        +
          -
        • Odosielanie a prijímanie správ zvyčajne trvá niekoľko sekúnd. Niekedy - existujú prípady, keď to trvá dlhšie, ale to platí pravdepodobne aj pre - akýkoľvek iný messenger.
        • -
        • Okamžité chatovanie funguje rýchlo, ak obe strany aktívne používajú aplikáciu. to je -niekedy pomalšie, ak aplikácia beží na pozadí.
        • -
        • Prijímanie správ potom môže trvať niekoľko minút, pretože Android aj iOS často -zastavia spustenie Delta Chatu na pozadí a iba príležitostne ho prebudia. Toto umelé oneskorenie je zvyčajne horšie na iOS ako na Androide.
        • -
        • Avšak, Android a iOS killne aplikácie bežiace na pozadí -je to -problém mnohých legitímnych aplikácií. Ďalšie informácie nájdete v časti -dontkillmyapp.com.
        • +
        • “No, chats only”: Only messages sent by other Delta Chat users and replies to +your Delta Chat messages are shown. This makes most sense if you use the same +e-mail account for normal e-mails as well.
        • +
        • “All”: Delta Chat shows all e-mails that are sent to your email address. This +makes sense if you want to use Delta Chat for all your e-mails, so no message +gets lost. This is the default setting.
        • +
        • “For accepted contacts”: Delta Chat shows all e-mails from contacts with whom +you already have a chat, but new chats only pop up for Delta Chat messages. +This helps to decide on a case-by-case basis whether you want to have a +conversation in Delta Chat or in a “normal” e-mail app.
        +

        + + + Podporuje Delta Chat e-maily HTML? + + +

        + +

        Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

        + +

        + + + Can I set the E-Mail Subject with Delta Chat? + + +

        + +

        Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

        + +

        So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

        + +

        + + + Na čo je dobré nastavenie „Odoslať kópiu sebe“? + + +

        + +

        Odoslaním kópie správ sebe samému zaistíte, že dostanete svoje vlastné +správy na všetkých zariadeniach. Ak máte viacero zariadení a nezapnete ich, vy +uvidíte iba správy od iných ľudí a správy, ktoré vy odošlete z + aktuálneho zariadenia.

        + +

        Kópia sa odošle do priečinka Doručená pošta a potom sa presunie do priečinka DeltaChat; nie je vložená do priečinka „Odoslané“. Delta Chat nikdy nič neodovzdáva do priečinka “Odoslané”, pretože by to znamenalo nahrať správu dvakrát (raz cez SMTP, a raz cez IMAP do priečinka Odoslané).

        + +

        The default setting for “Send Copy to Self” is “on”.

        + +

        + + + Prečo si môžem vybrať sledovanie priečinka „Odoslané“? + + +

        + +

        Jediný dôvod, prečo chcete sledovať priečinok Odoslané, je, ak používate iný +poštový program (napríklad Thunderbird) vedľa vašej aplikácie Delta Chat a chcete svoj MUA + aby sa zúčastňoval chatových konverzácií.

        + +

        Odporúčame však použiť Delta Chat Desktop Client; môžete si ho stiahnuť +na get.delta.chat. Možnosť sledovať „Odoslané“ +priečinok môže v budúcnosti zmiznúť. Bolo to zavedené v čase, kedy nebol +Delta Chat Desktop dostupný na všetkých platformách.

        + +

        + + + Prečo sa môžem rozhodnúť nesledovať priečinok DeltaChat? + + +

        + +

        Niektorí ľudia používajú Delta Chat ako bežný e-mailový klient a chcú používať priečinok Doručená pošta +pre ich mail, namiesto priečinku DeltaChat. Ak zakážete „Sledovať +priečinok DeltaChat“, mali by ste tiež zakázať „presunúť chatové správy do DeltaChat“. +V opačnom prípade nemusí odstraňovanie správ alebo nastavenia viacerých zariadení fungovať správne.

        +

        @@ -1582,6 +1871,23 @@ uses.

      • Autocrypt-enabled e-mail app.
      +

      + + + How can I delete my account? + + +

      + +

      As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

      + +

      If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      @@ -1594,59 +1900,6 @@ uses.
    83. Pozrite si Štandardy používané v Delta Chate.
    84. -

      - - - Was Delta Chat independently audited for security vulnerabilities? - - -

      - -

      The Delta Chat project underwent four independent security audits in the last years:

      - -
        -
      • -

        In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

        -
      • -
      • -

        In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

        -
      • -
      • -

        Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

        -
      • -
      • -

        Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

        -
      • -
      -

      @@ -1687,7 +1940,7 @@ completing Rust/Python bindings and instigating a Chat-bot eco-system.

    85. In 2021 we received further EU funding for two Next-Generation-Internet -proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-account support, improved QR-code contact and group setups and many networking improvements on all platforms.

      +proposals, namely for EPPD - e-mail provider portability directory (~97K EUR) and AEAP - email address porting (~90K EUR) which resulted in better multi-profile support, improved QR-code contact and group setups and many networking improvements on all platforms.

    86. From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the diff --git a/assets/help/sq/help.html b/src/main/assets/help/sq/help.html similarity index 78% rename from assets/help/sq/help.html rename to src/main/assets/help/sq/help.html index fe8c18656..90059c89b 100644 --- a/assets/help/sq/help.html +++ b/src/main/assets/help/sq/help.html @@ -4,17 +4,14 @@

    87. Grupe @@ -28,6 +25,15 @@
    88. Ç’ndodh, nëse aktivizoj “Fshi prej pajisjes mesazhe të vjetër”?
    89. +
    90. Instant message delivery and Push Notifications + +
    91. Fshehtëzim dhe Siguri
    92. Multi-klient @@ -59,9 +66,6 @@
    93. Diagnostikim
    94. Manual Transfer
    95. A ka ndonjë plan për të sjellë një Klient Web Delta Chat?
    96. -
    97. Përse hyn në punë rregullimi “Dërgojini Vetes Një Kopje”?
    98. -
    99. Pse mund të zgjedh të vëzhgoj dosjen “Të dërguar”?
    100. -
    101. Pse mund të zgjedh të mos e vëzhgoj dosjen DeltaChat?
    102. aplikacione webxdc
    103. @@ -83,12 +87,19 @@
    104. Të ndryshme
    105. @@ -104,8 +115,14 @@

      -

      Delta Chat është një aplikacion i ri bisedash që i dërgon mesazhet përmes email-i, të fshehtëzuar, nëse është e mundur, me Autocrypt. -Nuk ju duhet të regjistroheni gjëkundi, thjesht përdorni me Delta Chat-in llogarinë tuaj ekzistuese email.

      +

      Delta Chat is a reliable, decentralized and secure messaging app, +available for mobile and desktop platforms.

      + +

      Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. +You can signup anonymously to a variety of interoperable chatmail servers +which are minimal e-mail servers optimized for fast and secure operations. +Or you may use classic e-mail servers and an existing e-mail account +in which case Delta Chat acts as an e-mail app.

      @@ -117,9 +134,15 @@ -

      Me Delta Chat-in, mund t’i shkruani cilësdo adresë email ekzistuese - madje -edhe kur marrësi nuk përdor aplikacionin Delta Chat. Për marrësin s’është -e nevojshme të instalojë të njëjtin aplikacion me ju, si me programe të tjera.

      +

      To securely setup contact with others scan an invite QR code +or share an invite link. +This is required when using a (default) chatmail-based chat profile +because chatmail servers reject un-encrypted outgoing messages.

      + +

      If you create a chat profile with a classic e-mail address +you may manually create a contact if you know their e-mail address +and then write a message to them +even if the recipient is not using Delta Chat.

      @@ -130,45 +153,25 @@ e nevojshme të instalojë të njëjtin aplikacion me ju, si me programe të tje

        -
      • Independent of any company or services. You own your data.
      • -
      • Your data is not saved on a central server unless all users are using -the same e-mail servers
      • -
      • You do not distribute your address book to anyone.
      • -
      • Fast by the use of Push-IMAP.
      • -
      • Largest userbase - recipients not using Delta Chat can be reached as well.
      • -
      • No Spam - only messages of known users are shown by default.
      • -
      • End-to-end encryption via Autocrypt.
      • -
      • Copyleft and Standards based libre software.
      • -
      • Flexible identity with built-in support for multiple accounts
      • -
      - -

      - - - Cilat mesazhe shfaqen në Delta Chat? - - -

      - -

      Si parazgjedhje, Delta Chat i shfaq krejt email-et.

      - -

      Këtë mund ta ndryshoni te -“Rregullime -> Fjalosje & Media -> Shfaq Email-e Klasikë. Keni këto mundësi:

      - -
        -
      • “Jo, vetëm fjalosje”: Shfaqen vetëm mesazhe dërguar nga përdorues të tjerë -të Delta Chat-it dhe përgjigje për ta në mesazhet tuaj Delta Chat. Kjo ka kuptim -nëse përdorni të njëjtën llogari email edhe për email të zakonshëm.
      • -

        “Krejt”: Delta Chat-i i shfaq krejt email-et që janë dërguar te adresa juaj. Kjo -ka kuptim nëse e përdorni Delta Chat-in për krejt email-et tuaj, që kështu të mos -humbin mesazhe. - Kjo është parazgjedhja për këtë rregullim.

        +

        Anonymous chat profiles with fast, secure and interoperable chatmail servers +which offer instant Push Notifications for iOS and Android devices.

        +
      • +
      • +

        Pervasive multi-profile and multi-device support on all platforms.

        +
      • +
      • +

        Interactive web apps in chats for gaming and collaboration

        +
      • +
      • +

        Audited end-to-end encryption +safe against network and server attacks.

        +
      • +
      • +

        Free and Open Source software, both app and server side. +Built on E-mail and Web Internet Standards, +to avoid “yet another standard syndrome (xkcd 927)”

      • -
      • “Për kontakte të pranuar”: Delta Chat-i shfaq krejt email-et prej kontaktesh me -të cilët keni tashmë një fjalosje, por fjalosje të reja shfaqen vetëm për mesazhe -Delta Chat. Kjo ndihmon të vendoset për çdo rast nëse doni të keni një bisedë -në Delta Chat, apo në një aplikacion të zakonshëm email-esh.

      @@ -210,18 +213,25 @@ s’doni të merrni mesazhe prej këtij personi, shihni mundësinë e blloki

      - Si mund të shtoj shumë llogari, ose të kaloj nga njëra te tjetra? + What are profiles? How can I switch between them?

      -

      Mundeni të punoni kollaj me llogari shtesë në klientët Delta Chat për celular dhe desktop, duke klikuar:

      -
        -
      • mbi butonin e menusë dhe mandej “Ndërroni Llogari” (Android dhe desktop)
      • -
      • ose mbi ikonën e profilit dhe mandej “Shtoni Llogari” (iOS)
      • -
      +

      A profile is a name, a picture and some additional information for encrypting messages. +A profile lives on your device(s) only +and uses a chatmail or a classic e-mail server to transport messages.

      -

      Mundet edhe të doni të mësoni si të shtoni llogari në pajisje të shumta.

      +

      On first installation of Delta Chat a first profile is created.

      + +

      Later, you can tap your profile image in the upper left corner to Add Profiles +or to Switch Profiles.

      + +

      You may want to use separate profiles for political, family or work related activities, +or e. g. for a dedicated “spam-profile” with which you register at websites and platforms +that tend to cause unsolicited messages (“spam”) sooner or later.

      + +

      You may also wish to learn how to use the same profile on multiple devices.

      @@ -251,93 +261,21 @@ pajisje të re.

      -

      +

      - A mbulon Delta Chat-i email-e HTML? + Can I set a Signature Text/Status/Motto with Delta Chat?

      -

      Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

      - -

      - - - Pse më duhet të jap fjalëkalimin e email-it tim në Delta Chat? A është e sigurt kjo? - - -

      - -

      Si edhe me programe të tjerë email-i, bie fjala, Thunderbird-i, K9-Mail-i, ose -Outlook-u, programit i duhet fjalëkalimi, që kështu të mund të dërgoni email-e. -Sigurisht, fjalëkalimi depozitohet vetëm në pajisjen tuaj. Fjalëkalimi i transmetohet -vetëm furnizuesit të email-it tuaj (kur bëni hyrjen), i cili mund të hyjë te email-et -tuaj, sido qoftë.

      - -

      Nëse përdorni një furnizues email-i që mbulon OAuth2, bie fjala gmail.com ose -yandex.ru, s’ka nevojë të depozitoni fjalëkalimin tuaj në pajisje. Në këtë rast -do të përdoret vetëm një token hyrjesh.

      - -

      Ngaqë Delta Chat-i është Me Burim të Hapur, mund të kontrolloni Kodin -Burim, -nëse doni të verifikoni se a trajtohen me siguri kredencialet tuaja. Na gëzojnë -përshtypjet që e bëjn aplikacionin më të sigurt për krejt përdoruesit tanë.

      - -

      - - - Ç’leje lyp Delta Chat-i? - - -

      - -

      Në varësi të sistemit operativ në përdorim, mund -t’ju kërkohet t’i akordoni leje aplikacionit. -Ja se ç’bën Delta Chat-i me këto leje:

      - -
        -
      • Mbi kamerën (mund të çaktivizohet) -
          -
        • të bëjë foto dhe video: për dërgim Fotosh
        • -
        -
      • -
      • Mbi kontaktet (mund të çaktivizohet) -
          -
        • të lexojë kontaktet tuaja: për të zbuluar kontakte për bisedë
        • -
        -
      • -
      • Mbi vendndodhjen (mund të çaktivizohet) -
          -
        • të njohë vendndodhjen me përafërsi (burime vendndodhjeje rrjeti): për veçorinë e transmetimit të vendndodhjesh
        • -
        • të njohë vendndodhjen e përpiktë (GPS dhe burime vendndodhjeje rrjeti): për veçorinë e transmetimit të vendndodhjesh
        • -
        -
      • -
      • Mbi mikrofonin (mund të çaktivizohet) -
          -
        • të incizojë audio: për mesazhe audio
        • -
        -
      • -
      • Mbi depozitimin (mund të çaktivizohet) -
          -
        • të ndryshojë ose fshijë lëndën në kartën tuaj SD: për shkarkim bashkëngjitjesh mesazhesh
        • -
        • të lexojë lëndën e kartës tuaj SD: për të ndarë kartela me kontaktet tuaj
        • -
        -
      • -
      • Aftësi të tjera të aplikacionit -
          -
        • të ndryshojë rregullimet tuaja mbi audion: që të mund të zgjidhni zile dhe volum për njoftime dhe mesazhe audio
        • -
        • të xhirojë gjatë nisjes së sistemit: që të mos ju duhet ta nisni Delta Chat-in dorazi
        • -
        • të kontrollojë dridhjen: për njoftime
        • -
        • të shohë lidhje në rrjet: për t’u lidhur me furnizuesin e shërbimit tuaj email
        • -
        • të pengojë telefonin tuaj të flejë: që të mund ta kopjoni më kollaj kodin e sigurisë gjatë Mesazhit të Ujdisjes së Autocrypt-it
        • -
        • të ketë hyrje të plotë në rrjet: për t’u lidhur me furnizuesin e shërbimit tuaj email
        • -
        • të shohë lidhjet Wi-Fi: për t’u lidhur me furnizuesin e shërbimit tuaj email
        • -
        • të kërkojë shpërfillje të optimizimeve për baterinë: për përdoruesit që duan t’i marrin mesazhet gjatë gjithë kohës
        • -
        -
      • -
      +

      Yes, +you can do so under “Settings > Profile > Signature Text”. +Your contacts who use Delta Chat will see it +when they view your contact details. +To everyone else, +It will appear as an e-mail signature +below the text of all your messages.

      @@ -397,22 +335,40 @@ u merakosni dhe lëruni ca kohë ;-) t’u dërgoni një mesazh, ose të shkruani te një grup ku bëjnë pjesë edhe ata. -

      +

      - Si mund ta fshij llogarinë time? + How do disappearing messages work?

      -

      Ngaqë për Delta Chat-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, s’mund t’ju ndihmojmë për këtë.

      +

      You can turn on “disappearing messages” +in the settings of a chat, +at the top right of the chat window, +by selecting a time span +between 1 minute and 5 weeks.

      -

      Nëse doni ta mbani llogarinë, -por të çinstaloni Delta Chat-in, -rekomandohet të braktisni çfarëdo grupi fjalosjeje, para çinstalimit të Delta Chat-it.

      +

      Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

      + +

      Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

      + +

      Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

      @@ -546,6 +502,170 @@ automatikisht mesazhe të vjetër. sapo të jenë më të vjetër se aq. +

      + + + Instant message delivery and Push Notifications + + +

      + +

      + + + What are Push Notifications? How can I get instant message delivery? + + +

      + +

      Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

      + +

      Push Notifications work with all chatmail servers on

      + +
        +
      • +

        iOS devices, by integrating with Apple Push services.

        +
      • +
      • +

        Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

        +
      • +
      + +

      As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

      + +

      + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Are Push notifications enabled / needed on Android devices? + + +

      + +

      If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

      + +

      In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

      + +
        +
      • +

        Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

        +
      • +
      • +

        Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

        +
      • +
      • +

        Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

        +
      • +
      + +

      Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

      + +

      + + + How private are Delta Chat Push Notifications? + + +

      + +

      Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

      + +

      Here is how Delta Chat apps perform Push Notification delivery:

      + +
        +
      • +

        A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

        +
      • +
      • +

        When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

        +
      • +
      • +

        The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

        +
      • +
      • +

        The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

        +
      • +
      + +

      As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

      + +

      The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

      + +

      Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

      + +

      + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

      + +

      Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

      + +

      Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

      +

      @@ -568,7 +688,7 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

      -

      Secure-Join protocols +

      Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark @@ -599,49 +719,32 @@ guarantee end-to-end encrypted messages.

      -

      Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

      +

      If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

      -

      Inviter side:

      +

      If you are together in person, +you can show a QR code to your chat partner.

      • -

        Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

        +

        For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

      • -

        Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

        +

        For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

      -

      Joiner side:

      +

      Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

      -
        -
      • -

        Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

        -
      • -
      • -

        Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

        -
      • -
      • -

        Tap “OK”

        -
      • -
      - -

      Both Inviter and Joiner:

      - -

      Wait while Secure-Join network messages are exchanged between both devices.

      +

      Now wait while Secure-Join network messages are exchanged between both devices.

      • @@ -695,7 +798,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

        For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

        @@ -723,7 +826,7 @@ even if the contact is a member there.

        Your contact is using Delta Chat on a second device (phone or laptop)

        If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

        @@ -731,8 +834,8 @@ and guaranteed encryption is established with both devices of your contact.

        Your contact reinstalled Delta Chat using their old account login

        If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

        @@ -753,7 +856,7 @@ guaranteed end-to-end encryption will be automatically re-established.

        Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

        In any case, you can not do much else than accept the warning. @@ -919,12 +1022,12 @@ deliver messages to recipient’s devices.

        Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

        @@ -983,7 +1086,7 @@ and their non-Autocrypt e-mail app.

      If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -1001,10 +1104,10 @@ even if the direct chat between you two has a

      The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

      +and turning on disappearing messages.

      -

      Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

      Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

      Nëse s’ju duhet te shërbyesi një kopje jetëgjatë e mesazheve tuaj, @@ -1083,11 +1186,12 @@ Kujdes: Sigurohuni se kyçi s’është i mbrojtur me fjalëkalim, ose hiqeni fj -

      Ka një mundësi të mirë që problemi të jetë se kyçi juaj është fshehtëzuar -dhe/ose përdor një fjalëkalim. Kyçe të tillë nuk mbulohen nga Delta Chat-i. Mund -të hiqni fshehtëzimin me frazëkalim dhe fjalëkalimin dhe të riprovoni. Nëse doni -të mbani frazëkalimin tuaj, do t’ju duhet të krijoni një alias email-i për ta përdorur -me Delta Chat-in, që kyçi i Delta Chat-it të jetë i lidhur me këtë alias email-i.

      +

      Ka shumë mundësi që problemi të jetë se kyçi juaj është i fshehtëzuar dhe/ose +përdor një fjalëkalim. Kyçe të tillë nuk mbulohen nga Delta Chat. Ju lutemi, +hiqeni fshehtëzimin dhe fjalëkalimin dhe riprovoni importimin.

      + +

      Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

      Për sa u takon formateve, Delta Chat-i mbulon formate të rëndomtë OpenPGP kyçesh private, megjithatë, ka pak gjasa që të mbulojmë 100% të krejt kyçeve @@ -1102,6 +1206,66 @@ fjalëkalimit tuaj një vlerë të zbrazët, që nga dritarja Administrim Kyçes GnuPG-në mund ta bëni përmes rreshti urdhrash. Për programe të tjera, mund të gjeni një zgjidhje në internet.

      +

      + + + A është bërë auditim i pavarur i Delta Chat-it për cenueshmëri sigurie? + + +

      + +

      The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        Në fillim të 2023-shit, ndreqëm probleme sigurie dhe privatësie me +veçorinë “aplikacione web dhënë në një fjalosje”, të lidhura me dështime +në izolimin e tyre, veçanërisht nën Chromium. Në vazhdim kaluam një auditim +të pavarur sigurie prej Cure53 dhe krejt problemet e gjetura u ndreqën në +seritë 1.36 të hedhura në qarkullim në prill të 2023-shit. +Shihni këtu, për shpjegim të plotë të sfondit për sigurinë lidhur me E2E në web.

        +
      • +
      • +

        Në fillim të 2023-it, Cure53 analizoi qoftë fshehtëzimin +e transporteve për lidhje rrjeti të Delta Chat-it, qoftë një formësim të riprodhueshëm +shërbyesi poste si të rekomanduarin në këtë sajt. +Mund të lexoni më tepër rreth auditimit në blogun tonë, +ose të lexoni raportin e plotë këtu.

        +
      • +
      • +

        Më 2020-n, Include Security analizoi bazën +në Rust të Delta Chat-it, si dhe bibliotekat IMAP, SMTP +dhe TLS. +S’gjeti ndonjë problem kritik apo të rëndësisë së madhe. +Raporti ngriti pak dobësi të rëndësisë mesatare - +ato në vetvete s’përbëjnë kërcënim për përdoruesit e Delta Chat-it +ngaqë varen në mjedisin në të cilin përdoret Delta Chat-i. +Për arsye përputhjeje dhe përdorimi, +s’mund t’i shmangim krejt ato +dhe vendosëm të ofrojmë rekomandime sigurie për përdoruesit e kërcënuar. +Mund të lexoni raportin e plotë këtu.

        +
      • +
      • +

        Më 2019-n, Include Security analizoi libraritë +PGP dhe +RSA të Delta Chat-it. +S’gjeti probleme kritike, +por dy çështje me rëndësi të lartë që i ndreqim në vazhdim. +Nxori gjithashtu një çështje të rëndësisë mesatare dhe disa çështje me më pak rëndësi, +por s’kishte ndonjë rrugë për t’i shfrytëzuar këto cenueshmëri në sendërtimin e Delta Chat-it. +Pavarësisht, disa nga këto i ndreqëm që kur përfundoi auditimi. +Mund të lexoni raportin e plotë këtu.

        +
      • +
      +

      @@ -1118,7 +1282,7 @@ Për programe të tjera, mund të gjeni një zgjidhje në internet.

      -

      Po Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

      +

      Po Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      • @@ -1156,10 +1320,19 @@ Njëra pajisja s’ka nevojë për tjetrën që të funksionojë.

      • Kontrolloni sërish që të dyja pajisjet të gjenden në të njëjtin rrjet Wi-Fi ose klasik

      • +
      • +

        On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

        +
      • Sistemi juaj mund të ketë një “firewall personal”, që dihet se shkakton probleme (veçanërisht në Windows). Çaktivizoni firewall-in personal për Delta Chat-in në të dy anët dhe riprovoni

        +
      • +
      • +

        Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

      • Garantoni se ka depozitë të mjaftueshme te pajisja vendmbërritje

        @@ -1194,8 +1367,8 @@ provoni shpërnguljen dorazi të përshkruar më poshtë

        screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
      • -
      • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
      • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
        • If you use iOS: and you encounter difficulties, maybe @@ -1228,57 +1401,6 @@ Windows Desktop, ose AppImage për Linux. Mund t’i gjeni te get.delta.chat.
        -

        - - - Përse hyn në punë rregullimi “Dërgojini Vetes Një Kopje”? - - -

        - -

        Dërgimi vetes i një kopjeje të mesazheve tuaj siguron marrjen e mesazheve tuaj -në krejt pajisjet. Nëse keni disa pajisje dhe nuk i mbani ndezur, shihni vetëm -mesazhet prej të tjerëve, dhe mesazhet që dërgoni prej pajisjes që keni hapur -në atë çast.

        - -

        Kopja dërgohet te Të marrët, dhe mandej kalohet te dosja DeltaChat; nuk vendoset -te dosja “Të dërguar”. Delta Chat-i nuk ngarkon kurrë ndonjë gjë te dosja -Të dërguar, ngaqë kjo do të thoshte ngarkim dy herë të një mesazhi (një herë -përmes SMTP-s, dhe një herë përmes IMAP-it në dosjen Të dërguar).

        - -

        Parazgjedhja për rregullimin dërgoja-vetes është “jo”.

        - -

        - - - Pse mund të zgjedh të vëzhgoj dosjen “Të dërguar”? - - -

        - -

        Arsyeja e vetme pse dikush mund të dojë të vëzhgojë dosjen Të marrë është kur -përdoret tjetër program email-sh (bie fjala, Thunderbird-i) në krah të -aplikacionit tuaj Delta Chat, dhe doni që MUA juaj të marrë pjesë në biseda.

        - -

        Sidoqoftë, rekomandojmë të përdoret Klienti Desktop i Delta Chat-it; mund ta -shkarkoni që nga get.delta.chat. Mundësia për vëzhgim -të dosjes “Të dërguar” mund të hiqet në të ardhmen. Qe prurë në kohët kur s’kish -klient Desktop Delta Chat për krejt platformat.

        - -

        - - - Pse mund të zgjedh të mos e vëzhgoj dosjen DeltaChat? - - -

        - -

        Disa e përdorin Delta Chat-in si një klient të rregullt email, dhe duan -ta përdorin dosjen Të marrë për email-in e tyre, në vend se dosjen DeltaChat. -Nëse çaktivizoni “Vëzhgo dosjen DeltaChat”, duhet të çaktivizoni edhe “kalo -mesazhe bisedash te DeltaChat”. Përndryshe, fshirja e mesazheve në instalime me -shumë pajisje mund të mos punojë si duhet.

        -

        @@ -1416,26 +1538,20 @@ kufizimesh sasie email-esh që dërgohen dhe konsum trafiku në rrjet).

        • -
        • Dhënien e vendndodhjes mund ta aktivizoni te ndarja “veçori eksperimentale” -e rregullimeve të mëtejshme.
        • -
        • Nëse doni të jepni vendndodhjen tuaj në një fjalosje, kaloni te “bashkëngjit” dhe -përzgjidhni “vendndodhje”. Tanimë mund të caktoni një interval kohor gjatë -të cilit vendndodhja juaj do t’u tregohet partnerëve të fjalosjes tuaj, nga 5 minuta -deri në 6 orë.
        • -
        • Kur ndryshon vendndodhja juaj, të tjerët në fjalosje mund ta shohin te një hartë -te fjalosja.
        • -
        • Që të shihni hartën dhe shihni vendndodhjen e të tjerëve, lypset ta aktivizoni -veçorinë te rregullimet e mëtejshme.
        • -
        • Kjo veçori s’do t’i tregojë vendndodhjen tuaj tjetërkujt nga partnerët e fjalosjes -tuaj. Por: që të shfaqin hartën, na duhet të shkarkojmë pjesë harte nga -mapbox.com, ndaj, nëse shihni hartën, mapbox.com i kërkohet harta e -një zone të caktuar. Nëse kjo përbën rrezik privatësie për ju, kjo veçori s’bën -për ju. Po punojmë për të gjetur një alternativë të decentralizuar në vend të -Mapbox-it.
        • -
        • Në desktop, OS më vete s’mund të përcaktojë vendndodhjen tuaj. Në vend -të kësaj, mund të djathtasklikoni mbi hartën dhe të përshkruani një -vendndodhje, e cila dërgohet te fjalosja si një mesazh, por që shfaqet edhe -te harta.
        • +
        • You can turn on location streaming in the “experimental features” section of +the advanced settings.
        • +
        • Now, if you want to share your location in a chat, go to “attach” and select +“location”. You can now set a time frame in which your location will be +streamed to your chat partners, between 5 minutes and 6 hours.
        • +
        • When your location changes, the others in the chat can view it on a map in +the chat.
        • +
        • To see the map and view locations of others, you need to turn on the feature +in the advanced settings.
        • +
        • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
        • +
        • On desktop, the OS typically can’t determine your location. Instead you can +right click on the map and describe a location, which is sent to the chat as +a message, but also appears on the map.

        @@ -1492,8 +1608,8 @@ DeltaChat. Zakonisht kjo do të bëhej nga aplikacioni Delta Chat.

        1. -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        2. @@ -1524,6 +1640,60 @@ it.

        +

        + + + Ç’leje lyp Delta Chat-i? + + +

        + +

        Në varësi të sistemit operativ në përdorim, mund +t’ju kërkohet t’i akordoni leje aplikacionit. +Ja se ç’bën Delta Chat-i me këto leje:

        + +
          +
        • Camera (can be disallowed) +
            +
          • take pictures and videos: for sending Photos
          • +
          +
        • +
        • Contacts (can be disallowed) +
            +
          • read your contacts: to discover contacts to chat with
          • +
          +
        • +
        • Location (can be disallowed) +
            +
          • access approximate location (network location sources): for the location streaming feature
          • +
          • access precise location (GPS and network location sources): for the location streaming feature
          • +
          +
        • +
        • Microphone (can be disallowed) +
            +
          • record audio: for audio messages
          • +
          +
        • +
        • Storage (can be disallowed) +
            +
          • modify or delete the contents of your SD card: to download message attachments
          • +
          • read the contents of your SD card: to share files with your contacts
          • +
          +
        • +
        • Other app capabilities +
            +
          • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
          • +
          • run at startup: so you don’t have to start Delta Chat manually
          • +
          • control vibration: for notifications
          • +
          • view network connections: to connect to your E-Mail provider
          • +
          • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
          • +
          • have full network access: to connect to your E-Mail provider
          • +
          • view Wi-Fi connections: to connect to your E-Mail provider
          • +
          • ask to ignore battery optimisations: for achieving “instant message delivery”
          • +
          +
        • +
        +

        @@ -1553,30 +1723,143 @@ siç përshkruhet udhërrëfyes instalimi në sajtin tonë.

      -

      +

      - Sa kohë që Delta Chat-i përdor email, a është vërtet një Shkëmbyes Mesazhesh të Atypëratyshme? + Pse më duhet të jap fjalëkalimin e email-it tim në Delta Chat? A është e sigurt kjo?

      +

      Si edhe me programe të tjerë email-i, bie fjala, Thunderbird-i, K9-Mail-i, ose +Outlook-u, programit i duhet fjalëkalimi, që kështu të mund të dërgoni email-e. +Sigurisht, fjalëkalimi depozitohet vetëm në pajisjen tuaj. Fjalëkalimi i transmetohet +vetëm furnizuesit të email-it tuaj (kur bëni hyrjen), i cili mund të hyjë te email-et +tuaj, sido qoftë.

      + +

      Nëse përdorni një furnizues email-i që mbulon OAuth2, bie fjala gmail.com ose +yandex.ru, s’ka nevojë të depozitoni fjalëkalimin tuaj në pajisje. Në këtë rast +do të përdoret vetëm një token hyrjesh.

      + +

      Ngaqë Delta Chat-i është Me Burim të Hapur, mund të kontrolloni Kodin +Burim, +nëse doni të verifikoni se a trajtohen me siguri kredencialet tuaja. Na gëzojnë +përshtypjet që e bëjn aplikacionin më të sigurt për krejt përdoruesit tanë.

      + +

      + + + Cilat mesazhe shfaqen në Delta Chat? + + +

      + +

      Si parazgjedhje, Delta Chat i shfaq krejt email-et.

      + +

      At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

      +
        -
      • Normalisht, dërgimi dhe marrja e mesazheve ha ca sekonda. Ndonjëherë ka raste -kur kjo zgjat pak më shumë, por mund të thuhet se kjo është e vërtetë edhe për -çfarëdo shkëmbyesi tjetër mesazhesh.
      • -
      • Biseda e atypëratyshme funksionon shpejt, nëse të dy palët përdorin aktivisht -aplikacionin. Ndonjëherë është më e ngadaltë, nëse aplikacioni xhiron në -prapaskenë.
      • -
      • Në raste të tilla, marrja e mesazheve mund të dojë minuta, ngaqë si Android-i, -ashtu edhe iOS-i shpesh e ndalin funksionimin në prapaskenë të Delta Chat-it, -dhe e zgjojnë vetëm me raste. Kjo vonesë artificiale zakonisht është më keq në -iOS, se sa në Android.
      • -
      • Sido qoftë, fakti që Android-i dhe iOS-i asgjësojnë aplikacione që xhirojnë në -prapaskenë është një problem për mjaft aplikaicone të ligjshme. Për më tepër -të dhëna, shihni dontkillmyapp.com.
      • +
      • “Jo, vetëm fjalosje”: Shfaqen vetëm mesazhe dërguar nga përdorues të tjerë +të Delta Chat-it dhe përgjigje për ta në mesazhet tuaj Delta Chat. Kjo ka kuptim +nëse përdorni të njëjtën llogari email edhe për email të zakonshëm.
      • +
      • +

        “Krejt”: Delta Chat-i i shfaq krejt email-et që janë dërguar te adresa juaj. Kjo +ka kuptim nëse e përdorni Delta Chat-in për krejt email-et tuaj, që kështu të mos +humbin mesazhe. + Kjo është parazgjedhja për këtë rregullim.

        +
      • +
      • “Për kontakte të pranuar”: Delta Chat-i shfaq krejt email-et prej kontaktesh me +të cilët keni tashmë një fjalosje, por fjalosje të reja shfaqen vetëm për mesazhe +Delta Chat. Kjo ndihmon të vendoset për çdo rast nëse doni të keni një bisedë +në Delta Chat, apo në një aplikacion të zakonshëm email-esh.
      +

      + + + A mbulon Delta Chat-i email-e HTML? + + +

      + +

      Yes, incoming HTML messages come with a “Show full message” button. +Outgoing messages always use plain text.

      + +

      + + + Can I set the E-Mail Subject with Delta Chat? + + +

      + +

      Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

      + +

      So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

      + +

      + + + Përse hyn në punë rregullimi “Dërgojini Vetes Një Kopje”? + + +

      + +

      Dërgimi vetes i një kopjeje të mesazheve tuaj siguron marrjen e mesazheve tuaj +në krejt pajisjet. Nëse keni disa pajisje dhe nuk i mbani ndezur, shihni vetëm +mesazhet prej të tjerëve, dhe mesazhet që dërgoni prej pajisjes që keni hapur +në atë çast.

      + +

      Kopja dërgohet te Të marrët, dhe mandej kalohet te dosja DeltaChat; nuk vendoset +te dosja “Të dërguar”. Delta Chat-i nuk ngarkon kurrë ndonjë gjë te dosja +Të dërguar, ngaqë kjo do të thoshte ngarkim dy herë të një mesazhi (një herë +përmes SMTP-s, dhe një herë përmes IMAP-it në dosjen Të dërguar).

      + +

      The default setting for “Send Copy to Self” is “on”.

      + +

      + + + Pse mund të zgjedh të vëzhgoj dosjen “Të dërguar”? + + +

      + +

      Arsyeja e vetme pse dikush mund të dojë të vëzhgojë dosjen Të marrë është kur +përdoret tjetër program email-sh (bie fjala, Thunderbird-i) në krah të +aplikacionit tuaj Delta Chat, dhe doni që MUA juaj të marrë pjesë në biseda.

      + +

      Sidoqoftë, rekomandojmë të përdoret Klienti Desktop i Delta Chat-it; mund ta +shkarkoni që nga get.delta.chat. Mundësia për vëzhgim +të dosjes “Të dërguar” mund të hiqet në të ardhmen. Qe prurë në kohët kur s’kish +klient Desktop Delta Chat për krejt platformat.

      + +

      + + + Pse mund të zgjedh të mos e vëzhgoj dosjen DeltaChat? + + +

      + +

      Disa e përdorin Delta Chat-in si një klient të rregullt email, dhe duan +ta përdorin dosjen Të marrë për email-in e tyre, në vend se dosjen DeltaChat. +Nëse çaktivizoni “Vëzhgo dosjen DeltaChat”, duhet të çaktivizoni edhe “kalo +mesazhe bisedash te DeltaChat”. Përndryshe, fshirja e mesazheve në instalime me +shumë pajisje mund të mos punojë si duhet.

      +

      @@ -1598,6 +1881,23 @@ uses. Autocrypt-enabled e-mail app. +

      + + + Si mund ta fshij llogarinë time? + + +

      + +

      Ngaqë për Delta Chat-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, s’mund t’ju ndihmojmë për këtë.

      + +

      Nëse doni ta mbani llogarinë, +por të çinstaloni Delta Chat-in, +rekomandohet të braktisni çfarëdo grupi fjalosjeje, para çinstalimit të Delta Chat-it.

      +

      @@ -1610,57 +1910,6 @@ uses.
    106. Shihni Standarde të përdorur në Delta Chat.
    107. -

      - - - A është bërë auditim i pavarur i Delta Chat-it për cenueshmëri sigurie? - - -

      - -

      Projekti Delta Chat ka pasur katër auditime të pavarur sigurie gjatë viteve të fundit:

      - -
        -
      • -

        Më 2019-n, Include Security analizoi libraritë -PGP dhe -RSA të Delta Chat-it. -S’gjeti probleme kritike, -por dy çështje me rëndësi të lartë që i ndreqim në vazhdim. -Nxori gjithashtu një çështje të rëndësisë mesatare dhe disa çështje me më pak rëndësi, -por s’kishte ndonjë rrugë për t’i shfrytëzuar këto cenueshmëri në sendërtimin e Delta Chat-it. -Pavarësisht, disa nga këto i ndreqëm që kur përfundoi auditimi. -Mund të lexoni raportin e plotë këtu.

        -
      • -
      • -

        Më 2020-n, Include Security analizoi bazën -në Rust të Delta Chat-it, si dhe bibliotekat IMAP, SMTP -dhe TLS. -S’gjeti ndonjë problem kritik apo të rëndësisë së madhe. -Raporti ngriti pak dobësi të rëndësisë mesatare - -ato në vetvete s’përbëjnë kërcënim për përdoruesit e Delta Chat-it -ngaqë varen në mjedisin në të cilin përdoret Delta Chat-i. -Për arsye përputhjeje dhe përdorimi, -s’mund t’i shmangim krejt ato -dhe vendosëm të ofrojmë rekomandime sigurie për përdoruesit e kërcënuar. -Mund të lexoni raportin e plotë këtu.

        -
      • -
      • -

        Në fillim të 2023-it, Cure53 analizoi qoftë fshehtëzimin -e transporteve për lidhje rrjeti të Delta Chat-it, qoftë një formësim të riprodhueshëm -shërbyesi poste si të rekomanduarin në këtë sajt. -Mund të lexoni më tepër rreth auditimit në blogun tonë, -ose të lexoni raportin e plotë këtu.

        -
      • -
      • -

        Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

        -
      • -
      -

      diff --git a/src/main/assets/help/uk/help.html b/src/main/assets/help/uk/help.html new file mode 100644 index 000000000..72962b014 --- /dev/null +++ b/src/main/assets/help/uk/help.html @@ -0,0 +1,1458 @@ + + + + + +

      + + + Що таке Delta Chat? + + +

      + +

      Delta Chat - це надійний, децентралізований та безпечний додаток для обміну повідомленнями, доступний для мобільних і десктопних платформ.

      + +

      Delta Chat схожий на Whatsapp або Telegram, але ви також можете використовувати його як додаток електронної пошти. Ви можете анонімно зареєструватися на різних сумісних chatmail-серверах які є мінімальними поштовими серверами, оптимізованими для швидкої та безпечної роботи. Або ви можете використовувати класичні поштові сервери та існуючий обліковий запис електронної пошти в цьому випадку Delta Chat буде працювати як поштовий додаток.

      + +

      + +

      + + + Як мені знайти людей для спілкування? + + +

      + +

      Щоб безпечно встановити контакт з іншими відскануйте QR-код запрошення або поділіться посиланням на запрошення. Це потрібно, якщо ви використовуєте (за замовчуванням) профіль чату на основі chatmail оскільки chatmail-сервери відхиляють незашифровані вихідні повідомлення.

      + +

      Якщо ви створюєте профіль чату з класичною адресою електронної пошти ви можете створити контакт вручну, якщо знаєте його електронну адресу а потім написати йому повідомлення навіть якщо одержувач не використовує Delta Chat.

      + +

      + + + Які переваги Delta Chat у порівнянні з іншими месенджерами? + + +

      + + + +

      + + + Що робити, якщо я очікую повідомлення від когось, кому раніше не писав? + + +

      + +
        +
      • Якщо повідомлення приходить від невідомого контакту, воно відображається як запит. ви потрібно прийняти запит, перш ніж ви зможете відповісти.
      • +
      • Ви також можете “видалити” його, якщо ви не хочете зараз спілкуватися з ними. Це не видаляє повідомлення на сервері, лише на вашому пристрої. Отже, ви можете як і раніше обробляти повідомлення в іншій поштовій програмі.
      • +
      • Якщо ви видалите запит, майбутні повідомлення від цього контакту все одно відображатимуться як запит на повідомлення, щоб ви могли змінити свою думку. Якщо дуже не хочеться отримувати повідомлення від цієї особи, подумайте про її блокування.
      • +
      + +

      + + + Чи підтримує Delta Chat вкладення у вигляді фото, відео тощо? + + +

      + +
        +
      • +

        Так. Крім звичайного тексту, всі вкладення електронної пошти відображаються у вигляді окремих повідомлень. Вихідні повідомлення автоматично отримують вкладення.

        +
      • +
      • +

        З міркувань продуктивності, зображення оптимізовані та надсилаються в меншому розмірі за замовчуванням, але ви можете надіслати їх як «файл», щоб зберегти оригінал.

        +
      • +
      + +

      + + + Що таке профілі? Як я можу перемикатися між ними? + + +

      + +

      Профіль - це ім’я, зображення і деяка додаткова інформація для шифрування повідомлень. Профіль існує лише на вашому пристрої (пристроях) і використовує чат або класичний поштовий сервер для передачі повідомлень.

      + +

      Під час першого встановлення Delta Chat створюється перший профіль.

      + +

      Пізніше ви можете натиснути на зображення вашого профілю у верхньому лівому кутку, щоб вибрати Додати профілі або Переключити профілі.

      + +

      Ви можете використовувати окремі профілі для політичної, сімейної або робочої діяльності, або, наприклад, для спеціального “спам-профілю”, з яким ви реєструєтесь на веб-сайтах і платформах які рано чи пізно починають надсилати небажані повідомлення (“спам”).

      + +

      Ви також можете дізнатися як використовувати один і той самий профіль на декількох пристроях.

      + +

      + + + Хто бачить моє зображення профілю? + + +

      + +
        +
      • +

        Ви можете додати зображення профілю в ваших налаштуваннях. Якщо ви пишете комусь із ваших контактів чи додаєте їх через QR код, вони автоматично побачать ваше зображення профілю.

        +
      • +
      • +

        Контакти, які не використовують Delta Chat, не бачать зображення профілю (однак, звичайно, вони можуть встановити Delta Chat :)

        +
      • +
      • +

        Із міркувань приватності, ніхто не бачить ваше зображення профілю доки ви їм не напишете.

        +
      • +
      • +

        Ваше зображення профілю не надсилається із кожним повідомленням, але достатньо регулярно для того щоб ваші контакти заново отримували ваше зображення профілю, навіть якщо вони додали новий пристрій.

        +
      • +
      + +

      + + + Чи можу я встановити текст підпису/статусу/девізу у Delta Chat? + + +

      + +

      Так, ви можете зробити це в розділі “Налаштування > Профіль > Текст підпису”. Ваші контакти, які використовують Delta Chat, побачать його коли переглядатимуть ваші контактні дані. Для всіх інших, він з’явиться як підпис в електронному листі під текстом усіх ваших повідомлень.

      + +

      + + + Що значить Закріплення, Приглушення, Архівування? + + +

      + +

      Використовуйте ці інструменти, щоб організувати ваші чати і тримати все на своєму місці:

      + +
        +
      • +

        Закріплені чати завжди залишаються першими в списку чатів. Ви можете використовувати їх, щоб мати швидкий доступ до ваших найулюбленіших чат або тимчасово аби про щось не забути.

        +
      • +
      • +

        Приглушіть чати якщо ви не хочете отримувати сповіщення для них. Приглушені чати залишаються на місці і ви також можете закріпити приглушений чат.

        +
      • +
      • +

        Архівуйте чати, якщо ви більше не хочете бачити їх у своєму списку чатів. +Заархівовані чати залишаються доступними над списком чатів або через пошук.

        +
      • +
      • +

        Коли архівний чат отримує нове повідомлення, якщо не приглушений, він вискочить з архіву і повернеться у ваш список чатів. +Приглушені чати залишаються заархівованим доки ви не розархівуєте їх вручну.

        +
      • +
      + +

      Щоб заархівувати або закріпити чат, довго торкніться (Android), скористайтеся меню чату (Android/комп’ютер) або проведіть пальцем ліворуч (iOS); щоб вимкнути звук чату, скористайтеся меню чату (Android/комп’ютер) або профілем чату (iOS).

      + +

      + + + Що означає зелена точка? + + +

      + +
        +
      • Починаючи з Delta Chat 1.34, ви іноді можете бачити “зелену крапку” поруч із аватаром контакту. Це означає, що контакт «нещодавно бачили».
      • +
      • Детально: це означає, що за останні 10 хвилин Delta Chat бачив їх:
      • +
      • або тому, що вони надіслали вам повідомлення безпосередньо,
      • +
      • тому що вони написали щось групі, учасником якої є ви обоє,
      • +
      • тому що вони надіслали вам сповіщення про прочитання повідомлення, яке ви написали,
      • +
      • або тому, що вони надіслали дані до вашої програми Delta Chat за допомогою a приватна програма. +– Отже, це не онлайн-статус у реальному часі – і якщо хтось не відповідає відразу, навіть якщо вони, здаються, онлайн, не хвилюйтесь і дайте їм трохи простору ;-) +– З іншого боку, інші не завжди «побачать, що ви онлайн». Якщо ви вимкнули сповіщення про прочитання, вони не побачать зелену крапку, доки ви не надішлете їм повідомлення або напишете у групу, до якої вони входять.
      • +
      + +

      + + + Як працюють повідомлення, що зникають? + + +

      + +

      Увімкнути “повідомлення, що зникають” можна в налаштуваннях чату, у верхньому правому куті вікна чату, вибравши проміжок часу від 1 хвилини до 5 тижнів.

      + +

      Доки налаштування не буде знову вимкнено, додаток Delta Chat кожного учасника чату піклується про видалення повідомлень через вибраний проміжок часу. Проміжок часу починається коли одержувач вперше побачив повідомлення в Delta Chat. Повідомлення видаляються як з кожної поштової скриньки на сервері, так і в самому додатку.

      + +

      Зверніть увагу, що ви можете покладатися на зникнення повідомлень лише доти, доки ви довіряєте своїм співрозмовникам; зловмисники можуть робити фотографії, або іншим чином зберігати, копіювати або пересилати повідомлення перед видаленням.

      + +

      Крім того, якщо один із співрозмовників видаляє Delta Chat, повідомлення не будуть видалені з його поштової скриньки. Швидше за все, їх також більше не можна буде розшифрувати (якщо вони були зашифровані).

      + +

      + + + Групи + + +

      + +

      + + + Створення групи + + +

      + +
        +
      • Оберіть Новий чат, потім Нова групи у меню в верхньому правому кутку або натисніть відповідну кнопку у Android/iOS.
      • +
      • На наступному екрані виберіть учасники групи та встановіть назву групи. Ви також можете обрати аватар групи.
      • +
      • Як тільки ви напишете перше повідомлення у групу, усі учасники будуть проінформовані про нову групу і зможуть відповісти у нову групу (доки ви не напишете повідомлення у групі, група залишатиметься невидимою для учасників).
      • +
      + +

      + + + Додавання учасників групи + + +

      + +
        +
      • Кожен учасник групи має ті ж самі права, що і будь-який інший. З цієї причини кожен може видалити будь-якого учасника або додати нового.
      • +
      • Щоб додати або видалити учасників, натисніть на назву групи в чаті.
      • +
      + +

      + + + Я випадково себе видалив + + +

      + +
        +
      • Оскільки ви більше не учасник групи, ви не зможете додати себе знову. Однак, це не проблема, просто попросіть будь-якого іншого учасника групи в звичайному чаті додати вас знову.
      • +
      + +

      + + + Я більше не хочу отримувати повідомлення групи. + + +

      + +
        +
      • +

        Або видаліть себе із списку учасників групи, або видаліть весь чат. Якщо ви хочете повернутись до чату пізніше, попросіть іншого учасника групи додати вас знову.

        +
      • +
      • +

        Ви також можете “Заглушити” групу - це означає, що ви будете отримувати усі повідомлення та можете писати у групу, але ви більше не будете отримувати сповіщення про нові повідомлення.

        +
      • +
      + +

      + + + Що означають галочки біля вихідних повідомлень? + + +

      + +
        +
      • Одна галочка означає, що повідомлення було успішно надіслано вашому провайдеру.
      • +
      • Дві галочки означають, що принаймні один пристрій одержувача повідомив про отримання повідомлення.
      • +
      • Одержувачі могли вимкнути звіти про прочитання, тож навіть якщо ви бачите лише одну галочку, можливо, повідомлення прочитане.
      • +
      • Навпаки, дві галочки не означають автоматично, що людина прочитала або зрозуміла повідомлення ;)
      • +
      + +

      + + + Що станеться, якщо я ввімкну «Видаляти старі повідомлення з сервера»? + + +

      + +
        +
      • +

        За умовчанням Delta Chat зберігає всі повідомлення локально на вашому пристрої. Якщо ви, наприклад, бажаєте заощадити місце для зберігання у свого провайдера електронної пошти, ви можете вибрати автоматичне видалення старих повідомлень. Вони все ще залишаються на вашому пристрої, поки ви видалите їх і там.

        +
      • +
      • +

        Щоб увімкнути його, перейдіть до Видалити старі повідомлення → Видалити повідомлення з сервера в налаштуваннях «Чати та медіа». Ви можете встановити часові рамки між «Одразу» та «Через 1 рік». Усі електронні листи, отримані Delta Chat, будуть видалені з сервера після закінчення цього терміну.

        +
      • +
      • +

        Зауважте, що якщо ви використовуєте Delta Chat на кількох пристроях, вам слід залишити повідомлення на сервері, доки інший пристрій не зможе завантажити їх. У цьому випадку вам слід встановити для автоматичного видалення значення «через день» або щось подібне, залежно від того, як часто ви вмикаєте інший пристрій.

        +
      • +
      + +

      + + + Що станеться, якщо я ввімкну «Видаляти старі повідомлення з пристрою»? + + +

      + +
        +
      • Якщо ви хочете заощадити пам’ять на своєму пристрої, ви можете видалити старе повідомлення автоматично.
      • +
      • Щоб увімкнути його, перейдіть до «видалити старі повідомлення з пристрою» в налаштуваннях «Чатів та медіа» . Ви можете встановити часові рамки від «через годину» до «через рік»; +Таким чином, усі повідомлення будуть видалені з вашого пристрою, як тільки вони будуть старішими за це.
      • +
      + +

      + + + Миттєва доставка повідомлень та Push-сповіщення + + +

      + +

      + + + Що таке push-сповіщення? Як отримати миттєву доставку повідомлень? + + +

      + +

      Push-повідомлення надсилаються “Push-сервісами” Apple та Google на пристрій користувача щоб неактивний додаток Delta Chat міг отримувати повідомлення у фоновому режимі і показувати сповіщення на телефоні користувача, якщо це необхідно.

      + +

      Push-сповіщення працюють з усіма chatmail-серверами на

      + +
        +
      • +

        iOS-пристроях, інтегруючись із сервісами Apple Push.

        +
      • +
      • +

        Android-пристроях, шляхом інтеграції з сервісом Google FCM Push, в тому числі на пристроях, які використовують microG замість пропрієтарного коду Google на телефоні.

        +
      • +
      + +

      Станом на травень 2024 року класичні сервери електронної пошти не підтримують Push-повідомлення для користувачів Delta Chat.

      + +

      + + + Чи ввімкнено Push-сповіщення на пристроях iOS? Чи є альтернатива? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Чи ввімкнені/потрібні Push-сповіщення на пристроях Android? + + +

      + +

      Якщо доступний “Push-сервіс”, Delta Chat вмикає Push-сповіщення щоб забезпечити миттєву доставку повідомлень для всіх користувачів чату. Якщо ви використовуєте класичний провайдер електронної пошти замість серверів chatmail, Push-сповіщення недоступні.

      + +

      У налаштуваннях “Сповіщення” Delta Chat для “Миттєва доставка” ви можете змінити наступні налаштування, які впливають на всі профілі чату:

      + +
        +
      • +

        Використовувати Push-сервіс: за замовчуванням при використанні профілів чату і якщо на телефоні доступна послуга Push. Якщо у вас є профілі чату та класичної електронної пошти, то Push-сповіщення працюватимуть лише для вхідних повідомлень для вхідних повідомлень у профілях чату.

        +
      • +
      • +

        Використовувати фонове підключення: Якщо ви не використовуєте Push-сервіс, ви можете вимкнути “оптимізацію батареї” для Delta Chat, що дозволить йому отримувати повідомлення у фоновому режимі. Однак це може призвести до затримок від декількох хвилин до декількох годин. Деякі постачальники Android навіть повністю обмежують додатки (див. dontkillmyapp.com) і Delta Chat може не показувати вхідні повідомлення доки ви не відкриєте програму вручну.

        +
      • +
      • +

        Примусове фонове підключення: Це запасний варіант якщо попередні опції недоступні або не досягають “миттєвої доставки”. Увімкнення цієї опції спричиняє постійне сповіщення на вашому телефоні яке іноді може бути “мінімізоване” на останніх версіях телефонів Android.

        +
      • +
      + +

      Обидва варіанти “Фонового з’єднання” є енергоефективними та безпечні, якщо ви відчуваєте, що повідомлення надходять із великими затримками.

      + +

      + + + Наскільки приватними є push-сповіщення Delta Chat? + + +

      + +

      Підтримка push-сповіщень Delta Chat дозволяє уникнути витоку приватної інформації. Вона не передає електронну пошту, IP-адресу або вміст повідомлень (навіть зашифрованих) до будь-якої системи, яка бере участь у доставці push-сповіщень.

      + +

      Ось як програми Delta Chat здійснюють доставку push-сповіщень:

      + +
        +
      • +

        Додаток Delta Chat отримує “токен пристрою” локально і зберігає його на сервері chatmail.

        +
      • +
      • +

        Коли chatmail-сервер отримує електронний лист від користувача Delta Chat він пересилає “токен пристрою” до центрального проксі-сповіщення Delta Chat.

        +
      • +
      • +

        Центральний проксі-сервер сповіщень Delta Chat пересилає “токен пристрою” до відповідного Push-сервісу (Apple, Google тощо), навіть не знаючи IP-адреси чи електронної пошти користувачів Delta Chat.

        +
      • +
      • +

        Центральний Push-сервіс (Apple, Google тощо) запускає додаток Delta Chat на вашому пристрої щоб перевірити наявність нових повідомлень у фоновому режимі. Він не знає про пошту чату або адресу електронної пошти пристрою, який він пробуджує. Центральні служби Apple/Google Push ніколи не бачать адресу електронної пошти (відправника або одержувача) а також ніколи не бачать жодного вмісту повідомлення (навіть в зашифрованому вигляді).

        +
      • +
      + +

      Станом на травень 2024 року chatmail-сервери знають про “токени пристроїв” але ми плануємо зашифрувати цю інформацію для проксі-сповіщень таким чином, щоб сервер чату ніколи не дізнався токен пристрою.

      + +

      Центральний проксі для сповіщень Delta Chat невеликий і повністю реалізований на Rust забуває про токени пристроїв, як тільки Apple/Google/etc обробили їх, зазвичай за лічені мілісекунди.

      + +

      В результаті цього загального дизайну конфіденційності, навіть захоплення chatmail-сервера, або повне вилучення центрального проксі-сервера повідомлень Delta Chat не призведе до розкриття приватної інформації, якої ще не мають Push-сервіси.

      + +

      + + + Чому Delta Chat інтегрується з централізованими пропрієтарними push-сервісами Apple/Google? + + +

      + +

      Delta Chat - це безкоштовний децентралізований месенджер з відкритим вихідним кодом і вільним вибором сервера, але ми хочемо, щоб користувачі отримували надійну “миттєву доставку” повідомлень, як у додатках Whatsapp, Signal або Telegram, без попередніх запитань, які більше підходять для досвідчених користувачів або розробників.

      + +

      Зверніть увагу, що Delta Chat має невелику систему push-повідомлень, що зберігає конфіденційність яка забезпечує “миттєву доставку” повідомлень на всі chatmail-сервери включаючи потенційний який ви можете налаштувати самостійно без нашого дозволу. Ласкаво просимо до потужності сумісної та масової системи чат-пошти та електронної пошти :)

      + +

      + + + Шифрування та безпека + + +

      + +

      + + + Які стандарти використовуються для наскрізного шифрування? + + +

      + +

      Autocrypt використовується для автоматичного встановлення наскрізного шифрування з контактами та груповими чатами. +Autocrypt використовує обмежену і безпечну підмножину стандарту OpenPGP. Зашифровані наскрізним шифруванням повідомлення позначаються замком padlock.

      + +

      Протоколи Secure-Join використовуються для створення чатів з гарантованим наскрізним шифруванням що захищає від мережевих атак і скомпрометованих серверів. Чати, відмічені зеленою галочкою green checkmark гарантують наскрізне шифрування повідомлень.

      + +

      + + + Як дізнатися, чи повідомлення зашифровано наскрізним шифруванням? + + +

      + +

      Всі наскрізні зашифровані повідомлення мають навісний замок:

      + +

      padlock in bubble

      + +

      Наскрізне шифрування гарантується, якщо поруч із заголовком чату стоїть зелена галочка:

      + +

      green checkmark in title

      + +

      + + + Як отримати гарантоване наскрізне шифрування та зелені галочки? + + +

      + +

      Якщо у вас є другий канал зв’язку з вашим партнером по чату, наприклад, відеочат або інший месенджер, ви можете згенерувати посилання-запрошення.

      + +

      Якщо ви разом особисто, ви можете показати QR-код своєму співрозмовнику.

      + +
        +
      • +

        Для Запрошення до групи, торкніться назви групи чату, щоб побачити список її учасників, і виберіть “QR-код запрошення”.

        +
      • +
      • +

        Для прямих запрошень у чат 1:1, торкніться іконки QR-коду на головному екрані програми Delta Chat.

        +
      • +
      + +

      Дозвольте вашому партнеру по чату відсканувати QR-зображення +у своєму додатку Delta Chat, або натисніть “Копіювати” чи “Поділитися”, щоб створити посилання-запрошення і поділитися ним з вашим співрозмовником.

      + +

      Тепер зачекайте, поки між обома пристроями відбудеться обмін мережевими повідомленнями Secure-Join.

      + +
        +
      • +

        Якщо обидва пристрої онлайн, обидві сторони зрештою побачать (груповий або прямий) чат із зеленою галочкою green checkmark поруч із заголовком.

        +
      • +
      • +

        Якщо один з пристроїв не в мережі, зелені галочки з’являться пізніше, коли пристрій знову буде підключено до Інтернету а мережевий протокол Secure-Join буде завершено.

        +
      • +
      + +

      Вітаємо! Тепер ви автоматично використовуватимете гарантоване наскрізне шифрування з цим контактом, і ви обидва можете додавати один одного в групи, позначені зеленою галочкою green checkmark, таким чином автоматично поширюючи гарантоване наскрізне шифрування серед її членів.

      + +

      + + + Що означає зелена галочка і “гарантоване наскрізне шифрування”? + + +

      + +

      Назви чатів із зеленими галочками green checkmark означають, що всі повідомлення в чаті будуть наскрізно зашифровані і не можуть бути прочитані або змінені скомпрометованими поштовими серверами або інтернет-провайдерами. +Приєднання до групових чатів із зеленими галочками безпечно поширює інформацію про шифрування (і зелені галочки) всіх учасників таким чином, що гарантує наскрізне шифрування в групі та між її учасниками.

      + +

      Профілі контактів із зеленими галочками green checkmark означають, що повідомлення контакту наразі гарантовано зашифровані наскрізним шифруванням. Кожен контакт із зеленою галочкою або зробив пряме QR-сканування з вами або був представлений іншим контактом, позначеним зеленою галочкою. Знайомство відбувається автоматично під час додавання учасників до груп. Той, хто додає контакт до групи, позначеної зеленою галочкою, стає представником для тих учасників, які ще не знали про доданий контакт. У профілі контакту ви можете кілька разів натиснути на текст “Представлений …” поки не потрапите до того, з ким ви безпосередньо зробили QR-сканування.

      + +

      Зверніть увагу, що в профілі контакту ви можете бачити і натискати рекомендувачів але в заголовку профілю немає зеленої галочки. Зазвичай це означає, що контакт “надіслав повідомлення з іншого пристрою”.

      + +

      Для більш детального обговорення “гарантованого наскрізного шифрування” будь ласка, перегляньте Протоколи безпечного приєднання і, зокрема, прочитайте про “Перевірені групи”, технічний термін того, що тут називається чатами з “зеленою галочкою” або “гарантованим наскрізним шифруванням”.

      + +

      + + + Контакт “надіслав повідомлення з іншого пристрою”, що робити? + + +

      + +

      Ваш чат з контактом втратив гарантоване наскрізне шифрування. Зелену галочку було знято для цього чату та контакту, коли ви побачили це попередження. **Якщо ви вважаєте раптове зникнення гарантованого наскрізного шифрування несподіваним для цього контакту, не приймайте попередження! Замість цього зв’яжіться з контактом через другий канал наприклад, відеодзвінок, інший месенджер або телефонний дзвінок, щоб з’ясувати, що сталося.

      + +

      Якщо ваш контакт дійсно спричинив втрату гарантованого наскрізного шифрування будь ласка, зверніться до наступних параграфів, щоб дізнатися про типові причини та способи їх усунення. Незважаючи на це, всі інші чати, позначені зеленою галочкою, залишаються гарантовано зашифрованими з кінця в кінець навіть якщо контакт є їхнім учасником.

      + +

      Ваш контакт використовує Delta Chat на другому пристрої (телефоні або ноутбуці).

      + +

      Якщо у них є інший пристрій із запущеним додатком Delta Chat, вони повинні видалити обліковий запис з нового пристрою і додати його як другий пристрій, як описано тут. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде встановлено на обох пристроях вашого контакту.

      + +

      Ваш контакт перевстановив Delta Chat, використовуючи свій старий логін

      + +

      Якщо у них є файл резервної копії, вони повинні видалити обліковий запис з нового пристрою і, замість цього, імпортувати файл резервної копії для відновлення свого облікового запису. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде відновлено для цього контакту.

      + +

      Якщо у них немає резервної копії файлу, найкраще виконати QR-сканування з вашим співрозмовником, щоб відновити гарантоване кінцеве шифрування.

      + +

      Ваш контакт надіслав листа через веб-інтерфейс або іншу поштову програму і незабаром повернеться до використання Delta Chat.

      + +

      Якщо ви впевнені, що контакт іноді користується веб-поштою, або іншу поштову програму без наскрізного шифрування, ви можете прийняти попередження. Як тільки ваш контакт знову скористається Delta Chat, гарантоване наскрізне шифрування буде автоматично відновлено.

      + +

      Ваш контакт повністю припинив користуватися Delta Chat.

      + +

      Іноді залишатися на зв’язку важливіше, ніж наскрізне шифрування. “Шифрування на транспортному рівні” (TLS) все ще може ефективно захищати конфіденційність ваших повідомлень між вашим пристроєм і сервером електронної пошти. Але без наскрізного шифрування ви та ваш контакт довіряєте серверу електронної пошти не читати і не маніпулювати вашими повідомленнями, а також не передавати їх третім особам.

      + +

      У будь-якому випадку, ви не можете зробити нічого іншого, окрім як прийняти попередження. Будь ласка, також видаліть контакт з будь-якої активної групи, позначеної зеленою галочкою які ви можете знайти в розділі “Загальні чати” в профілі контакту. Це позбавить ваш контакт від отримання “нечитабельних” повідомлень.

      + +

      Якщо контакт видалив Delta Chat через помилки або небажану поведінку, будь ласка, розгляньте можливість написати повідомлення на нашому форумі підтримки щоб допомогти нам виявити та вирішити загальні проблеми. Дякуємо!

      + +

      + + + Чи зашифровані наскрізно вкладення (зображення, файли, аудіо тощо)? + + +

      + +

      Так.

      + +

      Коли ми говоримо про “наскрізно зашифроване повідомлення” ми завжди маємо на увазі, що зашифровано все повідомлення, включно з усіма вкладеннями і метадані вкладень, такі як імена файлів.

      + +

      + + + Чи безпечний OpenPGP? + + +

      + +

      Так, Delta Chat використовує безпечну підмножину OpenPGP і відображає індикатор безпеки у вигляді замка в повідомленні лише тоді, коли все повідомлення належним чином зашифровано і підписано. Наприклад, “Відокремлені підписи” не вважаються безпечними.

      + +

      OpenPGP не є небезпечним сам по собі. Більшість публічно обговорюваних проблем безпеки OpenPGP насправді виникають через погане використання або погану реалізацію інструментів або програм (або і те, і інше). Особливо важливо розрізняти OpenPGP, стандарт шифрування IETF, і GnuPG (GPG), інструментом командного рядка, що реалізує OpenPGP. Багато публічних критиків OpenPGP насправді обговорюють GnuPG, який Delta Chat ніколи не використовував. Натомість Delta Chat використовує реалізацію OpenPGP на Rust rPGP, доступну як незалежний пакет “pgp”, і пройшов аудит безпеки у 2019 році.

      + +

      Ми прагнемо, разом з іншими розробниками OpenPGP, подальше покращення характеристик безпеки шляхом впровадження нового IETF OpenPGP Crypto-Refresh який, на щастя, був прийнятий влітку 2023 року.

      + +

      + + + Чи розглядали ви можливість використання альтернатив OpenPGP для наскрізного шифрування? + + +

      + +

      Так, ми стежимо за такими ініціативами, як MLS або Saltpack але їх прийняття означатиме порушення наскрізної сумісності шифрування з усіма іншими поштовими програмами, які зазвичай підтримують шифрування OpenPGP. Отже, це не буде легким рішенням і воно повинно принести користувачам відчутні покращення.

      + +

      Delta Chat застосовує цілісний підхід “корисної безпеки” і працює з широким спектром активістських груп, а також відомими дослідниками, такими як TeamUSEC щоб покращити реальний захист користувачів від загроз безпеці. Протокол і стандарт для створення наскрізного шифрування - це лише одна частина “результатів для користувача”, див. також наші відповіді на вилучення пристрою та метадані повідомлення.

      + +

      + + + Чи вразливий Delta Chat до EFAIL? + + +

      + +

      Ні, Delta Chat ніколи не був вразливим до EFAIL тому що його реалізація OpenPGP rPGP використовує код виявлення модифікацій при шифруванні повідомлень і повертає помилку якщо код виявлення модифікацій невірний.

      + +

      Delta Chat також ніколи не був вразливим до EFAIL-атаки “Пряма ексфільтрація” тому що він розшифровує лише “багатокомпонентні/зашифровані” повідомлення, які містять рівно одну зашифровану і підписану частину, як визначено специфікацією Autocrypt Level 1.

      + +

      + + + Чи буде показано повідомлення відкритим текстом, якщо наскрізне шифрування недоступне? + + +

      + +

      Навіть якщо ваші повідомлення не гарантовано зашифровані наскрізним шифруванням, вони все одно захищені від інтернет-провайдерів, таких як мобільні або кабельні компанії. Однак, ваші провайдери та провайдери електронної пошти одержувача можуть читати, аналізувати або навіть змінювати ваші повідомлення, включаючи будь-які вкладення, якщо вони не зашифровані наскрізним шифруванням.

      + +

      За замовчуванням Delta Chat використовує суворе TLS-шифрування яке захищає з’єднання між вашим пристроєм і провайдером електронної пошти. Вся робота з TLS-шифруванням Delta Chat пройшла незалежний аудит безпеки. Крім того, з’єднання між вашим провайдером та провайдером електронної пошти одержувача зазвичай також шифрується при передачі даних. Якщо задіяні поштові сервери підтримують MTA-STS то між провайдерами електронної пошти буде застосовуватися транспортне шифрування в цьому випадку повідомлення Delta Chat ніколи не будуть доступні в Інтернеті у вигляді відкритого тексту навіть якщо повідомлення не було наскрізь зашифровано.

      + +

      Зверніть увагу, що підтримка гарантованого наскрізного шифрування, на додаток до шифрування TLS, забезпечує повну безпеку між вашим пристроєм і пристроєм одержувача. Навіть ваш провайдер електронної пошти або інтернет-провайдер не зможуть прочитати або змінити ваші повідомлення.

      + +

      + + + Як Delta Chat захищає метадані у повідомленнях? + + +

      + +

      Delta Chat захищає більшість метаданих повідомлень, поміщаючи наступну інформацію в наскрізно зашифровану частину повідомлень:

      + +
        +
      • Тема повідомлення
      • +
      • Аватар та назва групи
      • +
      • Запити MDN (підтвердження прочитання) (Chat-Disposition-Notification-To)
      • +
      • Таймер зникнення повідомлень (Ephemeral-Timer)
      • +
      • Chat-Group-Member-Removed, Chat-Group-Member-Added, Chat-Group-Member-Added, Chat-Group-Member-Removed-Member-Added.
      • +
      • Заголовок Secure-Join, що містить команди безпечного приєднання
      • +
      • Сповіщення про увімкнення потокового передавання місцезнаходження
      • +
      • URL-адреса кімнати WebRTC
      • +
      + +

      Поштові сервери не мають доступу до цих захищених метаданих але вони бачать дату і розмір повідомлення, і, що важливіше, адреси відправника та отримувача. Поштовим серверам потрібні адреси одержувачів, щоб маршрутизувати і доставляти повідомлення на пристрої одержувача.

      + +

      + + + Як захистити метадані та контакти якщо пристрій вилучено? + + +

      + +

      Як для захисту від поштових серверів, що збирають метадані, так і для захисту від загрози вилучення пристрою ми рекомендуємо використовувати оптимізований для Delta Chat екземпляр поштового сервера для створення псевдонімних тимчасових акаунтів за допомогою сканування QR-коду. Зверніть увагу, що додатки Delta Chat на всіх платформах підтримують кілька облікових записів тому ви можете легко використовувати “1-тижневі” або “1-місячні” акаунти поруч з вашим “основним” акаунтом знаючи, що всі дані тимчасових акаунтів разом з усіма метаданими будуть видалені. Більше того, якщо пристрій вилучається, то контакти, які використовують тимчасові електронні скриньки, не можуть бути легко ідентифіковані, на відміну від месенджерів, які розкривають телефонні номери в групах чату, які, в свою чергу, часто пов’язані з юридичними особами.

      + +

      + + + Як перевірити інформацію про шифрування? + + +

      + +

      Ви можете перевірити стан наскрізного шифрування вручну в діалоговому вікні “Шифрування” (профіль користувача на Android/iOS або клацніть правою кнопкою миші на елементі списку чату користувача на робочому столі). Delta Chat показує там два відбитки. Якщо на вашому пристрої та пристрої вашого співрозмовника з’являються однакові відбитки, з’єднання безпечне.

      + +

      + + + Як перевірити стан шифрування повідомлень? + + +

      + +

      Маленький замок в бульбашці повідомлення позначає, що повідомлення було належним чином наскрізно зашифроване від відправника. Якщо немає замка, повідомлення не було належним чином наскрізно зашифровано, найімовірніше, тому що відправник використовує додаток або інтерфейс веб-пошти без підтримки кінцевого шифрування.

      + +

      + + + Чому я бачу незашифровані повідомлення? + + +

      + +

      Якщо контакт використовує поштову програму, яка не підтримує Autocrypt всі повідомлення за участю цього контакту (в групі або чаті 1:1) не будуть наскрізно зашифровані, а отже, не показуватимуть “висячого замка” з повідомленнями. Зверніть увагу, що навіть якщо ваші контакти використовують Delta Chat у своєму акаунті, вони також можуть використовувати програму електронної пошти без функції шифрування, що може спричинити періодичні незашифровані повідомлення. Відповідати незашифрованими на незашифровані повідомлення вимагає Autocrypt щоб запобігти отриманню нечитабельних повідомлень на стороні ваших контактів та їхніх поштових програм, які не підтримують Autocrypt.

      + +

      + + + Як я можу отримати наскрізно зашифрований чат з контактом Delta Chat, який іноді користується веб-поштою або іншим додатком електронної пошти, що не підтримує Autocrypt? + + +

      + +

      Якщо вам потрібен безпечний наскрізно зашифрований чат з контактом який використовує свій акаунт як у Delta Chat, так і в інших додатках (наприклад, веб-пошті), що не підтримують автошифрування, найкраще налаштувати гарантоване наскрізне шифрування з ними, а потім створити груповий чат з гарантованим наскрізним шифруванням, учасниками якого будете ви двоє. У цьому груповому чаті всі повідомлення будуть наскрізно зашифровані навіть якщо в прямому чаті між вами буде “… надіслано повідомлення з іншого пристрою”.

      + +

      + + + Як забезпечити наскрізне шифрування та видалення повідомлень? + + +

      + +

      Найкращий спосіб забезпечити наскрізне шифрування кожного повідомлення, а метадані видалялися якнайшвидше, це використання чатів з гарантованим наскрізним шифруванням +та увімкнення зникаючих повідомлень.

      + +

      Гарантований наскрізно шифрований чат захищає від MITM-атак, а увімкнення функції зникнення повідомлень видаляє повідомлення на сервері через певний час, налаштований користувачем.

      + +

      Якщо вам не потрібне більш довготривале зберігання копій ваших повідомлень на сервері, ви також можете увімкнути “автоматично видаляти повідомлення з сервера”.

      + +

      + + + Чи підтримує Delta Chat цілковиту пряму секретність (Perfect Forward Secrecy)? + + +

      + +

      Ні, Delta Chat не підтримує ідеальну пряму секретність (PFS). Це означає, що якщо ваш приватний ключ дешифрування Delta Chat витік, і хтось зібрав ваші попередні транзитні повідомлення, він зможе розшифрувати і прочитати їх за допомогою витоку ключа розшифрування.

      + +

      Зауважте, однак, що якщо хтось отримає ваші ключі розшифрування, вони, як правило, також зможуть отримати ваші повідомлення, незалежно від того, чи працює Perfect Forward Secrecy чи ні. Типовою реальною ситуацією для витоку ключів дешифрування є вилучення пристрою яку ми обговорюємо в нашій відповіді про метадані та вилучення пристрою.

      + +

      Можливо, що Delta Chat розвивається для підтримки Perfect Forward Secrecy, тому що OpenPGP - це лише контейнер для зашифрованих повідомлень, але керування ключами шифрування (і, відповідно, ротація ключів або “храповик” ключів) може бути організоване у гнучкий спосіб. Дивіться Прототип PFS від Seqouia щодо існуючих експериментів у спільноті реалізаторів OpenPGP.

      + +

      + + + Чи є наскрізне шифрування Delta Chat таким же безпечним, як Signal? + + +

      + +

      Це залежить від того, що для вас важливо. Delta Chat не підтримує PFS, як Signal але він забезпечує гарантовано наскрізні зашифровані чати які захищені від скомпрометованих серверів або пошкоджених мереж. Signal та більшість інших месенджерів, що підтримують PFS, не надають практичної схеми захисту чат-груп від мережевих атак які, можливо, викликають більше занепокоєння ніж потенційний зловмисник, який заволодіє вашим телефоном і приватними налаштуваннями шифрування, але чомусь не ваші повідомлення, але має повний запис усіх минулих зашифрованих повідомлень.

      + +

      У будь-якому випадку, наскрізне шифрування Delta Chat використовує безпечну підмножину OpenPGP який пройшов незалежний аудит безпеки.

      + +

      + + + Чи можна повторно використовувати існуючий закритий ключ? + + +

      + +

      Так. +The best way is to send an Autocrypt Setup Message from the other e-mail client. +Look for something like Start Autocrypt Setup Transfer in the settings of the other client and follow the instructions shown there.

      + +

      Крім того, ви можете імпортувати ключ вручну в “Налаштування -> Додаткові налаштування -> Імпорт секретних ключів”. Застереження: Переконайтеся, що ключ не захищено паролем, або видаліть його заздалегідь.

      + +

      Якщо у вас немає ключа або ви навіть не знаєте, що він вам знадобиться – не хвилюйтеся: Delta Chat генерує ключі в міру необхідності, вам не потрібно натискати кнопку для цього.

      + +

      + + + Я не можу імпортувати свій існуючий PGP ключ у Delta Chat. + + +

      + +

      Найімовірнішою причиною є те, що ваш ключ зашифрований та/або використовується пароль. Такі ключі не підтримуються Delta Chat. Ви можете видалити шифрування парольної фрази та пароль і спробувати імпорт знову.

      + +

      Ще одна поширена помилка – неправильне закінчення файлу. Використовуйте захищений формат ASCII і закінчення файлу .asc.

      + +

      Delta Chat підтримує поширені формати приватних ключів OpenPGP, однак навряд чи приватні ключі з усіх джерел будуть повністю підтримуватися. Це не головна мета Delta Chat. Фактично, більшість нових користувачів не матимуть жодного ключа до використання Delta Chat. Однак ми намагаємось підтримувати приватні ключі з якомога більшої кількості джерел.

      + +

      Видалення пароля з приватного ключа буде залежати від програмного забезпечення, яке використовується для управління ключами PGP. За допомогою Enigmail ви можете встановити для порожній пароль у вікні Керування ключами. За допомогою GnuPG ви можете встановити його через командний рядок. Для інших програм ви зможете знайти рішення в інтернеті.

      + +

      + + + Чи проходив Delta Chat незалежний аудит на наявність вразливостей у безпеці? + + +

      + +

      Проект Delta Chat пройшов чотири незалежні аудити безпеки та один незалежний аналіз безпеки, від найновіших до найстаріших:

      + +
        +
      • +

        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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

        +
      • +
      • +

        Починаючи з 2023 року, ми виправили проблеми з безпекою та конфіденційністю у функції “веб застосунків, що поширені у чаті”, пов’язані зі збоями в роботі пісочниці особливо в Chromium. Згодом ми отримали незалежний аудит безпеки аудит безпеки від Cure53, і всі знайдені проблеми були виправлені в серії додатків 1.36, випущених у квітні 2023 року. Повну історію про наскрізну безпеку в Інтернеті дивіться тут.

        +
      • +
      • +

        Починаючи з 2023 року Cure53 проаналізував транспортне шифрування мережевих з’єднань Delta Chat і відтворюване налаштування поштового сервера як рекомендовано на цьому сайті. Ви можете прочитати більше про аудит у нашому блозі або прочитайте повний звіт тут.

        +
      • +
      • +

        У 2020 році Include Security проаналізувала Rust-ядро Delta Chat і бібліотеки IMAP, SMTP та TLS. Він не виявив критичних або серйозних проблем. У звіті виявлено кілька слабких місць середнього ступеня тяжкості – вони самі по собі не становлять загрози для користувачів Delta Chat оскільки вони залежать від середовища, у якому використовується Delta Chat. З міркувань зручності використання та сумісності ми не можемо пом’якшити їх усі тому вирішили надати рекомендації щодо безпеки користувачам, яким загрожує небезпека. Ви можете прочитати повний звіт тут.

        +
      • +
      • +

        У 2019 році Include Security проаналізувала бібліотеки PGP і RSA із Delta Chat. Він не виявив критичних проблем, лише дві серйозні проблеми, які ми згодом виправили. Він також виявив одну проблему середньої тяжкості та кілька менш серйозних, але не було можливості використати ці вразливості в реалізації Delta Chat. Деякі з них ми все ж усунули після завершення аудиту. Ви можете прочитати повний звіт тут.

        +
      • +
      + +

      + + + Мульти-клієнт + + +

      + +

      + + + Чи можна використовувати Delta Chat на декількох пристроях одночасно? + + +

      + +

      Так. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

      + +
        +
      • +

        Упевніться, що обидва пристрої підключені до одного Wi-Fi або мережі

        +
      • +
      • +

        На першому пристрої перейдіть до Налаштування → Додати другий пристрій, розблокуйте екран, якщо потрібно і трохи зачекайте, поки не з’явиться QR-код

        +
      • +
      • +

        На другому пристрої встановіть Delta Chat

        +
      • +
      • +

        На другому пристрої запустіть Delta Chat, виберіть Додати як другий пристрій і відскануйте QR-код зі старого пристрою

        +
      • +
      • +

        Передача має розпочатися через кілька секунд, і під час передачі обидва пристрої відображатимуть прогрес. Дочекайтеся завершення на обох пристроях.

        +
      • +
      + +

      На відміну від багатьох інших месенджерів, після успішної передачі, обидва пристрої повністю незалежні. Один пристрій не потрібен для роботи іншого.

      + +

      + + + Вирішення проблем + + +

      + +
        +
      • +

        Ще раз упевніться, що обидва пристрої підключені до одного Wi-Fi або мережі

        +
      • +
      • +

        У Windows перейдіть до Панель керування / Мережа та Інтернет і переконайтеся, що Приватна мережа вибрано як “Тип мережевого профілю” (після перенесення ви можете повернути початкове значення)

        +
      • +
      • +

        Ваша система може мати “персональний брандмауер”, який, як відомо, викликає проблеми (особливо у Windows). Вимкніть персональний брандмауер для Delta Chat на обох кінцях і повторіть спробу

        +
      • +
      • +

        Гостьові мережі можуть не дозволяти пристроям зв’язуватися один з одним. Якщо можливо, використовуйте негостьову мережу.

        +
      • +
      • +

        Переконайтеся, що на цільовому пристрої достатньо пам’яті

        +
      • +
      • +

        Якщо передача почалася, переконайтеся, що пристрої залишаються активними і не засинають. Не виходьте з Delta Chat. (ми докладаємо всіх зусиль, щоб програма працювала у фоновому режимі, але системи, як правило, вбивають програми, на жаль)

        +
      • +
      • +

        Delta Chat уже ввійшов на цільовому пристрої? Ви можете використовувати кілька облікових записів на одному пристрої, просто додайте інший обліковий запис

        +
      • +
      • +

        Якщо у вас усе ще виникають проблеми або якщо ви не можете відсканувати QR-код спробуйте перенесення вручну, описане нижче

        +
      • +
      + +

      + + + Ручне перенесення + + +

      + +

      Цей спосіб рекомендований, лише якщо «Додати другий пристрій», як описано вище, не працює.

      + +
        +
      • На старому пристрої перейдіть до “Налаштування -> Чати та медіа -> Експортувати резервну копію”. Введіть свій PIN-код, графічний ключ або пароль розблокування екрана. Потім ви можете натиснути на “Почати Резервне копіювання”. Це збереже файл резервної копії на вашому пристрої. Тепер вам потрібно якось перенести його на інший пристрій.
      • +
      • На новому пристрої на екрані входу замість того, щоб увійти до свого облікового запису електронної пошти, виберіть “Імпортувати резервну копію” виберіть “Імпортувати резервну копію”. Після імпорту ваші листування, ключі шифрування ключі шифрування та медіа повинні бути скопійовані на новий пристрій. +
          +
        • Якщо ви користуєтеся iOS:** і у вас виникли труднощі, можливо цей посібник допоможе вам.
        • +
        +
      • +
      • Тепер ви синхронізовані і можете використовувати обидва пристрої для надсилання та отримання наскрізно зашифрованих повідомлень зі своїми партнерами по спілкуванню.
      • +
      + +

      + + + Чи планується впровадження веб-клієнта Delta Chat? + + +

      + +
        +
      • Немає найближчих планів, крім попередніх думок.
      • +
      • Є 2-3 способи створити веб-клієнт Delta Chat, але всі вони вимагають значної роботи. На даний момент ми зосереджені на отриманні стабільних релізів в усіх магазини додатків (Google Play / IOS / Windows / MacOS / репозитаріїв Linux), як нативних додатків.
      • +
      • Якщо вам потрібен веб-клієнт, через заборону встановлювати програмне забезпечення на комп’ютері, з яким ви працюєте, ви можете використовувати портативний клієнт Windows Desktop або AppImage для Linux. Ви можете знайти їх на get.delta.chat.
      • +
      + +

      + + + webxdc-додатки + + +

      + +

      У Delta Chat ви можете ділитися webxdc-додатками, вкладеннями з розширенням .xdc. Вони можуть робити дуже різні речі, і роблять Delta Chat справді розширюваним месенджером.

      + +

      + + + Наскільки приватними є додатки webxdc? + + +

      + +
        +
      • Додатки webxdc не можуть надсилати дані в Інтернет або завантажувати щось.
      • +
      • Програма webxdc може обмінюватися даними лише в межах чату Delta Chat з її копіями на пристроях ваших партнерів по чату. В іншому, вони повністю ізольовані від Інтернету.
      • +
      • Конфіденційність, яку пропонує додаток webxdc, є конфіденційністю вашого чату - доки ви довіряєте людям, з якими ви спілкуєтеся, ви можете довіряти і додатку webxdc.
      • +
      • Це також означає, що відкриття додатків webxdc в чатах, де ви не довіряєте учасникам, як ви знаєте з вкладень в електронній пошті, де ви відкриваєте вкладення тільки від відправників, яким довіряєте, а не від спамерів.
      • +
      + +

      + + + Де я можу отримати webxdc-додатки? + + +

      + +
        +
      • Загалом, будь-хто може ділитися додатками webxdc один з одним один з одним без обмежень.
      • +
      • Ви можете надіслати “hi” на xstore@testrun.org щоб побачити експериментальний магазин додатків webxdc. Всі програми мають відкритий вихідний код і є безкоштовними.
      • +
      • Багато людей пишуть власні програми для webxdc і публікують їх на форумі Delta Chat.
      • +
      + +

      + + + Як я можу створювати власні програми webxdc? + + +

      + +
        +
      • Програми webxdc - це просто zip-файли, що містять код html, css і javascript.
      • +
      • Ви можете розширити Приклад програми Hello World щоб розпочати роботу.
      • +
      • Все інше, що вам потрібно знати, описано у документації.
      • +
      • Якщо у вас є запитання, ви можете задати їх іншим користувачам на форумі Delta Chat.
      • +
      + +

      + + + Експериментальні функції + + +

      + +

      Ми дуже вдячні за відгуки про ці функції – ви хочете поділитися своїми ідеями? Приєднуйтесь до Форуму, щоб зробити свій внесок. Ви можете зручно увійти за допомогою Delta Chat та сканування QR-коду, ще один досить стабільний експеримент, який ми проводимо на стороні (sic!).

      + +

      + + + Як я можу робити аудіо/відеодзвінки з Delta Chat? + + +

      + +
        +
      • Щоб увімкнути аудіо/відеодзвінки, перейдіть до розділу “Експериментальні функції” в додаткових налаштуваннях і виберіть “Екземпляр відеочату”.
      • +
      • Коли ви запрошуєте інших до відеочату, він відкривається у вашому браузері/додатку одразу. Інші користувачі отримують електронний лист із посиланням на відеочат. Таким чином, він також сумісний, якщо ваші партнери по чату не використовують Delta Chat.
      • +
      • Зверніть увагу, що на іншій стороні немає мелодії дзвінка, і ваші партнери по чату не будуть перервані запрошенням до відеочату.
      • +
      • Ви можете використовувати будь-який сервіс відеочату, який дозволяє приєднуватися за посиланням. Просто додайте посилання в налаштуваннях.
      • +
      • Наприклад, щоб використовувати флагманський екземпляр Jitsi Meet, ви можете ввести https://meet.jit.si/$ROOM. Змінна $ROOM буде випадковою величиною; таким чином, ви матимете нову випадкову кімнату jitsi щоразу, коли телефонуватимете комусь.
      • +
      + +

      + + + Що таке списки широкомовлення та як ними користуватися? + + +

      + +
        +
      • За допомогою списку розсилки ви можете надіслати повідомлення багатьом одержувачам одночасно; коли вони відповідають вам, ви отримуєте відповідь у своєму прямому чаті 1:1 з ними. Одержувачі не бачать один одного.
      • +
      • Технічно це електронний лист із багатьма одержувачами в BCC.
      • +
      • Ви можете ввімкнути функцію в розділі «експериментальні функції» в розширених налаштуваннях. Потім ви можете створити список трансляцій у діалоговому вікні «Новий чат».
      • +
      • Якщо ви використовуєте більше ніж один пристрій, списки трансляцій наразі не синхронізуються між ними.
      • +
      • Повідомлення, надіслані до списків розсилки, не шифруються. Шифрування порушило б анонімність, оскільки тоді всі одержувачі знали б, хто ще його отримав (надсилання окремих листів усім було б гіршим через обмеження швидкості та споживання мережі).
      • +
      + +

      + + + Як я можу поділитися своїм місцезнаходженням зі своїми співрозмовниками в чаті? + + +

      + +
        +
      • Ви можете ввімкнути трансляцію локацій у розділі “експериментальні функції” в розширених налаштуваннях.
      • +
      • Тепер, якщо ви хочете поділитися своїм місцезнаходженням в чаті, перейдіть до “прикріпити” і виберіть “місцезнаходження”. Тепер ви можете встановити часовий проміжок, протягом якого ваше місцезнаходження буде транслюватися вашим співрозмовникам, від 5 хвилин до 6 годин.
      • +
      • Коли ваше місцезнаходження зміниться, інші учасники чату зможуть побачити його на карті в чаті.
      • +
      • Щоб бачити мапу і переглядати місцезнаходження інших, вам потрібно увімкнути функцію в додаткових налаштуваннях.
      • +
      • Ця функція не буде показувати ваше місцезнаходження нікому, крім ваших партнерів по чату. Картографічні плитки завантажуються з OpenStreetMap.
      • +
      • На десктопі операційна система зазвичай не може визначити ваше місцезнаходження. Замість цього ви можете клацнути правою кнопкою миші на карті і описати місцезнаходження, яке буде надіслано в чат у вигляді повідомлення, але також з’явиться на карті.
      • +
      + +

      + + + Що насправді захищає експериментальне шифрування бази даних? + + +

      + +
        +
      • На даний момент шифрування бази даних все ще є експериментальним. Не покладайтеся на нього для захисту, ви повинні додатково використовувати шифрування вашої операційної системи, якщо воно передбачає таке.
      • +
      • Шифрування бази даних ще не шифрує блоби, лише рядки та стовпці бази даних. Це більш-менш означає, що ваші повідомлення в безпеці, але не вкладені файли.
      • +
      • Для iOS і Android ключі шифрування зберігаються в системному брелоку. Це означає, що шифрування настільки ж безпечно, як і операційна система, на якій воно працює.
      • +
      • Настільний клієнт Delta Chat поки що не пропонує шифрування бази даних, оскільки немає стандартного способу зберігання ключів шифрування на різних підтримуваних платформах.
      • +
      + +

      + + + Чому я можу вибрати лише стеження за папкою DeltaChat? + + +

      + +

      Це експериментальне налаштування для деяких людей, які експериментують з правилами на стороні сервера. Не всі провайдери підтримують це, але деякі дозволятимуть перемістити всі листи із заголовком “Chat-Version” до папки DeltaChat. Зазвичай це робиться додатком Delta Chat.

      + +

      Увімкнення «Отримувати лише з папки DeltaChat» має сенс, якщо у вас є обидва:

      + +
        +
      • увімкнене правило на стороні сервера для переміщення всіх повідомлень із заголовком Chat-Version до папки DeltaChat та
      • +
      • встановлено параметр “Показувати класичні електронні листи” у значення “ні, лише чати”.
      • +
      + +

      У цьому випадку Delta Chat не потрібно стежити за папкою «Вхідні», а достатньо лише стежити за папкою DeltaChat.

      + +

      + + + Як я можу змінити мій обліковий запис на іншу адресу електронної пошти? + + +

      + +
        +
      1. +

        Змініть свою адресу в розділі “Налаштування → Додатково → Пароль та обліковий запис” та введіть пароль вашого нового облікового запису (і, за необхідності, налаштування сервера). Ви отримаєте інформаційне повідомлення про те, що ви переїжджаєте на нову адресу. Додаткове повідомлення також з’явиться у вашому чаті “Повідомлення пристрою”.

        +
      2. +
      3. +

        Якщо можливо, нехай ваш старий провайдер електронної пошти пересилає всі повідомлення на вашу нову адресу.

        +
      4. +
      5. +

        Повідомте своїм контактам, що ви змінили адресу. Пишіть у гарантовані наскрізні зашифровані чати та групи, вони автоматично помітять ваш переїзд і вони продовжать спілкуватися з вами, використовуючи вашу нову адресу.

        +
      6. +
      + +

      Зверніть увагу, що Delta Chat більше не буде отримувати повідомлення від вашого старого провайдера електронної пошти. Якщо ви не налаштували пересилання повідомлень (крок 2) тільки ті контакти, яким ви надіслали повідомлення в гарантованому наскрізному зашифрованому чаті отримуватимуть повідомлення на вашу нову адресу.

      + +

      Щоб дізнатися більше про деталі, які стоять за цим, прочитайте нашу публікацію в блозі.

      + +

      + + + Інше + + +

      + +

      + + + Яких дозволів потребує Delta Chat? + + +

      + +

      В залежності від операційної системи, додаток може потребувати наступних дозволів:

      + +
        +
      • Камера (може бути заборонена). +
          +
        • фотографувати та знімати відео: для надсилання фотографій
        • +
        +
      • +
      • Контакти (може бути заборонено). +
          +
        • читати свої контакти: для пошуку контактів, з якими можна поспілкуватися
        • +
        +
      • +
      • Місцезнаходження (може бути вимкнено) +
          +
        • доступ до приблизного місцезнаходження (мережеві джерела визначення місцезнаходження): для функції потокового визначення місцезнаходження
        • +
        • доступ до точного місцезнаходження (GPS та мережеві джерела місцезнаходження): для функції потокового визначення місцезнаходження
        • +
        +
      • +
      • Мікрофон (може бути вимкнено) +
          +
        • запис аудіо: для аудіоповідомлень
        • +
        +
      • +
      • Сховище (може бути вимкнено). +
          +
        • змінювати або видаляти вміст SD-карти: для завантаження вкладень повідомлень
        • +
        • читання вмісту SD-карти: для обміну файлами з контактами
        • +
        +
      • +
      • Інші можливості програми +
          +
        • зміна налаштувань звуку: вибір мелодії дзвінка та гучності для сповіщень і звукових повідомлень
        • +
        • запуск при запуску: щоб вам не потрібно було запускати Delta Chat вручну
        • +
        • керувати вібрацією: для сповіщень
        • +
        • переглядати мережеві з’єднання: для підключення до вашого поштового провайдера
        • +
        • не виводити телефон зі сплячого режиму: щоб вам було легше скопіювати код безпеки під час повідомлення про встановлення автошифрування
        • +
        • мати повний доступ до мережі: для підключення до свого постачальника послуг електронної пошти
        • +
        • переглянути з’єднання Wi-Fi: щоб підключитися до свого постачальника послуг електронної пошти
        • +
        • попросити ігнорувати оптимізацію заряду акумулятора: для досягнення “миттєвої доставки повідомлень”
        • +
        +
      • +
      + +

      + + + Чи підтримує Delta Chat роботу з моїм провайдером електронної пошти? + + +

      + +
        +
      • У більшості випадків: Так :) +Проте для коректної роботи деяких провайдерів потрібні специфічні налаштування. Дивіться наш огляд провайдерів
      • +
      + +

      + + + Я хочу керувати власним сервером електронної пошти для Delta Chat. Що ви порадите? + + +

      + + + +

      + + + Чому я маю вводити пароль до моєї електронної пошти у Delta Chat? Чи це безпечно? + + +

      + +

      Як і інші поштові програми, такі як Thunderbird, K9-Mail або Outlook, програма програма потребує пароля, щоб ви могли використовувати її для надсилання листів. Звичайно, пароль пароль зберігається лише на вашому пристрої. Пароль передається лише вашому поштовому провайдеру (коли ви входите в систему), який і так має доступ до вашої пошти.

      + +

      Якщо ваш провайдер електронної пошти підтримує OAuth2, як gmail.com чи yandex.ru, то немає необхідності зберігати пароль на пристрої. В цьому випадку використовується лише токен доступу.

      + +

      Оскільки Delta Chat має відкритий код, ви можете ознайомитись із початковим кодом якщо бажаєте перевірити що ваші дані для авторизації надійно зберігаються. Ми будемо раді вашим пропозиціям, які зроблять додаток більш безпечним для всіх користувачів.

      + +

      + + + Які повідомлення відображаються у Delta Chat? + + +

      + +

      За замовчуванням Delta Chat відображає всі електронні листи.

      + +

      У “Налаштування → Додатково → Показувати класичні електронні листи”, ви можете змінити цей параметр. У вас є такі варіанти:

      + +
        +
      • «Ні, лише чати»: лише повідомлення, надіслані іншими користувачами Delta Chat, і відповіді на них відображаються ваші повідомлення Delta Chat. Це має найбільший сенс, якщо ви використовуєте той самий обліковий запис електронної пошти також для звичайної електронної пошти.
      • +
      • «Усі»: Delta Chat показує всі електронні листи, надіслані на вашу електронну адресу. Це має сенс, якщо ви хочете використовувати Delta Chat для всіх ваших електронних листів, тому жодних повідомлень не губиться. Це налаштування за замовчуванням.
      • +
      • «Для прийнятих контактів»: Delta Chat показує всі електронні листи від контактів, з ким у вас уже є чат, але нові чати з’являються лише для повідомлень Delta Chat. Це допоможе вирішити в кожному конкретному випадку, чи бажаєте ви мати a розмова в Delta Chat або в «звичайній» програмі електронної пошти.
      • +
      + +

      + + + Чи підтримує Delta Chat HTML-листи? + + +

      + +

      Так, вхідні HTML-повідомлення мають кнопку «Показати повне повідомлення». Вихідні повідомлення завжди містять звичайний текст.

      + +

      + + + Чи можу я встановити тему листа в Delta Chat? + + +

      + +

      Delta Chat встановлює (і шифрує!) класичну тему електронного листа автоматично на назву групи або на ім’я відправника.

      + +

      Тож якщо ви хочете встановити тему самостійно, наприклад, для офіційного електронного листа діловому контакту, ви можете створити групу в якій будете лише ви та одержувач(і). Встановіть у заголовку чату потрібну тему, а потім надішліть свій електронний лист як перше повідомлення. Якщо одержувачі не використовують Delta Chat, він буде виглядати як звичайний формальний електронний лист. Ви отримаєте бонусні бали за професіоналізм якщо ви встановите текст підпису.

      + +

      + + + Для чого потрібне налаштування “Відправити копію собі”? + + +

      + +

      Надсилаючи собі копію своїх повідомлень, ви отримуєте власні повідомлення на всіх пристроях. Якщо у вас кілька пристроїв, і ви не вмикаєте це налаштування, ви бачите лише повідомлення інших людей та повідомлення, які ви надсилаєте з поточного пристрою.

      + +

      Копія надсилається у папку Вхідні, а потім переміщується до папки DeltaChat; вона не поміщається в папку «Відправлені». Delta Chat ніколи не завантажує нічого в папку Надіслане, оскільки це означало б завантаження повідомлень двічі (один раз через SMTP і один раз через IMAP до папки Надіслані).

      + +

      За замовчуванням для параметра “Надіслати копію собі” встановлено значення “увімкнено”.

      + +

      + + + Чому я можу обрати стеження за папкою “Надіслані”? + + +

      + +

      Єдина причина, через яку захочеться стежити за папкою Надіслане, полягає в тому, що якщо ви використовуєте іншу поштову програму (наприклад, Thunderbird) разом із вашим додатком Delta Chat і хочете, щоб ваш поштовий клієнт брав участь у розмовах.

      + +

      Однак ми рекомендуємо використовувати клієнт Delta Chat Desktop; Ви можете завантажити його на get.delta.chat. Можливість стеження папки “Надіслане” може зникнути в майбутньому. Вона був представлена у той час, коли на всіх платформах ще не було клієнта Delta Chat Desktop.

      + +

      + + + Чому я можу відмовитись від стеження за папкою DeltaChat? + + +

      + +

      Деякі люди використовують Delta Chat як звичайний поштовий клієнт і хочуть використовувати папку Вхідні для своєї пошти замість папки DeltaChat. Якщо ви вимкнете “Перегляд папки DeltaChat”, вам слід також вимкнути “переміщення повідомлень чату до DeltaChat”. +В іншому випадку видалення повідомлень або налаштування декількох пристроїв може не працювати належним чином.

      + +

      + + + Чи сумісний Delta Chat із Protonmail / Tutanota / Criptext? + + +

      + +
        +
      • Так і ні.
      • +
      • Ні, ви не можете використовувати свій обліковий запис Protonmail, Tutanota або Criptext у Delta Chat; вони не пропонують отримання листів через IMAP.
      • +
      • У будь-якому випадку, ви можете використовувати Delta Chat для надсилання повідомлень людям, які користуються Protonmail, Tutanota або Criptext. Ці повідомлення не будуть наскрізно зашифрованими. Наскрізне шифрування, яке пропонують ці провайдери, не є сумісним з Autocrypt, стандартним шифруванням, яке використовує Delta Chat.
      • +
      • Delta Chat може наскрізно шифрувати через будь-якого провайдера електронної пошти з будь-якою поштовою програмою з підтримкою автошифрування.
      • +
      + +

      + + + Як мені видалити свій обліковий запис? + + +

      + +

      Оскільки ви використовуєте обліковий запис електронної пошти для Delta Chat, спосіб видалення облікового запису залежить від вашого постачальника послуг електронної пошти. Ми не маємо жодного контролю над вашим обліковим записом електронної пошти, тому, на жаль, ми не можемо вам у цьому допомогти.

      + +

      Якщо ви хочете зберегти обліковий запис, але видалити Delta Chat, перед видаленням Delta Chat рекомендується покинути будь-які групові чати.

      + +

      + + + Мене цікавлять технічні деталі. Можете розповісти більше? + + +

      + + + +

      + + + Як фінансується розробка Delta Chat? + + +

      + +

      Delta Chat не отримує жодного Венчурного Капіталу і не є в боргу, не знаходиться під тиском отримання значних прибутків, або продажу користувачів і їхніх друзів з родиною рекламодавцям (або гірше). Ми скоріше використовуємо джерела державного фінансування поки що від ЄС та США, щоб допомогти нашим зусиллям у створенні децентралізованої та різноманітної екосистеми обміну повідомленнями на основі вільного та відкритого коду спільноти розробників

      + +

      Конкретно, розробки Delta Chat поки що фінансуються з цих джерел:

      + +
        +
      • +

        Проект ЄС NEXTLEAP фінансував дослідження та впровадження верифікованих груп і протоколів встановлення контактів у 2017 та 2018 роках, а також допоміг інтегрувати наскрізне шифрування через Autocrypt.

        +
      • +
      • +

        Open Technology Fund надав нам два гранти. +Перший грант 2018/2019 року (~$200K), допоміг значно покращили додаток для Android +і випустили першу бета-версію додатка для ПК, і який до того ж +закріпив наші розробки функцій у дослідженнях UX у контексті прав людини, +дивіться наш підсумковий звіт Needfinding and UX report. +Другий грант 2019/2020 року (~$300K) допоміг нам +випустити Delta/iOS версію, конвертувати нашу основному бібліотеку на Rust, +і додати нові функції для всіх платформ.

        +
      • +
      • +

        Фонд NLnet виділив у 2019/2020 роках 46 тисяч євро на +завершення прив’язок Rust/Python та запуск екосистеми чат-ботів.

        +
      • +
      + +

      – У 2021 році ми отримали подальше фінансування ЄС для двох Інтернет-технологій наступного покоління пропозиції, а саме для EPPD - каталог перенесення електронної пошти (~97 тис. євро) та AEAP - перенесення електронної адреси (~90 тис. євро), що призвело до кращої підтримки кількох облікових записів, покращеного QR-коду контактів і налаштувань груп, а також багатьох покращень роботи мережі на всіх платформах.

      + +
        +
      • +

        З кінця 2021 до березня 2023 року ми отримували фінансування Internet Freedom (500 тис. дол. США) від Бюро США з питань демократії, прав людини та праці (DRL). Це фінансування підтримало наші довгострокові цілі зробити Delta Chat більш зручним для використання і сумісним з широким спектром серверів електронної пошти по всьому світу, більш стійким і безпечним в місцях, які постраждали від інтернет-цензури та відключення інтернету.

        +
      • +
      • +

        На початку 2023 року нас прийняли в Next Generation Internet (NGI) +Entrust program для наших пропозицій щодо «Приватних децентралізованих додатків». Точна сума буде визначена (близько 100 тис. євро). Це фінансування підтримує подальший розвиток webxdc “додатків, якими діляться в чаті”.

        +
      • +
      + +

      – Іноді ми отримуємо одноразові пожертви від приватних осіб. Наприклад, у 2021 році щедра приватна особа перерахував нам 4 тис. євро з повідомленням «так тримати!». 💜 Ми використовуємо такі пожертви для фінансування зборів на розвиток або для тимчасових витрат, які важко передбачити або відшкодувати за рахунок грантів державного фінансування. Отримання більшої кількості пожертв також допомагає нам стати більш незалежними та довгостроково життєздатними як спільнота контриб’юторів.

      + + + +
        +
      • Кілька експертів та ентузіастів, які працюють на громадських засадах, сприяли розробці програми Delta Chat, не отримуючи грошей або лише невеликі суми. Без них Delta Chat не був би там, де є сьогодні, навіть близько.
      • +
      + +

      Зазначене вище грошове фінансування в основному організовано компанією merlinux GmbH у Фрайбурзі (Німеччина) і розподілено між більше ніж дюжиною розробників по всьому світу.

      + +

      Перегляньте канали контрибуції Delta Chat як для грошових, так і для інших можливостей допомоги.

      + + + + + \ No newline at end of file diff --git a/assets/help/zh_CN/help.html b/src/main/assets/help/zh_CN/help.html similarity index 72% rename from assets/help/zh_CN/help.html rename to src/main/assets/help/zh_CN/help.html index 2b5c26a34..02ef59f16 100644 --- a/assets/help/zh_CN/help.html +++ b/src/main/assets/help/zh_CN/help.html @@ -4,17 +4,14 @@
    108. 群组 @@ -28,10 +25,19 @@
    109. 打开“从设备删除旧消息”后,会发生什么?
    110. -
    111. Encryption and Security +
    112. Instant message delivery and Push Notifications +
    113. +
    114. 加密和安全 +
    115. 多客户端 @@ -59,9 +66,6 @@
    116. 故障排除
    117. Manual Transfer
    118. 有推出 Delta Chat Web 客户端的计划吗?
    119. -
    120. “给自己发送副本”设置有什么用处?
    121. -
    122. 为什么我可以选择监视“已发送”文件夹?
    123. -
    124. 为什么我可以选择不监视 DeltaChat 文件夹?
    125. webxdc apps @@ -83,12 +87,19 @@
    126. 杂项
    127. @@ -104,7 +115,14 @@ -

      Delta Chat 是一个新的聊天应用,它通过电子邮件发送消息,并在条件允许情况下使用 Autocrypt 对其进行加密。您不必在任何地方进行注册,在 Delta Chat 中使用您现有的电子邮件帐户即可。

      +

      Delta Chat 是一款可靠、去中心化和安全的消息应用程序、 +适用于移动和桌面平台。

      + +

      Delta Chat 感觉就像 Whatsapp 或 Telegram,但你也可以把它当作电子邮件应用程序来使用。 +你可以匿名注册到各种可互操作的聊天邮件服务器 +这些都是为快速安全运行而优化的最小电子邮件服务器。 +您也可以使用传统的电子邮件服务器和现有的电子邮件账户 +在这种情况下, Delta Chat 可充当邮件客户端。

      @@ -116,7 +134,15 @@ -

      通过 Delta Chat,您可以发消息到每个现有的电子邮件地址——即使收件人没有使用 Delta Chat 应用。不需要像其他通信软件一样,要收件人安装和您一样的应用。

      +

      要安全地与他人建立联系[扫描邀请二维码 +或分享邀请链接](#howtoe2ee)。 +使用(默认的)基于chatmail的聊天账户时需要这样做 +因为chatmail会拒绝未加密的发送信息。

      + +

      当使用经典电子邮件地址创建聊天配置文件时 +如果您知道联系人的电子邮件地址,您可以手动创建联系人 +然后给他们写信息 +即使收件人没有使用Delta Chat 。

      @@ -127,34 +153,25 @@

        -
      • Independent of any company or services. You own your data.
      • -
      • Your data is not saved on a central server unless all users are using -the same e-mail servers
      • -
      • You do not distribute your address book to anyone.
      • -
      • Fast by the use of Push-IMAP.
      • -
      • Largest userbase - recipients not using Delta Chat can be reached as well.
      • -
      • No Spam - only messages of known users are shown by default.
      • -
      • End-to-end encryption via Autocrypt.
      • -
      • Copyleft and Standards based libre software.
      • -
      • Flexible identity with built-in support for multiple accounts
      • -
      - -

      - - - 哪些消息会在 Delta Chat 中出现? - - -

      - -

      默认情况下, Delta Chat 会显示所有电子邮件。

      - -

      通过“设置->聊天与媒体->显示传统电子邮件”,您可以改变这种行为。有三个选项:

      - -
        -
      • “不显示,仅聊天”:只显示由其他 Delta Chat 用户发送的消息和对您 Delta Chat 消息的回复。这在电子邮件地址同时用于处理普通邮件的情况下很有用。
      • -
      • “全部”:Delta Chat 会显示发送到您电子邮件地址的所有邮件。用于您希望使用 Delta Chat 处理所有电子邮件的情况,这样就不会有消息被落下了。默认设置。
      • -
      • “已接受的联系人”:Delta Chat 会显示已有聊天的联系人的所有电子邮件,而新聊天只会为 Delta Chat 消息弹出。可用于希望逐一决定是在 Delta Chat 中还是在“普通”电子邮件应用中对话的情况。
      • +
      • +

        使用快速、安全、可互操作的 chatmail 服务器 创建匿名聊天账户 +为 iOS 和 Android 设备提供即时推送通知。

        +
      • +
      • +

        跨平台支持 [多配置文件](#多账户)和多设备。

        +
      • +
      • +

        交互性 聊天中的网页小程序

        +
      • +
      • +

        经审计的端到端加密 +安全地抵御网络和服务器攻击。

        +
      • +
      • +

        免费开源软件,包括应用程序和服务器端。 +基于电子邮件和网络互联网标准、 +避免 “又一个标准综合症(xkcd 927)”

        +

      @@ -184,25 +201,32 @@ the same e-mail servers

      是的。除纯文本外,所有电子邮件附件均显示为单独的消息。发出消息会根据需要自动获得附件。

    128. -

      For performance, images are optimized and sent at a smaller size by default, but you can send it as a “file” to preserve the original.

      +

      为了提高性能,默认情况下会对图像进行优化并以较小的尺寸发送,但您也可以将其作为 “文件 “发送,以保留原始图像。

    129. - 如何添加账户或在多个账户之间切换? + 什么是账户资料?如何在它们之间切换?

      -

      You can easily work with additional accounts on Delta Chat mobile and desktop clients by clicking either:

      -
        -
      • on the menu button and then ‘Switch Account’ (Android and desktop)
      • -
      • or the profile icon and then ‘Add Account’ (iOS)
      • -
      +

      一份账户资料包括姓名、照片和一些额外的加密信息。 +个人配置只存在于您的设备(们)中 +并使用聊天邮件或传统电子邮件服务器传输信息。

      -

      You may also wish to learn how to add accounts to multiple devices.

      +

      首次安装Delta Chat 时,会创建第一个账户资料文件。

      + +

      之后,您可以点击左上角的个人资料图像,添加个人账户 +或切换账户

      + +

      您可能希望为政治、家庭或工作相关的活动使用不同的账户资料, +或者例如,为专门用于注册网站和平台的“垃圾邮件账户资料”, +这些网站和平台往往会早晚导致未经请求的消息(即“垃圾邮件”)

      + +

      您可能还想了解 如何在多台设备上使用同一账户资料

      @@ -227,82 +251,19 @@ the same e-mail servers -

      +

      - Delta Chat 支持 HTML 电子邮件吗? + 我可以为 Delta Chat 设置签名文本/状态/格言吗?

      -

      Yes, incoming HTML messages come with a “Show full message” button. -Outgoing messages always use plain text.

      - -

      - - - 为什么我必须在 Delta Chat 中输入我的电子邮件密码? 这样安全吗? - - -

      - -

      与其他电子邮件程序(比如 Thunderbird、K9-Mail 或 Outlook)一样,本程序需要您的密码来允许您通过它发送邮件。当然,密码仅储存在您的设备上,并只会在登录时发送给您的电子邮件提供商(无论如何,您的提供商总是能够访问您的邮件)。

      - -

      如果您使用具有 OAuth2 支持的电子邮件提供商,例如 gmail.com 或 yandex.ru,则无需在设备上存储密码。在这种情况下,只有访问令牌被使用。

      - -

      由于 Delta Chat 是开源的,要验证您的凭据是否被安全地处理了,可以检查源代码。我们很高兴能收到使本应用对我们的所有用户更加安全的反馈。

      - -

      - - - Delta Chat 需要哪些权限? - - -

      - -

      根据使用的操作系统,系统可能会要求您向本应用授予权限。下面 Delta Chat 使用各类权限进行的操作:

      - -
        -
      • 相机(可被禁止) -
          -
        • 拍照和录像:用于发送照片
        • -
        -
      • -
      • 联系人(可被禁止) -
          -
        • 读取联系人:发现要与之聊天的联系人
        • -
        -
      • -
      • 位置(可被禁止) -
          -
        • 访问大概位置(基于网络):用于位置流功能
        • -
        • 访问精确位置(基于 GPS 和网络):用于位置流功能
        • -
        -
      • -
      • 麦克风(可被禁止) -
          -
        • 录制音频:用于音频消息
        • -
        -
      • -
      • 存储(可被禁止) -
          -
        • 修改或删除 SD 卡的内容:下载消息附件
        • -
        • 读取 SD 卡的内容:与联系人分享文件
        • -
        -
      • -
      • 其他权限 -
          -
        • 更改音频设置:允许您选择通知和音频消息的铃声和音量
        • -
        • 开机自启动:您不必手动启动 Delta Chat
        • -
        • 控制振动:用于通知
        • -
        • 查看网络连接:连接到您的电子邮件提供商
        • -
        • 阻止手机进入休眠状态:您可以在 Autocrypt 设置消息中更轻松地复制安全代码
        • -
        • 具有完全的网络访问权限:连接到您的电子邮件提供商
        • -
        • 查看 Wi-Fi 连接:连接到您的电子邮件提供商
        • -
        • 要求忽略电池优化:给希望一直接收消息的用户使用
        • -
        -
      • -
      +

      是的, +您可以在“设置 > 个人资料 > 签名文本”下执行此操作。 +使用 Delta Chat 的联系人查看您的联系方式时将会看到它。 +对其他所有人来说, +它将显示为在您所有消息文本下方的电子邮件签名。

      @@ -322,8 +283,8 @@ Outgoing messages always use plain text.

      静音聊天,如果您不想再得到关于它们的通知。被静音的聊天会呆在原地,并且您可以固定被静音的聊天。

    130. -

      Archive chats if you do not want to see them in your chat list any longer. -Archived chats remain accessible above the chat list or via search.

      +

      如果您不想再在聊天列表中看到聊天记录,请归档聊天。 +已归档的聊天仍可在聊天列表上方或通过搜索访问。

    131. 当被归档的聊天接收到一条新消息,除非其被静音,它会从归档中弹出并返回聊天列表。 @@ -343,41 +304,50 @@ Archived chats remain accessible above the chat list or via search.

      • -
      • Since Delta Chat 1.34 you can sometimes see a “green dot” next to the avatar -of a contact. It means they were “recently seen”.
      • -
      • In detail: it means, that in the last 10 minutes, Delta Chat has seen them: +
      • 自 Delta Chat 1.34 版起,您有时可以在联系人头像旁看到一个 “绿点”。 +绿点。这意味着他们 “最近被看到”。
      • +
      • 具体来说:这意味着在过去 10 分钟内,Delta Chat 看到过他们:
          -
        • either because they messaged you directly,
        • -
        • because they wrote something to a group you are both a member of,
        • -
        • because they sent you a read receipt for a message you wrote,
        • -
        • or because they sent data to your Delta Chat app by using a -webxdc app.
        • +
        • 因为他们直接给你发了消息、
        • +
        • 因为他们在你们都是成员的群组里写了什么、
        • +
        • 因为他们向您发送了您所写信息的读取回执、
      • -
      • So this is not a real time online status - and if someone doesn’t answer -right away even though they seem to be online, don’t worry and give them some -space ;-)
      • -
      • On the other hand, others will not always “see that you are online”. If you -have turned off read receipts, they will not see the green dot until you -message them or write to a group they’re in as well.
      • +
      • 或者因为他们通过使用 webxdc 应用程序 向您的 Delta Chat 应用发送数据。
      • +
      • 因此,这并不是实时在线状态 – 如果有人没有立即回复,即使他们看起来是在线的,也不要担心,给他们一些空间 ;-)
      • +
      • 另一方面,别人也不会总是 “看到你在线”。如果您关闭了读取收据功能,他们就不会看到绿点,直到您给他们发消息或给他们所在的群组写信。
      -

      +

      - 如何删除我的账户? + 消息定时销毁是如何工作的?

      -

      As you use an e-mail account for Delta Chat, -how you can delete your account depends on your e-mail provider. -We don’t have any control over your e-mail account, -so unfortunately we can’t help you with that.

      +

      您可以在聊天窗口右上角的聊天设置中通过选择 1 分钟到 5 周之间的时间跨度打开“消息定时销毁”。

      -

      If you want to keep the account, -but uninstall Delta Chat, -it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      Until the setting is turned off again, +each chat member’s Delta Chat app takes care +of deleting the messages +after the selected time span. +The time span begins +when the receiver first sees the message in Delta Chat. +The messages are deleted +both in each email account on the server, +and in the app itself.

      + +

      Note that you can rely on disappearing messages +only as long as you trust your chat partners; +malicious chat partners can take photos, +or otherwise save, copy or forward messages before deletion.

      + +

      Apart from that, +if one chat partner uninstalls Delta Chat, +the messages will not get deleted from their email account. +They will most likely also not be decryptable anymore +(as long as they were encrypted in the first place).

      @@ -468,16 +438,18 @@ it is recommended to leave any group chat before uninstalling Delta Chat.

      • -

        默认情况下,Delta Chat 会在本地设备上存储您的所有消息。如果您,例如,想要节省邮件提供商处的存储空间,那么可以选择开启自动删除旧消息。这些消息还将保存在您的设备上(除非您在设备上删除它们)。

        +

        默认情况下,Delta Chat 会在本地设备上存储您的所有消息。 + 如果您,例如,想要节省邮件提供商处的存储空间, +那么可以选择配置Delta Chat 以开启服务端自动删除旧消息。 +这些消息还将保存在您的设备上,除非您在设备上删除它们。

      • -

        To turn it on, go to Delete Old Messages → Delete Messages from Server -in the “Chats and Media” settings. -You can set a timeframe between “At once” and “After 1 year”. -All e-mails received by Delta Chat will be deleted from the server after this timeframe.

        +

        要打开它,请转到 “聊天和媒体 “设置中的删除旧信息 → 从服务器删除信息。 +您可以在 “立即 “和 “1 年后 “之间设置时限。 +Delta Chat 收到的所有电子邮件都将在此期限后从服务器中删除。

      • -

        注意:如果在多台设备上使用 Delta Chat,请将消息在服务器上保存足够长的时间,以便其他设备能够下载消息。在这种情况下,您应当根据其他设备的使用频率,将自动删除设置到“一天后”或相似的选项上。

        +

        注意:如果在多台设备上使用 Delta Chat,请将消息在服务器上保存足够长的时间,以便其他设备能够下载消息。在这种情况下,您应当根据其他设备(们)的使用频率,将自动删除设置到“一天后”或相似的选项上。

      @@ -494,18 +466,182 @@ All e-mails received by Delta Chat will be deleted from the server after this ti
    132. 找到“聊天与媒体”设置中的“从设备删除旧消息”,在从“一小时后”到“一年后”的一系列选项中选择一个。这样,设备上 所有 比所选择时间长度老的消息将被删除。
    133. -

      +

      - Encryption and Security + Instant message delivery and Push Notifications

      -

      +

      - Which standards are used for end-to-end encryption? + What are Push Notifications? How can I get instant message delivery? + + +

      + +

      Push Notifications are sent by Apple and Google “Push services” to a user’s device +so that an inactive Delta Chat app can fetch messages in the background +and show notifications on a user’s phone if needed.

      + +

      Push Notifications work with all chatmail servers on

      + +
        +
      • +

        iOS devices, by integrating with Apple Push services.

        +
      • +
      • +

        Android devices, by integrating with the Google FCM Push service, +including on devices that use microG +instead of proprietary Google code on the phone.

        +
      • +
      + +

      As of May 2024, classic e-mail servers do not support Push Notifications +for Delta Chat users.

      + +

      + + + Are Push Notifications enabled on iOS devices? Is there an alternative? + + +

      + +

      Yes, Delta Chat automatically uses Push Notifications for chatmail profiles. +And no, there is no alternative on Apple’s phones to achieve instant message delivery +because Apple devices do not allow Delta Chat to fetch data in the background. +Push notifications are automatically activated for iOS users because +Delta Chat’s privacy-preserving Push Notification system +does not expose data to Apple that it doesn’t already have.

      + +

      + + + Are Push notifications enabled / needed on Android devices? + + +

      + +

      If a “Push Service” is available, Delta Chat enables Push Notifications +to achieve instant message delivery for all chatmail users. +If you are using a classic e-mail provider instead of chatmail servers, +Push Notifications are not available.

      + +

      In the Delta Chat “Notifications” settings for “Instant delivery” +you can change the following settings effecting all chat profiles:

      + +
        +
      • +

        Use Push Service: the default when using chatmail profiles and if +a Push service is available on the phone. +If you have both chatmail and classic e-mail profiles, +then Push Notification will only work +for incoming messages on chatmail profiles.

        +
      • +
      • +

        Use Background Connection: If you are not using a Push service, +you may disable “battery optimizations” for Delta Chat, +allowing it to fetch messages in the background. +However, there could be delays from minutes to hours. +Some Android vendors even restrict apps completely +(see dontkillmyapp.com) +and Delta Chat might not show incoming messages +until you manually open the app again.

        +
      • +
      • +

        Force Background Connection: This is the fallback option +if the previous options are not available or do not achieve “instant delivery”. +Enabling it causes a permanent notification on your phone +which may sometimes be “minified” with recent Android phones.

        +
      • +
      + +

      Both “Background Connection” options are energy-efficient and +safe to try if you experience messages arrive only with long delays.

      + +

      + + + How private are Delta Chat Push Notifications? + + +

      + +

      Delta Chat Push Notification support avoids leakage of private information. +It does not leak e-mail, IP address or message content (not even encrypted) +to any system involved in the delivery of Push Notifications.

      + +

      Here is how Delta Chat apps perform Push Notification delivery:

      + +
        +
      • +

        A Delta Chat app obtains a “device token” locally and stores it +on the chatmail server.

        +
      • +
      • +

        When a chatmail server receives an e-mail for a Delta Chat user +it forwards the “device token” to the central Delta Chat notification proxy.

        +
      • +
      • +

        The central Delta Chat notification proxy forwards +the “device token” to the respective Push service (Apple, Google, etc.), +without ever knowing the IP or e-mail address of Delta Chat users.

        +
      • +
      • +

        The central Push Service (Apple, Google, etc.) +wakes up the Delta Chat app on your device +to check for new messages in the background. +It does not know about the chatmail or e-mail address of the device it wakes up. +The central Apple/Google Push services never see an e-mail address (sender or receiver) +and also never see any message content (also not in encrypted forms).

        +
      • +
      + +

      As of May 2024, chatmail servers know about “device tokens” +but we plan to encrypt this information to the notification proxy +such that the chatmail server never learns the device token.

      + +

      The central Delta Chat notification proxy is small and fully implemented in Rust +and forgets about device-tokens as soon as Apple/Google/etc processed them, +usually in a matter of milliseconds.

      + +

      Resulting from this overall privacy design, even the seizure of a chatmail server, +or the full seizure of the central Delta Chat notification proxy +would not reveal private information that Push services do not already have.

      + +

      + + + Why does Delta Chat integrate with centralized proprietary Apple/Google push services? + + +

      + +

      Delta Chat is a free and open source decentralized messenger with free server choice, +but we want users to reliably experience “instant delivery” of messages, +like they experience from Whatsapp, Signal or Telegram apps, +without asking questions up-front that are more suited to expert users or developers.

      + +

      Note that Delta Chat has a small and privacy-preserving Push Notification system +that achieves “instant delivery” of messages for all chatmail servers +including a potential one you might setup yourself without our permission. +Welcome to the power of the interoperable and massive chatmail and e-mail system :)

      + +

      + + + 加密和安全 + + +

      + +

      + + + 端到端加密使用了哪些标准 ?

      @@ -516,17 +652,17 @@ Autocrypt uses a limited and secure subset of the Open End-to-End encrypted messages are marked with a padlock padlock.

      -

      Secure-Join protocols +

      Secure-Join protocols are used for establishing chats with guaranteed end-to-end encryption which protects against network attacks and compromised servers. Chats marked with a green checkmark green checkmark guarantee end-to-end encrypted messages.

      -

      +

      - How can i know if messages are end-to-end encrypted? + 我如何知道信息是否经过端到端加密?{#whene2e}

      @@ -547,49 +683,32 @@ guarantee end-to-end encrypted messages.

      -

      Meet your chat partner outside Delta Chat, preferably in person -but a second channel like a video chat -or a different messenger is fine as well. -Perform the following QR show/scan procedure with your chat partner. -One of you is the “Inviter”, the other is the “Joiner”.

      +

      If you have a second communication channel with your chat partner, +like a video chat or a different messenger, +you can generate an invite link.

      -

      Inviter side:

      +

      If you are together in person, +you can show a QR code to your chat partner.

      • -

        Group invitation: -Tap the chat group title to see its member list, and select “QR Invite code”. -Share the QR image with the other side either in person or through a second channel.

        +

        For Group invitations, +tap the chat group title to see its member list, +and select “QR Invite code”.

      • -

        Direct 1:1 chat invitation: -Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu. -Share the QR image with the other side either in person or through a second channel.

        +

        For direct 1:1 chat invitations, +tap the QR Code icon +on the Delta Chat app main screen.

      -

      Joiner side:

      +

      Let your chat partner scan the QR image +with their Delta Chat app, +or click “Copy” or “Share” to create an invite link +and share it with your chat partner.

      -
        -
      • -

        Tap the QR Code icon -on the Delta Chat app main screen – -on Desktop the QR Icon is in the left-side sandwich menu.

        -
      • -
      • -

        Choose “SCAN QR CODE” and scan the QR Code -that you see from your chat partner in a second channel.

        -
      • -
      • -

        Tap “OK”

        -
      • -
      - -

      Both Inviter and Joiner:

      - -

      Wait while Secure-Join network messages are exchanged between both devices.

      +

      Now wait while Secure-Join network messages are exchanged between both devices.

      • @@ -643,7 +762,7 @@ but there is no green checkmark in the profile title. This usually means that the contact “sent a message from another device”.

        For more in-depth discussion of “guaranteed end-to-end encryption” -please see Secure-Join protocols +please see Secure-Join protocols and specifically read about “Verified Groups”, the technical term of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.

        @@ -671,7 +790,7 @@ even if the contact is a member there.

        Your contact is using Delta Chat on a second device (phone or laptop)

        If they have another device with a Delta Chat app running, -they should remove the account from the new device +they should remove the profile from the new device and add it as a second device as described here. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is established with both devices of your contact.

        @@ -679,8 +798,8 @@ and guaranteed encryption is established with both devices of your contact.

        Your contact reinstalled Delta Chat using their old account login

        If they have a backup file, -they should remove the account from the new device -and rather import the backup file to re-create their account. +they should remove the profile from the new device +and rather import the backup file to re-create their profile. As soon as they message you afterwards, the warning will be gone and guaranteed encryption is re-established for this contact.

        @@ -701,7 +820,7 @@ guaranteed end-to-end encryption will be automatically re-established.

        Sometimes remaining in contact is more important than end-to-end encryption. “Transport Layer Encryption” (TLS) may still meaningfully protect the confidentiality of your messages between your device and the e-mail server. -But without end-to-end encryption you and your contract are trusting your e-mail server +But without end-to-end encryption you and your contact are trusting your e-mail server to not read or manipulate your messages, and to not hand them to third parties.

        In any case, you can not do much else than accept the warning. @@ -867,12 +986,12 @@ deliver messages to recipient’s devices.

        Both for protecting against metadata-collecting e-mail servers as well as against the threat of device seizure -we recommend to use a Delta Chat optimized e-mail server instance -to create pseudonymous temporary accounts through QR-code scans. -Note that Delta Chat apps on all platforms support multiple accounts -so you can easily use action-specific “1-week” or “1-month” accounts next to your “main” account -with the knowledge that all temporary account data, along with all metadata, will be deleted. -Moreover, if a device is seized then contacts using temporary e-mail accounts +we recommend to use a chatmail server +to create pseudonymous temporary profiles through QR-code scans. +Note that Delta Chat apps on all platforms support multiple profiles +so you can easily use situation-specific profiles next to your “main” profile +with the knowledge that all their data, along with all metadata, will be deleted. +Moreover, if a device is seized then contacts using temporary profiles can not be identified easily, as compared to messengers which reveal phone numbers in chat groups which in turn are often associated with legal identities.

        @@ -931,7 +1050,7 @@ and their non-Autocrypt e-mail app.

        If you need a safely end-to-end encrypted chat with a contact -who is using their account both with Delta Chat and non-Autocrypt apps (e.g. webmail), +who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail), it’s best to setup guaranteed end-to-end encryption with them and then create a guaranteed end-to-end encrypted group chat with you two as members. In this group chat all messages will be end-to-end encrypted @@ -949,10 +1068,10 @@ even if the direct chat between you two has a

        The best way to ensure every message is end-to-end encrypted, and metadata deleted as quickly as possible is using chats with guaranteed end-to-end encryption -and turning on disappearing messages.

        +and turning on disappearing messages.

        -

        Guranteed end-to-end encrypted chats protect against MITM attacks -and turning on “disappearing messages” deletes the messages +

        Guaranteed end-to-end encrypted chats protect against MITM attacks +and turning on disappearing messages deletes the messages on the server after a user-configured time.

        If you don’t need a longer-lived copy of your messages on the server, @@ -1031,12 +1150,77 @@ Caution: Make sure the key is not protected by a password, or remove the passwor -

        最可能的原因是您的密钥被加密了和/或使用了密码。Delta Chat 不支持这样的密钥。您可以移除密码,之后再尝试导入。如果想保留密码,您需要创建电子邮件别名来使用 Delta Chat ,这样 Delta Chat 的密钥是绑定到这个电子邮件别名上的。

        +

        最可能的原因是您的密钥被加密了和/或使用了密码。Delta Chat 不支持这样的密钥。您可以移除密码,之后再尝试导入。如果想保留密码,您 +需要创建电子邮件别名来使用 Delta Chat ,这样 Delta Chat 的密钥是绑定到这个电子邮件别名上的

        + +

        Another common error is having the wrong file ending. +Use the ASCII armored format and an .asc file ending.

        Delta Chat 支持常见的 OpenPGP 私钥格式。然而,不可能使每种来源的私钥都被完整支持。这不是 Delta Chat 的主要目标。实际上,大多数新用户在使用 Delta Chat 之前根本没有密钥。不过,我们确实在尝试支持尽可能多的私钥来源。

        移除私钥密码的操作取决于您用于管理 PGP 密钥的软件。对于 Enigmail,您可以在密钥管理窗口中将密码设为空值。 对于 GnuPG,您可以通过命令行来进行设置。对于其他程序,您应该能在网上找到解决方案。

        +

        + + + Was Delta Chat independently audited for security vulnerabilities? + + +

        + +

        The Delta Chat project underwent four independent security audits and one +independent security analysis, from most recent to older:

        + +
          +
        • +

          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 Hardening Guaranteed End-to-End encryption for more detailed information and the +Cryptographic Analysis of Delta Chat +research paper published afterwards.

          +
        • +
        • +

          2023 April, we fixed security and privacy issues with the “web +apps shared in a chat” feature, related to failures of sandboxing +especially with Chromium. We subsequently got an independent security +audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. +See here for the full background story on end-to-end security in the web.

          +
        • +
        • +

          2023 March, Cure53 analyzed both the transport encryption of +Delta Chat’s network connections and a reproducible mail server setup as +recommended on this site. +You can read more about the audit on our blog +or read the full report here.

          +
        • +
        • +

          2020, Include Security analyzed Delta +Chat’s Rust core, +IMAP, +SMTP, and +TLS libraries. +It did not find any critical or high-severity issues. +The report raised a few medium-severity weaknesses - +they are no threat to Delta Chat users on their own +because they depend on the environment in which Delta Chat is used. +For usability and compatibility reasons, +we can not mitigate all of them +and decided to provide security recommendations to threatened users. +You can read the full report here.

          +
        • +
        • +

          2019, Include Security analyzed Delta +Chat’s PGP and +RSA libraries. +It found no critical issues, +but two high-severity issues that we subsequently fixed. +It also revealed one medium-severity and some less severe issues, +but there was no way to exploit these vulnerabilities in the Delta Chat implementation. +Some of them we nevertheless fixed since the audit was concluded. +You can read the full report here.

          +
        • +
        +

        @@ -1053,7 +1237,7 @@ Caution: Make sure the key is not protected by a password, or remove the passwor

        -

        Yes. Delta Chat 1.36 comes with a new, experimental function for using the same account on different devices:

        +

        Yes. Delta Chat 1.36 comes with a new, experimental function for using the same profile on different devices:

        • @@ -1091,10 +1275,19 @@ One device is not needed for the other to work.

        • Double-check both devices are in the same Wi-Fi or network

        • +
        • +

          On Windows, go to Control Panel / Network and Internet +and make sure, Private Network is selected as “Network profile type” +(after transfer, you can change back to the original value)

          +
        • Your system might have a “personal firewall”, which is known to cause problems (especially on Windows). Disable the personal firewall for Delta Chat on both ends and try again

          +
        • +
        • +

          Guest Networks may not allow devices to communicate with each other. +If possible, use a non-guest network.

        • Ensure there is enough storage on the destination device

          @@ -1106,7 +1299,7 @@ Do not exit Delta Chat.
        • Delta Chat is already logged in on the destination device? -You can use multiple accounts per device, just add another account

          +You can use multiple profiles per device, just add another profile

        • If you still have problems or if you cannot scan a QR code @@ -1129,8 +1322,8 @@ try the manual transfer described below

          screen unlock PIN, pattern, or password. Then you can click on “Start Backup”. This saves the backup file to your device. Now you have to transfer it to the other device somehow.
        • -
        • On the new device, on the login screen, instead of logging into your email -account, choose “Import Backup”. After import, your conversations, encryption +
        • On the new device, in the “I already have a profile” menu, +choose “restore from backup”. After import, your conversations, encryption keys, and media should be copied to the new device.
          • If you use iOS: and you encounter difficulties, maybe @@ -1156,42 +1349,6 @@ end-to-end encrypted messages with your communication partners.
          • 如果是因为不能在工作的电脑上安装软件而需要一个 Web 客户端,您可以使用便携版的 Windows 桌面客户端,或者在 Linux 上使用 AppImage 版。您可以在 get.delta.chat 找到它们。
          -

          - - - “给自己发送副本”设置有什么用处? - - -

          - -

          向自己发送消息的副本可以确保您在所有设备上收到自己的消息。如果您在使用多台设备时没有打开此设置,那么您将只能看到其他人发过来的消息和您从当前设备发出的消息。

          - -

          副本会被发送到收件箱,然后会被移动到 DeltaChat 文件夹;它不会被放到“已发送”文件夹里。Delta Chat 从不 将东西上传到已发送文件夹,因为这意味着上传一条消息两次(一次通过 SMTP,一次通过 IMAP 到已发送文件夹)。

          - -

          给自己发送副本的默认设置是“不”。

          - -

          - - - 为什么我可以选择监视“已发送”文件夹? - - -

          - -

          监视已发送文件夹的唯一原因是:您在同时使用其他的邮件应用程序(比如 Thunderbird),并且想让邮件分发代理参与聊天对话。

          - -

          不过,我们推荐使用 Delta Chat 桌面客户端;您可以在 get.delta.chat 下载它。监视“已发送”文件夹的选项是在还没有 Delta Chat 桌面客户端的时候引入的,这个选项可能会在未来消失。

          - -

          - - - 为什么我可以选择不监视 DeltaChat 文件夹? - - -

          - -

          有些人将 Delta Chat 用作常规电子邮件客户端并希望将收件箱文件夹用于其邮件,而不是使用 DeltaChat 文件夹。如果禁用了“监视 DeltaChat 文件夹”,则还应该禁用“将聊天消息移动到 DeltaChat”。否则,删除消息或多设备设置可能无法正常工作。

          -

          @@ -1321,12 +1478,20 @@ this way, you will have a new random jitsi room every time you call someone.

          • -
          • 您可以在高级设置的“实验性功能”部分打开位置流。
          • -
          • 如果您想在聊天中分享位置,找到“附件”然后选择“位置”。现在,在 5 分钟到 6 小时之间,设置一个将您的位置传输给聊天伙伴的时间长度。
          • -
          • 在您的位置发生变化时,聊天中的其他人可以在地图上看到它。
          • -
          • 要看到地图和他人的位置,您需要在高级设置中打开该功能。
          • -
          • 此功能不会与您的聊天伙伴以外的任何人分享您的位置。 但是:为了显示地图,我们需要从 mapbox.com 下载地图图块。所以,当您 查看 地图时, mapbox.com 会收到下载特定区域地图的请求。 如果这对您来说是隐私风险,那么这项功能可能不适合您。我们正在寻找 Mapbox 的去中心化替代品。
          • -
          • 在桌面端,操作系统通常不能确定您的位置。不过您可以在地图上右键,然后描述一个位置;这个位置会作为一条消息发送到聊天中,同时也会出现在地图上。
          • +
          • You can turn on location streaming in the “experimental features” section of +the advanced settings.
          • +
          • Now, if you want to share your location in a chat, go to “attach” and select +“location”. You can now set a time frame in which your location will be +streamed to your chat partners, between 5 minutes and 6 hours.
          • +
          • When your location changes, the others in the chat can view it on a map in +the chat.
          • +
          • To see the map and view locations of others, you need to turn on the feature +in the advanced settings.
          • +
          • This feature will not share your location with anyone except your chat partners. +Map tiles are downloaded from OpenStreetMap.
          • +
          • On desktop, the OS typically can’t determine your location. Instead you can +right click on the map and describe a location, which is sent to the chat as +a message, but also appears on the map.

          @@ -1373,8 +1538,8 @@ this way, you will have a new random jitsi room every time you call someone.
        • -

          Change your address in “Settings - Password and Account” and -enter the password of your new account (and if necessary, server settings). +

          Change your address in “Settings → Advanced → Password and Account” and +enter the password of your new e-mail account (and if necessary, server settings). You will get an information notice about the fact that you are moving to a new address. An additional notice will also show up in your “Device messages” chat.

        • @@ -1405,6 +1570,58 @@ it.

          +

          + + + Delta Chat 需要哪些权限? + + +

          + +

          根据使用的操作系统,系统可能会要求您向本应用授予权限。下面 Delta Chat 使用各类权限进行的操作:

          + +
            +
          • Camera (can be disallowed) +
              +
            • take pictures and videos: for sending Photos
            • +
            +
          • +
          • Contacts (can be disallowed) +
              +
            • read your contacts: to discover contacts to chat with
            • +
            +
          • +
          • Location (can be disallowed) +
              +
            • access approximate location (network location sources): for the location streaming feature
            • +
            • access precise location (GPS and network location sources): for the location streaming feature
            • +
            +
          • +
          • Microphone (can be disallowed) +
              +
            • record audio: for audio messages
            • +
            +
          • +
          • Storage (can be disallowed) +
              +
            • modify or delete the contents of your SD card: to download message attachments
            • +
            • read the contents of your SD card: to share files with your contacts
            • +
            +
          • +
          • Other app capabilities +
              +
            • change your audio settings: so you can choose ring tones and volume for notifications and audio messages
            • +
            • run at startup: so you don’t have to start Delta Chat manually
            • +
            • control vibration: for notifications
            • +
            • view network connections: to connect to your E-Mail provider
            • +
            • prevent phone from sleeping: so you can easier copy the security code during the Autocrypt Setup Message
            • +
            • have full network access: to connect to your E-Mail provider
            • +
            • view Wi-Fi connections: to connect to your E-Mail provider
            • +
            • ask to ignore battery optimisations: for achieving “instant message delivery”
            • +
            +
          • +
          +

          @@ -1433,21 +1650,109 @@ blogpost.
        • You can find an installation guide on our website.
        -

        +

        - 使用电子邮件的 Delta Chat 真的是 即时 通讯工具吗? + 为什么我必须在 Delta Chat 中输入我的电子邮件密码? 这样安全吗?

        +

        与其他电子邮件程序(比如 Thunderbird、K9-Mail 或 Outlook)一样,本程序需要您的密码来允许您通过它发送邮件。当然,密码仅储存在您的设备上,并只会在登录时发送给您的电子邮件提供商(无论如何,您的提供商总是能够访问您的邮件)。

        + +

        如果您使用具有 OAuth2 支持的电子邮件提供商,例如 gmail.com 或 yandex.ru,则无需在设备上存储密码。在这种情况下,只有访问令牌被使用。

        + +

        由于 Delta Chat 是开源的,要验证您的凭据是否被安全地处理了,可以检查源代码。我们很高兴能收到使本应用对我们的所有用户更加安全的反馈。

        + +

        + + + 哪些消息会在 Delta Chat 中出现? + + +

        + +

        默认情况下, Delta Chat 会显示所有电子邮件。

        + +

        At “Settings → Advanced → Show Classic E-Mails”, +you can change this. You have these options:

        +
          -
        • 通常情况下,发送和接收消息会花费数秒。收发消息有时会花费更长时间;但是对于其他的通信软件来说,这也是真的。
        • -
        • 在双方都积极使用本应用时,即时聊天反应迅速;而当应用运行在后台时,有时就会很慢。
        • -
        • 由于 Android 与 iOS 经常阻止 Delta Chat 在后台运行、偶尔才会唤醒它,接收消息可能要花费数分钟。iOS 上的这种人为延迟通常比 Android 上的更糟糕。
        • -
        • 另外,对于很多正常应用来说,Android 和 iOS 杀掉后台应用是一个问题。更多信息,请参阅 dontkillmyapp.com
        • +
        • “不显示,仅聊天”:只显示由其他 Delta Chat 用户发送的消息和对您 Delta Chat 消息的回复。这在电子邮件地址同时用于处理普通邮件的情况下很有用。
        • +
        • “全部”:Delta Chat 会显示发送到您电子邮件地址的所有邮件。用于您希望使用 Delta Chat 处理所有电子邮件的情况,这样就不会有消息被落下了。默认设置。
        • +
        • “已接受的联系人”:Delta Chat 会显示已有聊天的联系人的所有电子邮件,而新聊天只会为 Delta Chat 消息弹出。可用于希望逐一决定是在 Delta Chat 中还是在“普通”电子邮件应用中对话的情况。
        +

        + + + Delta Chat 支持 HTML 电子邮件吗? + + +

        + +

        是的,收到的 HTML 邮件会有一个 “显示完整消息 “按钮。 +发出的邮件始终使用纯文本。

        + +

        + + + Can I set the E-Mail Subject with Delta Chat? + + +

        + +

        Delta Chat sets (and encrypts!) the classic e-mail subject +automatically to the group name or to the sender name.

        + +

        So if you want to set the subject yourself, +for example for a formal e-mail to a business contact, +you can create a group +with only yourself and the recipient(s). +Set the Chat Title to the Subject you want, +and then send your e-mail as the first message. +If the recipients don’t use Delta Chat, +it will look like a normal, +formal e-mail to them. +You will get bonus professionalism points +if you set a signature text.

        + +

        + + + “给自己发送副本”设置有什么用处? + + +

        + +

        向自己发送消息的副本可以确保您在所有设备上收到自己的消息。如果您在使用多台设备时没有打开此设置,那么您将只能看到其他人发过来的消息和您从当前设备发出的消息。

        + +

        副本会被发送到收件箱,然后会被移动到 DeltaChat 文件夹;它不会被放到“已发送”文件夹里。Delta Chat 从不 将东西上传到已发送文件夹,因为这意味着上传一条消息两次(一次通过 SMTP,一次通过 IMAP 到已发送文件夹)。

        + +

        “给自己发送副本”的默认设置为 “开”。

        + +

        + + + 为什么我可以选择监视“已发送”文件夹? + + +

        + +

        监视已发送文件夹的唯一原因是:您在使用Delta Chat软件的同时也使用其他的邮件应用程序(比如 Thunderbird),并且想让邮件分发代理参与聊天对话。

        + +

        不过,我们推荐使用 Delta Chat 桌面客户端;您可以在 get.delta.chat 下载它。监视“已发送”文件夹的选项是在还没有 Delta Chat 桌面客户端的时候引入的,这个选项可能会在未来消失。

        + +

        + + + 为什么我可以选择不监视 DeltaChat 文件夹? + + +

        + +

        有些人将 Delta Chat 用作常规电子邮件客户端并希望将收件箱文件夹用于其邮件,而不是使用 DeltaChat 文件夹。如果禁用了“监视 DeltaChat 文件夹”,则还应该禁用“将聊天消息移动到 DeltaChat”。否则,删除消息或多设备设置可能无法正常工作。

        +

        @@ -1469,6 +1774,23 @@ uses.

      • Autocrypt-enabled e-mail app.
      +

      + + + 如何删除我的账户? + + +

      + +

      As you use an e-mail account for Delta Chat, +how you can delete your account depends on your e-mail provider. +We don’t have any control over your e-mail account, +so unfortunately we can’t help you with that.

      + +

      If you want to keep the account, +but uninstall Delta Chat, +it is recommended to leave any group chat before uninstalling Delta Chat.

      +

      @@ -1481,59 +1803,6 @@ uses.
    134. 请参阅 Delta Chat 中使用的标准
    135. -

      - - - Was Delta Chat independently audited for security vulnerabilities? - - -

      - -

      The Delta Chat project underwent four independent security audits in the last years:

      - -
        -
      • -

        In 2019, Include Security analyzed Delta -Chat’s PGP and -RSA libraries. -It found no critical issues, -but two high-severity issues that we subsequently fixed. -It also revealed one medium-severity and some less severe issues, -but there was no way to exploit these vulnerabilities in the Delta Chat implementation. -Some of them we nevertheless fixed since the audit was concluded. -You can read the full report here.

        -
      • -
      • -

        In 2020, Include Security analyzed Delta -Chat’s Rust core, -IMAP, -SMTP, and -TLS libraries. -It did not find any critical or high-severity issues. -The report raised a few medium-severity weaknesses - -they are no threat to Delta Chat users on their own -because they depend on the environment in which Delta Chat is used. -For usability and compatibility reasons, -we can not mitigate all of them -and decided to provide security recommendations to threatened users. -You can read the full report here.

        -
      • -
      • -

        Beginning 2023, Cure53 analyzed both the transport encryption of -Delta Chat’s network connections and a reproducible mail server setup as -recommended on this site. -You can read more about the audit on our blog -or read the full report here.

        -
      • -
      • -

        Beginning 2023, we fixed security and privacy issues with the “web -apps shared in a chat” feature, related to failures of sandboxing -especially with Chromium. We subsequently got an independent security -audit from Cure53 and all issues found were fixed in the 1.36 app series released in April 2023. -See here for the full background story on end-to-end security in the web.

        -
      • -
      -

      @@ -1542,48 +1811,31 @@ See here for the full

      -

      Delta Chat 没有接受风险投资,也没有负债累累,更没有承受产生巨额利润或将用户及其朋友和家人卖给广告商(或更糟)的压力。我们宁愿使用(目前来自欧盟和美国的)公共资金,来帮助我们努力建立一个基于自由开源社区开发的、去中心化的、多样化的聊天消息(软件)生态系统。

      +

      Delta Chat 没有接受风险投资,也没有负债累累,更没有承受产生巨额利润或将用户及其朋友和家人卖给广告商(或更糟)的压力。我们宁愿使用目前来自欧盟和美国的公共资金,来帮助我们努力建立一个基于自由开源社区开发的、去中心化的、多样化的聊天消息软件生态系统。

      具体来说,到目前为止,对 Delta Chat 开发的资助有这些来源:

      • -

        The NEXTLEAP EU project funded the research -and implementation of verified groups and setup contact protocols -in 2017 and 2018 and also helped to integrate end-to-end Encryption -through Autocrypt.

        +

        NEXTLEAP欧盟项目资助了以下研究和实施工作:在 2017 年和 2018 年实施的验证组和设置联系协议和通过 Autocrypt整合了端到端加密。

      • 开放技术基金 2018/2019 年提供的第一笔赠款(约 20 万美元)期间,我们显著改善了安卓应用,发布了第一个桌面测试版,并根据人权方面的用户体验研究进行了功能开发,请参阅我们的结论《需求发现与用户体验报告》。2019/2020 年的第二笔赠款(约 30 万美元)对发布 Delta/iOS 版本,将核心库转换到 Rust ,以及为所有平台开发新功能提供了帮助。

      • -

        The NLnet foundation granted in 2019/2020 EUR 46K for -completing Rust/Python bindings and instigating a Chat-bot eco-system.

        +

        NLnet 基金会 2019/2020 年拨款 4.6 万欧元,用于完成 Rust/Python 绑定并建立聊天机器人生态系统。

      • 在 2021 年,我们从两项下一代互联网提案收到了欧盟的进一步资助,即 EPPD - 电子邮件提供商可移植性目录(约 9.7 万欧元)和 AEAP - 电子邮件地址移植(约 9 万欧元)。这带来了更好的多账户支持,改进的二维码联系人和群组设置,和所有平台上的多处网络改进。

      • -

        From End 2021 till March 2023 we received Internet Freedom funding (500K USD) from the -U.S. Bureau of Democracy, Human Rights and Labor (DRL). -This funding supported our long-running goals to make Delta Chat more usable -and compatible with a wide range of e-mail servers world-wide, and more resilient and secure -in places often affected by internet censorship and shutdowns.

        +

        从 2021 年底到 2023 年 3 月,我们从美国民主、人权和劳工局(DRL)获得了互联网自由资金(50 万美元)。这笔资金支持了我们的长期目标,即让Delta Chat 更好用,并与全球范围内的各种电子邮件服务器兼容,而且在经常受到互联网审查制度影响的地方更具弹性和安全性。

      • -

        Beginning 2023 we got accepted in the Next Generation Internet (NGI) -Entrust program for our “Private Decentralized Apps” proposals. -Exact amount is to be determined (around 100K EUR). -This funding supports further developments of webxdc “apps shared in a chat”.

        +

        从 2023 年开始,我们的 “私有去中心化应用程序 “提案获得了 下一代互联网(NGI)托付计划的青睐。 具体金额待定(约 10 万欧元)。这笔资金将支持webxdc “聊天共享应用程序”的进一步开发。

      • -

        Sometimes we receive one-time donations from private individuals. -For example, in 2021 a generous individual bank-wired us 4K EUR -with the subject “keep up the good developments!”. 💜 -We use such money to fund development gatherings or to care for ad-hoc expenses -that can not easily be predicted for, or reimbursed from, public funding grants. -Receiving more donations also helps us to become more independent and long-term viable -as a contributor community.

        +

        我们有时会收到个人的一次性捐款。 例如,2021 年,一位慷慨的人士以 “继续保持良好的发展态势!”为主题通过银行向我们捐赠了4千欧元💜。 我们用这些钱来资助发展活动或支付不容易预测或从公共基金中报销的临时费用。收到更多的捐款也有助于我们作为一个贡献者社区变得更加独立和长期可持续。

      • @@ -1594,8 +1846,8 @@ as a contributor community.

        上面提到的钱款资助主要是由在弗赖堡(德国)的 merlinux GmbH 组织的,分发给了来自世界各地的十多位贡献者。

        -

        Please see Delta Chat Contribution channels -for both monetary and and other contribution possibilities.

        +

        请参阅 [Delta Chat 捐款渠道](捐款) +以了解货币捐款和其他捐款的可能性。

        diff --git a/src/main/assets/webxdc/maps.xdc b/src/main/assets/webxdc/maps.xdc new file mode 100644 index 000000000..2fb5ca191 Binary files /dev/null and b/src/main/assets/webxdc/maps.xdc differ diff --git a/src/com/b44t/messenger/DcAccounts.java b/src/main/java/com/b44t/messenger/DcAccounts.java similarity index 96% rename from src/com/b44t/messenger/DcAccounts.java rename to src/main/java/com/b44t/messenger/DcAccounts.java index c959ff69e..afe6b5041 100644 --- a/src/com/b44t/messenger/DcAccounts.java +++ b/src/main/java/com/b44t/messenger/DcAccounts.java @@ -24,6 +24,7 @@ public class DcAccounts { public native void startIo (); public native void stopIo (); public native void maybeNetwork (); + public native void setPushDeviceToken (String token); public native int addAccount (); public native int addClosedAccount (); diff --git a/src/com/b44t/messenger/DcBackupProvider.java b/src/main/java/com/b44t/messenger/DcBackupProvider.java similarity index 100% rename from src/com/b44t/messenger/DcBackupProvider.java rename to src/main/java/com/b44t/messenger/DcBackupProvider.java diff --git a/src/com/b44t/messenger/DcChat.java b/src/main/java/com/b44t/messenger/DcChat.java similarity index 100% rename from src/com/b44t/messenger/DcChat.java rename to src/main/java/com/b44t/messenger/DcChat.java diff --git a/src/com/b44t/messenger/DcChatlist.java b/src/main/java/com/b44t/messenger/DcChatlist.java similarity index 100% rename from src/com/b44t/messenger/DcChatlist.java rename to src/main/java/com/b44t/messenger/DcChatlist.java diff --git a/src/com/b44t/messenger/DcContact.java b/src/main/java/com/b44t/messenger/DcContact.java similarity index 97% rename from src/com/b44t/messenger/DcContact.java rename to src/main/java/com/b44t/messenger/DcContact.java index 91afae6f0..0f61d9107 100644 --- a/src/com/b44t/messenger/DcContact.java +++ b/src/main/java/com/b44t/messenger/DcContact.java @@ -6,7 +6,7 @@ public class DcContact { public final static int DC_CONTACT_ID_INFO = 2; public final static int DC_CONTACT_ID_DEVICE = 5; public final static int DC_CONTACT_ID_LAST_SPECIAL = 9; - public final static int DC_CONTACT_ID_NEW_CONTACT = -1; // used by the UI, not valid to the core + public final static int DC_CONTACT_ID_NEW_CLASSIC_CONTACT= -1; // used by the UI, not valid to the core public final static int DC_CONTACT_ID_NEW_GROUP = -2; // - " - public final static int DC_CONTACT_ID_ADD_MEMBER = -3; // - " - public final static int DC_CONTACT_ID_QR_INVITE = -4; // - " - diff --git a/src/com/b44t/messenger/DcContext.java b/src/main/java/com/b44t/messenger/DcContext.java similarity index 93% rename from src/com/b44t/messenger/DcContext.java rename to src/main/java/com/b44t/messenger/DcContext.java index 33736f654..8813385d0 100644 --- a/src/com/b44t/messenger/DcContext.java +++ b/src/main/java/com/b44t/messenger/DcContext.java @@ -29,6 +29,8 @@ public class DcContext { public final static int DC_EVENT_CONNECTIVITY_CHANGED = 2100; public final static int DC_EVENT_SELFAVATAR_CHANGED = 2110; 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_IMEX_EXPORT_SELF_KEYS = 1; public final static int DC_IMEX_IMPORT_SELF_KEYS = 2; @@ -136,8 +138,6 @@ public class DcContext { public native boolean setConfigFromQr (String qr); public native String getConfig (String key); public int getConfigInt (String key) { try{return Integer.parseInt(getConfig(key));} catch(Exception e) {} return 0; } - @Deprecated public String getConfig (String key, String def) { return getConfig(key); } - @Deprecated public int getConfigInt (String key, int def) { return getConfigInt(key); } public native String getInfo (); public native int getConnectivity (); public native String getConnectivityHtml (); @@ -202,6 +202,8 @@ public class DcContext { public native int sendVideochatInvitation(int chat_id); public native boolean sendWebxdcStatusUpdate(int msg_id, String payload, String descr); public native String getWebxdcStatusUpdates(int msg_id, int last_known_serial); + public native void setWebxdcIntegration (String file); + public native int initWebxdcIntegration(int chat_id); public native int addDeviceMsg (String label, DcMsg msg); public native boolean wasDeviceMsgEverAdded(String label); public DcLot checkQr (String qr) { return new DcLot(checkQrCPtr(qr)); } @@ -210,8 +212,6 @@ public class DcContext { public native int joinSecurejoin (String qr); public native void sendLocationsToChat (int chat_id, int seconds); public native boolean isSendingLocationsToChat(int chat_id); - public DcArray getLocations (int chat_id, int contact_id, long timestamp_start, long timestamp_end) { return new DcArray(getLocationsCPtr(chat_id, contact_id, timestamp_start, timestamp_end)); } - public native void deleteAllLocations (); public DcProvider getProviderFromEmailWithDns (String email) { long cptr = getProviderFromEmailWithDnsCPtr(email); return cptr!=0 ? new DcProvider(cptr) : null; } public String getNameNAddr() { @@ -232,6 +232,25 @@ public class DcContext { return ret.trim(); } + public boolean isChatmail() { + return getConfigInt("is_chatmail") == 1; + } + + // 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*/); + } + } + /** * @return true if at least one chat has location streaming enabled */ @@ -248,7 +267,6 @@ public class DcContext { private native long getMsgCPtr (int id); private native long getDraftCPtr (int id); private native long getContactCPtr (int id); - private native long getLocationsCPtr (int chat_id, int contact_id, long timestamp_start, long timestamp_end); private native long checkQrCPtr (String qr); private native long getProviderFromEmailWithDnsCPtr (String addr); private native long newBackupProviderCPtr(); diff --git a/src/com/b44t/messenger/DcEvent.java b/src/main/java/com/b44t/messenger/DcEvent.java similarity index 93% rename from src/com/b44t/messenger/DcEvent.java rename to src/main/java/com/b44t/messenger/DcEvent.java index a2970b908..1acfc2ee0 100644 --- a/src/com/b44t/messenger/DcEvent.java +++ b/src/main/java/com/b44t/messenger/DcEvent.java @@ -16,6 +16,7 @@ public class DcEvent { public native int getData1Int (); public native int getData2Int (); public native String getData2Str (); + public native byte[] getData2Blob(); public native int getAccountId(); // working with raw c-data diff --git a/src/com/b44t/messenger/DcEventEmitter.java b/src/main/java/com/b44t/messenger/DcEventEmitter.java similarity index 100% rename from src/com/b44t/messenger/DcEventEmitter.java rename to src/main/java/com/b44t/messenger/DcEventEmitter.java diff --git a/src/com/b44t/messenger/DcJsonrpcInstance.java b/src/main/java/com/b44t/messenger/DcJsonrpcInstance.java similarity index 100% rename from src/com/b44t/messenger/DcJsonrpcInstance.java rename to src/main/java/com/b44t/messenger/DcJsonrpcInstance.java diff --git a/src/com/b44t/messenger/DcLot.java b/src/main/java/com/b44t/messenger/DcLot.java similarity index 100% rename from src/com/b44t/messenger/DcLot.java rename to src/main/java/com/b44t/messenger/DcLot.java diff --git a/src/com/b44t/messenger/DcMediaGalleryElement.java b/src/main/java/com/b44t/messenger/DcMediaGalleryElement.java similarity index 100% rename from src/com/b44t/messenger/DcMediaGalleryElement.java rename to src/main/java/com/b44t/messenger/DcMediaGalleryElement.java diff --git a/src/com/b44t/messenger/DcMsg.java b/src/main/java/com/b44t/messenger/DcMsg.java similarity index 98% rename from src/com/b44t/messenger/DcMsg.java rename to src/main/java/com/b44t/messenger/DcMsg.java index 7f783441b..52a4c110d 100644 --- a/src/com/b44t/messenger/DcMsg.java +++ b/src/main/java/com/b44t/messenger/DcMsg.java @@ -20,6 +20,7 @@ public class DcMsg { public final static int DC_MSG_FILE = 60; public final static int DC_MSG_VIDEOCHAT_INVITATION = 70; public final static int DC_MSG_WEBXDC = 80; + public final static int DC_MSG_VCARD = 90; public final static int DC_INFO_UNKNOWN = 0; public final static int DC_INFO_GROUP_NAME_CHANGED = 2; @@ -33,6 +34,7 @@ public class DcMsg { public final static int DC_INFO_EPHEMERAL_TIMER_CHANGED = 10; public final static int DC_INFO_PROTECTION_ENABLED = 11; public final static int DC_INFO_PROTECTION_DISABLED = 12; + public final static int DC_INFO_INVALID_UNENCRYPTED_MAIL = 13; public final static int DC_INFO_WEBXDC_INFO_MESSAGE = 32; public final static int DC_STATE_UNDEFINED = 0; diff --git a/src/com/b44t/messenger/DcProvider.java b/src/main/java/com/b44t/messenger/DcProvider.java similarity index 100% rename from src/com/b44t/messenger/DcProvider.java rename to src/main/java/com/b44t/messenger/DcProvider.java diff --git a/src/com/b44t/messenger/rpc/HttpResponse.java b/src/main/java/com/b44t/messenger/rpc/HttpResponse.java similarity index 100% rename from src/com/b44t/messenger/rpc/HttpResponse.java rename to src/main/java/com/b44t/messenger/rpc/HttpResponse.java diff --git a/src/com/b44t/messenger/rpc/Reaction.java b/src/main/java/com/b44t/messenger/rpc/Reaction.java similarity index 100% rename from src/com/b44t/messenger/rpc/Reaction.java rename to src/main/java/com/b44t/messenger/rpc/Reaction.java diff --git a/src/com/b44t/messenger/rpc/Reactions.java b/src/main/java/com/b44t/messenger/rpc/Reactions.java similarity index 100% rename from src/com/b44t/messenger/rpc/Reactions.java rename to src/main/java/com/b44t/messenger/rpc/Reactions.java diff --git a/src/com/b44t/messenger/rpc/Rpc.java b/src/main/java/com/b44t/messenger/rpc/Rpc.java similarity index 75% rename from src/com/b44t/messenger/rpc/Rpc.java rename to src/main/java/com/b44t/messenger/rpc/Rpc.java index 33e9e1f21..e7ae1b9e3 100644 --- a/src/com/b44t/messenger/rpc/Rpc.java +++ b/src/main/java/com/b44t/messenger/rpc/Rpc.java @@ -8,6 +8,7 @@ import com.google.gson.JsonElement; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutionException; @@ -95,6 +96,20 @@ public class Rpc { return gson.fromJson(getResult("get_system_info"), mapType.getType()); } + public List parseVcard(String path) throws RpcException { + TypeToken> listType = new TypeToken>(){}; + return gson.fromJson(getResult("parse_vcard", path), listType.getType()); + } + + public String makeVcard(int accountId, int... contacts) throws RpcException { + return gson.fromJson(getResult("make_vcard", accountId, contacts), String.class); + } + + public List importVcard(int accountId, String path) throws RpcException { + TypeToken> listType = new TypeToken>(){}; + return gson.fromJson(getResult("import_vcard", accountId, path), listType.getType()); + } + public HttpResponse getHttpResponse(int accountId, String url) throws RpcException { return gson.fromJson(getResult("get_http_response", accountId, url), HttpResponse.class); } @@ -107,6 +122,22 @@ public class Rpc { return getResult("send_reaction", accountId, msgId, reaction).getAsInt(); } + public int draftSelfReport(int accountId) throws RpcException { + return getResult("draft_self_report", accountId).getAsInt(); + } + + public void sendWebxdcRealtimeData(Integer accountId, Integer instanceMsgId, List data) throws RpcException { + getResult("send_webxdc_realtime_data", accountId, instanceMsgId, data); + } + + public void sendWebxdcRealtimeAdvertisement(Integer accountId, Integer instanceMsgId) throws RpcException { + getResult("send_webxdc_realtime_advertisement", accountId, instanceMsgId); + } + + public void leaveWebxdcRealtime(Integer accountId, Integer instanceMessageId) throws RpcException { + getResult("leave_webxdc_realtime", accountId, instanceMessageId); + } + private static class Request { private final String jsonrpc = "2.0"; public final String method; diff --git a/src/com/b44t/messenger/rpc/RpcException.java b/src/main/java/com/b44t/messenger/rpc/RpcException.java similarity index 100% rename from src/com/b44t/messenger/rpc/RpcException.java rename to src/main/java/com/b44t/messenger/rpc/RpcException.java diff --git a/src/main/java/com/b44t/messenger/rpc/VcardContact.java b/src/main/java/com/b44t/messenger/rpc/VcardContact.java new file mode 100644 index 000000000..75c47ea0a --- /dev/null +++ b/src/main/java/com/b44t/messenger/rpc/VcardContact.java @@ -0,0 +1,60 @@ +package com.b44t.messenger.rpc; + +import android.util.Base64; + +public class VcardContact { + // Email address. + private final String addr; + + // The contact's name, or the email address if no name was given. + private final String displayName; + + // Public PGP key in Base64. + private final String key; + + // Profile image in Base64. + private final String profileImage; + + // Contact color in HTML color format. + private final String color; + + // Last update timestamp. + private final int timestamp; + + public VcardContact(String addr, String displayName, String key, String profileImage, String color, int timestamp) { + this.addr = addr; + this.displayName = displayName; + this.key = key; + this.profileImage = profileImage; + this.color = color; + this.timestamp = timestamp; + } + + public String getAddr() { + return addr; + } + + public String getDisplayName() { + return displayName; + } + + public byte[] getKey() { + return key == null? null : Base64.decode(key, Base64.NO_WRAP | Base64.NO_PADDING); + } + + public boolean hasProfileImage() { + return profileImage != null; + } + + public byte[] getProfileImage() { + return profileImage == null? null : Base64.decode(profileImage, Base64.NO_WRAP | Base64.NO_PADDING); + } + + public String getColor() { + return color; + } + + public int getTimestamp() { + return timestamp; + } +} diff --git a/src/com/b44t/messenger/util/concurrent/ListenableFuture.java b/src/main/java/com/b44t/messenger/util/concurrent/ListenableFuture.java similarity index 100% rename from src/com/b44t/messenger/util/concurrent/ListenableFuture.java rename to src/main/java/com/b44t/messenger/util/concurrent/ListenableFuture.java diff --git a/src/com/b44t/messenger/util/concurrent/SettableFuture.java b/src/main/java/com/b44t/messenger/util/concurrent/SettableFuture.java similarity index 100% rename from src/com/b44t/messenger/util/concurrent/SettableFuture.java rename to src/main/java/com/b44t/messenger/util/concurrent/SettableFuture.java diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java similarity index 96% rename from src/org/thoughtcrime/securesms/ApplicationContext.java rename to src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index c1c00e3a6..6d78be0dc 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -39,6 +39,7 @@ import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider; import org.thoughtcrime.securesms.crypto.PRNGFixes; import org.thoughtcrime.securesms.geolocation.DcLocationManager; import org.thoughtcrime.securesms.jobmanager.JobManager; +import org.thoughtcrime.securesms.notifications.FcmReceiveService; import org.thoughtcrime.securesms.notifications.InChatSounds; import org.thoughtcrime.securesms.notifications.NotificationCenter; import org.thoughtcrime.securesms.util.AndroidSignalProtocolLogger; @@ -54,7 +55,7 @@ import java.util.concurrent.TimeUnit; public class ApplicationContext extends MultiDexApplication { private static final String TAG = ApplicationContext.class.getSimpleName(); - public DcAccounts dcAccounts; + public static DcAccounts dcAccounts; public Rpc rpc; public DcContext dcContext; public DcLocationManager dcLocationManager; @@ -223,6 +224,16 @@ public class ApplicationContext extends MultiDexApplication { ExistingPeriodicWorkPolicy.KEEP, fetchWorkRequest); AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); + + if (BuildConfig.USE_PLAY_SERVICES) { + if (Prefs.isPushEnabled(this)) { + FcmReceiveService.register(this); + } else { + Log.i(TAG, "FCM disabled in user settings"); + } + } else { + Log.i(TAG, "FCM disabled at build time"); + } } public JobManager getJobManager() { diff --git a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java b/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java similarity index 99% rename from src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java rename to src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java index 75e96d619..3898bb68e 100644 --- a/src/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ApplicationPreferencesActivity.java @@ -17,7 +17,6 @@ */ package org.thoughtcrime.securesms; -import android.Manifest; import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; diff --git a/src/main/java/org/thoughtcrime/securesms/AttachContactActivity.java b/src/main/java/org/thoughtcrime/securesms/AttachContactActivity.java new file mode 100644 index 000000000..fcacec7b5 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/AttachContactActivity.java @@ -0,0 +1,19 @@ +package org.thoughtcrime.securesms; + +import android.content.Intent; + +import org.thoughtcrime.securesms.connect.DcHelper; + +public class AttachContactActivity extends ContactSelectionActivity { + + public static final String CONTACT_ID_EXTRA = "contact_id_extra"; + + @Override + public void onContactSelected(int specialId, String addr) { + Intent intent = new Intent(); + int contactId = DcHelper.getContext(this).lookupContactIdByAddr(addr); + intent.putExtra(CONTACT_ID_EXTRA, contactId); + setResult(RESULT_OK, intent); + finish(); + } +} diff --git a/src/org/thoughtcrime/securesms/BaseActionBarActivity.java b/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java similarity index 96% rename from src/org/thoughtcrime/securesms/BaseActionBarActivity.java rename to src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java index 6297cd58c..487be89bb 100644 --- a/src/org/thoughtcrime/securesms/BaseActionBarActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/BaseActionBarActivity.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms; import android.content.res.Configuration; -import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; @@ -75,9 +74,7 @@ public abstract class BaseActionBarActivity extends AppCompatActivity { } private void initializeScreenshotSecurity() { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH && - Prefs.isScreenSecurityEnabled(this)) - { + if (Prefs.isScreenSecurityEnabled(this)) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } } diff --git a/src/org/thoughtcrime/securesms/BaseActivity.java b/src/main/java/org/thoughtcrime/securesms/BaseActivity.java similarity index 78% rename from src/org/thoughtcrime/securesms/BaseActivity.java rename to src/main/java/org/thoughtcrime/securesms/BaseActivity.java index 7dee2e786..319d3d56c 100644 --- a/src/org/thoughtcrime/securesms/BaseActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/BaseActivity.java @@ -23,8 +23,6 @@ public abstract class BaseActivity extends FragmentActivity { } public static boolean isMenuWorkaroundRequired() { - return VERSION.SDK_INT < VERSION_CODES.KITKAT && - VERSION.SDK_INT > VERSION_CODES.GINGERBREAD_MR1 && - ("LGE".equalsIgnoreCase(Build.MANUFACTURER) || "E6710".equalsIgnoreCase(Build.DEVICE)); + return VERSION.SDK_INT < VERSION_CODES.KITKAT && ("LGE".equalsIgnoreCase(Build.MANUFACTURER) || "E6710".equalsIgnoreCase(Build.DEVICE)); } } diff --git a/src/org/thoughtcrime/securesms/BaseConversationItem.java b/src/main/java/org/thoughtcrime/securesms/BaseConversationItem.java similarity index 94% rename from src/org/thoughtcrime/securesms/BaseConversationItem.java rename to src/main/java/org/thoughtcrime/securesms/BaseConversationItem.java index 17d311ecf..106896be5 100644 --- a/src/org/thoughtcrime/securesms/BaseConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/BaseConversationItem.java @@ -83,7 +83,8 @@ public abstract class BaseConversationItem extends LinearLayout return batchSelected.isEmpty() && (messageRecord.isFailed() || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_DISABLED - || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED); + || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED + || messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL); } protected void onAccessibilityClick() {} @@ -133,6 +134,8 @@ public abstract class BaseConversationItem extends LinearLayout DcHelper.showVerificationBrokenDialog(context, conversationRecipient.getName()); } else if (messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED) { DcHelper.showProtectionEnabledDialog(context); + } else if (messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL) { + DcHelper.showInvalidUnencryptedDialog(context); } } } diff --git a/src/main/java/org/thoughtcrime/securesms/BaseConversationListAdapter.java b/src/main/java/org/thoughtcrime/securesms/BaseConversationListAdapter.java new file mode 100644 index 000000000..3114c3524 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/BaseConversationListAdapter.java @@ -0,0 +1,32 @@ +package org.thoughtcrime.securesms; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +public abstract class BaseConversationListAdapter extends RecyclerView.Adapter { + protected final Set batchSet = Collections.synchronizedSet(new HashSet()); + protected boolean batchMode = false; + + public abstract void selectAllThreads(); + + public void initializeBatchMode(boolean toggle) { + batchMode = toggle; + batchSet.clear(); + notifyDataSetChanged(); + } + + public void toggleThreadInBatchSet(long threadId) { + if (batchSet.contains(threadId)) { + batchSet.remove(threadId); + } else if (threadId != -1) { + batchSet.add(threadId); + } + } + + public Set getBatchSelections() { + return batchSet; + } +} diff --git a/src/main/java/org/thoughtcrime/securesms/BaseConversationListFragment.java b/src/main/java/org/thoughtcrime/securesms/BaseConversationListFragment.java new file mode 100644 index 000000000..4ae6de962 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/BaseConversationListFragment.java @@ -0,0 +1,397 @@ +package org.thoughtcrime.securesms; + +import static org.thoughtcrime.securesms.util.RelayUtil.acquireRelayMessageContent; +import static org.thoughtcrime.securesms.util.RelayUtil.getSharedText; +import static org.thoughtcrime.securesms.util.RelayUtil.getSharedUris; +import static org.thoughtcrime.securesms.util.RelayUtil.isForwarding; +import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.Intent; +import android.content.res.TypedArray; +import android.graphics.Color; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.view.ActionMode; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; + +import com.b44t.messenger.DcChat; +import com.b44t.messenger.DcContext; +import com.google.android.material.snackbar.Snackbar; + +import org.thoughtcrime.securesms.components.registration.PulsingFloatingActionButton; +import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.connect.DirectShareUtil; +import org.thoughtcrime.securesms.util.SendRelayedMessageUtil; +import org.thoughtcrime.securesms.util.task.SnackbarAsyncTask; +import org.thoughtcrime.securesms.util.views.ProgressDialog; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Locale; +import java.util.Set; + +public abstract class BaseConversationListFragment extends Fragment implements ActionMode.Callback { + protected ActionMode actionMode; + protected PulsingFloatingActionButton fab; + + protected abstract boolean offerToArchive(); + protected abstract void setFabVisibility(boolean isActionMode); + protected abstract BaseConversationListAdapter getListAdapter(); + + protected void onItemClick(long chatId) { + if (actionMode == null) { + ((ConversationSelectedListener) requireActivity()).onCreateConversation((int)chatId); + } else { + BaseConversationListAdapter adapter = getListAdapter(); + adapter.toggleThreadInBatchSet(chatId); + + if (adapter.getBatchSelections().isEmpty()) { + actionMode.finish(); + } else { + updateActionModeItems(actionMode.getMenu()); + actionMode.setTitle(String.valueOf(adapter.getBatchSelections().size())); + } + + adapter.notifyDataSetChanged(); + } + } + public void onItemLongClick(long chatId) { + actionMode = ((AppCompatActivity)requireActivity()).startSupportActionMode(this); + + if (actionMode != null) { + getListAdapter().initializeBatchMode(true); + getListAdapter().toggleThreadInBatchSet(chatId); + getListAdapter().notifyDataSetChanged(); + Menu menu = actionMode.getMenu(); + if (menu != null) { + updateActionModeItems(menu); + } + } + } + + protected void initializeFabClickListener(boolean isActionMode) { + Intent intent = new Intent(getActivity(), NewConversationActivity.class); + if (isRelayingMessageContent(getActivity())) { + if (isActionMode) { + fab.setOnClickListener(v -> { + final Set selectedChats = getListAdapter().getBatchSelections(); + ArrayList uris = getSharedUris(getActivity()); + String message; + if (isForwarding(getActivity())) { + message = String.format(Locale.getDefault(), getString(R.string.ask_forward_multiple), selectedChats.size()); + } else if (!uris.isEmpty()) { + message = String.format(Locale.getDefault(), getString(R.string.share_multiple_attachments_multiple_chats), uris.size(), selectedChats.size()); + } else { + message = String.format(Locale.getDefault(), getString(R.string.share_text_multiple_chats), selectedChats.size(), getSharedText(getActivity())); + } + Context context = getContext(); + if (context != null) { + new AlertDialog.Builder(context) + .setMessage(message) + .setCancelable(false) + .setNegativeButton(android.R.string.cancel, ((dialog, which) -> {})) + .setPositiveButton(R.string.menu_send, (dialog, which) -> { + SendRelayedMessageUtil.immediatelyRelay(getActivity(), selectedChats.toArray(new Long[selectedChats.size()])); + actionMode.finish(); + actionMode = null; + getActivity().finish(); + }) + .show(); + } + }); + } else { + acquireRelayMessageContent(getActivity(), intent); + fab.setOnClickListener(v -> requireActivity().startActivity(intent)); + } + } else { + fab.setOnClickListener(v -> startActivity(intent)); + } + } + + private boolean areSomeSelectedChatsUnpinned() { + DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedChats = getListAdapter().getBatchSelections(); + for (long chatId : selectedChats) { + DcChat dcChat = dcContext.getChat((int)chatId); + if (dcChat.getVisibility()!=DcChat.DC_CHAT_VISIBILITY_PINNED) { + return true; + } + } + return false; + } + + private boolean areSomeSelectedChatsUnmuted() { + DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedChats = getListAdapter().getBatchSelections(); + for (long chatId : selectedChats) { + DcChat dcChat = dcContext.getChat((int)chatId); + if (!dcChat.isMuted()) { + return true; + } + } + return false; + } + + private void handlePinAllSelected() { + final DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedConversations = new HashSet(getListAdapter().getBatchSelections()); + boolean doPin = areSomeSelectedChatsUnpinned(); + for (long chatId : selectedConversations) { + dcContext.setChatVisibility((int)chatId, + doPin? DcChat.DC_CHAT_VISIBILITY_PINNED : DcChat.DC_CHAT_VISIBILITY_NORMAL); + } + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + + private void handleMuteAllSelected() { + final DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedConversations = new HashSet(getListAdapter().getBatchSelections()); + if (areSomeSelectedChatsUnmuted()) { + MuteDialog.show(getActivity(), duration -> { + for (long chatId : selectedConversations) { + dcContext.setChatMuteDuration((int)chatId, duration); + } + + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + }); + } else { + // unmute + for (long chatId : selectedConversations) { + dcContext.setChatMuteDuration((int)chatId, 0); + } + + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + } + + private void handleMarknoticedSelected() { + final DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedConversations = new HashSet(getListAdapter().getBatchSelections()); + for (long chatId : selectedConversations) { + dcContext.marknoticedChat((int)chatId); + } + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + + @SuppressLint("StaticFieldLeak") + private void handleArchiveAllSelected() { + final DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedConversations = new HashSet(getListAdapter().getBatchSelections()); + final boolean archive = offerToArchive(); + + int snackBarTitleId; + + if (archive) snackBarTitleId = R.plurals.chat_archived; + else snackBarTitleId = R.plurals.chat_unarchived; + + int count = selectedConversations.size(); + String snackBarTitle = getResources().getQuantityString(snackBarTitleId, count, count); + + new SnackbarAsyncTask(getView(), snackBarTitle, + getString(R.string.undo), + Snackbar.LENGTH_LONG, true) + { + + @Override + protected void onPostExecute(Void result) { + super.onPostExecute(result); + + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + + @Override + protected void executeAction(@Nullable Void parameter) { + for (long chatId : selectedConversations) { + dcContext.setChatVisibility((int)chatId, + archive? DcChat.DC_CHAT_VISIBILITY_ARCHIVED : DcChat.DC_CHAT_VISIBILITY_NORMAL); + } + } + + @Override + protected void reverseAction(@Nullable Void parameter) { + for (long threadId : selectedConversations) { + dcContext.setChatVisibility((int)threadId, + archive? DcChat.DC_CHAT_VISIBILITY_NORMAL : DcChat.DC_CHAT_VISIBILITY_ARCHIVED); + } + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + + @SuppressLint("StaticFieldLeak") + private void handleDeleteAllSelected() { + final DcContext dcContext = DcHelper.getContext(requireActivity()); + int conversationsCount = getListAdapter().getBatchSelections().size(); + AlertDialog.Builder alert = new AlertDialog.Builder(requireActivity()); + alert.setMessage(requireActivity().getResources().getQuantityString(R.plurals.ask_delete_chat, + conversationsCount, conversationsCount)); + alert.setCancelable(true); + + alert.setPositiveButton(R.string.delete, (dialog, which) -> { + final Set selectedConversations = getListAdapter().getBatchSelections(); + + if (!selectedConversations.isEmpty()) { + new AsyncTask() { + private ProgressDialog dialog; + + @Override + protected void onPreExecute() { + dialog = ProgressDialog.show(getActivity(), + "", + requireActivity().getString(R.string.one_moment), + true, false); + } + + @Override + protected Void doInBackground(Void... params) { + int accountId = dcContext.getAccountId(); + for (long chatId : selectedConversations) { + DcHelper.getNotificationCenter(requireContext()).removeNotifications(accountId, (int) chatId); + dcContext.deleteChat((int) chatId); + DirectShareUtil.clearShortcut(requireContext(), (int) chatId); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + dialog.dismiss(); + if (actionMode != null) { + actionMode.finish(); + actionMode = null; + } + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + }); + + alert.setNegativeButton(android.R.string.cancel, null); + alert.show(); + } + + private void handleSelectAllThreads() { + getListAdapter().selectAllThreads(); + actionMode.setTitle(String.valueOf(getListAdapter().getBatchSelections().size())); + updateActionModeItems(actionMode.getMenu()); + } + + private void updateActionModeItems(Menu menu) { + // We do not show action mode icons when relaying (= sharing or forwarding). + if (!isRelayingMessageContent(requireActivity())) { + MenuItem archiveItem = menu.findItem(R.id.menu_archive_selected); + if (offerToArchive()) { + archiveItem.setIcon(R.drawable.ic_archive_white_24dp); + archiveItem.setTitle(R.string.menu_archive_chat); + } else { + archiveItem.setIcon(R.drawable.ic_unarchive_white_24dp); + archiveItem.setTitle(R.string.menu_unarchive_chat); + } + MenuItem pinItem = menu.findItem(R.id.menu_pin_selected); + if (areSomeSelectedChatsUnpinned()) { + pinItem.setIcon(R.drawable.ic_pin_white); + pinItem.setTitle(R.string.pin_chat); + } else { + pinItem.setIcon(R.drawable.ic_unpin_white); + pinItem.setTitle(R.string.unpin_chat); + } + MenuItem muteItem = menu.findItem(R.id.menu_mute_selected); + if (areSomeSelectedChatsUnmuted()) { + muteItem.setTitle(R.string.menu_mute); + } else { + muteItem.setTitle(R.string.menu_unmute); + } + } + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + if (isRelayingMessageContent(getActivity())) { + Context context = getContext(); + if (context != null) { + fab.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_send_sms_white_24dp)); + } + setFabVisibility(true); + initializeFabClickListener(true); + } else { + + MenuInflater inflater = requireActivity().getMenuInflater(); + inflater.inflate(R.menu.conversation_list, menu); + } + + mode.setTitle("1"); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + requireActivity().getWindow().setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar)); + } + + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_select_all: handleSelectAllThreads(); return true; + case R.id.menu_delete_selected: handleDeleteAllSelected(); return true; + case R.id.menu_pin_selected: handlePinAllSelected(); return true; + case R.id.menu_archive_selected: handleArchiveAllSelected(); return true; + case R.id.menu_mute_selected: handleMuteAllSelected(); return true; + case R.id.menu_marknoticed_selected: handleMarknoticedSelected(); return true; + } + + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + actionMode = null; + getListAdapter().initializeBatchMode(false); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + TypedArray color = requireActivity().getTheme().obtainStyledAttributes(new int[] {android.R.attr.statusBarColor}); + requireActivity().getWindow().setStatusBarColor(color.getColor(0, Color.BLACK)); + color.recycle(); + } + + Context context = getContext(); + if (context != null) { + fab.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_add_white_24dp)); + } + setFabVisibility(false); + initializeFabClickListener(false); + } + + public interface ConversationSelectedListener { + void onCreateConversation(int chatId); + void onSwitchToArchive(); + } +} diff --git a/src/org/thoughtcrime/securesms/BindableConversationItem.java b/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/BindableConversationItem.java rename to src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java diff --git a/src/org/thoughtcrime/securesms/BindableConversationListItem.java b/src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/BindableConversationListItem.java rename to src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java diff --git a/src/org/thoughtcrime/securesms/BlockedContactsActivity.java b/src/main/java/org/thoughtcrime/securesms/BlockedContactsActivity.java similarity index 99% rename from src/org/thoughtcrime/securesms/BlockedContactsActivity.java rename to src/main/java/org/thoughtcrime/securesms/BlockedContactsActivity.java index 1abd9027c..6b2fdf505 100644 --- a/src/org/thoughtcrime/securesms/BlockedContactsActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/BlockedContactsActivity.java @@ -86,7 +86,7 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity @Override public Loader onCreateLoader(int id, Bundle args) { - return new DcContactsLoader(getActivity(), -1, null, false, false, true); + return new DcContactsLoader(getActivity(), -1, null, false, false, false, true); } @Override diff --git a/src/org/thoughtcrime/securesms/ConnectivityActivity.java b/src/main/java/org/thoughtcrime/securesms/ConnectivityActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConnectivityActivity.java rename to src/main/java/org/thoughtcrime/securesms/ConnectivityActivity.java diff --git a/src/org/thoughtcrime/securesms/ContactMultiSelectionActivity.java b/src/main/java/org/thoughtcrime/securesms/ContactMultiSelectionActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ContactMultiSelectionActivity.java rename to src/main/java/org/thoughtcrime/securesms/ContactMultiSelectionActivity.java diff --git a/src/org/thoughtcrime/securesms/ContactSelectionActivity.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ContactSelectionActivity.java rename to src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java diff --git a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java similarity index 94% rename from src/org/thoughtcrime/securesms/ContactSelectionListFragment.java rename to src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 8d5fe1768..4dd91ebf3 100644 --- a/src/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -116,11 +116,13 @@ public class ContactSelectionListFragment extends Fragment public void onStart() { super.onStart(); this.getLoaderManager().initLoader(0, null, this); - Permissions.with(this) - .request(Manifest.permission.READ_CONTACTS) - .ifNecessary() - .onAllGranted(this::handleContactPermissionGranted) - .execute(); + if (dcContext.getConfigInt("ui.android.show_system_contacts") != 0 && !dcContext.isChatmail()) { + Permissions.with(this) + .request(Manifest.permission.READ_CONTACTS) + .ifNecessary() + .onAllGranted(this::handleContactPermissionGranted) + .execute(); + } } @Override @@ -281,12 +283,13 @@ public class ContactSelectionListFragment extends Fragment @Override public Loader onCreateLoader(int id, Bundle args) { - boolean allowCreation = getActivity().getIntent().getBooleanExtra(ALLOW_CREATION, true); - boolean addCreateContactLink = allowCreation && !isSelectVerfied(); - boolean addCreateGroupLinks = allowCreation && !isRelayingMessageContent(getActivity()) && !isMulti(); + final boolean allowCreation = getActivity().getIntent().getBooleanExtra(ALLOW_CREATION, true); + final boolean addCreateContactLink = allowCreation && !isSelectVerfied(); + final boolean addCreateGroupLinks = allowCreation && !isRelayingMessageContent(getActivity()) && !isMulti(); + final boolean addScanQRLink = allowCreation && !isMulti(); - int listflags = DcContext.DC_GCL_ADD_SELF; - return new DcContactsLoader(getActivity(), listflags, cursorFilter, addCreateGroupLinks, addCreateContactLink, false); + final int listflags = DcContext.DC_GCL_ADD_SELF; + return new DcContactsLoader(getActivity(), listflags, cursorFilter, addCreateGroupLinks, addCreateContactLink, addScanQRLink, false); } @Override @@ -347,7 +350,7 @@ public class ContactSelectionListFragment extends Fragment int specialId = contact.getSpecialId(); String addr = contact.getNumber(); if (!isMulti() || !selectedContacts.contains(addr)) { - if (specialId == DcContact.DC_CONTACT_ID_NEW_CONTACT) { + if (specialId == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) { Intent intent = new Intent(getContext(), NewContactActivity.class); if (dcContext.mayBeValidAddr(cursorFilter)) { intent.putExtra(NewContactActivity.ADDR_EXTRA, cursorFilter); diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java similarity index 95% rename from src/org/thoughtcrime/securesms/ConversationActivity.java rename to src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index 0761260e7..fdbeaf1ec 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -16,6 +16,11 @@ */ package org.thoughtcrime.securesms; +import static org.thoughtcrime.securesms.TransportOption.Type; +import static org.thoughtcrime.securesms.util.RelayUtil.getSharedText; +import static org.thoughtcrime.securesms.util.RelayUtil.isForwarding; +import static org.thoughtcrime.securesms.util.RelayUtil.isSharing; + import android.Manifest; import android.annotation.SuppressLint; import android.content.ActivityNotFoundException; @@ -50,7 +55,6 @@ import android.view.WindowManager; import android.view.inputmethod.EditorInfo; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; @@ -67,6 +71,8 @@ import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcEvent; import com.b44t.messenger.DcMsg; +import com.b44t.messenger.rpc.Rpc; +import com.b44t.messenger.rpc.RpcException; import com.b44t.messenger.util.concurrent.ListenableFuture; import com.b44t.messenger.util.concurrent.SettableFuture; @@ -96,7 +102,6 @@ import org.thoughtcrime.securesms.mms.AttachmentManager.MediaType; import org.thoughtcrime.securesms.mms.AudioSlide; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequests; -import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.QuoteModel; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.permissions.Permissions; @@ -118,20 +123,10 @@ import org.thoughtcrime.securesms.video.recode.VideoRecoder; import org.thoughtcrime.securesms.videochat.VideochatUtil; import java.io.File; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.OutputStream; -import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; -import static org.thoughtcrime.securesms.TransportOption.Type; -import static org.thoughtcrime.securesms.util.RelayUtil.getSharedText; -import static org.thoughtcrime.securesms.util.RelayUtil.isForwarding; -import static org.thoughtcrime.securesms.util.RelayUtil.isSharing; - /** * Activity for displaying a message thread, as well as * composing/sending a new message into that thread. @@ -189,6 +184,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private ApplicationContext context; private Recipient recipient; private DcContext dcContext; + private Rpc rpc; private DcChat dcChat = new DcChat(0, 0); private int chatId; private final boolean isSecureText = true; @@ -200,6 +196,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity protected void onCreate(Bundle state, boolean ready) { this.context = ApplicationContext.getInstance(getApplicationContext()); this.dcContext = DcHelper.getContext(context); + this.rpc = DcHelper.getRpc(context); supportRequestWindowFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); setContentView(R.layout.conversation_activity); @@ -243,8 +240,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity if (!isMultiUser()) { eventCenter.addObserver(DcContext.DC_EVENT_INCOMING_MSG, this); eventCenter.addObserver(DcContext.DC_EVENT_MSG_READ, this); - // handle DC_EVENT_MSG_DELIVERED to hide the seen-recently indicator if needed: - eventCenter.addObserver(DcContext.DC_EVENT_MSG_DELIVERED, this); } handleRelaying(); @@ -525,7 +520,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity case R.id.menu_clear_chat: fragment.handleClearChat(); return true; case R.id.menu_delete_chat: handleDeleteChat(); return true; case R.id.menu_mute_notifications: handleMuteNotifications(); return true; - case R.id.menu_show_map: handleShowMap(); return true; + case R.id.menu_show_map: WebxdcActivity.openMaps(this, chatId); return true; case R.id.menu_search_up: handleMenuSearchNext(false); return true; case R.id.menu_search_down: handleMenuSearchNext(true); return true; case android.R.id.home: handleReturnToConversationList(); return true; @@ -577,9 +572,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity new VideochatUtil().invite(this, chatId); } - private void handleShowMap() { - } - private void handleReturnToConversationList() { handleReturnToConversationList(null); } @@ -742,7 +734,9 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } DcMsg quote = draft.getQuotedMsg(); - if (quote != null) { + if (quote == null) { + inputPanel.clearQuoteWithoutAnimation(); + } else { handleReplyMessage(quote); } @@ -911,13 +905,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity recipient = new Recipient(this, dcChat); glideRequests = GlideApp.with(this); - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { - LinearLayout conversationContainer = ViewUtil.findById(this, R.id.conversation_container); - conversationContainer.setClipChildren(true); - conversationContainer.setClipToPadding(true); - } - setComposePanelVisibility(); initializeContactRequest(); } @@ -979,9 +966,18 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } private void addAttachmentContactInfo(Intent data) { - String name = data.getStringExtra(AttachContactActivity.NAME_EXTRA); - String mail = data.getStringExtra(AttachContactActivity.ADDR_EXTRA); - composeText.append(name + "\n" + mail); + int contactId = data.getIntExtra(AttachContactActivity.CONTACT_ID_EXTRA, 0); + if (contactId == 0) { + return; + } + + try { + byte[] vcard = rpc.makeVcard(dcContext.getAccountId(), contactId).getBytes(); + String mimeType = "application/octet-stream"; + setMedia(PersistentBlobProvider.getInstance().create(this, vcard, mimeType, "vcard.vcf"), MediaType.DOCUMENT); + } catch (RpcException e) { + Log.e(TAG, "makeVcard() failed", e); + } } private boolean isMultiUser() { @@ -992,39 +988,6 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity return dcChat.getVisibility() == DcChat.DC_CHAT_VISIBILITY_ARCHIVED; } - public static String getRealPathFromAttachment(Context context, Attachment attachment) { - try { - // get file in the blobdir as `/[-].` - String filename = attachment.getFileName(); - String ext = ""; - if(filename==null) { - filename = new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date()); - ext = "." + MediaUtil.getExtensionFromMimeType(attachment.getContentType()); - } - else { - int i = filename.lastIndexOf("."); - if(i>=0) { - ext = filename.substring(i); - filename = filename.substring(0, i); - } - } - String path = DcHelper.getBlobdirFile(DcHelper.getContext(context), filename, ext); - - // copy content to this file - if(path!=null) { - InputStream inputStream = PartAuthority.getAttachmentStream(context, attachment.getDataUri()); - OutputStream outputStream = new FileOutputStream(path); - Util.copy(inputStream, outputStream); - } - - return path; - } - catch(Exception e) { - e.printStackTrace(); - return null; - } - } - //////// send message or save draft protected static final int ACTION_SEND_OUT = 1; @@ -1077,7 +1040,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } else { msg = new DcMsg(dcContext, DcMsg.DC_MSG_FILE); } - String path = getRealPathFromAttachment(this, attachment); + String path = attachment.getRealPath(this); msg.setFile(path, null); } } @@ -1193,6 +1156,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity @Override public void onRecorderStarted() { + fragment.hideAddReactionView(); Vibrator vibrator = ServiceUtil.getVibrator(this); vibrator.vibrate(20); @@ -1299,7 +1263,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private void sendSticker(@NonNull Uri uri, String contentType) { Attachment attachment = new UriAttachment(uri, null, contentType, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, 0, 0, 0, null, null, false); - String path = getRealPathFromAttachment(this, attachment); + String path = attachment.getRealPath(this); Optional quote = inputPanel.getQuote(); inputPanel.clearQuote(); @@ -1368,6 +1332,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private class AttachButtonListener implements OnClickListener { @Override public void onClick(View v) { + fragment.hideAddReactionView(); handleAddAttachment(); } } @@ -1461,8 +1426,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity setComposePanelVisibility(); initializeContactRequest(); } else if ((eventId == DcContext.DC_EVENT_INCOMING_MSG - || eventId == DcContext.DC_EVENT_MSG_READ - || eventId == DcContext.DC_EVENT_MSG_DELIVERED) + || eventId == DcContext.DC_EVENT_MSG_READ) && event.getData1Int() == chatId) { DcContact contact = recipient.getDcContact(); titleView.setSeenRecently(contact!=null? dcContext.getContact(contact.getId()).wasSeenRecently() : false); diff --git a/src/org/thoughtcrime/securesms/ConversationAdapter.java b/src/main/java/org/thoughtcrime/securesms/ConversationAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationAdapter.java rename to src/main/java/org/thoughtcrime/securesms/ConversationAdapter.java diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java similarity index 99% rename from src/org/thoughtcrime/securesms/ConversationFragment.java rename to src/main/java/org/thoughtcrime/securesms/ConversationFragment.java index aa32e02c8..cb3793564 100644 --- a/src/org/thoughtcrime/securesms/ConversationFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationFragment.java @@ -43,7 +43,6 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; -import androidx.annotation.RequiresApi; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.view.ActionMode; @@ -138,7 +137,6 @@ public class ConversationFragment extends MessageSelectorFragment }, 60 * 1000, 60 * 1000); } - @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle bundle) { final View view = inflater.inflate(R.layout.conversation_fragment, container, false); @@ -271,6 +269,10 @@ public class ConversationFragment extends MessageSelectorFragment } } + public void hideAddReactionView() { + addReactionView.hide(); + } + private void initializeResources() { this.chatId = this.getActivity().getIntent().getIntExtra(ConversationActivity.CHAT_ID_EXTRA, -1); this.recipient = Recipient.from(getActivity(), Address.fromChat((int)this.chatId)); @@ -779,7 +781,7 @@ public class ConversationFragment extends MessageSelectorFragment if (getListAdapter().getSelectedItems().size() == 0) { actionMode.finish(); } else { - addReactionView.hide(); + hideAddReactionView(); Menu menu = actionMode.getMenu(); setCorrectMenuVisibility(menu); ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); @@ -921,12 +923,12 @@ public class ConversationFragment extends MessageSelectorFragment } actionMode = null; - addReactionView.hide(); + hideAddReactionView(); } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { - addReactionView.hide(); + hideAddReactionView(); switch(item.getItemId()) { case R.id.menu_context_copy: handleCopyMessage(getListAdapter().getSelectedItems()); diff --git a/src/org/thoughtcrime/securesms/ConversationItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java similarity index 88% rename from src/org/thoughtcrime/securesms/ConversationItem.java rename to src/main/java/org/thoughtcrime/securesms/ConversationItem.java index 243a3efe1..34d6ab91e 100644 --- a/src/org/thoughtcrime/securesms/ConversationItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationItem.java @@ -32,16 +32,19 @@ import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.DimenRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcMsg; import com.b44t.messenger.rpc.Reactions; import com.b44t.messenger.rpc.RpcException; +import com.b44t.messenger.rpc.VcardContact; import org.thoughtcrime.securesms.audio.AudioSlidePlayer; import org.thoughtcrime.securesms.components.AudioView; @@ -51,6 +54,7 @@ import org.thoughtcrime.securesms.components.ConversationItemFooter; import org.thoughtcrime.securesms.components.ConversationItemThumbnail; import org.thoughtcrime.securesms.components.DocumentView; import org.thoughtcrime.securesms.components.QuoteView; +import org.thoughtcrime.securesms.components.VcardView; import org.thoughtcrime.securesms.components.WebxdcView; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; import org.thoughtcrime.securesms.connect.DcHelper; @@ -62,6 +66,7 @@ import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.SlideClickListener; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.mms.StickerSlide; +import org.thoughtcrime.securesms.mms.VcardSlide; import org.thoughtcrime.securesms.reactions.ReactionsConversationView; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.LongClickMovementMethod; @@ -71,6 +76,7 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.Stub; +import java.util.List; import java.util.Locale; import java.util.Set; @@ -113,6 +119,7 @@ public class ConversationItem extends BaseConversationItem private @NonNull Stub documentViewStub; private @NonNull Stub webxdcViewStub; private Stub stickerStub; + private Stub vcardViewStub; private @Nullable EventListener eventListener; private int measureCalls; @@ -146,6 +153,7 @@ public class ConversationItem extends BaseConversationItem this.documentViewStub = new Stub<>(findViewById(R.id.document_view_stub)); this.webxdcViewStub = new Stub<>(findViewById(R.id.webxdc_view_stub)); this.stickerStub = new Stub<>(findViewById(R.id.sticker_view_stub)); + this.vcardViewStub = new Stub<>(findViewById(R.id.vcard_view_stub)); this.groupSenderHolder = findViewById(R.id.group_sender_holder); this.quoteView = findViewById(R.id.quote_view); this.container = findViewById(R.id.container); @@ -172,9 +180,9 @@ public class ConversationItem extends BaseConversationItem bind(messageRecord, dcChat, batchSelected, pulseHighlight, recipients); this.locale = locale; this.glideRequests = glideRequests; - this.showSender = dcChat.isMultiUser() || messageRecord.getOverrideSenderName() != null; + this.showSender = (dcChat.isMultiUser() && !messageRecord.isOutgoing()) || messageRecord.getOverrideSenderName() != null; - if (showSender && !messageRecord.isOutgoing()) { + if (showSender) { this.dcContact = dcContext.getContact(messageRecord.getFromId()); } @@ -301,6 +309,11 @@ public class ConversationItem extends BaseConversationItem webxdcViewStub.get().setFocusable(!shouldInterceptClicks(messageRecord) && batchSelected.isEmpty()); webxdcViewStub.get().setClickable(batchSelected.isEmpty()); } + + if (vcardViewStub.resolved()) { + vcardViewStub.get().setFocusable(!shouldInterceptClicks(messageRecord) && batchSelected.isEmpty()); + vcardViewStub.get().setClickable(batchSelected.isEmpty()); + } } private void setContentDescription() { @@ -315,6 +328,8 @@ public class ConversationItem extends BaseConversationItem desc += documentViewStub.get().getDescription() + "\n"; } else if (webxdcViewStub.resolved() && webxdcViewStub.get().getVisibility() == View.VISIBLE) { desc += webxdcViewStub.get().getDescription() + "\n"; + } else if (vcardViewStub.resolved() && vcardViewStub.get().getVisibility() == View.VISIBLE) { + desc += vcardViewStub.get().getDescription() + "\n"; } else if (mediaThumbnailStub.resolved() && mediaThumbnailStub.get().getVisibility() == View.VISIBLE) { desc += mediaThumbnailStub.get().getDescription() + "\n"; } else if (stickerStub.resolved() && stickerStub.get().getVisibility() == View.VISIBLE) { @@ -362,6 +377,10 @@ public class ConversationItem extends BaseConversationItem return dcMsg.getType()==DcMsg.DC_MSG_WEBXDC; } + private boolean hasVcard(DcMsg dcMsg) { + return dcMsg.getType()==DcMsg.DC_MSG_VCARD; + } + private boolean hasDocument(DcMsg dcMsg) { return dcMsg.getType()==DcMsg.DC_MSG_FILE && !dcMsg.isSetupMessage(); } @@ -463,6 +482,7 @@ public class ConversationItem extends BaseConversationItem if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); //noinspection ConstantConditions int duration = messageRecord.getDuration(); @@ -489,6 +509,7 @@ public class ConversationItem extends BaseConversationItem if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); //noinspection ConstantConditions documentViewStub.get().setDocument(new DocumentSlide(context, messageRecord)); @@ -508,6 +529,7 @@ public class ConversationItem extends BaseConversationItem if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); webxdcViewStub.get().setWebxdc(messageRecord, context.getString(R.string.webxdc_app)); webxdcViewStub.get().setWebxdcClickListener(new ThumbnailClickListener()); @@ -520,12 +542,33 @@ public class ConversationItem extends BaseConversationItem ViewUtil.updateLayoutParams(groupSenderHolder, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); footer.setVisibility(VISIBLE); } + else if (hasVcard(messageRecord)) { + vcardViewStub.get().setVisibility(View.VISIBLE); + if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE); + if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); + if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); + if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); + if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE); + + vcardViewStub.get().setVcard(glideRequests, new VcardSlide(context, messageRecord), rpc); + vcardViewStub.get().setVcardClickListener(new ThumbnailClickListener()); + vcardViewStub.get().setOnLongClickListener(passthroughClickListener); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + vcardViewStub.get().setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS); + } + + ViewUtil.updateLayoutParams(bodyText, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + ViewUtil.updateLayoutParams(groupSenderHolder, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + footer.setVisibility(VISIBLE); + } else if (hasThumbnail(messageRecord)) { mediaThumbnailStub.get().setVisibility(View.VISIBLE); if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); if (stickerStub.resolved()) stickerStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); Slide slide = MediaUtil.getSlideForMsg(context, messageRecord); @@ -566,6 +609,7 @@ public class ConversationItem extends BaseConversationItem if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); if (mediaThumbnailStub.resolved()) mediaThumbnailStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); bodyBubble.setBackgroundColor(Color.TRANSPARENT); @@ -587,6 +631,7 @@ public class ConversationItem extends BaseConversationItem if (audioViewStub.resolved()) audioViewStub.get().setVisibility(View.GONE); if (documentViewStub.resolved()) documentViewStub.get().setVisibility(View.GONE); if (webxdcViewStub.resolved()) webxdcViewStub.get().setVisibility(View.GONE); + if (vcardViewStub.resolved()) vcardViewStub.get().setVisibility(View.GONE); ViewUtil.updateLayoutParams(bodyText, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); ViewUtil.updateLayoutParams(groupSenderHolder, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); @@ -609,7 +654,7 @@ public class ConversationItem extends BaseConversationItem bottomRight = 0; } - if ((!current.isOutgoing() && showSender) + if (showSender || current.isForwarded() || hasQuote(current)) { topLeft = 0; @@ -631,7 +676,7 @@ public class ConversationItem extends BaseConversationItem private void setContactPhoto() { if (contactPhoto == null) return; - if (messageRecord.isOutgoing() || !showSender || dcContact ==null) { + if (!showSender || dcContact ==null) { contactPhoto.setVisibility(View.GONE); } else { contactPhoto.setAvatar(glideRequests, new Recipient(context, dcContact), true); @@ -757,14 +802,14 @@ public class ConversationItem extends BaseConversationItem } if (messageRecord.isForwarded()) { - if (showSender && !messageRecord.isOutgoing() && dcContact !=null) { + if (showSender && dcContact !=null) { this.groupSender.setText(context.getString(R.string.forwarded_by, messageRecord.getSenderName(dcContact, false))); } else { this.groupSender.setText(context.getString(R.string.forwarded_message)); } this.groupSender.setTextColor(context.getResources().getColor(R.color.unknown_sender)); } - else if (showSender && !messageRecord.isOutgoing() && dcContact !=null) { + else if (showSender && dcContact !=null) { this.groupSender.setText(messageRecord.getSenderName(dcContact, true)); this.groupSender.setTextColor(Util.rgbToArgbColor(dcContact.getColor())); } @@ -772,12 +817,12 @@ public class ConversationItem extends BaseConversationItem private void setAuthor(@NonNull DcMsg current, boolean showSender) { int groupSenderHolderVisibility = GONE; - if (showSender && !current.isOutgoing()) { + if (showSender) { if (contactPhotoHolder != null) { contactPhotoHolder.setVisibility(VISIBLE); + contactPhoto.setVisibility(VISIBLE); } groupSenderHolderVisibility = VISIBLE; - contactPhoto.setVisibility(VISIBLE); } else { if (contactPhotoHolder != null) { contactPhotoHolder.setVisibility(GONE); @@ -839,6 +884,7 @@ public class ConversationItem extends BaseConversationItem else if (audioViewStub.resolved()) audioViewStub.get().togglePlay(); else if (documentViewStub.resolved()) documentViewStub.get().performClick(); else if (webxdcViewStub.resolved()) webxdcViewStub.get().performClick(); + else if (vcardViewStub.resolved()) vcardViewStub.get().performClick(); } /// Event handlers @@ -847,8 +893,37 @@ public class ConversationItem extends BaseConversationItem public void onClick(final View v, final Slide slide) { if (shouldInterceptClicks(messageRecord) || !batchSelected.isEmpty()) { performClick(); - } else if (messageRecord.getType() == DcMsg.DC_MSG_WEBXDC) { + } else if (slide.isWebxdcDocument()) { WebxdcActivity.openWebxdcActivity(context, messageRecord); + } else if (slide.isVcard()) { + try { + String path = slide.asAttachment().getRealPath(context); + VcardContact vcardContact = rpc.parseVcard(path).get(0); + new AlertDialog.Builder(context) + .setMessage(context.getString(R.string.ask_start_chat_with, vcardContact.getDisplayName())) + .setPositiveButton(android.R.string.ok, (dialog, which) -> { + try { + List contactIds = rpc.importVcard(dcContext.getAccountId(), path); + if (contactIds.size() > 0) { + int chatId = dcContext.createChatByContactId(contactIds.get(0)); + if (chatId != 0) { + Intent intent = new Intent(context, ConversationActivity.class); + intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId); + context.startActivity(intent); + return; + } + } + } catch (RpcException e) { + Log.e(TAG, "failed to import vCard", e); + } + Toast.makeText(context, context.getResources().getString(R.string.error), Toast.LENGTH_SHORT).show(); + }) + .setNegativeButton(R.string.cancel, null) + .show(); + } catch (RpcException e) { + Log.e(TAG, "failed to parse vCard", e); + Toast.makeText(context, context.getResources().getString(R.string.error), Toast.LENGTH_SHORT).show(); + } } else if (MediaPreviewActivity.isTypeSupported(slide) && slide.getUri() != null) { Intent intent = new Intent(context, MediaPreviewActivity.class); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); diff --git a/src/org/thoughtcrime/securesms/ConversationItemSwipeCallback.java b/src/main/java/org/thoughtcrime/securesms/ConversationItemSwipeCallback.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationItemSwipeCallback.java rename to src/main/java/org/thoughtcrime/securesms/ConversationItemSwipeCallback.java diff --git a/src/org/thoughtcrime/securesms/ConversationItemTouchListener.java b/src/main/java/org/thoughtcrime/securesms/ConversationItemTouchListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationItemTouchListener.java rename to src/main/java/org/thoughtcrime/securesms/ConversationItemTouchListener.java diff --git a/src/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java similarity index 84% rename from src/org/thoughtcrime/securesms/ConversationListActivity.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index 8e8321654..4c9d48d3b 100644 --- a/src/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -27,6 +27,7 @@ import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent import static org.thoughtcrime.securesms.util.RelayUtil.resetRelayingMessageContent; import android.content.Intent; +import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import android.text.TextUtils; @@ -45,6 +46,8 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.TooltipCompat; +import com.amulyakhare.textdrawable.TextDrawable; +import com.b44t.messenger.DcAccounts; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; @@ -67,9 +70,7 @@ import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.SendRelayedMessageUtil; import org.thoughtcrime.securesms.util.Util; - -import java.io.FileOutputStream; -import java.io.InputStream; +import org.thoughtcrime.securesms.util.ViewUtil; public class ConversationListActivity extends PassphraseRequiredActionBarActivity implements ConversationListFragment.ConversationSelectedListener @@ -79,14 +80,17 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit private static final String NDK_ARCH_WARNED = "ndk_arch_warned"; public static final String CLEAR_NOTIFICATIONS = "clear_notifications"; public static final String ACCOUNT_ID_EXTRA = "account_id"; + public static final String FROM_WELCOME = "from_welcome"; private ConversationListFragment conversationListFragment; public TextView title; private AvatarImageView selfAvatar; + private ImageView unreadIndicator; private SearchFragment searchFragment; private SearchToolbar searchToolbar; private ImageView searchAction; private ViewGroup fragmentContainer; + private ViewGroup selfAvatarContainer; @Override protected void onPreCreate() { @@ -100,17 +104,28 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit // it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted. try { DcContext dcContext = DcHelper.getContext(this); - final String deviceMsgId = "update_1_42ai_android"; - if (!dcContext.wasDeviceMsgEverAdded(deviceMsgId)) { - DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_IMAGE); + final String deviceMsgLabel = "update_1_46_0l_android"; + if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) { + DcMsg msg = null; + if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) { + msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT); - InputStream inputStream = getResources().getAssets().open("device-messages/green-checkmark.jpg"); - String outputFile = DcHelper.getBlobdirFile(dcContext, "green-checkmark", ".jpg"); - Util.copy(inputStream, new FileOutputStream(outputFile)); - msg.setFile(outputFile, "image/jpeg"); + // InputStream inputStream = getResources().getAssets().open("device-messages/green-checkmark.jpg"); + // String outputFile = DcHelper.getBlobdirFile(dcContext, "green-checkmark", ".jpg"); + // Util.copy(inputStream, new FileOutputStream(outputFile)); + // msg.setFile(outputFile, "image/jpeg"); - msg.setText(getString(R.string.update_1_42_common) + "\n\n" + getString(R.string.update_1_42_android, "https://get.delta.chat/#changelogs")); - dcContext.addDeviceMsg(deviceMsgId, msg); + msg.setText(getString(R.string.update_1_46_android, "https://get.delta.chat/#changelogs")); + } + dcContext.addDeviceMsg(deviceMsgLabel, msg); + + if (Prefs.getStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, "").equals(deviceMsgLabel)) { + int deviceChatId = dcContext.getChatIdByContactId(DcContact.DC_CONTACT_ID_DEVICE); + if (deviceChatId != 0) { + dcContext.marknoticedChat(deviceChatId); + } + } + Prefs.setStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, deviceMsgLabel); } } catch(Exception e) { e.printStackTrace(); @@ -122,6 +137,8 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); selfAvatar = findViewById(R.id.self_avatar); + selfAvatarContainer = findViewById(R.id.self_avatar_container); + unreadIndicator = findViewById(R.id.unread_indicator); title = findViewById(R.id.toolbar_title); searchToolbar = findViewById(R.id.search_toolbar); searchAction = findViewById(R.id.search_action); @@ -218,10 +235,11 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit DcHelper.getNotificationCenter(this).removeAllNotifiations(accountId); } if (accountId != dcContext.getAccountId()) { - AccountManager.getInstance().switchAccountAndStartActivity(this, accountId, null); + AccountManager.getInstance().switchAccountAndStartActivity(this, accountId); } refreshAvatar(); + refreshUnreadIndicator(); refreshTitle(); handleOpenpgp4fpr(); if (isDirectSharing(this)) { @@ -250,9 +268,9 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit public void refreshAvatar() { if (isRelayingMessageContent(this)) { - selfAvatar.setVisibility(View.GONE); + selfAvatarContainer.setVisibility(View.GONE); } else { - selfAvatar.setVisibility(View.VISIBLE); + selfAvatarContainer.setVisibility(View.VISIBLE); DcContext dcContext = DcHelper.getContext(this); DcContact self = dcContext.getContact(DcContact.DC_CONTACT_ID_SELF); String name = dcContext.getConfig("displayname"); @@ -263,6 +281,31 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit } } + public void refreshUnreadIndicator() { + int unreadCount = 0; + DcAccounts dcAccounts = DcHelper.getAccounts(this); + int skipId = dcAccounts.getSelectedAccount().getAccountId(); + for (int accountId : dcAccounts.getAll()) { + if (accountId != skipId) { + unreadCount += dcAccounts.getAccount(accountId).getFreshMsgs().length; + } + } + + if(unreadCount == 0) { + unreadIndicator.setVisibility(View.GONE); + } else { + unreadIndicator.setImageDrawable(TextDrawable.builder() + .beginConfig() + .width(ViewUtil.dpToPx(this, 24)) + .height(ViewUtil.dpToPx(this, 24)) + .textColor(Color.WHITE) + .bold() + .endConfig() + .buildRound(String.valueOf(unreadCount), getResources().getColor(R.color.unread_count))); + unreadIndicator.setVisibility(View.VISIBLE); + } + } + @Override public void onResume() { super.onResume(); @@ -344,7 +387,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan(); return true; case R.id.menu_global_map: - handleShowMap(); + WebxdcActivity.openMaps(this, 0); return true; case R.id.menu_switch_account: AccountManager.getInstance().showSwitchAccountMenu(this); @@ -364,11 +407,13 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit if (getIntent() != null && Intent.ACTION_VIEW.equals(getIntent().getAction())) { Uri uri = getIntent().getData(); - if (uri != null && uri.getScheme().equalsIgnoreCase(OPENPGP4FPR)) { - String uriString = uri.toString(); - uriString = uriString.replaceFirst(OPENPGP4FPR, OPENPGP4FPR.toUpperCase()); + if (uri == null) { + return; + } + + if (uri.getScheme().equalsIgnoreCase(OPENPGP4FPR) || Util.isInviteURL(uri)) { QrCodeHandler qrCodeHandler = new QrCodeHandler(this); - qrCodeHandler.handleQrData(uriString); + qrCodeHandler.handleQrData(uri.toString()); } } } @@ -376,15 +421,11 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit private void handleResetRelaying() { resetRelayingMessageContent(this); refreshTitle(); - selfAvatar.setVisibility(View.VISIBLE); + selfAvatarContainer.setVisibility(View.VISIBLE); conversationListFragment.onNewIntent(); invalidateOptionsMenu(); } - private void handleShowMap() { - } - - @Override public void onCreateConversation(int chatId) { openConversation(chatId, -1); diff --git a/src/org/thoughtcrime/securesms/ConversationListAdapter.java b/src/main/java/org/thoughtcrime/securesms/ConversationListAdapter.java similarity index 83% rename from src/org/thoughtcrime/securesms/ConversationListAdapter.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListAdapter.java index 4b502a301..176cdb0b9 100644 --- a/src/org/thoughtcrime/securesms/ConversationListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListAdapter.java @@ -35,17 +35,14 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.util.ViewUtil; import java.lang.ref.WeakReference; -import java.util.Collections; -import java.util.HashSet; import java.util.Locale; -import java.util.Set; /** * A CursorAdapter for building a list of conversation threads. * * @author Moxie Marlinspike */ -class ConversationListAdapter extends RecyclerView.Adapter { +class ConversationListAdapter extends BaseConversationListAdapter { private static final int MESSAGE_TYPE_SWITCH_ARCHIVE = 1; private static final int MESSAGE_TYPE_THREAD = 2; @@ -59,9 +56,6 @@ class ConversationListAdapter extends RecyclerView.Adapter { private final @NonNull LayoutInflater inflater; private final @Nullable ItemClickListener clickListener; - private final Set batchSet = Collections.synchronizedSet(new HashSet()); - private boolean batchMode = false; - protected static class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(final @NonNull V itemView) { @@ -99,8 +93,9 @@ class ConversationListAdapter extends RecyclerView.Adapter { setHasStableIds(true); } + @NonNull @Override - public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { if (viewType == MESSAGE_TYPE_SWITCH_ARCHIVE) { final ConversationListItem item = (ConversationListItem)inflater.inflate(R.layout.conversation_list_item_view, parent, false); item.getLayoutParams().height = ViewUtil.dpToPx(54); @@ -131,16 +126,15 @@ class ConversationListAdapter extends RecyclerView.Adapter { } @Override - public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) { + public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) { Context context = this.context.get(); if (context == null) { return; } - ViewHolder holder = (ViewHolder)viewHolder; DcChat chat = dcContext.getChat(dcChatlist.getChatId(i)); DcLot summary = dcChatlist.getSummary(i, chat); - holder.getItem().bind(DcHelper.getThreadRecord(context, summary, chat), dcChatlist.getMsgId(i), summary, glideRequests, locale, batchSet, batchMode); + viewHolder.getItem().bind(DcHelper.getThreadRecord(context, summary, chat), dcChatlist.getMsgId(i), summary, glideRequests, locale, batchSet, batchMode); } @Override @@ -156,36 +150,15 @@ class ConversationListAdapter extends RecyclerView.Adapter { } } - void toggleThreadInBatchSet(long threadId) { - if (batchSet.contains(threadId)) { - batchSet.remove(threadId); - } else if (threadId != -1) { - batchSet.add(threadId); - } - } - - Set getBatchSelections() { - return batchSet; - } - - void initializeBatchMode(boolean toggle) { - this.batchMode = toggle; - unselectAllThreads(); - } - - private void unselectAllThreads() { - this.batchSet.clear(); - this.notifyDataSetChanged(); - } - - void selectAllThreads() { + @Override + public void selectAllThreads() { for (int i = 0; i < dcChatlist.getCnt(); i++) { long threadId = dcChatlist.getChatId(i); if (threadId > DcChat.DC_CHAT_ID_LAST_SPECIAL) { batchSet.add(threadId); } } - this.notifyDataSetChanged(); + notifyDataSetChanged(); } interface ItemClickListener { diff --git a/src/org/thoughtcrime/securesms/ConversationListArchiveActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListArchiveActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationListArchiveActivity.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListArchiveActivity.java diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListFragment.java b/src/main/java/org/thoughtcrime/securesms/ConversationListFragment.java new file mode 100644 index 000000000..566735f6b --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListFragment.java @@ -0,0 +1,356 @@ +/* + * Copyright (C) 2015 Open Whisper Systems + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.thoughtcrime.securesms; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.b44t.messenger.DcChatlist; +import com.b44t.messenger.DcContext; +import com.b44t.messenger.DcEvent; +import com.b44t.messenger.DcMsg; + +import org.thoughtcrime.securesms.ConversationListAdapter.ItemClickListener; +import org.thoughtcrime.securesms.components.recyclerview.DeleteItemAnimator; +import org.thoughtcrime.securesms.components.reminder.DozeReminder; +import org.thoughtcrime.securesms.connect.DcEventCenter; +import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.mms.GlideApp; +import org.thoughtcrime.securesms.notifications.FcmReceiveService; +import org.thoughtcrime.securesms.permissions.Permissions; +import org.thoughtcrime.securesms.util.Prefs; +import org.thoughtcrime.securesms.util.RelayUtil; +import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.ViewUtil; + +import java.util.Locale; +import java.util.Timer; +import java.util.TimerTask; + + +public class ConversationListFragment extends BaseConversationListFragment + implements ItemClickListener, DcEventCenter.DcEventDelegate { + public static final String ARCHIVE = "archive"; + public static final String RELOAD_LIST = "reload_list"; + + private static final String TAG = ConversationListFragment.class.getSimpleName(); + + private RecyclerView list; + private View emptyState; + private TextView emptySearch; + private Locale locale; + private final String queryFilter = ""; + private boolean archive; + private Timer reloadTimer; + private boolean chatlistJustLoaded; + private boolean reloadTimerInstantly; + + @Override + public void onCreate(Bundle icicle) { + super.onCreate(icicle); + locale = (Locale) getArguments().getSerializable(PassphraseRequiredActionBarActivity.LOCALE_EXTRA); + archive = getArguments().getBoolean(ARCHIVE, false); + + DcEventCenter eventCenter = DcHelper.getEventCenter(requireActivity()); + eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_INCOMING_MSG, this); + eventCenter.addMultiAccountObserver(DcContext.DC_EVENT_MSGS_NOTICED, this); + eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this); + eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this); + eventCenter.addObserver(DcContext.DC_EVENT_MSGS_CHANGED, this); + eventCenter.addObserver(DcContext.DC_EVENT_MSG_DELIVERED, this); + eventCenter.addObserver(DcContext.DC_EVENT_MSG_FAILED, this); + eventCenter.addObserver(DcContext.DC_EVENT_MSG_READ, this); + eventCenter.addObserver(DcContext.DC_EVENT_REACTIONS_CHANGED, this); + eventCenter.addObserver(DcContext.DC_EVENT_CONNECTIVITY_CHANGED, this); + eventCenter.addObserver(DcContext.DC_EVENT_SELFAVATAR_CHANGED, this); + } + + @Override + public void onDestroy() { + super.onDestroy(); + DcHelper.getEventCenter(requireActivity()).removeObservers(this); + } + + @SuppressLint("RestrictedApi") + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle bundle) { + final View view = inflater.inflate(R.layout.conversation_list_fragment, container, false); + + list = ViewUtil.findById(view, R.id.list); + fab = ViewUtil.findById(view, R.id.fab); + emptyState = ViewUtil.findById(view, R.id.empty_state); + emptySearch = ViewUtil.findById(view, R.id.empty_search); + + if (archive) { + fab.setVisibility(View.GONE); + TextView emptyTitle = ViewUtil.findById(view, R.id.empty_title); + emptyTitle.setText(R.string.archive_empty_hint); + } else { + fab.setVisibility(View.VISIBLE); + } + + list.setHasFixedSize(true); + list.setLayoutManager(new LinearLayoutManager(getActivity())); + list.setItemAnimator(new DeleteItemAnimator()); + + return view; + } + + @Override + public void onActivityCreated(Bundle bundle) { + super.onActivityCreated(bundle); + + setHasOptionsMenu(true); + initializeFabClickListener(false); + list.setAdapter(new ConversationListAdapter(requireActivity(), GlideApp.with(this), locale, this)); + loadChatlistAsync(); + chatlistJustLoaded = true; + } + + @Override + public void onResume() { + super.onResume(); + + updateReminders(); + + if (requireActivity().getIntent().getIntExtra(RELOAD_LIST, 0) == 1 + && !chatlistJustLoaded) { + Log.i(TAG, "🤠 resuming chatlist: loading chatlist"); + loadChatlist(); + reloadTimerInstantly = false; + } + chatlistJustLoaded = false; + + Log.i(TAG, "🤠 resuming chatlist: starting update timer"); + reloadTimer = new Timer(); + reloadTimer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + Util.runOnMain(() -> { + Log.i(TAG, "🤠 update timer: refreshing chatlist"); + list.getAdapter().notifyDataSetChanged(); + }); + } + }, reloadTimerInstantly? 0 : 60 * 1000, 60 * 1000); + } + + @Override + public void onPause() { + super.onPause(); + + Log.i(TAG, "🤠 pausing chatlist: cancel update timer"); + reloadTimer.cancel(); + reloadTimerInstantly = true; + + fab.stopPulse(); + } + + public void onNewIntent() { + initializeFabClickListener(actionMode != null); + } + + @Override + public BaseConversationListAdapter getListAdapter() { + return (BaseConversationListAdapter) list.getAdapter(); + } + + @SuppressLint({"StaticFieldLeak", "NewApi"}) + private void updateReminders() { + // by the time onPostExecute() is asynchronously run, getActivity() might return null, so get the activity here: + Activity activity = requireActivity(); + new AsyncTask() { + @Override + protected Void doInBackground(Context... params) { + final Context context = params[0]; + try { + if (DozeReminder.isEligible(context)) { + DozeReminder.addDozeReminderDeviceMsg(context); + } + FcmReceiveService.waitForRegisterFinished(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPostExecute(Void result) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (!Prefs.getBooleanPreference(activity, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, false)) { + Prefs.setBooleanPreference(activity, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, true); + Permissions.with(activity) + .request(Manifest.permission.POST_NOTIFICATIONS) + .ifNecessary() + .onAllGranted(() -> { + DozeReminder.maybeAskDirectly(activity); + }) + .onAnyDenied(() -> { + final DcContext dcContext = DcHelper.getContext(activity); + DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT); + msg.setText("\uD83D\uDC49 "+activity.getString(R.string.notifications_disabled)+" \uD83D\uDC48\n\n" + +activity.getString(R.string.perm_explain_access_to_notifications_denied)); + dcContext.addDeviceMsg("android.notifications-disabled", msg); + }) + .execute(); + } else { + DozeReminder.maybeAskDirectly(activity); + } + } else { + DozeReminder.maybeAskDirectly(activity); + } + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, activity); + } + + private final Object loadChatlistLock = new Object(); + private boolean inLoadChatlist; + private boolean needsAnotherLoad; + private void loadChatlistAsync() { + synchronized (loadChatlistLock) { + needsAnotherLoad = true; + if (inLoadChatlist) { + Log.i(TAG, "chatlist loading debounced"); + return; + } + inLoadChatlist = true; + } + + Util.runOnAnyBackgroundThread(() -> { + while(true) { + synchronized (loadChatlistLock) { + if (!needsAnotherLoad) { + inLoadChatlist = false; + return; + } + needsAnotherLoad = false; + } + + Log.i(TAG, "executing debounced chatlist loading"); + loadChatlist(); + Util.sleep(100); + } + }); + } + + private void loadChatlist() { + int listflags = 0; + if (archive) { + listflags |= DcContext.DC_GCL_ARCHIVED_ONLY; + } else if (RelayUtil.isRelayingMessageContent(getActivity())) { + listflags |= DcContext.DC_GCL_FOR_FORWARDING; + } else { + listflags |= DcContext.DC_GCL_ADD_ALLDONE_HINT; + } + + Context context = getContext(); + if (context == null) { + // can't load chat list at this time, see: https://github.com/deltachat/deltachat-android/issues/2012 + Log.w(TAG, "Ignoring call to loadChatlist()"); + return; + } + DcChatlist chatlist = DcHelper.getContext(context).getChatlist(listflags, queryFilter.isEmpty() ? null : queryFilter, 0); + + Util.runOnMain(() -> { + if (chatlist.getCnt() <= 0 && TextUtils.isEmpty(queryFilter)) { + list.setVisibility(View.INVISIBLE); + emptyState.setVisibility(View.VISIBLE); + emptySearch.setVisibility(View.INVISIBLE); + fab.startPulse(3 * 1000); + } else if (chatlist.getCnt() <= 0 && !TextUtils.isEmpty(queryFilter)) { + list.setVisibility(View.INVISIBLE); + emptyState.setVisibility(View.GONE); + emptySearch.setVisibility(View.VISIBLE); + emptySearch.setText(getString(R.string.search_no_result_for_x, queryFilter)); + } else { + list.setVisibility(View.VISIBLE); + emptyState.setVisibility(View.GONE); + emptySearch.setVisibility(View.INVISIBLE); + fab.stopPulse(); + } + + ((ConversationListAdapter)list.getAdapter()).changeData(chatlist); + }); + } + + @Override + protected boolean offerToArchive() { + return !archive; + } + + @Override + protected void setFabVisibility(boolean isActionMode) { + fab.setVisibility((isActionMode || !archive)? View.VISIBLE : View.GONE); + } + + @Override + public void onItemClick(ConversationListItem item) { + onItemClick(item.getChatId()); + } + + @Override + public void onItemLongClick(ConversationListItem item) { + onItemLongClick(item.getChatId()); + } + + @Override + public void onSwitchToArchive() { + ((ConversationSelectedListener)requireActivity()).onSwitchToArchive(); + } + + @Override + public void handleEvent(@NonNull DcEvent event) { + if (event.getAccountId() != DcHelper.getContext(requireActivity()).getAccountId()) { + Activity activity = getActivity(); + if (activity instanceof ConversationListActivity) { + ((ConversationListActivity) activity).refreshUnreadIndicator(); + } + + } else if (event.getId() == DcContext.DC_EVENT_CONNECTIVITY_CHANGED) { + Activity activity = getActivity(); + if (activity instanceof ConversationListActivity) { + ((ConversationListActivity) activity).refreshTitle(); + } + + } else if (event.getId() == DcContext.DC_EVENT_SELFAVATAR_CHANGED) { + Activity activity = getActivity(); + if (activity instanceof ConversationListActivity) { + ((ConversationListActivity) activity).refreshAvatar(); + } + + } else { + loadChatlistAsync(); + } + } + +} + + diff --git a/src/org/thoughtcrime/securesms/ConversationListItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationListItem.java similarity index 98% rename from src/org/thoughtcrime/securesms/ConversationListItem.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListItem.java index 1cbd7eff7..5c4e21956 100644 --- a/src/org/thoughtcrime/securesms/ConversationListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListItem.java @@ -154,8 +154,8 @@ public class ConversationListItem extends RelativeLayout } dateView.setCompoundDrawablesWithIntrinsicBounds( - thread.getVisibility()==DcChat.DC_CHAT_VISIBILITY_PINNED? R.drawable.ic_pinned_chatlist : 0, 0, - thread.isSendingLocations()? R.drawable.ic_location_chatlist : 0, 0 + thread.isSendingLocations()? R.drawable.ic_location_chatlist : 0, 0, + thread.getVisibility()==DcChat.DC_CHAT_VISIBILITY_PINNED? R.drawable.ic_pinned_chatlist : 0, 0 ); setStatusIcons(thread.getVisibility(), state, unreadCount, thread.isContactRequest(), thread.isMuted() || chatId == DcChat.DC_CHAT_ID_ARCHIVED_LINK); diff --git a/src/org/thoughtcrime/securesms/ConversationListItemInboxZero.java b/src/main/java/org/thoughtcrime/securesms/ConversationListItemInboxZero.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationListItemInboxZero.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListItemInboxZero.java diff --git a/src/org/thoughtcrime/securesms/ConversationListRelayingActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListRelayingActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationListRelayingActivity.java rename to src/main/java/org/thoughtcrime/securesms/ConversationListRelayingActivity.java diff --git a/src/org/thoughtcrime/securesms/ConversationSwipeAnimationHelper.java b/src/main/java/org/thoughtcrime/securesms/ConversationSwipeAnimationHelper.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationSwipeAnimationHelper.java rename to src/main/java/org/thoughtcrime/securesms/ConversationSwipeAnimationHelper.java diff --git a/src/org/thoughtcrime/securesms/ConversationTitleView.java b/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java similarity index 98% rename from src/org/thoughtcrime/securesms/ConversationTitleView.java rename to src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java index f3a0dd14e..7e8fe5ee9 100644 --- a/src/org/thoughtcrime/securesms/ConversationTitleView.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java @@ -103,13 +103,13 @@ public class ConversationTitleView extends RelativeLayout { } else { DcContact dcContact = dcContext.getContact(chatContacts[0]); - subtitleStr = dcContact.getAddr(); + if (profileView || !dcChat.isProtected()) { + subtitleStr = dcContact.getAddr(); + } isOnline = dcContact.wasSeenRecently(); } } - subtitle.setText(subtitleStr); - avatar.setAvatar(glideRequests, new Recipient(getContext(), dcChat), false); avatar.setSeenRecently(isOnline); title.setCompoundDrawablesWithIntrinsicBounds(imgLeft, 0, imgRight, 0); diff --git a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationUpdateItem.java similarity index 95% rename from src/org/thoughtcrime/securesms/ConversationUpdateItem.java rename to src/main/java/org/thoughtcrime/securesms/ConversationUpdateItem.java index 6025336e3..55997db08 100644 --- a/src/org/thoughtcrime/securesms/ConversationUpdateItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationUpdateItem.java @@ -53,6 +53,9 @@ public class ConversationUpdateItem extends BaseConversationItem bodyText.setOnLongClickListener(passthroughClickListener); bodyText.setOnClickListener(passthroughClickListener); + // info messages do not contain links but domains (eg. invalid_unencrypted_tap_to_learn_more), + // however, they should not be linkified to not disturb eg. "Tap to learn more". + bodyText.setAutoLinkMask(0); } @Override diff --git a/src/org/thoughtcrime/securesms/ConversationVideochatItem.java b/src/main/java/org/thoughtcrime/securesms/ConversationVideochatItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/ConversationVideochatItem.java rename to src/main/java/org/thoughtcrime/securesms/ConversationVideochatItem.java diff --git a/src/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java similarity index 92% rename from src/org/thoughtcrime/securesms/CreateProfileActivity.java rename to src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java index b9098e614..cb833e5e0 100644 --- a/src/org/thoughtcrime/securesms/CreateProfileActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java @@ -108,7 +108,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj onBackPressed(); return true; case R.id.menu_create_profile: - handleUpload(); + updateProfile(); break; } @@ -120,8 +120,7 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj if (container.isInputOpen()) { container.hideCurrentInput(name); } else if (fromWelcome) { - startActivity(new Intent(getApplicationContext(), ConversationListActivity.class)); - finish(); + updateProfile(); } else { super.onBackPressed(); } @@ -199,7 +198,6 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj } private void initializeResources() { - TextView passwordAccountSettings = ViewUtil.findById(this, R.id.password_account_settings_button); TextView loginSuccessText = ViewUtil.findById(this, R.id.login_success_text); this.avatar = ViewUtil.findById(this, R.id.avatar); this.name = ViewUtil.findById(this, R.id.name_text); @@ -207,17 +205,11 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj this.container = ViewUtil.findById(this, R.id.container); this.statusView = ViewUtil.findById(this, R.id.status_text); - passwordAccountSettings.setOnClickListener(view -> { - Intent intent = new Intent(this, RegistrationActivity.class); - startActivity(intent); - }); - if (fromWelcome) { String addr = DcHelper.get(this, "addr"); - loginSuccessText.setText(getString(R.string.qraccount_success_enter_name, addr)); + loginSuccessText.setText(R.string.set_name_and_avatar_explain); ViewUtil.findById(this, R.id.status_text_layout).setVisibility(View.GONE); ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE); - passwordAccountSettings.setVisibility(View.GONE); } else { loginSuccessText.setVisibility(View.GONE); } @@ -281,11 +273,12 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj statusView.setText(status); } - private void handleUpload() { - final String name; - - if (TextUtils.isEmpty(this.name.getText().toString())) name = null; - else name = this.name.getText().toString(); + private void updateProfile() { + if (TextUtils.isEmpty(this.name.getText())) { + Toast.makeText(this, R.string.please_enter_name, Toast.LENGTH_LONG).show(); + return; + } + final String name = this.name.getText().toString(); new AsyncTask() { @Override @@ -314,7 +307,9 @@ public class CreateProfileActivity extends BaseActionBarActivity implements Emoj if (result) { attachmentManager.cleanup(); if (fromWelcome) { - startActivity(new Intent(getApplicationContext(), ConversationListActivity.class)); + Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class); + intent.putExtra(ConversationListActivity.FROM_WELCOME, true); + startActivity(intent); } finish(); } else { diff --git a/src/org/thoughtcrime/securesms/DummyActivity.java b/src/main/java/org/thoughtcrime/securesms/DummyActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/DummyActivity.java rename to src/main/java/org/thoughtcrime/securesms/DummyActivity.java diff --git a/src/org/thoughtcrime/securesms/EphemeralMessagesDialog.java b/src/main/java/org/thoughtcrime/securesms/EphemeralMessagesDialog.java similarity index 95% rename from src/org/thoughtcrime/securesms/EphemeralMessagesDialog.java rename to src/main/java/org/thoughtcrime/securesms/EphemeralMessagesDialog.java index 235527664..12b09669d 100644 --- a/src/org/thoughtcrime/securesms/EphemeralMessagesDialog.java +++ b/src/main/java/org/thoughtcrime/securesms/EphemeralMessagesDialog.java @@ -11,6 +11,7 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.core.widget.TextViewCompat; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.util.ViewUtil; import java.util.concurrent.TimeUnit; @@ -69,7 +70,8 @@ public class EphemeralMessagesDialog { default: burnAfter = 0; break; } listener.onTimeSelected(burnAfter); - }); + }) + .setNeutralButton(R.string.learn_more, (d, w) -> DcHelper.openHelp(context, "#ephemeralmsgs")); builder.show(); } diff --git a/src/org/thoughtcrime/securesms/FullMsgActivity.java b/src/main/java/org/thoughtcrime/securesms/FullMsgActivity.java similarity index 98% rename from src/org/thoughtcrime/securesms/FullMsgActivity.java rename to src/main/java/org/thoughtcrime/securesms/FullMsgActivity.java index d5ed6f1e4..dd8e5c4d1 100644 --- a/src/org/thoughtcrime/securesms/FullMsgActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/FullMsgActivity.java @@ -36,6 +36,12 @@ public class FullMsgActivity extends WebViewActivity ALWAYS } + @Override + protected void onPreCreate() { + super.onPreCreate(); + toggleFakeProxy(true); + } + @Override protected void onCreate(Bundle state, boolean ready) { super.onCreate(state, ready); diff --git a/src/org/thoughtcrime/securesms/GroupCreateActivity.java b/src/main/java/org/thoughtcrime/securesms/GroupCreateActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/GroupCreateActivity.java rename to src/main/java/org/thoughtcrime/securesms/GroupCreateActivity.java diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java new file mode 100644 index 000000000..17f4fdb8d --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -0,0 +1,514 @@ +package org.thoughtcrime.securesms; + +import android.annotation.SuppressLint; +import android.app.Activity; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.text.TextUtils; +import android.text.util.Linkify; +import android.util.Log; +import android.view.MenuItem; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.activity.OnBackPressedCallback; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.loader.app.LoaderManager; + +import com.b44t.messenger.DcContext; +import com.b44t.messenger.DcEvent; +import com.b44t.messenger.DcLot; +import com.bumptech.glide.load.engine.DiskCacheStrategy; +import com.bumptech.glide.request.target.CustomTarget; +import com.bumptech.glide.request.transition.Transition; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; +import com.soundcloud.android.crop.Crop; + +import org.thoughtcrime.securesms.components.AvatarSelector; +import org.thoughtcrime.securesms.connect.AccountManager; +import org.thoughtcrime.securesms.connect.DcEventCenter; +import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; +import org.thoughtcrime.securesms.mms.AttachmentManager; +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.qr.RegistrationQrActivity; +import org.thoughtcrime.securesms.scribbles.ScribbleActivity; +import org.thoughtcrime.securesms.util.Prefs; +import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.views.ProgressDialog; + +import java.io.File; +import java.io.IOException; +import java.security.SecureRandom; +import java.util.Objects; + +public class InstantOnboardingActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate { + + private static final String TAG = InstantOnboardingActivity.class.getSimpleName(); + private static final String DCACCOUNT = "dcaccount"; + private static final String DCLOGIN = "dclogin"; + private static final String INSTANCES_URL = "https://delta.chat/chatmail"; + private static final String DEFAULT_CHATMAIL_HOST = "nine.testrun.org"; + + public static final String QR_ACCOUNT_EXTRA = "qr_account_extra"; + public static final String FROM_WELCOME = "from_welcome"; + private static final int REQUEST_CODE_AVATAR = 1; + + private ImageView avatar; + private EditText name; + private TextView privacyPolicyBtn; + private Button signUpBtn; + + private boolean avatarChanged; + private boolean imageLoaded; + private String providerHost; + private String providerQrData; + private boolean isDcLogin; + + private AttachmentManager attachmentManager; + private Bitmap avatarBmp; + private ProgressDialog progressDialog; + private DcContext dcContext; + + @Override + public void onCreate(Bundle bundle) { + super.onCreate(bundle); + + setContentView(R.layout.instant_onboarding_activity); + + Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.onboarding_create_instant_account); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + + boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false); + if (DcHelper.getContext(this).isConfigured() == 1) { + // if account is configured it means we didn't come from Welcome screen nor from QR scanner, + // instead, user clicked a dcaccount:// URI directly, so we need to switch to a new account: + AccountManager.getInstance().beginAccountCreation(this); + } + getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) { + @Override + public void handleOnBackPressed() { + AccountManager accountManager = AccountManager.getInstance(); + if (accountManager.canRollbackAccountCreation(InstantOnboardingActivity.this)) { + accountManager.rollbackAccountCreation(InstantOnboardingActivity.this); + } else { + finish(); + } + } + }); + + isDcLogin = false; + providerHost = DEFAULT_CHATMAIL_HOST; + providerQrData = DCACCOUNT + ":https://" + providerHost + "/new"; + attachmentManager = new AttachmentManager(this, () -> {}); + avatarChanged = false; + registerForEvents(); + initializeResources(); + initializeProfile(); + handleIntent(); + updateProvider(); + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + setIntent(intent); + handleIntent(); + } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + super.onOptionsItemSelected(item); + if (item.getItemId() == android.R.id.home) { + getOnBackPressedDispatcher().onBackPressed(); + return true; + } + return false; + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + if (resultCode != RESULT_OK) { + return; + } + + switch (requestCode) { + case REQUEST_CODE_AVATAR: + Uri inputFile = (data != null ? data.getData() : null); + onFileSelected(inputFile); + break; + + case ScribbleActivity.SCRIBBLE_REQUEST_CODE: + setAvatarView(data.getData()); + break; + + case Crop.REQUEST_CROP: + setAvatarView(Crop.getOutput(data)); + break; + + case IntentIntegrator.REQUEST_CODE: + IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + if (scanResult != null && scanResult.getFormatName() != null) { + setProviderFromQr(scanResult.getContents()); + } + break; + } + } + + private void setProviderFromQr(String rawQr) { + DcLot qrParsed = dcContext.checkQr(rawQr); + boolean isDcLogin = qrParsed.getState() == DcContext.DC_QR_LOGIN; + if (isDcLogin || qrParsed.getState() == DcContext.DC_QR_ACCOUNT) { + this.isDcLogin = isDcLogin; + providerHost = qrParsed.getText1(); + providerQrData = rawQr; + updateProvider(); + } else { + new AlertDialog.Builder(this) + .setMessage(R.string.qraccount_qr_code_cannot_be_used) + .setPositiveButton(R.string.ok, null) + .show(); + } + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); + } + + @Override + public void onStart() { + super.onStart(); + String accountQr = getIntent().getStringExtra(QR_ACCOUNT_EXTRA); + if (accountQr != null) { + getIntent().removeExtra(QR_ACCOUNT_EXTRA); + setProviderFromQr(accountQr); + } + } + + @Override + protected void onPause() { + super.onPause(); + + final String displayName = name.getText().toString(); + DcHelper.set(this, DcHelper.CONFIG_DISPLAY_NAME, TextUtils.isEmpty(displayName)? null : displayName); + + if (avatarChanged) { + try { + AvatarHelper.setSelfAvatar(InstantOnboardingActivity.this, avatarBmp); + Prefs.setProfileAvatarId(InstantOnboardingActivity.this, new SecureRandom().nextInt()); + avatarChanged = false; + } catch (IOException e) { + Log.e(TAG, "Failed to save avatar", e); + } + } + } + + @Override + public void onDestroy() { + super.onDestroy(); + DcHelper.getEventCenter(this).removeObservers(this); + } + + private void handleIntent() { + if (getIntent() != null && Intent.ACTION_VIEW.equals(getIntent().getAction())) { + Uri uri = getIntent().getData(); + if (uri == null) return; + + if (uri.getScheme().equalsIgnoreCase(DCACCOUNT) || uri.getScheme().equalsIgnoreCase(DCLOGIN)) { + setProviderFromQr(uri.toString()); + } + } + } + + private void setAvatarView(Uri output) { + final ProfileMediaConstraints constraints = new ProfileMediaConstraints(); + GlideApp.with(this) + .asBitmap() + .load(output) + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .centerCrop() + .override(constraints.getImageMaxWidth(this), constraints.getImageMaxHeight(this)) + .into(new CustomTarget() { + @Override + public void onResourceReady(@NonNull Bitmap resource, Transition transition) { + avatarChanged = true; + imageLoaded = true; + avatarBmp = resource; + } + + @Override + public void onLoadCleared(@Nullable Drawable placeholder) {} + }); + GlideApp.with(this) + .load(output) + .circleCrop() + .skipMemoryCache(true) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .into(avatar); + } + + private void onFileSelected(Uri inputFile) { + if (inputFile == null) { + inputFile = attachmentManager.getImageCaptureUri(); + } + + AvatarHelper.cropAvatar(this, inputFile); + } + + private void initializeResources() { + this.avatar = findViewById(R.id.avatar); + this.name = findViewById(R.id.name_text); + this.privacyPolicyBtn = findViewById(R.id.privacy_policy_button); + this.signUpBtn = findViewById(R.id.signup_button); + + privacyPolicyBtn.setOnClickListener(view -> { + if (!isDcLogin) { + WebViewActivity.openUrlInBrowser(this, "https://" + providerHost + "/privacy.html"); + } + }); + + 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) -> { + WebViewActivity.openUrlInBrowser(this, INSTANCES_URL); + signUpDialog.dismiss(); + }); + view.findViewById(R.id.login_button).setOnClickListener((v) -> { + startRegistrationActivity(); + signUpDialog.dismiss(); + }); + view.findViewById(R.id.scan_qr_button).setOnClickListener((v) -> { + new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class).initiateScan(); + signUpDialog.dismiss(); + }); + + signUpDialog.show(); + } + + private void startRegistrationActivity() { + Intent intent = new Intent(this, RegistrationActivity.class); + startActivity(intent); + } + + private void updateProvider() { + if (isDcLogin) { + signUpBtn.setText(R.string.login_title); + privacyPolicyBtn.setTextColor(getResources().getColor(R.color.gray50)); + privacyPolicyBtn.setText(getString(R.string.qrlogin_ask_login, providerHost)); + } else { + signUpBtn.setText(R.string.instant_onboarding_create); + privacyPolicyBtn.setTextColor(getResources().getColor(R.color.delta_accent)); + if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) { + privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_default2, providerHost)); + } else { + privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_instance, providerHost)); + } + } + } + + private void initializeProfile() { + File avatarFile = AvatarHelper.getSelfAvatarFile(this); + if (avatarFile.exists() && avatarFile.length() > 0) { + imageLoaded = true; + GlideApp.with(this).load(avatarFile).circleCrop().into(avatar); + } else { + imageLoaded = false; + avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_camera_alt_white_24dp).asDrawable(this, getResources().getColor(R.color.grey_400))); + } + avatar.setOnClickListener(view -> + new AvatarSelector(this, LoaderManager.getInstance(this), new AvatarSelectedListener(), imageLoaded).show(this, avatar) + ); + + name.setText(DcHelper.get(this, DcHelper.CONFIG_DISPLAY_NAME)); + } + + private void registerForEvents() { + dcContext = DcHelper.getContext(this); + DcEventCenter eventCenter = DcHelper.getEventCenter(this); + eventCenter.addObserver(DcContext.DC_EVENT_CONFIGURE_PROGRESS, this); + } + + @Override + public void handleEvent(@NonNull DcEvent event) { + int eventId = event.getId(); + + if (eventId == DcContext.DC_EVENT_CONFIGURE_PROGRESS) { + long progress = event.getData1Int(); + if (progress==0/*error/aborted*/) { + progressError(event.getData2Str()); + } else if (progress<1000/*progress in permille*/) { + progressUpdate((int)progress); + } else if (progress==1000/*done*/) { + DcHelper.getAccounts(this).startIo(); + dcContext.assumeSingleDevice(); + progressSuccess(); + } + } + } + + private void progressUpdate(int progress) { + int percent = progress / 10; + progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent)); + } + + private void progressError(String data2) { + progressDialog.dismiss(); + maybeShowConfigurationError(this, data2); + } + + private void progressSuccess() { + DcHelper.getEventCenter(this).endCaptureNextError(); + progressDialog.dismiss(); + + Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class); + intent.putExtra(ConversationListActivity.FROM_WELCOME, true); + startActivity(intent); + 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())) { + Toast.makeText(this, R.string.please_enter_name, Toast.LENGTH_LONG).show(); + return; + } + final String name = this.name.getText().toString(); + + new AsyncTask() { + @Override + protected Boolean doInBackground(Void... params) { + Context context = InstantOnboardingActivity.this; + DcHelper.set(context, DcHelper.CONFIG_DISPLAY_NAME, name); + + if (avatarChanged) { + try { + AvatarHelper.setSelfAvatar(InstantOnboardingActivity.this, avatarBmp); + Prefs.setProfileAvatarId(InstantOnboardingActivity.this, new SecureRandom().nextInt()); + } catch (IOException e) { + Log.w(TAG, e); + return false; + } + } + + return true; + } + + @Override + public void onPostExecute(Boolean result) { + super.onPostExecute(result); + + if (result) { + attachmentManager.cleanup(); + startQrAccountCreation(providerQrData); + } else { + Toast.makeText(InstantOnboardingActivity.this, R.string.error, Toast.LENGTH_LONG).show(); + } + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); + } + + private void startQrAccountCreation(String qrCode) + { + if (progressDialog != null) { + progressDialog.dismiss(); + progressDialog = null; + } + + progressDialog = new ProgressDialog(this); + progressDialog.setMessage(getResources().getString(R.string.one_moment)); + progressDialog.setCanceledOnTouchOutside(false); + progressDialog.setCancelable(false); + progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(android.R.string.cancel), (dialog, which) -> { + dcContext.stopOngoingProcess(); + }); + progressDialog.show(); + + DcHelper.getEventCenter(this).captureNextError(); + + new Thread(() -> { + if (!dcContext.setConfigFromQr(qrCode)) { + Util.runOnMain(() -> { + progressError(dcContext.getLastError()); + }); + return; + } + DcHelper.getAccounts(this).stopIo(); + dcContext.configure(); + }).start(); + } + + private class AvatarSelectedListener implements AvatarSelector.AttachmentClickedListener { + @Override + public void onClick(int type) { + switch (type) { + case AvatarSelector.ADD_GALLERY: + AttachmentManager.selectImage(InstantOnboardingActivity.this, REQUEST_CODE_AVATAR); + break; + case AvatarSelector.REMOVE_PHOTO: + avatarBmp = null; + imageLoaded = false; + avatarChanged = true; + avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_camera_alt_white_24dp).asDrawable(InstantOnboardingActivity.this, getResources().getColor(R.color.grey_400))); + break; + case AvatarSelector.TAKE_PHOTO: + attachmentManager.capturePhoto(InstantOnboardingActivity.this, REQUEST_CODE_AVATAR); + break; + } + } + + @Override + public void onQuickAttachment(Uri inputFile) { + onFileSelected(inputFile); + } + } + +} diff --git a/src/org/thoughtcrime/securesms/LocalHelpActivity.java b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java similarity index 94% rename from src/org/thoughtcrime/securesms/LocalHelpActivity.java rename to src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java index 513bee046..346b74195 100644 --- a/src/org/thoughtcrime/securesms/LocalHelpActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java @@ -12,6 +12,9 @@ public class LocalHelpActivity extends WebViewActivity { public static final String SECTION_EXTRA = "section_extra"; + @Override + protected boolean allowInLockedMode() { return true; } + @Override protected void onCreate(Bundle state, boolean ready) { super.onCreate(state, ready); @@ -19,7 +22,7 @@ public class LocalHelpActivity extends WebViewActivity getSupportActionBar().setTitle(getString(R.string.menu_help)); String section = getIntent().getStringExtra(SECTION_EXTRA); - String helpPath = "help/LANG/help.html" + (section!=null? section : ""); + String helpPath = "help/LANG/help.html"; String helpLang = "en"; try { Locale locale = dynamicLanguage.getCurrentLocale(); @@ -39,7 +42,7 @@ public class LocalHelpActivity extends WebViewActivity e.printStackTrace(); } - webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang)); + webView.loadUrl("file:///android_asset/" + helpPath.replace("LANG", helpLang) + (section!=null? section : "")); } @Override diff --git a/src/org/thoughtcrime/securesms/LogViewActivity.java b/src/main/java/org/thoughtcrime/securesms/LogViewActivity.java similarity index 73% rename from src/org/thoughtcrime/securesms/LogViewActivity.java rename to src/main/java/org/thoughtcrime/securesms/LogViewActivity.java index db725e87a..4b6da2d17 100644 --- a/src/org/thoughtcrime/securesms/LogViewActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/LogViewActivity.java @@ -1,18 +1,23 @@ package org.thoughtcrime.securesms; import android.Manifest; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.os.Environment; +import android.util.Log; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentTransaction; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.widget.Toast; import org.thoughtcrime.securesms.permissions.Permissions; -import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.FileProviderUtil; + +import java.io.File; public class LogViewActivity extends BaseActionBarActivity { @@ -59,7 +64,8 @@ public class LogViewActivity extends BaseActionBarActivity { .alwaysGrantOnSdk30() .ifNecessary() .onAllGranted(() -> { - boolean success = logViewFragment.saveLogFile(); + File outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); + boolean success = logViewFragment.saveLogFile(outputDir) != null; new AlertDialog.Builder(this) .setMessage(success? R.string.pref_saved_log : R.string.pref_save_log_failed) .setPositiveButton(android.R.string.ok, null) @@ -67,9 +73,8 @@ public class LogViewActivity extends BaseActionBarActivity { }) .execute(); return true; - case R.id.copy_log_to_clipboard: - Util.writeTextToClipboard(this, logViewFragment.getLogText()); - Toast.makeText(getApplicationContext(), R.string.done, Toast.LENGTH_SHORT).show(); + case R.id.share_log: + shareLog(); return true; case R.id.log_zoom_in: newSize = logViewFragment.getLogTextSize() + 2.0f; @@ -90,6 +95,20 @@ public class LogViewActivity extends BaseActionBarActivity { return false; } + public void shareLog() { + try { + File logFile = logViewFragment.saveLogFile(getExternalCacheDir()); + Uri uri = FileProviderUtil.getUriFor(this, logFile); + Intent intent = new Intent(Intent.ACTION_SEND); + intent.setType("text/plain"); + intent.putExtra(Intent.EXTRA_STREAM, uri); + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + startActivity(Intent.createChooser(intent, getString(R.string.chat_share_with_title))); + } catch (Exception e) { + Log.e(TAG, "failed to share log", e); + } + } + @Override public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults) { Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); diff --git a/src/org/thoughtcrime/securesms/LogViewFragment.java b/src/main/java/org/thoughtcrime/securesms/LogViewFragment.java similarity index 87% rename from src/org/thoughtcrime/securesms/LogViewFragment.java rename to src/main/java/org/thoughtcrime/securesms/LogViewFragment.java index ce9567dd5..4293353b4 100644 --- a/src/org/thoughtcrime/securesms/LogViewFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/LogViewFragment.java @@ -26,10 +26,8 @@ import android.os.Build; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.os.Bundle; -import android.os.Environment; import android.os.PowerManager; import android.text.TextUtils; -import android.util.Log; import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; @@ -42,9 +40,9 @@ import androidx.fragment.app.Fragment; import com.b44t.messenger.DcContext; import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.notifications.FcmReceiveService; import org.thoughtcrime.securesms.util.DynamicLanguage; import org.thoughtcrime.securesms.util.Prefs; -import org.thoughtcrime.securesms.util.Scrubber; import java.io.BufferedReader; import java.io.BufferedWriter; @@ -75,12 +73,11 @@ public class LogViewFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_view_log, container, false); } @Override - public void onViewCreated(View view, Bundle savedInstanceState) { + public void onViewCreated(@NonNull View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); logPreview = (EditText) getView().findViewById(R.id.log_preview); @@ -107,19 +104,16 @@ public class LogViewFragment extends Fragment { logPreview.setSelection(0); } - public boolean saveLogFile() { - - File outputDir = null; + public File saveLogFile(File outputDir) { + File logFile = null; SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss"); Date now = new Date(); String logFileName = "deltachat-log-" + dateFormat.format(now) + ".txt"; try { - outputDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); String logText = logPreview.getText().toString(); if(!logText.trim().equals("")){ - File logFile = new File(outputDir + "/" + logFileName); - + logFile = new File(outputDir + "/" + logFileName); if(!logFile.exists()) logFile.createNewFile(); FileWriter logFileWriter = new FileWriter(logFile, false); @@ -129,27 +123,35 @@ public class LogViewFragment extends Fragment { } } catch (IOException e) { e.printStackTrace(); - return false; } - return true; + return logFile; } - private static String grabLogcat() { + private static String grabLogcat(LogViewFragment fragment) { try { final Process process = Runtime.getRuntime().exec("logcat -v threadtime -d"); final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); final StringBuilder log = new StringBuilder(); final String separator = System.getProperty("line.separator"); + final boolean devMode = Prefs.isDeveloperModeEnabled(fragment.getActivity()); String line; while ((line = bufferedReader.readLine()) != null) { - log.append(line); - log.append(separator); + line = line.replaceFirst(" (\\d+) E ", " $1 \uD83D\uDD34 "); + line = line.replaceFirst(" (\\d+) W ", " $1 \uD83D\uDFE0 "); + line = line.replaceFirst(" (\\d+) I ", " $1 \uD83D\uDD35 "); + String debugLine = line.replaceFirst(" (\\d+) D ", " $1 \uD83D\uDFE2 "); + if (debugLine.equals(line)) { // not a debug entry + log.append(line); + log.append(separator); + } else if (devMode) { + log.append(debugLine); + log.append(separator); + } } return log.toString(); - } catch (IOException ioe) { - Log.w(TAG, "IOException when trying to read logcat.", ioe); - return null; + } catch (Exception e) { + return "Error grabbing log: " + e; } } @@ -166,7 +168,7 @@ public class LogViewFragment extends Fragment { if (fragment == null) return null; return "**This log may contain sensitive information. If you want to post it publicly you may examine and edit it beforehand.**\n\n" + - buildDescription(fragment) + "\n" + new Scrubber().scrub(grabLogcat()); + buildDescription(fragment) + "\n" + grabLogcat(fragment); } @Override @@ -261,6 +263,9 @@ public class LogViewFragment extends Fragment { builder.append("rtl=").append(isRtl).append("\n"); } + final String token = FcmReceiveService.getToken(); + builder.append("push-enabled=").append(Prefs.isPushEnabled(context)).append("\n"); + builder.append("push-token=").append(token == null ? "" : token).append("\n"); } catch (Exception e) { builder.append("Unknown\n"); } diff --git a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java b/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java similarity index 98% rename from src/org/thoughtcrime/securesms/MediaPreviewActivity.java rename to src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java index 664f878e8..0eff0dd91 100644 --- a/src/org/thoughtcrime/securesms/MediaPreviewActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/MediaPreviewActivity.java @@ -19,13 +19,10 @@ package org.thoughtcrime.securesms; import android.app.Activity; import android.Manifest; import android.annotation.SuppressLint; -import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -142,11 +139,8 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } - @TargetApi(VERSION_CODES.JELLY_BEAN) private void setFullscreenIfPossible() { - if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { - getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); - } + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN); } @Override diff --git a/src/org/thoughtcrime/securesms/MessageSelectorFragment.java b/src/main/java/org/thoughtcrime/securesms/MessageSelectorFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/MessageSelectorFragment.java rename to src/main/java/org/thoughtcrime/securesms/MessageSelectorFragment.java diff --git a/src/org/thoughtcrime/securesms/MuteDialog.java b/src/main/java/org/thoughtcrime/securesms/MuteDialog.java similarity index 100% rename from src/org/thoughtcrime/securesms/MuteDialog.java rename to src/main/java/org/thoughtcrime/securesms/MuteDialog.java diff --git a/src/org/thoughtcrime/securesms/NewConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java similarity index 78% rename from src/org/thoughtcrime/securesms/NewConversationActivity.java rename to src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index a33e4a61b..3ec60d656 100644 --- a/src/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -28,8 +28,12 @@ import androidx.appcompat.app.AlertDialog; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; +import com.google.zxing.integration.android.IntentIntegrator; +import com.google.zxing.integration.android.IntentResult; import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.qr.QrActivity; +import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.util.MailtoUtil; import static org.thoughtcrime.securesms.ConversationActivity.CHAT_ID_EXTRA; @@ -70,7 +74,7 @@ public class NewConversationActivity extends ContactSelectionActivity { if (!textToShare.isEmpty()) { getIntent().putExtra(TEXT_EXTRA, textToShare); } - onContactSelected(DcContact.DC_CONTACT_ID_NEW_CONTACT, recipientsArray[0]); + onContactSelected(DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT, recipientsArray[0]); } else { Intent shareIntent = new Intent(this, ShareActivity.class); shareIntent.putExtra(Intent.EXTRA_TEXT, textToShare); @@ -95,11 +99,13 @@ public class NewConversationActivity extends ContactSelectionActivity { Intent intent = new Intent(this, GroupCreateActivity.class); intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true); startActivity(intent); + } else if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) { + new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan(); } else { int contactId = dcContext.lookupContactIdByAddr(addr); if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) { - openConversation(dcContext.createChatByContactId(contactId)); + openConversation(dcContext.getChatIdByContactId(contactId)); } else { String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr(); new AlertDialog.Builder(this) @@ -107,10 +113,13 @@ public class NewConversationActivity extends ContactSelectionActivity { .setCancelable(true) .setNegativeButton(android.R.string.cancel, null) .setPositiveButton(android.R.string.ok, (dialog, which) -> { - int contactId1 = dcContext.createContact(null, addr); + int contactId1 = dcContext.lookupContactIdByAddr(addr); if (contactId1 == 0) { - Toast.makeText(NewConversationActivity.this, R.string.bad_email_address, Toast.LENGTH_LONG).show(); - return; + contactId1 = dcContext.createContact(null, addr); + if (contactId1 == 0) { + Toast.makeText(NewConversationActivity.this, R.string.bad_email_address, Toast.LENGTH_LONG).show(); + return; + } } openConversation(dcContext.createChatByContactId(contactId1)); }).show(); @@ -118,6 +127,20 @@ public class NewConversationActivity extends ContactSelectionActivity { } } + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + switch (requestCode) { + case IntentIntegrator.REQUEST_CODE: + IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); + QrCodeHandler qrCodeHandler = new QrCodeHandler(this); + qrCodeHandler.onScanPerformed(scanResult); + break; + default: + break; + } + } + private void openConversation(int chatId) { Intent intent = new Intent(this, ConversationActivity.class); intent.putExtra(TEXT_EXTRA, getIntent().getStringExtra(TEXT_EXTRA)); diff --git a/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java b/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java similarity index 65% rename from src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java rename to src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java index d01cf6faf..c043a046b 100644 --- a/src/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/PassphraseRequiredActionBarActivity.java @@ -14,6 +14,12 @@ public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarA protected final void onCreate(Bundle savedInstanceState) { Log.w(TAG, "onCreate(" + savedInstanceState + ")"); + if (allowInLockedMode()) { + super.onCreate(savedInstanceState); + onCreate(savedInstanceState, true); + return; + } + if (GenericForegroundService.isForegroundTaskStarted()) { // this does not prevent intent set by onNewIntent(), // however, at least during onboarding, @@ -38,4 +44,13 @@ public abstract class PassphraseRequiredActionBarActivity extends BaseActionBarA } protected void onCreate(Bundle savedInstanceState, boolean ready) {} + + // "Locked Mode" is when the account is not configured (Welcome screen) + // or when sharing a backup (Add second device). + // The app is "locked" to an activity if you will. + // In "Locked Mode" the user should not leave that activity otherwise the state would be lost - + // so eg. tapping app icon or notifications MUST NOT replace activity stack. + // However, sometimes it is fine to allow to pushing activities in these situations, + // like to see the logs or offline help. + protected boolean allowInLockedMode() { return false; } } diff --git a/src/org/thoughtcrime/securesms/ProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileActivity.java rename to src/main/java/org/thoughtcrime/securesms/ProfileActivity.java diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java rename to src/main/java/org/thoughtcrime/securesms/ProfileDocumentsAdapter.java diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileDocumentsFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java rename to src/main/java/org/thoughtcrime/securesms/ProfileDocumentsFragment.java diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileGalleryAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileGalleryAdapter.java rename to src/main/java/org/thoughtcrime/securesms/ProfileGalleryAdapter.java diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileGalleryFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileGalleryFragment.java rename to src/main/java/org/thoughtcrime/securesms/ProfileGalleryFragment.java diff --git a/src/org/thoughtcrime/securesms/ProfileSettingsAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileSettingsAdapter.java rename to src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java diff --git a/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileSettingsFragment.java rename to src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java diff --git a/src/org/thoughtcrime/securesms/ProfileSettingsItem.java b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileSettingsItem.java rename to src/main/java/org/thoughtcrime/securesms/ProfileSettingsItem.java diff --git a/src/org/thoughtcrime/securesms/ProfileStatusItem.java b/src/main/java/org/thoughtcrime/securesms/ProfileStatusItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/ProfileStatusItem.java rename to src/main/java/org/thoughtcrime/securesms/ProfileStatusItem.java diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/main/java/org/thoughtcrime/securesms/RegistrationActivity.java similarity index 98% rename from src/org/thoughtcrime/securesms/RegistrationActivity.java rename to src/main/java/org/thoughtcrime/securesms/RegistrationActivity.java index 857cd3e2f..d84a83c0f 100644 --- a/src/org/thoughtcrime/securesms/RegistrationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/RegistrationActivity.java @@ -64,7 +64,6 @@ import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.IntentUtils; import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.thoughtcrime.securesms.util.views.ProgressDialog; import java.lang.ref.WeakReference; @@ -170,13 +169,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve viewLogText.setOnClickListener((view) -> showLog()); boolean isConfigured = DcHelper.isConfigured(getApplicationContext()); if (isConfigured) { - TextInputLayout passwordLayout = findViewById(R.id.password); - passwordLayout.setPasswordVisibilityToggleEnabled(false); - TextInputLayout smtpPasswordLayout = findViewById(R.id.smtp_password); - smtpPasswordLayout.setPasswordVisibilityToggleEnabled(false); - TextInputLayout proxyPasswordLayout = findViewById(R.id.socks5_password); - proxyPasswordLayout.setPasswordVisibilityToggleEnabled(false); - TextInputEditText imapLoginInput = findViewById(R.id.imap_login_text); String email = DcHelper.get(this, CONFIG_ADDRESS); diff --git a/src/org/thoughtcrime/securesms/ResolveMediaTask.java b/src/main/java/org/thoughtcrime/securesms/ResolveMediaTask.java similarity index 76% rename from src/org/thoughtcrime/securesms/ResolveMediaTask.java rename to src/main/java/org/thoughtcrime/securesms/ResolveMediaTask.java index 3bf5c6d09..8ade92314 100644 --- a/src/org/thoughtcrime/securesms/ResolveMediaTask.java +++ b/src/main/java/org/thoughtcrime/securesms/ResolveMediaTask.java @@ -4,22 +4,21 @@ import android.app.Activity; import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; -import android.os.Process; import android.provider.OpenableColumns; import android.util.Log; import org.thoughtcrime.securesms.providers.PersistentBlobProvider; -import org.thoughtcrime.securesms.util.FileUtils; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; +import java.io.FileNotFoundException; import java.io.InputStream; import java.lang.ref.WeakReference; import java.util.HashSet; import static org.thoughtcrime.securesms.util.MediaUtil.getMimeType; +import de.cketti.safecontentresolver.SafeContentResolver; +import de.cketti.safecontentresolver.SafeContentResolverCompat; + public class ResolveMediaTask extends AsyncTask { private static final String TAG = ResolveMediaTask.class.getSimpleName(); @@ -51,16 +50,8 @@ public class ResolveMediaTask extends AsyncTask { String fileName = null; Long fileSize = null; - if (hasFileScheme(uri)) { - inputStream = this.openFileUri(uri); - if (uri.getPath() != null) { - File file = new File(uri.getPath()); - fileName = file.getName(); - fileSize = file.length(); - } - } else { - inputStream = contextRef.get().getContentResolver().openInputStream(uri); - } + SafeContentResolver safeContentResolver = SafeContentResolverCompat.newInstance(contextRef.get()); + inputStream = safeContentResolver.openInputStream(uri); if (inputStream == null) { return null; @@ -87,7 +78,7 @@ public class ResolveMediaTask extends AsyncTask { String mimeType = getMimeType(contextRef.get(), uri); return PersistentBlobProvider.getInstance().create(contextRef.get(), inputStream, mimeType, fileName, fileSize); - } catch (NullPointerException | IOException ioe) { + } catch (NullPointerException | FileNotFoundException ioe) { Log.w(TAG, ioe); return null; } @@ -119,20 +110,6 @@ public class ResolveMediaTask extends AsyncTask { } } - private InputStream openFileUri(Uri uri) throws IOException { - FileInputStream fin = new FileInputStream(uri.getPath()); - int owner = FileUtils.getFileDescriptorOwner(fin.getFD()); - - - if (owner == -1 || owner == Process.myUid()) { - fin.close(); - throw new IOException("File owned by application"); - } - - return fin; - } - - private boolean hasFileScheme(Uri uri) { if (uri == null) { return false; diff --git a/src/org/thoughtcrime/securesms/SetStartingPositionLinearLayoutManager.java b/src/main/java/org/thoughtcrime/securesms/SetStartingPositionLinearLayoutManager.java similarity index 100% rename from src/org/thoughtcrime/securesms/SetStartingPositionLinearLayoutManager.java rename to src/main/java/org/thoughtcrime/securesms/SetStartingPositionLinearLayoutManager.java diff --git a/src/org/thoughtcrime/securesms/ShareActivity.java b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/ShareActivity.java rename to src/main/java/org/thoughtcrime/securesms/ShareActivity.java diff --git a/src/org/thoughtcrime/securesms/ShareLocationDialog.java b/src/main/java/org/thoughtcrime/securesms/ShareLocationDialog.java similarity index 100% rename from src/org/thoughtcrime/securesms/ShareLocationDialog.java rename to src/main/java/org/thoughtcrime/securesms/ShareLocationDialog.java diff --git a/src/org/thoughtcrime/securesms/TransportOption.java b/src/main/java/org/thoughtcrime/securesms/TransportOption.java similarity index 83% rename from src/org/thoughtcrime/securesms/TransportOption.java rename to src/main/java/org/thoughtcrime/securesms/TransportOption.java index 69d868f6c..50b190afd 100644 --- a/src/org/thoughtcrime/securesms/TransportOption.java +++ b/src/main/java/org/thoughtcrime/securesms/TransportOption.java @@ -11,7 +11,6 @@ public class TransportOption { private final int drawable; private final @NonNull String text; - private final @NonNull Type type; private final @NonNull String composeHint; public TransportOption(@NonNull Type type, @@ -19,18 +18,13 @@ public class TransportOption { @NonNull String text, @NonNull String composeHint) { - this.type = type; this.drawable = drawable; this.text = text; this.composeHint = composeHint; } public @NonNull Type getType() { - return type; - } - - public boolean isType(Type type) { - return this.type == type; + return Type.NORMAL_MAIL; } public @DrawableRes int getDrawable() { diff --git a/src/org/thoughtcrime/securesms/TransportOptions.java b/src/main/java/org/thoughtcrime/securesms/TransportOptions.java similarity index 81% rename from src/org/thoughtcrime/securesms/TransportOptions.java rename to src/main/java/org/thoughtcrime/securesms/TransportOptions.java index 5e9d1a5db..d2bbe33c9 100644 --- a/src/org/thoughtcrime/securesms/TransportOptions.java +++ b/src/main/java/org/thoughtcrime/securesms/TransportOptions.java @@ -12,9 +12,6 @@ import java.util.List; import static org.thoughtcrime.securesms.TransportOption.Type; public class TransportOptions { - - private static final String TAG = TransportOptions.class.getSimpleName(); - private final List listeners = new LinkedList<>(); private final Context context; private final List enabledTransports; @@ -55,10 +52,6 @@ public class TransportOptions { notifyTransportChangeListeners(); } - public boolean isManualSelection() { - return this.selectedOption.isPresent(); - } - public @NonNull TransportOption getSelectedTransport() { if (selectedOption.isPresent()) return selectedOption.get(); @@ -71,18 +64,6 @@ public class TransportOptions { throw new AssertionError("No options of default type!"); } - public void disableTransport(Type type) { - Optional option = find(type); - - if (option.isPresent()) { - enabledTransports.remove(option.get()); - - if (selectedOption.isPresent() && selectedOption.get().getType() == type) { - setSelectedTransport(null); - } - } - } - public List getEnabledTransports() { return enabledTransports; } @@ -107,16 +88,6 @@ public class TransportOptions { } } - private Optional find(Type type) { - for (TransportOption option : enabledTransports) { - if (option.isType(type)) { - return Optional.of(option); - } - } - - return Optional.absent(); - } - private boolean isEnabled(TransportOption transportOption) { for (TransportOption option : enabledTransports) { if (option.equals(transportOption)) return true; diff --git a/src/org/thoughtcrime/securesms/TransportOptionsAdapter.java b/src/main/java/org/thoughtcrime/securesms/TransportOptionsAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/TransportOptionsAdapter.java rename to src/main/java/org/thoughtcrime/securesms/TransportOptionsAdapter.java diff --git a/src/org/thoughtcrime/securesms/TransportOptionsPopup.java b/src/main/java/org/thoughtcrime/securesms/TransportOptionsPopup.java similarity index 100% rename from src/org/thoughtcrime/securesms/TransportOptionsPopup.java rename to src/main/java/org/thoughtcrime/securesms/TransportOptionsPopup.java diff --git a/src/org/thoughtcrime/securesms/Unbindable.java b/src/main/java/org/thoughtcrime/securesms/Unbindable.java similarity index 100% rename from src/org/thoughtcrime/securesms/Unbindable.java rename to src/main/java/org/thoughtcrime/securesms/Unbindable.java diff --git a/src/org/thoughtcrime/securesms/WebViewActivity.java b/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java similarity index 93% rename from src/org/thoughtcrime/securesms/WebViewActivity.java rename to src/main/java/org/thoughtcrime/securesms/WebViewActivity.java index 676b83794..c1b118f4e 100644 --- a/src/org/thoughtcrime/securesms/WebViewActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebViewActivity.java @@ -27,8 +27,6 @@ import androidx.webkit.ProxyConfig; import org.thoughtcrime.securesms.util.DynamicTheme; -import java.util.concurrent.Executor; - public class WebViewActivity extends PassphraseRequiredActionBarActivity implements SearchView.OnQueryTextListener, WebView.FindListener @@ -37,31 +35,20 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity protected WebView webView; - @Override - protected void onPreCreate() { - super.onPreCreate(); - + protected void toggleFakeProxy(boolean enable) { if (WebViewFeature.isFeatureSupported(WebViewFeature.PROXY_OVERRIDE)) { - // Set proxy to non-routable address. - ProxyConfig proxyConfig = new ProxyConfig.Builder() + if (enable) { + // Set proxy to non-routable address. + ProxyConfig proxyConfig = new ProxyConfig.Builder() .removeImplicitRules() .addProxyRule("0.0.0.0") .build(); - Executor executor = new Executor() { - @Override - public void execute(Runnable command) { - command.run(); - } - }; - Runnable listener = new Runnable() { - @Override - public void run() { - Log.i(TAG, "Successfully set WebView proxy."); - } - }; - ProxyController.getInstance().setProxyOverride(proxyConfig, executor, listener); + ProxyController.getInstance().setProxyOverride(proxyConfig, Runnable::run, () -> Log.i(TAG, "Set WebView proxy.")); + } else { + ProxyController.getInstance().clearProxyOverride(Runnable::run, () -> Log.i(TAG, "Cleared WebView proxy.")); + } } else { - Log.w(TAG, "Cannot set WebView proxy."); + Log.w(TAG, "Cannot " + (enable? "set": "clear") + " WebView proxy."); } } @@ -75,6 +62,7 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity webView = findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient() { + // IMPORTANT: this is will likely not be called inside iframes. // `shouldOverrideUrlLoading()` is called when the user clicks a URL, // returning `true` causes the WebView to abort loading the URL, // returning `false` causes the WebView to continue loading the URL as usual. diff --git a/src/org/thoughtcrime/securesms/WebxdcActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java similarity index 76% rename from src/org/thoughtcrime/securesms/WebxdcActivity.java rename to src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java index 6c2e4e410..b126d0c10 100644 --- a/src/org/thoughtcrime/securesms/WebxdcActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WebxdcActivity.java @@ -37,6 +37,8 @@ import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcEvent; import com.b44t.messenger.DcMsg; +import com.b44t.messenger.rpc.Rpc; +import com.b44t.messenger.rpc.RpcException; import org.json.JSONObject; import org.thoughtcrime.securesms.connect.AccountManager; @@ -48,40 +50,74 @@ import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Util; import java.io.ByteArrayInputStream; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; - +import java.util.Arrays; import java.util.HashMap; import java.util.Map; public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcEventDelegate { private static final String TAG = WebxdcActivity.class.getSimpleName(); + private static final String EXTRA_ACCOUNT_ID = "accountId"; + private static final String EXTRA_APP_MSG_ID = "appMessageId"; + private static final String EXTRA_HIDE_ACTION_BAR = "hideActionBar"; private static final int REQUEST_CODE_FILE_PICKER = 51426; + private ValueCallback filePathCallback; private DcContext dcContext; + private Rpc rpc; private DcMsg dcAppMsg; private String baseURL; private String sourceCodeUrl = ""; private boolean internetAccess = false; + private boolean hideActionBar = false; + + public static void openMaps(Context context, int chatId) { + DcContext dcContext = DcHelper.getContext(context); + int msgId = dcContext.initWebxdcIntegration(chatId); + if (msgId == 0) { + try { + InputStream inputStream = context.getResources().getAssets().open("webxdc/maps.xdc"); + String outputFile = DcHelper.getBlobdirFile(dcContext, "maps", ".xdc"); + Util.copy(inputStream, new FileOutputStream(outputFile)); + dcContext.setWebxdcIntegration(outputFile); + msgId = dcContext.initWebxdcIntegration(chatId); + } catch (IOException e) { + e.printStackTrace(); + } + if (msgId == 0) { + Toast.makeText(context, "Cannot get maps.xdc, see log for details.", Toast.LENGTH_LONG).show(); + return; + } + } + openWebxdcActivity(context, msgId, true); + } public static void openWebxdcActivity(Context context, DcMsg instance) { + openWebxdcActivity(context, instance.getId(), false); + } + + public static void openWebxdcActivity(Context context, int msgId, boolean hideActionBar) { if (!Util.isClickedRecently()) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (Prefs.isDeveloperModeEnabled(context)) { WebView.setWebContentsDebuggingEnabled(true); } - context.startActivity(getWebxdcIntent(context, instance.getId())); + context.startActivity(getWebxdcIntent(context, msgId, hideActionBar)); } else { Toast.makeText(context, "At least Android 5.0 (Lollipop) required for Webxdc.", Toast.LENGTH_LONG).show(); } } } - private static Intent getWebxdcIntent(Context context, int msgId) { + private static Intent getWebxdcIntent(Context context, int msgId, boolean hideActionBar) { DcContext dcContext = DcHelper.getContext(context); Intent intent = new Intent(context, WebxdcActivity.class); intent.setAction(Intent.ACTION_VIEW); - intent.putExtra("accountId", dcContext.getAccountId()); - intent.putExtra("appMessageId", msgId); + intent.putExtra(EXTRA_ACCOUNT_ID, dcContext.getAccountId()); + intent.putExtra(EXTRA_APP_MSG_ID, msgId); + intent.putExtra(EXTRA_HIDE_ACTION_BAR, hideActionBar); return intent; } @@ -92,7 +128,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE .putExtra(ConversationActivity.CHAT_ID_EXTRA, dcContext.getMsg(msgId).getChatId()) .setAction(Intent.ACTION_VIEW); - final Intent webxdcIntent = getWebxdcIntent(context, msgId); + final Intent webxdcIntent = getWebxdcIntent(context, msgId, false); return TaskStackBuilder.create(context) .addNextIntentWithParentStack(chatIntent) @@ -103,6 +139,10 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE @Override protected void onCreate(Bundle state, boolean ready) { super.onCreate(state, ready); + rpc = DcHelper.getRpc(this); + + Bundle b = getIntent().getExtras(); + hideActionBar = b.getBoolean(EXTRA_HIDE_ACTION_BAR, false); // enter fullscreen mode if necessary, // this is needed here because if the app is opened while already in landscape mode, onConfigurationChanged() is not triggered @@ -128,11 +168,10 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE DcEventCenter eventCenter = DcHelper.getEventCenter(WebxdcActivity.this.getApplicationContext()); eventCenter.addObserver(DcContext.DC_EVENT_WEBXDC_STATUS_UPDATE, this); eventCenter.addObserver(DcContext.DC_EVENT_MSGS_CHANGED, this); + eventCenter.addObserver(DcContext.DC_EVENT_WEBXDC_REALTIME_DATA, this); - Bundle b = getIntent().getExtras(); - int appMessageId = b.getInt("appMessageId"); - - int accountId = b.getInt("accountId"); + int appMessageId = b.getInt(EXTRA_APP_MSG_ID); + int accountId = b.getInt(EXTRA_ACCOUNT_ID); this.dcContext = DcHelper.getContext(getApplicationContext()); if (accountId != dcContext.getAccountId()) { AccountManager.getInstance().switchAccount(getApplicationContext(), accountId); @@ -155,6 +194,8 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE final JSONObject info = this.dcAppMsg.getWebxdcInfo(); internetAccess = JsonUtils.optBoolean(info, "internet_access"); + toggleFakeProxy(!internetAccess); + WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setAllowFileAccess(false); @@ -168,7 +209,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE webView.setNetworkAvailable(internetAccess); // this does not block network but sets `window.navigator.isOnline` in js land webView.addJavascriptInterface(new InternalJSApi(), "InternalJSApi"); - webView.loadUrl(this.baseURL + "/webxdc_bootstrap324567869.html"); + webView.loadUrl(this.baseURL + (internetAccess? "/index.html" : "/webxdc_bootstrap324567869.html")); Util.runOnAnyBackgroundThread(() -> { final DcChat chat = dcContext.getChat(dcAppMsg.getChatId()); @@ -181,6 +222,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE @Override protected void onDestroy() { DcHelper.getEventCenter(this.getApplicationContext()).removeObservers(this); + leaveRealtimeChannel(); super.onDestroy(); } @@ -222,7 +264,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE getWindow().getDecorView().setSystemUiVisibility(enable? View.SYSTEM_UI_FLAG_FULLSCREEN : 0); ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { - if (enable) { + if (hideActionBar || enable) { actionBar.hide(); } else { actionBar.show(); @@ -230,14 +272,16 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE } } + // This is usually only called when internetAccess == true or for mailto/openpgp4fpr scheme, + // because when internetAccess == false, the page is loaded inside an iframe, + // and WebViewClient.shouldOverrideUrlLoading is not called for HTTP(S) links inside the iframe @Override protected boolean openOnlineUrl(String url) { - if (url.startsWith("mailto:")) { + Log.i(TAG, "openOnlineUrl: " + url); + if (url.startsWith("mailto:") || url.startsWith("openpgp4fpr:")) { return super.openOnlineUrl(url); } - - Toast.makeText(this, "Please embed needed resources.", Toast.LENGTH_LONG).show(); - return true; // returning `true` causes the WebView to abort loading + return !internetAccess; // returning `false` continues loading in WebView; returning `true` let WebView abort loading } @Override @@ -285,7 +329,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE res = new WebResourceResponse("text/plain", "UTF-8", targetStream); } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && !internetAccess) { Map headers = new HashMap<>(); headers.put("Content-Security-Policy", "default-src 'self'; " @@ -303,12 +347,29 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE return res; } + private void callJavaScriptFunction(String func) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (internetAccess) { + webView.evaluateJavascript("window." + func + ";", null); + } else { + webView.evaluateJavascript("document.getElementById('frame').contentWindow." + func + ";", null); + } + } + } + @Override public void handleEvent(@NonNull DcEvent event) { int eventId = event.getId(); if ((eventId == DcContext.DC_EVENT_WEBXDC_STATUS_UPDATE && event.getData1Int() == dcAppMsg.getId())) { - Log.i(TAG, "handleEvent"); - webView.loadUrl("javascript:document.getElementById('frame').contentWindow.__webxdcUpdate();"); + Log.i(TAG, "handling status update event"); + callJavaScriptFunction("__webxdcUpdate()"); + } else if ((eventId == DcContext.DC_EVENT_WEBXDC_REALTIME_DATA && event.getData1Int() == dcAppMsg.getId())) { + Log.i(TAG, "handling realtime data event"); + StringBuilder data = new StringBuilder(); + for (byte b : event.getData2Blob()) { + data.append(((int) b) + ","); + } + callJavaScriptFunction("__webxdcRealtimeData([" + data + "])"); } else if ((eventId == DcContext.DC_EVENT_MSGS_CHANGED && event.getData2Int() == dcAppMsg.getId())) { this.dcAppMsg = this.dcContext.getMsg(event.getData2Int()); // msg changed, reload data from db Util.runOnAnyBackgroundThread(() -> { @@ -352,9 +413,8 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE .setIntents(getWebxdcIntentWithParentStack(context, msgId)) .build(); - if (ShortcutManagerCompat.requestPinShortcut(context, shortcutInfoCompat, null)) { - Toast.makeText(context, R.string.done, Toast.LENGTH_SHORT).show(); - } else { + Toast.makeText(context, R.string.one_moment, Toast.LENGTH_SHORT).show(); + if (!ShortcutManagerCompat.requestPinShortcut(context, shortcutInfoCompat, null)) { Toast.makeText(context, "ErrAddToHomescreen: requestPinShortcut() failed", Toast.LENGTH_LONG).show(); } } catch(Exception e) { @@ -387,12 +447,23 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE super.onActivityResult(reqCode, resultCode, data); } + private void leaveRealtimeChannel() { + int accountId = dcContext.getAccountId(); + int msgId = dcAppMsg.getId(); + try { + rpc.leaveWebxdcRealtime(accountId, msgId); + } catch (RpcException e) { + e.printStackTrace(); + } + } + class InternalJSApi { @JavascriptInterface public String selfAddr() { return WebxdcActivity.this.dcContext.getConfig("addr"); } + /** @noinspection unused*/ @JavascriptInterface public String selfName() { String name = WebxdcActivity.this.dcContext.getConfig("displayname"); @@ -402,6 +473,7 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE return name; } + /** @noinspection unused*/ @JavascriptInterface public boolean sendStatusUpdate(String payload, String descr) { Log.i(TAG, "sendStatusUpdate"); @@ -417,12 +489,14 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE return true; } + /** @noinspection unused*/ @JavascriptInterface public String getStatusUpdates(int lastKnownSerial) { Log.i(TAG, "getStatusUpdates"); return WebxdcActivity.this.dcContext.getWebxdcStatusUpdates(WebxdcActivity.this.dcAppMsg.getId(), lastKnownSerial ); } + /** @noinspection unused*/ @JavascriptInterface public String sendToChat(String message) { Log.i(TAG, "sendToChat"); @@ -451,5 +525,36 @@ public class WebxdcActivity extends WebViewActivity implements DcEventCenter.DcE return e.toString(); } } + + /** @noinspection unused*/ + @JavascriptInterface + public void sendRealtimeAdvertisement() { + int accountId = WebxdcActivity.this.dcContext.getAccountId(); + int msgId = WebxdcActivity.this.dcAppMsg.getId(); + try { + WebxdcActivity.this.rpc.sendWebxdcRealtimeAdvertisement(accountId, msgId); + } catch (RpcException e) { + e.printStackTrace(); + } + } + + /** @noinspection unused*/ + @JavascriptInterface + public void leaveRealtimeChannel() { + WebxdcActivity.this.leaveRealtimeChannel(); + } + + /** @noinspection unused*/ + @JavascriptInterface + public void sendRealtimeData(String jsonData) { + int accountId = WebxdcActivity.this.dcContext.getAccountId(); + int msgId = WebxdcActivity.this.dcAppMsg.getId(); + try { + Integer[] data = JsonUtils.fromJson(jsonData, Integer[].class); + WebxdcActivity.this.rpc.sendWebxdcRealtimeData(accountId, msgId, Arrays.asList(data)); + } catch (IOException | RpcException e) { + e.printStackTrace(); + } + } } } diff --git a/src/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java similarity index 71% rename from src/org/thoughtcrime/securesms/WelcomeActivity.java rename to src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index 2f0f2344a..d2bc31923 100644 --- a/src/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -12,6 +12,7 @@ import android.os.Build; import android.os.Bundle; import android.text.util.Linkify; import android.util.Log; +import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.CheckBox; @@ -19,6 +20,7 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import com.b44t.messenger.DcContext; @@ -33,11 +35,9 @@ import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.AttachmentManager; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.qr.BackupTransferActivity; -import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.qr.RegistrationQrActivity; import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.NotificationController; -import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StreamUtil; import org.thoughtcrime.securesms.util.Util; @@ -50,42 +50,45 @@ import java.io.InputStream; import java.io.OutputStream; public class WelcomeActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate { - public static final String QR_ACCOUNT_EXTRA = "qr_account_extra"; - private static final String DCACCOUNT = "dcaccount"; - private static final String DCLOGIN = "dclogin"; + public static final String BACKUP_QR_EXTRA = "backup_qr_extra"; public static final int PICK_BACKUP = 20574; private final static String TAG = WelcomeActivity.class.getSimpleName(); public static final String TMP_BACKUP_FILE = "tmp-backup-file"; public static final String DC_REQUEST_ACCOUNT_DATA = "chat.delta.DC_REQUEST_ACCOUNT_DATA"; - private boolean manualConfigure = true; // false: configure by QR account creation private ProgressDialog progressDialog = null; private boolean imexUserAborted; DcContext dcContext; private NotificationController notificationController; - @Override - protected void onPreCreate() { - dynamicTheme = new DynamicNoActionBarTheme(); - super.onPreCreate(); - } - @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.welcome_activity); - Button loginButton = findViewById(R.id.login_button); - View addAsSecondDeviceButton = findViewById(R.id.add_as_second_device_button); - View scanQrButton = findViewById(R.id.scan_qr_button); - View backupButton = findViewById(R.id.backup_button); + Button signUpButton = findViewById(R.id.signup_button); + Button signInButton = findViewById(R.id.signin_button); - loginButton.setOnClickListener((view) -> startRegistrationActivity()); - addAsSecondDeviceButton.setOnClickListener((view) -> startAddAsSecondDeviceActivity()); - scanQrButton.setOnClickListener((view) -> startRegistrationQrActivity()); - backupButton.setOnClickListener((view) -> startImportBackup()); + 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()); registerForEvents(); + initializeActionBar(); if (!DcHelper.hasAnyConfiguredContext(this)) { Intent intent = new Intent(); @@ -96,44 +99,48 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen intent.setAction(DC_REQUEST_ACCOUNT_DATA); sendBroadcast(intent); } + } - handleIntent(); + protected void initializeActionBar() { + ActionBar supportActionBar = getSupportActionBar(); + if (supportActionBar == null) throw new AssertionError(); + + boolean canGoBack = AccountManager.getInstance().canRollbackAccountCreation(this); + supportActionBar.setDisplayHomeAsUpEnabled(canGoBack); + getSupportActionBar().setTitle(canGoBack? R.string.add_account : R.string.welcome_desktop); } private void registerForEvents() { dcContext = DcHelper.getContext(this); - DcEventCenter eventCenter = DcHelper.getEventCenter(this); - eventCenter.addObserver(DcContext.DC_EVENT_CONFIGURE_PROGRESS, this); - eventCenter.addObserver(DcContext.DC_EVENT_IMEX_PROGRESS, this); + DcHelper.getEventCenter(this).addObserver(DcContext.DC_EVENT_IMEX_PROGRESS, this); } - private void handleIntent() { - if (getIntent() != null && Intent.ACTION_VIEW.equals(getIntent().getAction())) { - Uri uri = getIntent().getData(); - if (uri == null) return; + @Override + public boolean onOptionsItemSelected(MenuItem item) { + super.onOptionsItemSelected(item); - if (uri.getScheme().equalsIgnoreCase(DCACCOUNT) || uri.getScheme().equalsIgnoreCase(DCLOGIN)) { - QrCodeHandler qrCodeHandler = new QrCodeHandler(this); - qrCodeHandler.handleQrData(uri.toString()); - } + switch (item.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; } + + return false; } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); - handleIntent(); } @Override public void onStart() { super.onStart(); - String qrAccount = getIntent().getStringExtra(QR_ACCOUNT_EXTRA); - if (qrAccount!=null) { - getIntent().removeExtra(QR_ACCOUNT_EXTRA); - manualConfigure = false; - startQrAccountCreation(qrAccount); + String backupQr = getIntent().getStringExtra(BACKUP_QR_EXTRA); + if (backupQr != null) { + getIntent().removeExtra(BACKUP_QR_EXTRA); + startBackupTransfer(backupQr); } } @@ -148,19 +155,13 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } - private void startRegistrationActivity() { - manualConfigure = true; - Intent intent = new Intent(this, RegistrationActivity.class); + private void startInstantOnboardingActivity() { + Intent intent = new Intent(this, InstantOnboardingActivity.class); + intent.putExtra(InstantOnboardingActivity.FROM_WELCOME, true); startActivity(intent); } - private void startRegistrationQrActivity() { - manualConfigure = false; - new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class).initiateScan(); - } - private void startAddAsSecondDeviceActivity() { - manualConfigure = false; new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class) .addExtra(RegistrationQrActivity.ADD_AS_SECOND_DEVICE_EXTRA, true) .initiateScan(); @@ -293,38 +294,17 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen } } - private void startQrAccountCreation(String qrCode) + private void startBackupTransfer(String qrCode) { if (progressDialog!=null) { progressDialog.dismiss(); progressDialog = null; } - if (dcContext.checkQr(qrCode).getState() == DcContext.DC_QR_BACKUP) { - Intent intent = new Intent(this, BackupTransferActivity.class); - intent.putExtra(BackupTransferActivity.TRANSFER_MODE, BackupTransferActivity.TransferMode.RECEIVER_SCAN_QR.getInt()); - intent.putExtra(BackupTransferActivity.QR_CODE, qrCode); - startActivity(intent); - return; - } - - progressDialog = new ProgressDialog(this); - progressDialog.setMessage(getResources().getString(R.string.one_moment)); - progressDialog.setCanceledOnTouchOutside(false); - progressDialog.setCancelable(false); - progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getResources().getString(android.R.string.cancel), (dialog, which) -> { - dcContext.stopOngoingProcess(); - }); - progressDialog.show(); - - DcHelper.getEventCenter(this).captureNextError(); - - if (!dcContext.setConfigFromQr(qrCode)) { - progressError(dcContext.getLastError()); - return; - } - DcHelper.getAccounts(this).stopIo(); - dcContext.configure(); + Intent intent = new Intent(this, BackupTransferActivity.class); + intent.putExtra(BackupTransferActivity.TRANSFER_MODE, BackupTransferActivity.TransferMode.RECEIVER_SCAN_QR.getInt()); + intent.putExtra(BackupTransferActivity.QR_CODE, qrCode); + startActivity(intent); } private void progressError(String data2) { @@ -337,17 +317,12 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen progressDialog.setMessage(getResources().getString(R.string.one_moment)+String.format(" %d%%", percent)); } - private void progressSuccess(boolean enterDisplayname) { + private void progressSuccess() { DcHelper.getEventCenter(this).endCaptureNextError(); progressDialog.dismiss(); - - if (enterDisplayname) { - Intent intent = new Intent(getApplicationContext(), CreateProfileActivity.class); - intent.putExtra(CreateProfileActivity.FROM_WELCOME, true); - startActivity(intent); - } else { - startActivity(new Intent(getApplicationContext(), ConversationListActivity.class)); - } + Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class); + intent.putExtra(ConversationListActivity.FROM_WELCOME, true); + startActivity(intent); finish(); } @@ -393,31 +368,12 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen } else if (progress==1000/*done*/) { DcHelper.getAccounts(this).startIo(); - progressSuccess(false); + progressSuccess(); + dcContext.assumeMultiDevice(); notificationController.close(); cleanupTempBackupFile(); } } - else if (manualConfigure && eventId==DcContext.DC_EVENT_CONFIGURE_PROGRESS) { - long progress = event.getData1Int(); - if (progress==1000/*done*/) { - DcHelper.getAccounts(this).startIo(); - finish(); // remove ourself from the activity stack (finishAffinity is available in API 16, we're targeting API 14) - } - } - else if (!manualConfigure && eventId==DcContext.DC_EVENT_CONFIGURE_PROGRESS) { - long progress = event.getData1Int(); - if (progress==0/*error/aborted*/) { - progressError(event.getData2Str()); - } - else if (progress<1000/*progress in permille*/) { - progressUpdate((int)progress); - } - else if (progress==1000/*done*/) { - DcHelper.getAccounts(this).startIo(); - progressSuccess(true); - } - } } @Override @@ -431,31 +387,11 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen String qrRaw = scanResult.getContents(); DcLot qrParsed = dcContext.checkQr(qrRaw); switch (qrParsed.getState()) { - case DcContext.DC_QR_LOGIN: - String address = qrParsed.getText1(); - new AlertDialog.Builder(this) - .setMessage(getString(R.string.qrlogin_ask_login, address)) - .setPositiveButton(R.string.ok, (dialog, which) -> startQrAccountCreation(qrRaw)) - .setNegativeButton(R.string.cancel, null) - .setCancelable(false) - .show(); - break; - - case DcContext.DC_QR_ACCOUNT: - String domain = qrParsed.getText1(); - new AlertDialog.Builder(this) - .setMessage(getString(R.string.qraccount_ask_create_and_login, domain)) - .setPositiveButton(R.string.ok, (dialog, which) -> startQrAccountCreation(qrRaw)) - .setNegativeButton(R.string.cancel, null) - .setCancelable(false) - .show(); - break; - case DcContext.DC_QR_BACKUP: new AlertDialog.Builder(this) .setTitle(R.string.multidevice_receiver_title) .setMessage(R.string.multidevice_receiver_scanning_ask) - .setPositiveButton(R.string.perm_continue, (dialog, which) -> startQrAccountCreation(qrRaw)) + .setPositiveButton(R.string.perm_continue, (dialog, which) -> startBackupTransfer(qrRaw)) .setNegativeButton(R.string.cancel, null) .setCancelable(false) .show(); diff --git a/src/org/thoughtcrime/securesms/accounts/AccountSelectionListAdapter.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/accounts/AccountSelectionListAdapter.java rename to src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListAdapter.java diff --git a/src/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java similarity index 98% rename from src/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java rename to src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java index e7a94351c..a1085d39d 100644 --- a/src/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListFragment.java @@ -75,9 +75,9 @@ public class AccountSelectionListFragment extends DialogFragment AccountSelectionListFragment.this.dismiss(); int accountId = contact.getAccountId(); if (accountId == DC_CONTACT_ID_ADD_ACCOUNT) { - AccountManager.getInstance().switchAccountAndStartActivity(activity, 0, null); + AccountManager.getInstance().switchAccountAndStartActivity(activity, 0); } else if (accountId != DcHelper.getAccounts(activity).getSelectedAccount().getAccountId()) { - AccountManager.getInstance().switchAccountAndStartActivity(activity, accountId, null); + AccountManager.getInstance().switchAccountAndStartActivity(activity, accountId); } } diff --git a/src/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java rename to src/main/java/org/thoughtcrime/securesms/accounts/AccountSelectionListItem.java diff --git a/src/org/thoughtcrime/securesms/animation/AnimationCompleteListener.java b/src/main/java/org/thoughtcrime/securesms/animation/AnimationCompleteListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/animation/AnimationCompleteListener.java rename to src/main/java/org/thoughtcrime/securesms/animation/AnimationCompleteListener.java diff --git a/src/org/thoughtcrime/securesms/attachments/Attachment.java b/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java similarity index 57% rename from src/org/thoughtcrime/securesms/attachments/Attachment.java rename to src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java index 593aface7..daec88d9c 100644 --- a/src/org/thoughtcrime/securesms/attachments/Attachment.java +++ b/src/main/java/org/thoughtcrime/securesms/attachments/Attachment.java @@ -1,9 +1,21 @@ package org.thoughtcrime.securesms.attachments; +import android.content.Context; import android.net.Uri; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.mms.PartAuthority; +import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.Util; + +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.SimpleDateFormat; +import java.util.Date; + public abstract class Attachment { @NonNull @@ -88,4 +100,35 @@ public abstract class Attachment { public int getHeight() { return height; } + + public String getRealPath(Context context) { + try { + // get file in the blobdir as `/[-].` + String filename = getFileName(); + String ext = ""; + if(filename==null) { + filename = new SimpleDateFormat("yyyy-MM-dd-HH-mm").format(new Date()); + ext = "." + MediaUtil.getExtensionFromMimeType(getContentType()); + } + else { + int i = filename.lastIndexOf("."); + if(i>=0) { + ext = filename.substring(i); + filename = filename.substring(0, i); + } + } + String path = DcHelper.getBlobdirFile(DcHelper.getContext(context), filename, ext); + + // copy content to this file + InputStream inputStream = PartAuthority.getAttachmentStream(context, getDataUri()); + OutputStream outputStream = new FileOutputStream(path); + Util.copy(inputStream, outputStream); + + return path; + } + catch(Exception e) { + e.printStackTrace(); + return null; + } + } } diff --git a/src/org/thoughtcrime/securesms/attachments/DcAttachment.java b/src/main/java/org/thoughtcrime/securesms/attachments/DcAttachment.java similarity index 88% rename from src/org/thoughtcrime/securesms/attachments/DcAttachment.java rename to src/main/java/org/thoughtcrime/securesms/attachments/DcAttachment.java index 779f127d7..ce5164ad4 100644 --- a/src/org/thoughtcrime/securesms/attachments/DcAttachment.java +++ b/src/main/java/org/thoughtcrime/securesms/attachments/DcAttachment.java @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.attachments; import java.io.File; + +import android.content.Context; import android.net.Uri; import androidx.annotation.Nullable; @@ -35,4 +37,9 @@ public class DcAttachment extends Attachment { } return getDataUri(); } + + @Override + public String getRealPath(Context context) { + return dcMsg.getFile(); + } } diff --git a/src/org/thoughtcrime/securesms/attachments/UriAttachment.java b/src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java similarity index 100% rename from src/org/thoughtcrime/securesms/attachments/UriAttachment.java rename to src/main/java/org/thoughtcrime/securesms/attachments/UriAttachment.java diff --git a/src/org/thoughtcrime/securesms/audio/AudioCodec.java b/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java similarity index 98% rename from src/org/thoughtcrime/securesms/audio/AudioCodec.java rename to src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java index fa7c5c4a3..c4ce87f50 100644 --- a/src/org/thoughtcrime/securesms/audio/AudioCodec.java +++ b/src/main/java/org/thoughtcrime/securesms/audio/AudioCodec.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.audio; -import android.annotation.TargetApi; import android.content.Context; import android.media.AudioFormat; import android.media.AudioRecord; @@ -8,7 +7,6 @@ import android.media.MediaCodec; import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.media.MediaRecorder; -import android.os.Build; import android.util.Log; import org.thoughtcrime.securesms.util.Prefs; @@ -18,7 +16,6 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; -@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public class AudioCodec { private static final String TAG = AudioCodec.class.getSimpleName(); diff --git a/src/org/thoughtcrime/securesms/audio/AudioRecorder.java b/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java similarity index 96% rename from src/org/thoughtcrime/securesms/audio/AudioRecorder.java rename to src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java index 776888bfb..826511012 100644 --- a/src/org/thoughtcrime/securesms/audio/AudioRecorder.java +++ b/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java @@ -1,9 +1,7 @@ package org.thoughtcrime.securesms.audio; -import android.annotation.TargetApi; import android.content.Context; import android.net.Uri; -import android.os.Build; import android.os.ParcelFileDescriptor; import androidx.annotation.NonNull; import android.util.Log; @@ -20,7 +18,6 @@ import org.thoughtcrime.securesms.util.Util; import java.io.IOException; import java.util.concurrent.ExecutorService; -@TargetApi(Build.VERSION_CODES.JELLY_BEAN) public class AudioRecorder { private static final String TAG = AudioRecorder.class.getSimpleName(); diff --git a/src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java b/src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java similarity index 100% rename from src/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java rename to src/main/java/org/thoughtcrime/securesms/audio/AudioSlidePlayer.java diff --git a/src/org/thoughtcrime/securesms/components/AnimatingToggle.java b/src/main/java/org/thoughtcrime/securesms/components/AnimatingToggle.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/AnimatingToggle.java rename to src/main/java/org/thoughtcrime/securesms/components/AnimatingToggle.java diff --git a/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java b/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java similarity index 98% rename from src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java rename to src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java index 930521977..1312615ab 100644 --- a/src/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java +++ b/src/main/java/org/thoughtcrime/securesms/components/AttachmentTypeSelector.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.components; -import android.Manifest; import android.animation.Animator; import android.annotation.TargetApi; import android.app.Activity; @@ -96,10 +95,6 @@ public class AttachmentTypeSelector extends PopupWindow { setLocationButtonImage(context); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { - ViewUtil.findById(layout, R.id.location_linear_layout).setVisibility(View.INVISIBLE); - } - setContentView(layout); setWidth(LinearLayout.LayoutParams.MATCH_PARENT); setHeight(LinearLayout.LayoutParams.WRAP_CONTENT); diff --git a/src/org/thoughtcrime/securesms/components/AudioView.java b/src/main/java/org/thoughtcrime/securesms/components/AudioView.java similarity index 98% rename from src/org/thoughtcrime/securesms/components/AudioView.java rename to src/main/java/org/thoughtcrime/securesms/components/AudioView.java index e99c19dcc..6c7bc406f 100644 --- a/src/org/thoughtcrime/securesms/components/AudioView.java +++ b/src/main/java/org/thoughtcrime/securesms/components/AudioView.java @@ -12,7 +12,6 @@ import android.media.AudioManager; import android.os.Build; import android.util.AttributeSet; import android.util.Log; -import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; @@ -203,9 +202,7 @@ public class AudioView extends FrameLayout implements AudioSlidePlayer.Listener this.seekBar.getProgressDrawable().setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - this.seekBar.getThumb().setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN); - } + this.seekBar.getThumb().setColorFilter(foregroundTint, PorterDuff.Mode.SRC_IN); } public void getSeekBarGlobalVisibleRect(@NonNull Rect rect) { diff --git a/src/org/thoughtcrime/securesms/components/AvatarImageView.java b/src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/AvatarImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/AvatarImageView.java diff --git a/src/org/thoughtcrime/securesms/components/AvatarSelector.java b/src/main/java/org/thoughtcrime/securesms/components/AvatarSelector.java similarity index 99% rename from src/org/thoughtcrime/securesms/components/AvatarSelector.java rename to src/main/java/org/thoughtcrime/securesms/components/AvatarSelector.java index 89f6336e7..257009602 100644 --- a/src/org/thoughtcrime/securesms/components/AvatarSelector.java +++ b/src/main/java/org/thoughtcrime/securesms/components/AvatarSelector.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.components; -import android.Manifest; import android.app.Activity; import android.content.Context; import android.graphics.drawable.BitmapDrawable; diff --git a/src/org/thoughtcrime/securesms/components/AvatarView.java b/src/main/java/org/thoughtcrime/securesms/components/AvatarView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/AvatarView.java rename to src/main/java/org/thoughtcrime/securesms/components/AvatarView.java diff --git a/src/org/thoughtcrime/securesms/components/BorderlessImageView.java b/src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/BorderlessImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/BorderlessImageView.java diff --git a/src/org/thoughtcrime/securesms/components/CircleColorImageView.java b/src/main/java/org/thoughtcrime/securesms/components/CircleColorImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/CircleColorImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/CircleColorImageView.java diff --git a/src/org/thoughtcrime/securesms/components/ComposeText.java b/src/main/java/org/thoughtcrime/securesms/components/ComposeText.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ComposeText.java rename to src/main/java/org/thoughtcrime/securesms/components/ComposeText.java diff --git a/src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java b/src/main/java/org/thoughtcrime/securesms/components/ContactFilterToolbar.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ContactFilterToolbar.java rename to src/main/java/org/thoughtcrime/securesms/components/ContactFilterToolbar.java diff --git a/src/org/thoughtcrime/securesms/components/ControllableViewPager.java b/src/main/java/org/thoughtcrime/securesms/components/ControllableViewPager.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ControllableViewPager.java rename to src/main/java/org/thoughtcrime/securesms/components/ControllableViewPager.java diff --git a/src/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ConversationItemFooter.java rename to src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java diff --git a/src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java rename to src/main/java/org/thoughtcrime/securesms/components/ConversationItemThumbnail.java diff --git a/src/org/thoughtcrime/securesms/components/CornerMask.java b/src/main/java/org/thoughtcrime/securesms/components/CornerMask.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/CornerMask.java rename to src/main/java/org/thoughtcrime/securesms/components/CornerMask.java diff --git a/src/org/thoughtcrime/securesms/components/CustomDefaultPreference.java b/src/main/java/org/thoughtcrime/securesms/components/CustomDefaultPreference.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/CustomDefaultPreference.java rename to src/main/java/org/thoughtcrime/securesms/components/CustomDefaultPreference.java diff --git a/src/org/thoughtcrime/securesms/components/DeliveryStatusView.java b/src/main/java/org/thoughtcrime/securesms/components/DeliveryStatusView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/DeliveryStatusView.java rename to src/main/java/org/thoughtcrime/securesms/components/DeliveryStatusView.java diff --git a/src/org/thoughtcrime/securesms/components/DocumentView.java b/src/main/java/org/thoughtcrime/securesms/components/DocumentView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/DocumentView.java rename to src/main/java/org/thoughtcrime/securesms/components/DocumentView.java diff --git a/src/org/thoughtcrime/securesms/components/FromTextView.java b/src/main/java/org/thoughtcrime/securesms/components/FromTextView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/FromTextView.java rename to src/main/java/org/thoughtcrime/securesms/components/FromTextView.java diff --git a/src/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java b/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java rename to src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java diff --git a/src/org/thoughtcrime/securesms/components/HidingLinearLayout.java b/src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/HidingLinearLayout.java rename to src/main/java/org/thoughtcrime/securesms/components/HidingLinearLayout.java diff --git a/src/org/thoughtcrime/securesms/components/ImageDivet.java b/src/main/java/org/thoughtcrime/securesms/components/ImageDivet.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ImageDivet.java rename to src/main/java/org/thoughtcrime/securesms/components/ImageDivet.java diff --git a/src/org/thoughtcrime/securesms/components/InputAwareLayout.java b/src/main/java/org/thoughtcrime/securesms/components/InputAwareLayout.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/InputAwareLayout.java rename to src/main/java/org/thoughtcrime/securesms/components/InputAwareLayout.java diff --git a/src/org/thoughtcrime/securesms/components/InputPanel.java b/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java similarity index 98% rename from src/org/thoughtcrime/securesms/components/InputPanel.java rename to src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index a466a2b45..7b6d01065 100644 --- a/src/org/thoughtcrime/securesms/components/InputPanel.java +++ b/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -106,11 +106,6 @@ public class InputPanel extends ConstraintLayout this.recordLockCancel.setOnClickListener(v -> microphoneRecorderView.cancelAction()); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { - this.microphoneRecorderView.setVisibility(View.GONE); - this.microphoneRecorderView.setClickable(false); - } - if (Prefs.isSystemEmojiPreferred(getContext())) { mediaKeyboard.setVisibility(View.GONE); emojiVisible = false; @@ -156,6 +151,10 @@ public class InputPanel extends ConstraintLayout quoteAnimator.start(); } + public void clearQuoteWithoutAnimation() { + quoteView.dismiss(); + } + public void clearQuote() { if (quoteAnimator != null) { quoteAnimator.cancel(); diff --git a/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java b/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java similarity index 96% rename from src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java rename to src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java index cefcf300b..9f47c8c5c 100644 --- a/src/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java +++ b/src/main/java/org/thoughtcrime/securesms/components/KeyboardAwareLinearLayout.java @@ -65,7 +65,6 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat { private boolean keyboardOpen = false; private int rotation = 0; - private boolean isBubble = false; private long openedAt = 0; public KeyboardAwareLinearLayout(Context context) { @@ -95,10 +94,6 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat { super.onMeasure(widthMeasureSpec, heightMeasureSpec); } - public void setIsBubble(boolean isBubble) { - this.isBubble = isBubble; - } - private void updateRotation() { int oldRotation = rotation; rotation = getDeviceRotation(); @@ -237,40 +232,23 @@ public class KeyboardAwareLinearLayout extends LinearLayoutCompat { } private int getKeyboardLandscapeHeight() { - if (isBubble) { - return getRootView().getHeight() - minCustomKeyboardTopMarginLandscapeBubble; - } - int keyboardHeight = PreferenceManager.getDefaultSharedPreferences(getContext()) .getInt("keyboard_height_landscape", defaultCustomKeyboardSize); return Util.clamp(keyboardHeight, minCustomKeyboardSize, getRootView().getHeight() - minCustomKeyboardTopMarginLandscape); } private int getKeyboardPortraitHeight() { - if (isBubble) { - int height = getRootView().getHeight(); - return height - (int)(height * 0.45); - } - int keyboardHeight = PreferenceManager.getDefaultSharedPreferences(getContext()) .getInt("keyboard_height_portrait", defaultCustomKeyboardSize); return Util.clamp(keyboardHeight, minCustomKeyboardSize, getRootView().getHeight() - minCustomKeyboardTopMarginPortrait); } private void setKeyboardPortraitHeight(int height) { - if (isBubble) { - return; - } - PreferenceManager.getDefaultSharedPreferences(getContext()) .edit().putInt("keyboard_height_portrait", height).apply(); } private void setKeyboardLandscapeHeight(int height) { - if (isBubble) { - return; - } - PreferenceManager.getDefaultSharedPreferences(getContext()) .edit().putInt("keyboard_height_landscape", height).apply(); } diff --git a/src/org/thoughtcrime/securesms/components/MediaView.java b/src/main/java/org/thoughtcrime/securesms/components/MediaView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/MediaView.java rename to src/main/java/org/thoughtcrime/securesms/components/MediaView.java diff --git a/src/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java b/src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java rename to src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java diff --git a/src/org/thoughtcrime/securesms/components/QuoteView.java b/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java similarity index 89% rename from src/org/thoughtcrime/securesms/components/QuoteView.java rename to src/main/java/org/thoughtcrime/securesms/components/QuoteView.java index fa9d4f256..7ffdbf6cc 100644 --- a/src/org/thoughtcrime/securesms/components/QuoteView.java +++ b/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java @@ -7,6 +7,7 @@ import android.net.Uri; import android.os.Build; import android.text.TextUtils; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; @@ -20,11 +21,14 @@ import androidx.annotation.RequiresApi; import com.annimon.stream.Stream; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcMsg; +import com.b44t.messenger.rpc.RpcException; +import com.b44t.messenger.rpc.VcardContact; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.json.JSONObject; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.attachments.Attachment; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader.DecryptableUri; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.Slide; @@ -185,7 +189,7 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver { } private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull SlideDeck slideDeck) { - List thumbnailSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo() || s.hasSticker() || s.isWebxdcDocument()).limit(1).toList(); + List thumbnailSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo() || s.hasSticker() || s.isWebxdcDocument() || s.isVcard()).limit(1).toList(); List audioSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasAudio()).limit(1).toList(); List documentSlides = Stream.of(attachments.getSlides()).filter(Slide::hasDocument).limit(1).toList(); @@ -206,7 +210,22 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver { .diskCacheStrategy(DiskCacheStrategy.RESOURCE) .into(thumbnailView); } catch (Exception e) { - e.printStackTrace(); + Log.e(TAG, "failed to get webxdc icon", e); + thumbnailView.setVisibility(GONE); + } + } else if (thumbnailSlides.get(0).isVcard()) { + try { + VcardContact vcardContact = DcHelper.getRpc(getContext()).parseVcard(quotedMsg.getFile()).get(0); + Recipient recipient = new Recipient(getContext(), vcardContact); + glideRequests.load(recipient.getContactPhoto(getContext())) + .error(recipient.getFallbackAvatarDrawable(getContext(), false)) + .centerCrop() + .override(getContext().getResources().getDimensionPixelSize(R.dimen.quote_thumb_size)) + .diskCacheStrategy(DiskCacheStrategy.NONE) + .into(thumbnailView); + } catch (RpcException e) { + Log.e(TAG, "failed to parse vCard", e); + thumbnailView.setVisibility(GONE); } } else { Uri thumbnailUri = thumbnailSlides.get(0).getUri(); diff --git a/src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java b/src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java rename to src/main/java/org/thoughtcrime/securesms/components/RecentPhotoViewRail.java diff --git a/src/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java b/src/main/java/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java rename to src/main/java/org/thoughtcrime/securesms/components/RemovableEditableMediaView.java diff --git a/src/org/thoughtcrime/securesms/components/RepeatableImageKey.java b/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java similarity index 81% rename from src/org/thoughtcrime/securesms/components/RepeatableImageKey.java rename to src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java index 48e071c94..d0e545b9b 100644 --- a/src/org/thoughtcrime/securesms/components/RepeatableImageKey.java +++ b/src/main/java/org/thoughtcrime/securesms/components/RepeatableImageKey.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components; import android.annotation.TargetApi; import android.content.Context; -import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; import android.util.AttributeSet; import android.view.HapticFeedbackConstants; @@ -58,13 +57,10 @@ public class RepeatableImageKey extends ImageButton { } private class Repeater implements Runnable { - @TargetApi(VERSION_CODES.HONEYCOMB_MR1) @Override public void run() { notifyListener(); - postDelayed(this, VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1 - ? ViewConfiguration.getKeyRepeatDelay() - : 50); + postDelayed(this, ViewConfiguration.getKeyRepeatDelay()); } } @@ -75,14 +71,11 @@ public class RepeatableImageKey extends ImageButton { this.repeater = new Repeater(); } - @TargetApi(VERSION_CODES.HONEYCOMB_MR1) @Override public boolean onTouch(View view, MotionEvent motionEvent) { switch (motionEvent.getAction()) { case MotionEvent.ACTION_DOWN: - view.postDelayed(repeater, VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1 - ? ViewConfiguration.getKeyRepeatTimeout() - : ViewConfiguration.getLongPressTimeout()); + view.postDelayed(repeater, ViewConfiguration.getKeyRepeatTimeout()); performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP); return false; case MotionEvent.ACTION_CANCEL: diff --git a/src/org/thoughtcrime/securesms/components/ScaleStableImageView.java b/src/main/java/org/thoughtcrime/securesms/components/ScaleStableImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ScaleStableImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/ScaleStableImageView.java diff --git a/src/org/thoughtcrime/securesms/components/SearchToolbar.java b/src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/SearchToolbar.java rename to src/main/java/org/thoughtcrime/securesms/components/SearchToolbar.java diff --git a/src/org/thoughtcrime/securesms/components/SendButton.java b/src/main/java/org/thoughtcrime/securesms/components/SendButton.java similarity index 93% rename from src/org/thoughtcrime/securesms/components/SendButton.java rename to src/main/java/org/thoughtcrime/securesms/components/SendButton.java index 6de464b80..1e7632064 100644 --- a/src/org/thoughtcrime/securesms/components/SendButton.java +++ b/src/main/java/org/thoughtcrime/securesms/components/SendButton.java @@ -56,10 +56,6 @@ public class SendButton extends ImageButton return transportOptionsPopup.get(); } - public boolean isManualSelection() { - return transportOptions.isManualSelection(); - } - public void addOnTransportChangedListener(OnTransportChangedListener listener) { transportOptions.addOnTransportChangedListener(listener); } @@ -72,10 +68,6 @@ public class SendButton extends ImageButton transportOptions.reset(); } - public void disableTransport(TransportOption.Type type) { - transportOptions.disableTransport(type); - } - public void setDefaultTransport(TransportOption.Type type) { transportOptions.setDefaultTransport(type); } diff --git a/src/org/thoughtcrime/securesms/components/ShapeScrim.java b/src/main/java/org/thoughtcrime/securesms/components/ShapeScrim.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ShapeScrim.java rename to src/main/java/org/thoughtcrime/securesms/components/ShapeScrim.java diff --git a/src/org/thoughtcrime/securesms/components/SquareFrameLayout.java b/src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/SquareFrameLayout.java rename to src/main/java/org/thoughtcrime/securesms/components/SquareFrameLayout.java diff --git a/src/org/thoughtcrime/securesms/components/SwitchPreferenceCompat.java b/src/main/java/org/thoughtcrime/securesms/components/SwitchPreferenceCompat.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/SwitchPreferenceCompat.java rename to src/main/java/org/thoughtcrime/securesms/components/SwitchPreferenceCompat.java diff --git a/src/org/thoughtcrime/securesms/components/ThumbnailView.java b/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ThumbnailView.java rename to src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java diff --git a/src/main/java/org/thoughtcrime/securesms/components/VcardView.java b/src/main/java/org/thoughtcrime/securesms/components/VcardView.java new file mode 100644 index 000000000..36b8e84b5 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/components/VcardView.java @@ -0,0 +1,75 @@ +package org.thoughtcrime.securesms.components; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.widget.FrameLayout; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.b44t.messenger.rpc.Rpc; +import com.b44t.messenger.rpc.RpcException; +import com.b44t.messenger.rpc.VcardContact; + +import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.mms.GlideRequests; +import org.thoughtcrime.securesms.mms.SlideClickListener; +import org.thoughtcrime.securesms.mms.VcardSlide; +import org.thoughtcrime.securesms.recipients.Recipient; + +public class VcardView extends FrameLayout { + private static final String TAG = VcardView.class.getSimpleName(); + + private final @NonNull AvatarView avatar; + private final @NonNull TextView name; + private final @NonNull TextView address; + + private @Nullable SlideClickListener viewListener; + private @Nullable VcardSlide slide; + + public VcardView(Context context) { + this(context, null); + } + + public VcardView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public VcardView(final Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + inflate(context, R.layout.vcard_view, this); + + this.avatar = findViewById(R.id.avatar); + this.name = findViewById(R.id.name); + this.address = findViewById(R.id.addr); + + setOnClickListener(v -> { + if (viewListener != null && slide != null) { + viewListener.onClick(v, slide); + } + }); + } + + public void setVcardClickListener(@Nullable SlideClickListener listener) { + this.viewListener = listener; + } + + public void setVcard(@NonNull GlideRequests glideRequests, final @NonNull VcardSlide slide, final @NonNull Rpc rpc) { + try { + VcardContact vcardContact = rpc.parseVcard(slide.asAttachment().getRealPath(getContext())).get(0); + name.setText(vcardContact.getDisplayName()); + address.setText(vcardContact.getAddr()); + avatar.setAvatar(glideRequests, new Recipient(getContext(), vcardContact), false); + this.slide = slide; + } catch (RpcException e) { + Log.e(TAG, "failed to parse vCard", e); + } + } + + public String getDescription() { + return name.getText() + "\n" + address.getText(); + } +} diff --git a/src/org/thoughtcrime/securesms/components/WebxdcView.java b/src/main/java/org/thoughtcrime/securesms/components/WebxdcView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/WebxdcView.java rename to src/main/java/org/thoughtcrime/securesms/components/WebxdcView.java diff --git a/src/org/thoughtcrime/securesms/components/ZoomingImageView.java b/src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/ZoomingImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/ZoomingImageView.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/AnimatingImageSpan.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/AsciiEmojiView.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/AsciiEmojiView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/AsciiEmojiView.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/AsciiEmojiView.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/CompositeEmojiPageModel.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/Emoji.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/Emoji.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/Emoji.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/Emoji.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiFilter.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiImageView.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiImageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiImageView.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiImageView.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiKeyboardProvider.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageModel.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPageViewGridAdapter.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageViewGridAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiPageViewGridAdapter.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageViewGridAdapter.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiPages.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPages.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java similarity index 96% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java index cd9c112b4..4a3989026 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java +++ b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.components.emoji; -import android.annotation.TargetApi; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -9,8 +8,7 @@ import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.os.Build.VERSION; -import android.os.Build.VERSION_CODES; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.text.Spannable; @@ -209,17 +207,15 @@ public class EmojiProvider { paint); } - @TargetApi(VERSION_CODES.HONEYCOMB_MR1) public void setBitmap(Bitmap bitmap) { setBitmap(bitmap, false); } - @TargetApi(VERSION_CODES.HONEYCOMB_MR1) public void setBitmap(Bitmap bitmap, boolean background) { if (!background) { Util.assertMainThread(); } - if (VERSION.SDK_INT < VERSION_CODES.HONEYCOMB_MR1 || bmp == null || !bmp.sameAs(bitmap)) { + if (bmp == null || !bmp.sameAs(bitmap)) { bmp = bitmap; invalidateSelf(); } diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiSpan.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiStrings.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiToggle.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/EmojiVariationSelectorPopup.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiVariationSelectorPopup.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/EmojiVariationSelectorPopup.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiVariationSelectorPopup.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardBottomTabAdapter.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboardProvider.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java similarity index 92% rename from src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java index 99be44d96..77b1b45b6 100644 --- a/src/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java +++ b/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java @@ -102,13 +102,4 @@ public class RecentEmojiPageModel implements EmojiPageModel { } }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } - - private String[] toReversePrimitiveArray(@NonNull LinkedHashSet emojiSet) { - String[] emojis = new String[emojiSet.size()]; - int i = emojiSet.size() - 1; - for (String emoji : emojiSet) { - emojis[i--] = emoji; - } - return emojis; - } } diff --git a/src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/StaticEmojiPageModel.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiDrawInfo.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiPageBitmap.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiParser.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/EmojiTree.java diff --git a/src/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java b/src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java rename to src/main/java/org/thoughtcrime/securesms/components/emoji/parsing/Fitzpatrick.java diff --git a/src/org/thoughtcrime/securesms/components/recyclerview/DeleteItemAnimator.java b/src/main/java/org/thoughtcrime/securesms/components/recyclerview/DeleteItemAnimator.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/recyclerview/DeleteItemAnimator.java rename to src/main/java/org/thoughtcrime/securesms/components/recyclerview/DeleteItemAnimator.java diff --git a/src/org/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton.java b/src/main/java/org/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton.java rename to src/main/java/org/thoughtcrime/securesms/components/registration/PulsingFloatingActionButton.java diff --git a/src/org/thoughtcrime/securesms/components/reminder/DozeReminder.java b/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java similarity index 88% rename from src/org/thoughtcrime/securesms/components/reminder/DozeReminder.java rename to src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java index f9a57ca1d..e742806f7 100644 --- a/src/org/thoughtcrime/securesms/components/reminder/DozeReminder.java +++ b/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java @@ -18,8 +18,10 @@ import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; +import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.notifications.FcmReceiveService; import org.thoughtcrime.securesms.util.Prefs; @SuppressLint("BatteryLife") @@ -59,6 +61,10 @@ public class DozeReminder { e.printStackTrace(); } + if (isPushAvailableAndSufficient()) { + return false; + } + return true; // yip, asking for disabling battery optimisations makes sense } @@ -104,8 +110,26 @@ public class DozeReminder { } } + private static boolean isAllChatmail() { + for (int accountId : ApplicationContext.dcAccounts.getAll()) { + DcContext context = ApplicationContext.dcAccounts.getAccount(accountId); + if (!context.isChatmail()) { + return false; + } + } + return true; + } + + private static boolean isPushAvailableAndSufficient() { + return isAllChatmail() && FcmReceiveService.getToken() != null; + } + public static void maybeAskDirectly(Context context) { try { + if (isPushAvailableAndSufficient()) { + return; + } + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M && !Prefs.getBooleanPreference(context, Prefs.DOZE_ASKED_DIRECTLY, false) && ContextCompat.checkSelfPermission(context, Manifest.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) == PackageManager.PERMISSION_GRANTED diff --git a/src/org/thoughtcrime/securesms/components/subsampling/AttachmentBitmapDecoder.java b/src/main/java/org/thoughtcrime/securesms/components/subsampling/AttachmentBitmapDecoder.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/subsampling/AttachmentBitmapDecoder.java rename to src/main/java/org/thoughtcrime/securesms/components/subsampling/AttachmentBitmapDecoder.java diff --git a/src/org/thoughtcrime/securesms/components/subsampling/AttachmentRegionDecoder.java b/src/main/java/org/thoughtcrime/securesms/components/subsampling/AttachmentRegionDecoder.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/subsampling/AttachmentRegionDecoder.java rename to src/main/java/org/thoughtcrime/securesms/components/subsampling/AttachmentRegionDecoder.java diff --git a/src/org/thoughtcrime/securesms/components/viewpager/ExtendedOnPageChangedListener.java b/src/main/java/org/thoughtcrime/securesms/components/viewpager/ExtendedOnPageChangedListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/viewpager/ExtendedOnPageChangedListener.java rename to src/main/java/org/thoughtcrime/securesms/components/viewpager/ExtendedOnPageChangedListener.java diff --git a/src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java b/src/main/java/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java similarity index 100% rename from src/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java rename to src/main/java/org/thoughtcrime/securesms/components/viewpager/HackyViewPager.java diff --git a/src/org/thoughtcrime/securesms/connect/AccountManager.java b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java similarity index 87% rename from src/org/thoughtcrime/securesms/connect/AccountManager.java rename to src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java index a149aeacf..7014cc0c3 100644 --- a/src/org/thoughtcrime/securesms/connect/AccountManager.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java @@ -16,6 +16,7 @@ import com.b44t.messenger.DcContext; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.ConversationListActivity; +import org.thoughtcrime.securesms.InstantOnboardingActivity; import org.thoughtcrime.securesms.WelcomeActivity; import org.thoughtcrime.securesms.accounts.AccountSelectionListFragment; import org.thoughtcrime.securesms.crypto.DatabaseSecret; @@ -112,10 +113,14 @@ public class AccountManager { if (lastAccountId == 0 || !accounts.getAccount(lastAccountId).isOk()) { lastAccountId = accounts.getSelectedAccount().getAccountId(); } - switchAccountAndStartActivity(activity, lastAccountId, null); + switchAccountAndStartActivity(activity, lastAccountId); } - public void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String qrAccount) { + public void switchAccountAndStartActivity(Activity activity, int destAccountId) { + switchAccountAndStartActivity(activity, destAccountId, null); + } + + private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr) { if (destAccountId==0) { beginAccountCreation(activity); } else { @@ -125,8 +130,8 @@ public class AccountManager { activity.finishAffinity(); if (destAccountId==0) { Intent intent = new Intent(activity, WelcomeActivity.class); - if (qrAccount!=null) { - intent.putExtra(WelcomeActivity.QR_ACCOUNT_EXTRA, qrAccount); + if (backupQr != null) { + intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr); } activity.startActivity(intent); } else { @@ -164,6 +169,14 @@ public class AccountManager { } public void addAccountFromQr(Activity activity, String qr) { - switchAccountAndStartActivity(activity, 0, qr); + beginAccountCreation(activity); + activity.finishAffinity(); + Intent intent = new Intent(activity, InstantOnboardingActivity.class); + intent.putExtra(InstantOnboardingActivity.QR_ACCOUNT_EXTRA, qr); + activity.startActivity(intent); + } + + public void addAccountFromSecondDevice(Activity activity, String backupQr) { + switchAccountAndStartActivity(activity, 0, backupQr); } } diff --git a/src/org/thoughtcrime/securesms/connect/AttachmentsContentProvider.java b/src/main/java/org/thoughtcrime/securesms/connect/AttachmentsContentProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/connect/AttachmentsContentProvider.java rename to src/main/java/org/thoughtcrime/securesms/connect/AttachmentsContentProvider.java diff --git a/src/org/thoughtcrime/securesms/connect/DcContactsLoader.java b/src/main/java/org/thoughtcrime/securesms/connect/DcContactsLoader.java similarity index 83% rename from src/org/thoughtcrime/securesms/connect/DcContactsLoader.java rename to src/main/java/org/thoughtcrime/securesms/connect/DcContactsLoader.java index 7fdd57f15..2ffddfde5 100644 --- a/src/org/thoughtcrime/securesms/connect/DcContactsLoader.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcContactsLoader.java @@ -16,14 +16,16 @@ public class DcContactsLoader extends AsyncLoader { private final int listflags; private final String query; + private final boolean addScanQRLink; private final boolean addCreateGroupLinks; private final boolean addCreateContactLink; private final boolean blockedContacts; - public DcContactsLoader(Context context, int listflags, String query, boolean addCreateGroupLinks, boolean addCreateContactLink, boolean blockedContacts) { + public DcContactsLoader(Context context, int listflags, String query, boolean addCreateGroupLinks, boolean addCreateContactLink, boolean addScanQRLink, boolean blockedContacts) { super(context); this.listflags = listflags; this.query = (query==null||query.isEmpty())? null : query; + this.addScanQRLink = addScanQRLink; this.addCreateGroupLinks = addCreateGroupLinks; this.addCreateContactLink= addCreateContactLink; this.blockedContacts = blockedContacts; @@ -40,7 +42,14 @@ public class DcContactsLoader extends AsyncLoader { int[] contact_ids = dcContext.getContacts(listflags, query); int[] additional_items = new int[0]; - if (addCreateContactLink) additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_CONTACT); + if (query == null && addScanQRLink) + { + additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_QR_INVITE); + } + if (addCreateContactLink && !dcContext.isChatmail()) + { + additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT); + } if (query == null && addCreateGroupLinks) { additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_GROUP); final boolean broadcastsEnabled = Prefs.isNewBroadcastListAvailable(getContext()); diff --git a/src/org/thoughtcrime/securesms/connect/DcEventCenter.java b/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java similarity index 72% rename from src/org/thoughtcrime/securesms/connect/DcEventCenter.java rename to src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java index 3ca6a6a07..fe20ac10d 100644 --- a/src/org/thoughtcrime/securesms/connect/DcEventCenter.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcEventCenter.java @@ -17,7 +17,8 @@ import java.util.ArrayList; import java.util.Hashtable; public class DcEventCenter { - private @NonNull final Hashtable> allObservers = new Hashtable<>(); + private @NonNull final Hashtable> currentAccountObservers = new Hashtable<>(); + private @NonNull final Hashtable> multiAccountObservers = new Hashtable<>(); private final Object LOCK = new Object(); private final @NonNull ApplicationContext context; @@ -33,10 +34,18 @@ public class DcEventCenter { } public void addObserver(int eventId, @NonNull DcEventDelegate observer) { + addObserver(currentAccountObservers, eventId, observer); + } + + public void addMultiAccountObserver(int eventId, @NonNull DcEventDelegate observer) { + addObserver(multiAccountObservers, eventId, observer); + } + + private void addObserver(Hashtable> observers, int eventId, @NonNull DcEventDelegate observer) { synchronized (LOCK) { - ArrayList idObservers = allObservers.get(eventId); + ArrayList idObservers = observers.get(eventId); if (idObservers == null) { - allObservers.put(eventId, (idObservers = new ArrayList<>())); + observers.put(eventId, (idObservers = new ArrayList<>())); } idObservers.add(observer); } @@ -44,7 +53,11 @@ public class DcEventCenter { public void removeObserver(int eventId, DcEventDelegate observer) { synchronized (LOCK) { - ArrayList idObservers = allObservers.get(eventId); + ArrayList idObservers = currentAccountObservers.get(eventId); + if (idObservers != null) { + idObservers.remove(observer); + } + idObservers = multiAccountObservers.get(eventId); if (idObservers != null) { idObservers.remove(observer); } @@ -53,8 +66,14 @@ public class DcEventCenter { public void removeObservers(DcEventDelegate observer) { synchronized (LOCK) { - for(Integer eventId : allObservers.keySet()) { - ArrayList idObservers = allObservers.get(eventId); + for(Integer eventId : currentAccountObservers.keySet()) { + ArrayList idObservers = currentAccountObservers.get(eventId); + if (idObservers != null) { + idObservers.remove(observer); + } + } + for(Integer eventId : multiAccountObservers.keySet()) { + ArrayList idObservers = multiAccountObservers.get(eventId); if (idObservers != null) { idObservers.remove(observer); } @@ -62,9 +81,17 @@ public class DcEventCenter { } } - public void sendToObservers(@NonNull DcEvent event) { + private void sendToMultiAccountObservers(@NonNull DcEvent event) { + sendToObservers(multiAccountObservers, event); + } + + private void sendToCurrentAccountObservers(@NonNull DcEvent event) { + sendToObservers(currentAccountObservers, event); + } + + private void sendToObservers(Hashtable> observers, @NonNull DcEvent event) { synchronized (LOCK) { - ArrayList idObservers = allObservers.get(event.getId()); + ArrayList idObservers = observers.get(event.getId()); if (idObservers != null) { for (DcEventDelegate observer : idObservers) { // using try/catch blocks as under some circumstances eg. getContext() may return NULL - @@ -139,6 +166,8 @@ public class DcEventCenter { int accountId = event.getAccountId(); int id = event.getId(); + sendToMultiAccountObservers(event); + switch (id) { case DcContext.DC_EVENT_INCOMING_MSG: DcHelper.getNotificationCenter(context).addNotification(accountId, event.getData1Int(), event.getData2Int()); @@ -149,7 +178,7 @@ public class DcEventCenter { break; case DcContext.DC_EVENT_IMEX_PROGRESS: - sendToObservers(event); + sendToCurrentAccountObservers(event); return 0; } @@ -174,18 +203,9 @@ public class DcEventCenter { handleError(id, event.getData2Str()); break; - case DcContext.DC_EVENT_INCOMING_MSG: - sendToObservers(event); + default: + sendToCurrentAccountObservers(event); break; - - case DcContext.DC_EVENT_MSGS_NOTICED: - sendToObservers(event); - break; - - default: { - sendToObservers(event); - } - break; } if (id == DcContext.DC_EVENT_CHAT_MODIFIED) { diff --git a/src/org/thoughtcrime/securesms/connect/DcHelper.java b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java similarity index 95% rename from src/org/thoughtcrime/securesms/connect/DcHelper.java rename to src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java index df6a788bd..e454f81c4 100644 --- a/src/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java @@ -79,6 +79,7 @@ public class DcHelper { public static final String CONFIG_SOCKS5_USER = "socks5_user"; public static final String CONFIG_SOCKS5_PASSWORD = "socks5_password"; 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"; public static DcContext getContext(@NonNull Context context) { return ApplicationContext.getInstance(context).dcContext; @@ -155,7 +156,6 @@ public class DcHelper { dcContext.setStockTranslation(10, context.getString(R.string.video)); dcContext.setStockTranslation(11, context.getString(R.string.audio)); dcContext.setStockTranslation(12, context.getString(R.string.file)); - dcContext.setStockTranslation(13, context.getString(R.string.pref_default_status_text)); dcContext.setStockTranslation(23, context.getString(R.string.gif)); dcContext.setStockTranslation(24, context.getString(R.string.encrypted_message)); dcContext.setStockTranslation(29, context.getString(R.string.systemmsg_cannot_decrypt)); @@ -173,7 +173,7 @@ public class DcHelper { dcContext.setStockTranslation(68, context.getString(R.string.device_talk)); dcContext.setStockTranslation(69, context.getString(R.string.saved_messages)); dcContext.setStockTranslation(70, context.getString(R.string.device_talk_explain)); - dcContext.setStockTranslation(71, context.getString(R.string.device_talk_welcome_message)); + dcContext.setStockTranslation(71, context.getString(R.string.device_talk_welcome_message2)); dcContext.setStockTranslation(72, context.getString(R.string.systemmsg_unknown_sender_for_chat)); dcContext.setStockTranslation(73, context.getString(R.string.systemmsg_subject_for_new_contact)); dcContext.setStockTranslation(74, context.getString(R.string.systemmsg_failed_sending_to)); @@ -257,6 +257,12 @@ public class DcHelper { dcContext.setStockTranslation(172, context.getString(R.string.chat_new_group_hint)); dcContext.setStockTranslation(173, context.getString(R.string.member_x_added)); + dcContext.setStockTranslation(174, context.getString(R.string.invalid_unencrypted_tap_to_learn_more)); + dcContext.setStockTranslation(176, context.getString(R.string.reaction_by_you)); + dcContext.setStockTranslation(177, context.getString(R.string.reaction_by_other)); + dcContext.setStockTranslation(190, context.getString(R.string.secure_join_wait)); + dcContext.setStockTranslation(191, context.getString(R.string.secure_join_wait_timeout)); + dcContext.setStockTranslation(200, context.getString(R.string.contact)); } public static File getImexDir() { @@ -471,6 +477,16 @@ public class DcHelper { .show(); } + public static void showInvalidUnencryptedDialog(Context context) { + new AlertDialog.Builder(context) + .setMessage(context.getString(R.string.invalid_unencrypted_explanation)) + .setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee")) + .setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class))) + .setPositiveButton(R.string.ok, null) + .setCancelable(true) + .show(); + } + public static void openHelp(Context context, String section) { Intent intent = new Intent(context, LocalHelpActivity.class); if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); } diff --git a/src/org/thoughtcrime/securesms/connect/DirectShareUtil.java b/src/main/java/org/thoughtcrime/securesms/connect/DirectShareUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/connect/DirectShareUtil.java rename to src/main/java/org/thoughtcrime/securesms/connect/DirectShareUtil.java diff --git a/src/org/thoughtcrime/securesms/connect/FetchWorker.java b/src/main/java/org/thoughtcrime/securesms/connect/FetchWorker.java similarity index 100% rename from src/org/thoughtcrime/securesms/connect/FetchWorker.java rename to src/main/java/org/thoughtcrime/securesms/connect/FetchWorker.java diff --git a/src/org/thoughtcrime/securesms/connect/ForegroundDetector.java b/src/main/java/org/thoughtcrime/securesms/connect/ForegroundDetector.java similarity index 100% rename from src/org/thoughtcrime/securesms/connect/ForegroundDetector.java rename to src/main/java/org/thoughtcrime/securesms/connect/ForegroundDetector.java diff --git a/src/org/thoughtcrime/securesms/connect/KeepAliveService.java b/src/main/java/org/thoughtcrime/securesms/connect/KeepAliveService.java similarity index 97% rename from src/org/thoughtcrime/securesms/connect/KeepAliveService.java rename to src/main/java/org/thoughtcrime/securesms/connect/KeepAliveService.java index ba816bf82..0d9b6b7cc 100644 --- a/src/org/thoughtcrime/securesms/connect/KeepAliveService.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/KeepAliveService.java @@ -100,9 +100,7 @@ public class KeepAliveService extends Service { builder.setContentTitle(getString(R.string.app_name)); builder.setContentText(getString(R.string.notify_background_connection_enabled)); - if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ) { - builder.setPriority(NotificationCompat.PRIORITY_MIN); - } + builder.setPriority(NotificationCompat.PRIORITY_MIN); builder.setWhen(0); builder.setContentIntent(contentIntent); builder.setSmallIcon(R.drawable.notification_permanent); diff --git a/src/org/thoughtcrime/securesms/connect/NetworkStateReceiver.java b/src/main/java/org/thoughtcrime/securesms/connect/NetworkStateReceiver.java similarity index 100% rename from src/org/thoughtcrime/securesms/connect/NetworkStateReceiver.java rename to src/main/java/org/thoughtcrime/securesms/connect/NetworkStateReceiver.java diff --git a/src/org/thoughtcrime/securesms/contacts/ContactAccessor.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactAccessor.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/ContactAccessor.java rename to src/main/java/org/thoughtcrime/securesms/contacts/ContactAccessor.java diff --git a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java similarity index 98% rename from src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java rename to src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java index cf7a24e4f..dda073439 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListAdapter.java @@ -271,13 +271,15 @@ public class ContactSelectionListAdapter extends RecyclerView.Adapter String addr = null; boolean itemMultiSelect = multiSelect; - if (id == DcContact.DC_CONTACT_ID_NEW_CONTACT) { - name = context.getString(R.string.menu_new_contact); + if (id == DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT) { + name = context.getString(R.string.menu_new_classic_contact); itemMultiSelect = false; // the item creates a new contact in the list that will be selected instead } else if (id == DcContact.DC_CONTACT_ID_NEW_GROUP) { name = context.getString(R.string.menu_new_group); } else if (id == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) { name = context.getString(R.string.new_broadcast_list); + } else if (id == DcContact.DC_CONTACT_ID_QR_INVITE) { + name = context.getString(R.string.menu_new_contact); } else { dcContact = getContact(i); name = dcContact.getDisplayName(); diff --git a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java similarity index 97% rename from src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java rename to src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 6ef23e6c2..18f798449 100644 --- a/src/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -64,7 +64,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM this.name = name; this.number = number; - if (specialId==DcContact.DC_CONTACT_ID_NEW_CONTACT || specialId==DcContact.DC_CONTACT_ID_NEW_GROUP + if (specialId==DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT || specialId==DcContact.DC_CONTACT_ID_NEW_GROUP || specialId==DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST || specialId==DcContact.DC_CONTACT_ID_ADD_MEMBER || specialId==DcContact.DC_CONTACT_ID_QR_INVITE) { this.recipient = null; diff --git a/src/org/thoughtcrime/securesms/contacts/NewContactActivity.java b/src/main/java/org/thoughtcrime/securesms/contacts/NewContactActivity.java similarity index 94% rename from src/org/thoughtcrime/securesms/contacts/NewContactActivity.java rename to src/main/java/org/thoughtcrime/securesms/contacts/NewContactActivity.java index f895b8efb..361425136 100644 --- a/src/org/thoughtcrime/securesms/contacts/NewContactActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/NewContactActivity.java @@ -40,16 +40,13 @@ public class NewContactActivity extends PassphraseRequiredActionBarActivity ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { - actionBar.setTitle(R.string.menu_new_contact); + actionBar.setTitle(R.string.menu_new_classic_contact); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); } nameInput = ViewUtil.findById(this, R.id.name_text); addrInput = ViewUtil.findById(this, R.id.email_text); - Button qrscanBtn = ViewUtil.findById(this, R.id.qrscan_btn); - - qrscanBtn.setOnClickListener((view) -> new IntentIntegrator(this).setCaptureActivity(QrActivity.class).initiateScan()); addrInput.setText(getIntent().getStringExtra(ADDR_EXTRA)); addrInput.setOnFocusChangeListener((view, focused) -> { String addr = addrInput.getText() == null? "" : addrInput.getText().toString(); diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/ContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/ContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/ContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/FallbackContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/FallbackContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java similarity index 72% rename from src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java index d9e50f40f..07888ff3f 100644 --- a/src/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java @@ -24,17 +24,21 @@ public class GeneratedContactPhoto implements FallbackContactPhoto { @Override public Drawable asDrawable(Context context, int color) { + return asDrawable(context, color, true); + } + + public Drawable asDrawable(Context context, int color, boolean roundShape) { int targetSize = context.getResources().getDimensionPixelSize(R.dimen.contact_photo_target_size); - return TextDrawable.builder() - .beginConfig() - .width(targetSize) - .height(targetSize) - .textColor(Color.WHITE) - .bold() - .toUpperCase() - .endConfig() - .buildRound(getCharacter(name), color); + TextDrawable.IShapeBuilder builder = TextDrawable.builder() + .beginConfig() + .width(targetSize) + .height(targetSize) + .textColor(Color.WHITE) + .bold() + .toUpperCase() + .endConfig(); + return roundShape? builder.buildRound(getCharacter(name), color) : builder.buildRect(getCharacter(name), color); } private String getCharacter(String name) { diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/LocalFileContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/MyProfileContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/MyProfileContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/MyProfileContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/MyProfileContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/ProfileContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/ResourceContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/ResourceContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/ResourceContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/ResourceContactPhoto.java diff --git a/src/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java similarity index 100% rename from src/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java rename to src/main/java/org/thoughtcrime/securesms/contacts/avatars/SystemContactPhoto.java diff --git a/src/main/java/org/thoughtcrime/securesms/contacts/avatars/VcardContactPhoto.java b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/VcardContactPhoto.java new file mode 100644 index 000000000..36fac9f10 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/contacts/avatars/VcardContactPhoto.java @@ -0,0 +1,45 @@ +package org.thoughtcrime.securesms.contacts.avatars; + +import android.content.Context; +import android.net.Uri; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.b44t.messenger.rpc.VcardContact; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.security.MessageDigest; + +public class VcardContactPhoto implements ContactPhoto { + private final VcardContact vContact; + + public VcardContactPhoto(VcardContact vContact) { + this.vContact = vContact; + } + + @Override + public InputStream openInputStream(Context context) throws IOException { + byte[] blob = vContact.getProfileImage(); + return (blob == null)? null : new ByteArrayInputStream(blob); + } + + @Override + public @Nullable Uri getUri(@NonNull Context context) { + return null; + } + + @Override + public boolean isProfilePhoto() { + return true; + } + + @Override + public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { + messageDigest.update(vContact.getAddr().getBytes()); + messageDigest.update(ByteBuffer.allocate(4).putFloat(vContact.getTimestamp()).array()); + } +} diff --git a/src/org/thoughtcrime/securesms/crypto/DatabaseSecret.java b/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecret.java similarity index 100% rename from src/org/thoughtcrime/securesms/crypto/DatabaseSecret.java rename to src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecret.java diff --git a/src/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java b/src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java rename to src/main/java/org/thoughtcrime/securesms/crypto/DatabaseSecretProvider.java diff --git a/src/org/thoughtcrime/securesms/crypto/KeyStoreHelper.java b/src/main/java/org/thoughtcrime/securesms/crypto/KeyStoreHelper.java similarity index 100% rename from src/org/thoughtcrime/securesms/crypto/KeyStoreHelper.java rename to src/main/java/org/thoughtcrime/securesms/crypto/KeyStoreHelper.java diff --git a/src/org/thoughtcrime/securesms/crypto/PRNGFixes.java b/src/main/java/org/thoughtcrime/securesms/crypto/PRNGFixes.java similarity index 100% rename from src/org/thoughtcrime/securesms/crypto/PRNGFixes.java rename to src/main/java/org/thoughtcrime/securesms/crypto/PRNGFixes.java diff --git a/src/org/thoughtcrime/securesms/database/Address.java b/src/main/java/org/thoughtcrime/securesms/database/Address.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/Address.java rename to src/main/java/org/thoughtcrime/securesms/database/Address.java diff --git a/src/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/AttachmentDatabase.java rename to src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java diff --git a/src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java b/src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java rename to src/main/java/org/thoughtcrime/securesms/database/CursorRecyclerViewAdapter.java diff --git a/src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java b/src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java rename to src/main/java/org/thoughtcrime/securesms/database/loaders/BucketedThreadMediaLoader.java diff --git a/src/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java b/src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java rename to src/main/java/org/thoughtcrime/securesms/database/loaders/PagingMediaLoader.java diff --git a/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java b/src/main/java/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java similarity index 98% rename from src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java rename to src/main/java/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java index b9dd34c74..ebbdad799 100644 --- a/src/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java +++ b/src/main/java/org/thoughtcrime/securesms/database/loaders/RecentPhotosLoader.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.database.loaders; -import android.Manifest; import android.content.Context; import android.database.Cursor; import android.net.Uri; diff --git a/src/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java similarity index 100% rename from src/org/thoughtcrime/securesms/database/model/ThreadRecord.java rename to src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java diff --git a/src/main/java/org/thoughtcrime/securesms/geolocation/DcLocation.java b/src/main/java/org/thoughtcrime/securesms/geolocation/DcLocation.java new file mode 100644 index 000000000..50915a69b --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/geolocation/DcLocation.java @@ -0,0 +1,131 @@ +package org.thoughtcrime.securesms.geolocation; + +import android.location.Location; +import android.util.Log; + +import java.util.Observable; + +public class DcLocation extends Observable { + private static final String TAG = DcLocation.class.getSimpleName(); + private Location lastLocation; + private static DcLocation instance; + private static final int TIMEOUT = 1000 * 15; + private static final int EARTH_RADIUS = 6371; + + private DcLocation() { + lastLocation = getDefault(); + } + + public static DcLocation getInstance() { + if (instance == null) { + instance = new DcLocation(); + } + return instance; + } + + public Location getLastLocation() { + return lastLocation; + } + + + public boolean isValid() { + return !lastLocation.getProvider().equals("?"); + } + + void updateLocation(Location location) { + if (isBetterLocation(location, lastLocation)) { + lastLocation = location; + + instance.setChanged(); + instance.notifyObservers(); + } + } + + void reset() { + updateLocation(getDefault()); + + } + + private Location getDefault() { + Location location = new Location("?"); + return location; + } + + /** https://developer.android.com/guide/topics/location/strategies + * Determines whether one Location reading is better than the current Location fix + * @param location The new Location that you want to evaluate + * @param currentBestLocation The current Location fix, to which you want to compare the new one + */ + private boolean isBetterLocation(Location location, Location currentBestLocation) { + if (currentBestLocation == null) { + // A new location is always better than no location + return true; + } + + // Check whether the new location fix is newer or older + long timeDelta = location.getTime() - currentBestLocation.getTime(); + boolean isSignificantlyOlder = timeDelta < -TIMEOUT; + + if (isSignificantlyOlder) { + return false; + } + + // Check whether the new location fix is more or less accurate + int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); + Log.d(TAG, "accuracyDelta: " + accuracyDelta); + boolean isSignificantlyMoreAccurate = accuracyDelta > 50; + boolean isSameProvider = isSameProvider(location.getProvider(), currentBestLocation.getProvider()); + + if (isSignificantlyMoreAccurate && isSameProvider) { + return true; + } + + boolean isMoreAccurate = accuracyDelta > 0; + double distance = distance(location, currentBestLocation); + return hasLocationChanged(distance) && isMoreAccurate || + hasLocationSignificantlyChanged(distance); + + } + + private boolean hasLocationSignificantlyChanged(double distance) { + return distance > 30D; + } + + private boolean hasLocationChanged(double distance) { + return distance > 10D; + } + + private double distance(Location location, Location currentBestLocation) { + + double startLat = location.getLatitude(); + double startLong = location.getLongitude(); + double endLat = currentBestLocation.getLatitude(); + double endLong = currentBestLocation.getLongitude(); + + double dLat = Math.toRadians(endLat - startLat); + double dLong = Math.toRadians(endLong - startLong); + + startLat = Math.toRadians(startLat); + endLat = Math.toRadians(endLat); + + double a = haversin(dLat) + Math.cos(startLat) * Math.cos(endLat) * haversin(dLong); + double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + + double distance = EARTH_RADIUS * c * 1000; + Log.d(TAG, "Distance between location updates: " + distance); + return distance; + } + + private double haversin(double val) { + return Math.pow(Math.sin(val / 2), 2); + } + + /** Checks whether two providers are the same */ + private boolean isSameProvider(String provider1, String provider2) { + if (provider1 == null) { + return provider2 == null; + } + return provider1.equals(provider2); + } + +} diff --git a/src/org/thoughtcrime/securesms/geolocation/DcLocationManager.java b/src/main/java/org/thoughtcrime/securesms/geolocation/DcLocationManager.java similarity index 96% rename from src/org/thoughtcrime/securesms/geolocation/DcLocationManager.java rename to src/main/java/org/thoughtcrime/securesms/geolocation/DcLocationManager.java index 675faf6ff..2baec0d99 100644 --- a/src/org/thoughtcrime/securesms/geolocation/DcLocationManager.java +++ b/src/main/java/org/thoughtcrime/securesms/geolocation/DcLocationManager.java @@ -16,10 +16,6 @@ import java.util.Observer; import static android.content.Context.BIND_AUTO_CREATE; -/** - * Created by cyberta on 06.03.19. - */ - public class DcLocationManager implements Observer { private static final String TAG = DcLocationManager.class.getSimpleName(); @@ -79,6 +75,9 @@ public class DcLocationManager implements Observer { startLocationEngine(); Log.d(TAG, String.format("Share location in chat %d for %d seconds", chatId, duration)); DcHelper.getContext(context).sendLocationsToChat(chatId, duration); + if (dcLocation.isValid()) { + writeDcLocationUpdateMessage(); + } } public void shareLastLocation(int chatId) { @@ -94,11 +93,6 @@ public class DcLocationManager implements Observer { } } - public void deleteAllLocations() { - DcHelper.getContext(context).deleteAllLocations(); - } - - @Override public void update(Observable o, Object arg) { if (o instanceof DcLocation) { diff --git a/src/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java b/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java similarity index 54% rename from src/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java rename to src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java index 09446dec9..05ae2409e 100644 --- a/src/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java +++ b/src/main/java/org/thoughtcrime/securesms/geolocation/LocationBackgroundService.java @@ -12,13 +12,8 @@ import android.os.Bundle; import android.os.IBinder; import android.util.Log; -/** - * Created by cyberta on 06.03.19. - */ - public class LocationBackgroundService extends Service { - private static final int TIMEOUT = 1000 * 15; private static final int INITIAL_TIMEOUT = 1000 * 60 * 2; private static final String TAG = LocationBackgroundService.class.getSimpleName(); private LocationManager locationManager = null; @@ -47,6 +42,13 @@ public class LocationBackgroundService extends Service { } locationListener = new ServiceLocationListener(); + Location lastLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); + if (lastLocation != null) { + long locationAge = System.currentTimeMillis() - lastLocation.getTime(); + if (locationAge <= 600 * 1000) { // not older than 10 minutes + DcLocation.getInstance().updateLocation(lastLocation); + } + } //requestLocationUpdate(LocationManager.NETWORK_PROVIDER); requestLocationUpdate(LocationManager.GPS_PROVIDER); initialLocationUpdate(); @@ -107,7 +109,6 @@ public class LocationBackgroundService extends Service { } private class ServiceLocationListener implements LocationListener { - private static final int EARTH_RADIUS = 6371; @Override public void onLocationChanged(Location location) { @@ -115,9 +116,7 @@ public class LocationBackgroundService extends Service { if (location == null) { return; } - if (isBetterLocation(location, DcLocation.getInstance().getLastLocation())) { - DcLocation.getInstance().updateLocation(location); - } + DcLocation.getInstance().updateLocation(location); } @Override @@ -134,84 +133,6 @@ public class LocationBackgroundService extends Service { public void onStatusChanged(String provider, int status, Bundle extras) { Log.e(TAG, "onStatusChanged: " + provider + " status: " + status); } - - - /** https://developer.android.com/guide/topics/location/strategies - * Determines whether one Location reading is better than the current Location fix - * @param location The new Location that you want to evaluate - * @param currentBestLocation The current Location fix, to which you want to compare the new one - */ - private boolean isBetterLocation(Location location, Location currentBestLocation) { - if (currentBestLocation == null) { - // A new location is always better than no location - return true; - } - - // Check whether the new location fix is newer or older - long timeDelta = location.getTime() - currentBestLocation.getTime(); - boolean isSignificantlyOlder = timeDelta < -TIMEOUT; - - if (isSignificantlyOlder) { - return false; - } - - // Check whether the new location fix is more or less accurate - int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy()); - Log.d(TAG, "accuracyDelta: " + accuracyDelta); - boolean isSignificantlyMoreAccurate = accuracyDelta > 50; - boolean isSameProvider = isSameProvider(location.getProvider(), currentBestLocation.getProvider()); - - if (isSignificantlyMoreAccurate && isSameProvider) { - return true; - } - - boolean isMoreAccurate = accuracyDelta > 0; - double distance = distance(location, currentBestLocation); - return hasLocationChanged(distance) && isMoreAccurate || - hasLocationSignificantlyChanged(distance); - - } - - private boolean hasLocationSignificantlyChanged(double distance) { - return distance > 30D; - } - - private boolean hasLocationChanged(double distance) { - return distance > 10D; - } - - private double distance(Location location, Location currentBestLocation) { - - double startLat = location.getLatitude(); - double startLong = location.getLongitude(); - double endLat = currentBestLocation.getLatitude(); - double endLong = currentBestLocation.getLongitude(); - - double dLat = Math.toRadians(endLat - startLat); - double dLong = Math.toRadians(endLong - startLong); - - startLat = Math.toRadians(startLat); - endLat = Math.toRadians(endLat); - - double a = haversin(dLat) + Math.cos(startLat) * Math.cos(endLat) * haversin(dLong); - double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); - - double distance = EARTH_RADIUS * c * 1000; - Log.d(TAG, "Distance between location updates: " + distance); - return distance; - } - - private double haversin(double val) { - return Math.pow(Math.sin(val / 2), 2); - } - - /** Checks whether two providers are the same */ - private boolean isSameProvider(String provider1, String provider2) { - if (provider1 == null) { - return provider2 == null; - } - return provider1.equals(provider2); - } } } diff --git a/src/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java similarity index 100% rename from src/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java rename to src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoFetcher.java diff --git a/src/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java b/src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java rename to src/main/java/org/thoughtcrime/securesms/glide/ContactPhotoLoader.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/Bounds.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/Bounds.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/Bounds.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/Bounds.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/CanvasMatrix.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/CanvasMatrix.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/CanvasMatrix.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/CanvasMatrix.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ColorableRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ColorableRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ColorableRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ColorableRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/DrawingSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/DrawingSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/DrawingSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/DrawingSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/EditSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/EditSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/EditSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/EditSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ElementDragEditSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ElementDragEditSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ElementDragEditSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ElementDragEditSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ElementEditSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ElementEditSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ElementEditSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ElementEditSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ElementScaleEditSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ElementScaleEditSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ElementScaleEditSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ElementScaleEditSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/HiddenEditText.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/HiddenEditText.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/HiddenEditText.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/HiddenEditText.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ImageEditorMediaConstraints.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ImageEditorMediaConstraints.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ImageEditorMediaConstraints.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ImageEditorMediaConstraints.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ImageEditorView.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ImageEditorView.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ImageEditorView.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ImageEditorView.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/Renderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/Renderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/Renderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/Renderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/RendererContext.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/RendererContext.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/RendererContext.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/RendererContext.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/ThumbDragEditSession.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/ThumbDragEditSession.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/ThumbDragEditSession.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/ThumbDragEditSession.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/UndoRedoStackListener.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/UndoRedoStackListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/UndoRedoStackListener.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/UndoRedoStackListener.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/AlphaAnimation.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/AlphaAnimation.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/AlphaAnimation.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/AlphaAnimation.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/AnimationMatrix.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/AnimationMatrix.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/AnimationMatrix.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/AnimationMatrix.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/Bisect.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/Bisect.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/Bisect.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/Bisect.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/CropThumbRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/CropThumbRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/CropThumbRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/CropThumbRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/EditorElement.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorElement.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/EditorElement.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorElement.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/EditorElementHierarchy.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorElementHierarchy.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/EditorElementHierarchy.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorElementHierarchy.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/EditorFlags.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorFlags.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/EditorFlags.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorFlags.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/EditorModel.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorModel.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/EditorModel.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/EditorModel.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/ElementStack.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/ElementStack.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/ElementStack.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/ElementStack.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/InBoundsMemory.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/InBoundsMemory.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/InBoundsMemory.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/InBoundsMemory.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/ParcelUtils.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/ParcelUtils.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/ParcelUtils.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/ParcelUtils.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/ThumbRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/ThumbRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/ThumbRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/ThumbRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/model/UndoRedoStacks.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/model/UndoRedoStacks.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/model/UndoRedoStacks.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/model/UndoRedoStacks.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/AutomaticControlPointBezierLine.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/AutomaticControlPointBezierLine.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/AutomaticControlPointBezierLine.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/AutomaticControlPointBezierLine.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/BezierDrawingRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/BezierDrawingRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/BezierDrawingRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/BezierDrawingRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/CropAreaRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/CropAreaRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/CropAreaRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/CropAreaRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/InvalidateableRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/InvalidateableRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/InvalidateableRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/InvalidateableRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/InverseFillRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/InverseFillRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/InverseFillRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/InverseFillRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/MultiLineTextRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/MultiLineTextRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/MultiLineTextRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/MultiLineTextRenderer.java diff --git a/src/org/thoughtcrime/securesms/imageeditor/renderers/OvalGuideRenderer.java b/src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/OvalGuideRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/imageeditor/renderers/OvalGuideRenderer.java rename to src/main/java/org/thoughtcrime/securesms/imageeditor/renderers/OvalGuideRenderer.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/Job.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/Job.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobConsumer.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/JobConsumer.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/JobConsumer.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/JobConsumer.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobManager.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/JobManager.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobParameters.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/JobParameters.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/JobParameters.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/JobParameters.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/JobQueue.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/JobQueue.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/JobQueue.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/JobQueue.java diff --git a/src/org/thoughtcrime/securesms/jobmanager/requirements/Requirement.java b/src/main/java/org/thoughtcrime/securesms/jobmanager/requirements/Requirement.java similarity index 100% rename from src/org/thoughtcrime/securesms/jobmanager/requirements/Requirement.java rename to src/main/java/org/thoughtcrime/securesms/jobmanager/requirements/Requirement.java diff --git a/src/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.java b/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.java similarity index 100% rename from src/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.java rename to src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestsBottomView.java diff --git a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java similarity index 96% rename from src/org/thoughtcrime/securesms/mms/AttachmentManager.java rename to src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 135d67823..eedc1dcff 100644 --- a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -41,12 +41,12 @@ import androidx.appcompat.app.AlertDialog; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; +import com.b44t.messenger.rpc.RpcException; import com.b44t.messenger.util.concurrent.ListenableFuture; import com.b44t.messenger.util.concurrent.ListenableFuture.Listener; import com.b44t.messenger.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.ApplicationContext; -import org.thoughtcrime.securesms.ConversationActivity; import org.thoughtcrime.securesms.MediaPreviewActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.ShareLocationDialog; @@ -58,6 +58,7 @@ import org.thoughtcrime.securesms.components.AudioView; import org.thoughtcrime.securesms.components.DocumentView; import org.thoughtcrime.securesms.components.RemovableEditableMediaView; import org.thoughtcrime.securesms.components.ThumbnailView; +import org.thoughtcrime.securesms.components.VcardView; import org.thoughtcrime.securesms.components.WebxdcView; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.database.AttachmentDatabase; @@ -93,6 +94,7 @@ public class AttachmentManager { private AudioView audioView; private DocumentView documentView; private WebxdcView webxdcView; + private VcardView vcardView; //private SignalMapView mapView; private final @NonNull List garbage = new LinkedList<>(); @@ -116,6 +118,7 @@ public class AttachmentManager { this.audioView = ViewUtil.findById(root, R.id.attachment_audio); this.documentView = ViewUtil.findById(root, R.id.attachment_document); this.webxdcView = ViewUtil.findById(root, R.id.attachment_webxdc); + this.vcardView = ViewUtil.findById(root, R.id.attachment_vcard); //this.mapView = ViewUtil.findById(root, R.id.attachment_location); this.removableMediaView = ViewUtil.findById(root, R.id.removable_media_view); @@ -126,6 +129,7 @@ public class AttachmentManager { audioView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY); documentView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY); webxdcView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY); + vcardView.getBackground().setColorFilter(incomingBubbleColor, PorterDuff.Mode.MULTIPLY); } } @@ -308,6 +312,9 @@ public class AttachmentManager { audioView.setAudio((AudioSlide) slide, 0); removableMediaView.display(audioView, false); result.set(true); + } else if (slide.isVcard()) { + vcardView.setVcard(glideRequests, (VcardSlide)slide, DcHelper.getRpc(context)); + removableMediaView.display(vcardView, false); } else if (slide.hasDocument()) { if (slide.isWebxdcDocument()) { DcMsg instance = msg != null ? msg : DcHelper.getContext(context).getMsg(slide.dcMsgId); @@ -685,13 +692,25 @@ public class AttachmentManager { DcContext dcContext = DcHelper.getContext(context); DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_WEBXDC); Attachment attachment = new UriAttachment(uri, null, MediaUtil.WEBXDC, AttachmentDatabase.TRANSFER_PROGRESS_STARTED, 0, 0, 0, fileName, null, false); - String path = ConversationActivity.getRealPathFromAttachment(context, attachment); + String path = attachment.getRealPath(context); msg.setFile(path, MediaUtil.WEBXDC); dcContext.setDraft(chatId, msg); return new DocumentSlide(context, msg); - } else { - return new DocumentSlide(context, uri, mimeType, dataSize, fileName); } + + if (mimeType.equals(MediaUtil.VCARD) || (fileName != null && (fileName.endsWith(".vcf") || fileName.endsWith(".vcard")))) { + VcardSlide slide = new VcardSlide(context, uri, dataSize, fileName); + String path = slide.asAttachment().getRealPath(context); + try { + if (DcHelper.getRpc(context).parseVcard(path).size() == 1) { + return slide; + } + } catch (RpcException e) { + e.printStackTrace(); + } + } + + return new DocumentSlide(context, uri, mimeType, dataSize, fileName); default: throw new AssertionError("unrecognized enum"); } } diff --git a/src/org/thoughtcrime/securesms/mms/AudioSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/AudioSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/AudioSlide.java diff --git a/src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java b/src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java rename to src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamLocalUriFetcher.java diff --git a/src/org/thoughtcrime/securesms/mms/DecryptableStreamUriLoader.java b/src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamUriLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/DecryptableStreamUriLoader.java rename to src/main/java/org/thoughtcrime/securesms/mms/DecryptableStreamUriLoader.java diff --git a/src/org/thoughtcrime/securesms/mms/DocumentSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/DocumentSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/DocumentSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/DocumentSlide.java diff --git a/src/org/thoughtcrime/securesms/mms/GifSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/GifSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/GifSlide.java diff --git a/src/org/thoughtcrime/securesms/mms/ImageSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/ImageSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/ImageSlide.java diff --git a/src/org/thoughtcrime/securesms/mms/MediaConstraints.java b/src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/MediaConstraints.java rename to src/main/java/org/thoughtcrime/securesms/mms/MediaConstraints.java diff --git a/src/org/thoughtcrime/securesms/mms/PartAuthority.java b/src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/PartAuthority.java rename to src/main/java/org/thoughtcrime/securesms/mms/PartAuthority.java diff --git a/src/org/thoughtcrime/securesms/mms/QuoteModel.java b/src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/QuoteModel.java rename to src/main/java/org/thoughtcrime/securesms/mms/QuoteModel.java diff --git a/src/org/thoughtcrime/securesms/mms/SignalGlideModule.java b/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java similarity index 91% rename from src/org/thoughtcrime/securesms/mms/SignalGlideModule.java rename to src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java index f7316573e..d63f740f8 100644 --- a/src/org/thoughtcrime/securesms/mms/SignalGlideModule.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/SignalGlideModule.java @@ -11,6 +11,8 @@ import com.bumptech.glide.Registry; import com.bumptech.glide.annotation.GlideModule; import com.bumptech.glide.load.model.UnitModelLoader; import com.bumptech.glide.module.AppGlideModule; +import com.bumptech.glide.request.RequestOptions; +import com.github.penfeizhou.animation.glide.AnimationDecoderOption; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; import org.thoughtcrime.securesms.glide.ContactPhotoLoader; @@ -30,6 +32,7 @@ public class SignalGlideModule extends AppGlideModule { @Override public void applyOptions(Context context, GlideBuilder builder) { builder.setLogLevel(Log.ERROR); + builder.setDefaultRequestOptions(new RequestOptions().set(AnimationDecoderOption.DISABLE_ANIMATION_APNG_DECODER, true)); // builder.setDiskCache(new NoopDiskCacheFactory()); } diff --git a/src/org/thoughtcrime/securesms/mms/Slide.java b/src/main/java/org/thoughtcrime/securesms/mms/Slide.java similarity index 99% rename from src/org/thoughtcrime/securesms/mms/Slide.java rename to src/main/java/org/thoughtcrime/securesms/mms/Slide.java index 89d40e9ef..56fd0d842 100644 --- a/src/org/thoughtcrime/securesms/mms/Slide.java +++ b/src/main/java/org/thoughtcrime/securesms/mms/Slide.java @@ -98,6 +98,10 @@ public abstract class Slide { return false; } + public boolean isVcard() { + return false; + } + public boolean hasLocation() { return false; } diff --git a/src/org/thoughtcrime/securesms/mms/SlideClickListener.java b/src/main/java/org/thoughtcrime/securesms/mms/SlideClickListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/SlideClickListener.java rename to src/main/java/org/thoughtcrime/securesms/mms/SlideClickListener.java diff --git a/src/org/thoughtcrime/securesms/mms/SlideDeck.java b/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/SlideDeck.java rename to src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java diff --git a/src/org/thoughtcrime/securesms/mms/StickerSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/StickerSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/StickerSlide.java diff --git a/src/main/java/org/thoughtcrime/securesms/mms/VcardSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/VcardSlide.java new file mode 100644 index 000000000..01f1d7625 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/mms/VcardSlide.java @@ -0,0 +1,26 @@ +package org.thoughtcrime.securesms.mms; + + +import android.content.Context; +import android.net.Uri; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.b44t.messenger.DcMsg; + +public class VcardSlide extends DocumentSlide { + + public VcardSlide(Context context, DcMsg dcMsg) { + super(context, dcMsg); + } + + public VcardSlide(@NonNull Context context, @NonNull Uri uri, long size, @Nullable String fileName) { + super(context, uri, "text/vcard", size, fileName); + } + + @Override + public boolean isVcard() { + return true; + } +} diff --git a/src/org/thoughtcrime/securesms/mms/VideoSlide.java b/src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java similarity index 100% rename from src/org/thoughtcrime/securesms/mms/VideoSlide.java rename to src/main/java/org/thoughtcrime/securesms/mms/VideoSlide.java diff --git a/src/org/thoughtcrime/securesms/notifications/InChatSounds.java b/src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java similarity index 100% rename from src/org/thoughtcrime/securesms/notifications/InChatSounds.java rename to src/main/java/org/thoughtcrime/securesms/notifications/InChatSounds.java diff --git a/src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java similarity index 100% rename from src/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java rename to src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java diff --git a/src/org/thoughtcrime/securesms/notifications/NotificationCenter.java b/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java similarity index 100% rename from src/org/thoughtcrime/securesms/notifications/NotificationCenter.java rename to src/main/java/org/thoughtcrime/securesms/notifications/NotificationCenter.java diff --git a/src/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java similarity index 100% rename from src/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java rename to src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java diff --git a/src/org/thoughtcrime/securesms/permissions/Permissions.java b/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java similarity index 100% rename from src/org/thoughtcrime/securesms/permissions/Permissions.java rename to src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java diff --git a/src/org/thoughtcrime/securesms/permissions/PermissionsRequest.java b/src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java similarity index 100% rename from src/org/thoughtcrime/securesms/permissions/PermissionsRequest.java rename to src/main/java/org/thoughtcrime/securesms/permissions/PermissionsRequest.java diff --git a/src/org/thoughtcrime/securesms/permissions/RationaleDialog.java b/src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java similarity index 100% rename from src/org/thoughtcrime/securesms/permissions/RationaleDialog.java rename to src/main/java/org/thoughtcrime/securesms/permissions/RationaleDialog.java diff --git a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java similarity index 80% rename from src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java index d94b0713a..ed633a70a 100644 --- a/src/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java @@ -7,6 +7,9 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_E2EE_ENABLED; import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_MVBOX_MOVE; import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_ONLY_FETCH_MVBOX; import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SENTBOX_WATCH; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SHOW_EMAILS; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_WEBXDC_REALTIME_ENABLED; +import static org.thoughtcrime.securesms.connect.DcHelper.getRpc; import android.Manifest; import android.content.Context; @@ -25,13 +28,17 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; import androidx.preference.CheckBoxPreference; +import androidx.preference.ListPreference; import androidx.preference.Preference; import com.b44t.messenger.DcContext; +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.R; +import org.thoughtcrime.securesms.RegistrationActivity; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.mms.AttachmentManager; @@ -40,6 +47,7 @@ import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.ScreenLockUtil; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StreamUtil; +import org.thoughtcrime.securesms.util.Util; import java.io.File; import java.io.FileOutputStream; @@ -54,16 +62,26 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment private static final String TAG = AdvancedPreferenceFragment.class.getSimpleName(); public static final int PICK_SELF_KEYS = 29923; + private ListPreference showEmails; CheckBoxPreference preferE2eeCheckbox; CheckBoxPreference sentboxWatchCheckbox; CheckBoxPreference bccSelfCheckbox; CheckBoxPreference mvboxMoveCheckbox; CheckBoxPreference onlyFetchMvboxCheckbox; + CheckBoxPreference webxdcRealtimeCheckbox; + CheckBoxPreference showSystemContacts; @Override public void onCreate(Bundle paramBundle) { super.onCreate(paramBundle); + showEmails = (ListPreference) this.findPreference("pref_show_emails"); + showEmails.setOnPreferenceChangeListener((preference, newValue) -> { + updateListSummary(preference, newValue); + dcContext.setConfigInt(CONFIG_SHOW_EMAILS, Util.objectToInt(newValue)); + return true; + }); + Preference sendAsm = this.findPreference("pref_send_autocrypt_setup_message"); sendAsm.setOnPreferenceClickListener(new SendAsmListener()); @@ -73,9 +91,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment sentboxWatchCheckbox = (CheckBoxPreference) this.findPreference("pref_sentbox_watch"); sentboxWatchCheckbox.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; - DcHelper.getAccounts(getContext()).stopIo(); dcContext.setConfigInt(CONFIG_SENTBOX_WATCH, enabled? 1 : 0); - DcHelper.getAccounts(getContext()).startIo(); return true; }); @@ -89,9 +105,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment mvboxMoveCheckbox = (CheckBoxPreference) this.findPreference("pref_mvbox_move"); mvboxMoveCheckbox.setOnPreferenceChangeListener((preference, newValue) -> { boolean enabled = (Boolean) newValue; - DcHelper.getAccounts(getContext()).stopIo(); dcContext.setConfigInt(CONFIG_MVBOX_MOVE, enabled? 1 : 0); - DcHelper.getAccounts(getContext()).startIo(); return true; }); @@ -102,22 +116,32 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment new AlertDialog.Builder(getContext()) .setMessage(R.string.pref_imap_folder_warn_disable_defaults) .setPositiveButton(R.string.ok, (dialogInterface, i) -> { - DcHelper.getAccounts(getContext()).stopIo(); dcContext.setConfigInt(CONFIG_ONLY_FETCH_MVBOX, 1); ((CheckBoxPreference)preference).setChecked(true); - DcHelper.getAccounts(getContext()).startIo(); }) .setNegativeButton(R.string.cancel, null) .show(); return false; } else { - DcHelper.getAccounts(getContext()).stopIo(); dcContext.setConfigInt(CONFIG_ONLY_FETCH_MVBOX, 0); - DcHelper.getAccounts(getContext()).startIo(); return true; } })); + webxdcRealtimeCheckbox = (CheckBoxPreference) this.findPreference("pref_webxdc_realtime_enabled"); + webxdcRealtimeCheckbox.setOnPreferenceChangeListener((preference, newValue) -> { + boolean enabled = (Boolean) newValue; + dcContext.setConfigInt(CONFIG_WEBXDC_REALTIME_ENABLED, enabled? 1 : 0); + return true; + }); + + showSystemContacts = (CheckBoxPreference) this.findPreference("pref_show_system_contacts"); + showSystemContacts.setOnPreferenceChangeListener((preference, newValue) -> { + boolean enabled = (Boolean) newValue; + dcContext.setConfigInt("ui.android.show_system_contacts", enabled? 1 : 0); + return true; + }); + Preference manageKeys = this.findPreference("pref_manage_keys"); manageKeys.setOnPreferenceClickListener(new ManageKeysListener()); @@ -146,15 +170,13 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment return true; }); - Preference sendReactions = this.findPreference("pref_send_reactions"); - sendReactions.setOnPreferenceChangeListener((preference, newValue) -> { + Preference locationStreamingEnabled = this.findPreference("pref_location_streaming_enabled"); + locationStreamingEnabled.setOnPreferenceChangeListener((preference, newValue) -> { if ((Boolean)newValue) { new AlertDialog.Builder(getActivity()) - .setTitle("Thanks for trying out \"Reactions\"!") - .setMessage("• By long tapping a message, you can now add a reaction\n\n" - + "• Do not rely on reactions being seen by all recipients currently: On some platforms they're still in development, also rolling out updates take time\n\n" - + "• If you want to quit the experimental feature, disable it again at \"Settings / Advanced\";" - + " received or already sent reactions are displayed independently of this switch") + .setTitle("Thanks for trying out \"Location Streaming\"!") + .setMessage("• You will find a corresponding option in the attach menu (the paper clip) of each chat now\n\n" + + "• If you want to quit the experimental feature, you can disable it at \"Settings / Advanced\"") .setCancelable(false) .setPositiveButton(R.string.ok, null) .show(); @@ -169,6 +191,40 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment } return true; }); + + Preference selfReporting = this.findPreference("pref_self_reporting"); + selfReporting.setOnPreferenceClickListener(((preference) -> { + try { + int chatId = getRpc(getActivity()).draftSelfReport(dcContext.getAccountId()); + + Intent intent = new Intent(getActivity(), ConversationActivity.class); + intent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + getActivity().startActivity(intent); + } catch (RpcException e) { + e.printStackTrace(); + } + + 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); + if (!result) { + openRegistrationActivity(); + } + return true; + })); + + if (dcContext.isChatmail()) { + preferE2eeCheckbox.setVisible(false); + showSystemContacts.setVisible(false); + sentboxWatchCheckbox.setVisible(false); + bccSelfCheckbox.setVisible(false); + mvboxMoveCheckbox.setVisible(false); + onlyFetchMvboxCheckbox.setVisible(false); + } } @Override @@ -181,11 +237,17 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment super.onResume(); ((ApplicationPreferencesActivity) getActivity()).getSupportActionBar().setTitle(R.string.menu_advanced); + String value = Integer.toString(dcContext.getConfigInt("show_emails")); + showEmails.setValue(value); + updateListSummary(showEmails, value); + preferE2eeCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_E2EE_ENABLED)); sentboxWatchCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_SENTBOX_WATCH)); bccSelfCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_BCC_SELF)); mvboxMoveCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_MVBOX_MOVE)); onlyFetchMvboxCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_ONLY_FETCH_MVBOX)); + webxdcRealtimeCheckbox.setChecked(0!=dcContext.getConfigInt(CONFIG_WEBXDC_REALTIME_ENABLED)); + showSystemContacts.setChecked(0!=dcContext.getConfigInt("ui.android.show_system_contacts")); } @Override @@ -208,6 +270,8 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment } catch (IOException e) { e.printStackTrace(); } + } else if (requestCode == REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT) { + openRegistrationActivity(); } } @@ -285,6 +349,11 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment } } + private void openRegistrationActivity() { + Intent intent = new Intent(getActivity(), RegistrationActivity.class); + startActivity(intent); + } + /*********************************************************************************************** * Autocrypt **********************************************************************************************/ @@ -384,6 +453,7 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment } } ) + .setNegativeButton(R.string.cancel, null) .show(); }) .execute(); diff --git a/src/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/AppearancePreferenceFragment.java diff --git a/src/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java b/src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java rename to src/main/java/org/thoughtcrime/securesms/preferences/ChatBackgroundActivity.java diff --git a/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java similarity index 85% rename from src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java index cf215f34d..322834c90 100644 --- a/src/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/ChatsPreferenceFragment.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.preferences; import static android.app.Activity.RESULT_OK; -import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SHOW_EMAILS; import android.Manifest; import android.content.Context; @@ -29,7 +28,6 @@ import org.thoughtcrime.securesms.util.ScreenLockUtil; import org.thoughtcrime.securesms.util.Util; public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { - private ListPreference showEmails; private ListPreference mediaQuality; private ListPreference autoDownload; private CheckBoxPreference readReceiptsCheckbox; @@ -57,13 +55,6 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { }); nicerAutoDownloadNames(); - showEmails = (ListPreference) this.findPreference("pref_show_emails"); - showEmails.setOnPreferenceChangeListener((preference, newValue) -> { - updateListSummary(preference, newValue); - dcContext.setConfigInt(CONFIG_SHOW_EMAILS, Util.objectToInt(newValue)); - return true; - }); - readReceiptsCheckbox = (CheckBoxPreference) this.findPreference("pref_read_receipts"); readReceiptsCheckbox.setOnPreferenceChangeListener(new ReadReceiptToggleListener()); @@ -77,6 +68,13 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { autoDelServer = findPreference("autodel_server"); autoDelServer.setOnPreferenceChangeListener(new AutodelChangeListener("delete_server_after")); + if (dcContext.isChatmail()) { + autoDelServer.setEntries(new CharSequence[]{getString(R.string.automatic), getString(R.string.autodel_at_once)}); + autoDelServer.setEntryValues(new CharSequence[]{"0", "1"}); + if (dcContext.getConfigInt("delete_server_after") > 1) { + dcContext.setConfigInt("delete_server_after", 0 /*never/automatic*/); + } + } } @Override @@ -89,11 +87,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { super.onResume(); ((ApplicationPreferencesActivity)getActivity()).getSupportActionBar().setTitle(R.string.pref_chats_and_media); - String value = Integer.toString(dcContext.getConfigInt("show_emails")); - showEmails.setValue(value); - updateListSummary(showEmails, value); - - value = Integer.toString(dcContext.getConfigInt(DcHelper.CONFIG_MEDIA_QUALITY)); + String value = Integer.toString(dcContext.getConfigInt(DcHelper.CONFIG_MEDIA_QUALITY)); mediaQuality.setValue(value); updateListSummary(mediaQuality, value); @@ -110,7 +104,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { private void initAutodelFromCore() { String value = Integer.toString(dcContext.getConfigInt("delete_server_after")); autoDelServer.setValue(value); - updateListSummary(autoDelServer, value, value.equals("0")? null : getString(R.string.autodel_server_enabled_hint)); + updateListSummary(autoDelServer, value, (value.equals("0") || dcContext.isChatmail())? null : getString(R.string.autodel_server_enabled_hint)); value = Integer.toString(dcContext.getConfigInt("delete_device_after")); autoDelDevice.setValue(value); @@ -162,21 +156,7 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { final String onRes = context.getString(R.string.on); final String offRes = context.getString(R.string.off); String readReceiptState = dcContext.getConfigInt("mdns_enabled")!=0? onRes : offRes; - boolean deleteOld = (dcContext.getConfigInt("delete_device_after")!=0 || dcContext.getConfigInt("delete_server_after")!=0); - - String showEmails = "?"; - switch (dcContext.getConfigInt("show_emails")) { - case DcContext.DC_SHOW_EMAILS_OFF: showEmails = offRes; break; - case DcContext.DC_SHOW_EMAILS_ACCEPTED_CONTACTS: showEmails = context.getString(R.string.pref_show_emails_accepted_contacts); break; - case DcContext.DC_SHOW_EMAILS_ALL: showEmails = context.getString(R.string.pref_show_emails_all); break; - } - - String summary = context.getString(R.string.pref_show_emails) + " " + showEmails + ", " + - context.getString(R.string.pref_read_receipts) + " " + readReceiptState; - if (deleteOld) { - summary += ", " + context.getString(R.string.delete_old_messages) + " " + onRes; - } - return summary; + return context.getString(R.string.pref_read_receipts) + " " + readReceiptState; } private class BlockedContactsClickListener implements Preference.OnPreferenceClickListener { @@ -207,9 +187,9 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { int timeout = Util.objectToInt(newValue); - if (timeout>0) { - Context context = preference.getContext(); - boolean fromServer = coreKey.equals("delete_server_after"); + Context context = preference.getContext(); + boolean fromServer = coreKey.equals("delete_server_after"); + if (timeout>0 && !(fromServer && dcContext.isChatmail())) { int delCount = DcHelper.getContext(context).estimateDeletionCount(fromServer, timeout); View gl = View.inflate(getActivity(), R.layout.dialog_with_checkbox, null); @@ -238,6 +218,18 @@ public class ChatsPreferenceFragment extends ListSummaryPreferenceFragment { .setCancelable(true) // Enable the user to quickly cancel if they are intimidated by the warnings :) .setOnCancelListener(dialog -> initAutodelFromCore()) .show(); + } else if (fromServer && timeout == 1 /*at once, using a constant that cannot be used in .xml would weaken grep ability*/) { + new AlertDialog.Builder(context) + .setTitle(R.string.autodel_server_warn_multi_device_title) + .setMessage(R.string.autodel_server_warn_multi_device) + .setPositiveButton(android.R.string.ok, (dialog, whichButton) -> { + dcContext.setConfigInt(coreKey, timeout); + initAutodelFromCore(); + }) + .setNegativeButton(android.R.string.cancel, (dialog, whichButton) -> initAutodelFromCore()) + .setCancelable(true) + .setOnCancelListener(dialog -> initAutodelFromCore()) + .show(); } else { updateListSummary(preference, newValue); dcContext.setConfigInt(coreKey, timeout); diff --git a/src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/CorrectedPreferenceFragment.java diff --git a/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java similarity index 98% rename from src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java index c480ec84a..361c427a1 100644 --- a/src/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/ListSummaryPreferenceFragment.java @@ -29,6 +29,7 @@ import java.util.Map; public abstract class ListSummaryPreferenceFragment extends CorrectedPreferenceFragment implements DcEventCenter.DcEventDelegate { protected static final int REQUEST_CODE_CONFIRM_CREDENTIALS_BACKUP = ScreenLockUtil.REQUEST_CODE_CONFIRM_CREDENTIALS + 1; protected static final int REQUEST_CODE_CONFIRM_CREDENTIALS_KEYS = REQUEST_CODE_CONFIRM_CREDENTIALS_BACKUP + 1; + protected static final int REQUEST_CODE_CONFIRM_CREDENTIALS_ACCOUNT = REQUEST_CODE_CONFIRM_CREDENTIALS_KEYS + 1; protected DcContext dcContext; private NotificationController notificationController; @@ -137,6 +138,7 @@ 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); diff --git a/src/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java similarity index 83% rename from src/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java rename to src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java index 0d11d4e35..7b0258c9c 100644 --- a/src/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java @@ -12,6 +12,7 @@ import android.os.Bundle; import android.os.PowerManager; import android.provider.Settings; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.core.app.NotificationManagerCompat; import androidx.core.content.ContextCompat; import androidx.preference.CheckBoxPreference; @@ -20,12 +21,15 @@ import androidx.preference.Preference; import android.text.TextUtils; import org.thoughtcrime.securesms.ApplicationPreferencesActivity; +import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.connect.KeepAliveService; -import org.thoughtcrime.securesms.permissions.Permissions; +import org.thoughtcrime.securesms.notifications.FcmReceiveService; import org.thoughtcrime.securesms.util.Prefs; import static android.app.Activity.RESULT_OK; +import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_ONLY_FETCH_MVBOX; public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragment { @@ -69,6 +73,27 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme initializeRingtoneSummary(findPreference(Prefs.RINGTONE_PREF)); + CheckBoxPreference usePushService = this.findPreference("pref_push_enabled"); + usePushService.setChecked(Prefs.isPushEnabled(getContext())); + usePushService.setEnabled(BuildConfig.USE_PLAY_SERVICES); + usePushService.setOnPreferenceChangeListener((preference, newValue) -> { + final boolean enabled = (Boolean) newValue; + if (!enabled) { + new AlertDialog.Builder(getContext()) + .setMessage(R.string.pref_push_ask_disable) + .setPositiveButton(R.string.ok, (dialogInterface, i) -> { + ((CheckBoxPreference)preference).setChecked(false); + }) + .setNegativeButton(R.string.cancel, null) + .setNeutralButton(R.string.learn_more, (dialogInterface, i) -> { + DcHelper.openHelp(getActivity(), "#instant-delivery"); + }) + .show(); + return false; + } + return true; + }); + ignoreBattery = this.findPreference("pref_ignore_battery_optimizations"); ignoreBattery.setVisible(needsIgnoreBatteryOptimizations()); ignoreBattery.setOnPreferenceChangeListener((preference, newValue) -> { @@ -116,6 +141,18 @@ public class NotificationsPreferenceFragment extends ListSummaryPreferenceFragme ignoreBattery.setChecked(isIgnoringBatteryOptimizations()); } + @Override + public void onPause() { + super.onPause(); + + // we delay applying token changes to avoid changes and races if the user is just playing around + if (Prefs.isPushEnabled(getContext()) && FcmReceiveService.getToken() == null) { + FcmReceiveService.register(getContext()); + } else if(!Prefs.isPushEnabled(getContext()) && FcmReceiveService.getToken() != null) { + FcmReceiveService.deleteToken(); + } + } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); diff --git a/src/org/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference.java b/src/main/java/org/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference.java similarity index 100% rename from src/org/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference.java rename to src/main/java/org/thoughtcrime/securesms/preferences/widgets/NotificationPrivacyPreference.java diff --git a/src/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java b/src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java similarity index 100% rename from src/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java rename to src/main/java/org/thoughtcrime/securesms/preferences/widgets/ProfilePreference.java diff --git a/src/org/thoughtcrime/securesms/profiles/AvatarHelper.java b/src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java similarity index 100% rename from src/org/thoughtcrime/securesms/profiles/AvatarHelper.java rename to src/main/java/org/thoughtcrime/securesms/profiles/AvatarHelper.java diff --git a/src/org/thoughtcrime/securesms/profiles/ProfileMediaConstraints.java b/src/main/java/org/thoughtcrime/securesms/profiles/ProfileMediaConstraints.java similarity index 100% rename from src/org/thoughtcrime/securesms/profiles/ProfileMediaConstraints.java rename to src/main/java/org/thoughtcrime/securesms/profiles/ProfileMediaConstraints.java diff --git a/src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java b/src/main/java/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java rename to src/main/java/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java diff --git a/src/org/thoughtcrime/securesms/providers/SingleUseBlobProvider.java b/src/main/java/org/thoughtcrime/securesms/providers/SingleUseBlobProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/providers/SingleUseBlobProvider.java rename to src/main/java/org/thoughtcrime/securesms/providers/SingleUseBlobProvider.java diff --git a/src/org/thoughtcrime/securesms/qr/BackupProviderFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/BackupProviderFragment.java similarity index 99% rename from src/org/thoughtcrime/securesms/qr/BackupProviderFragment.java rename to src/main/java/org/thoughtcrime/securesms/qr/BackupProviderFragment.java index 9c2334383..8921acd81 100644 --- a/src/org/thoughtcrime/securesms/qr/BackupProviderFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/BackupProviderFragment.java @@ -64,6 +64,7 @@ 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(() -> { diff --git a/src/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java similarity index 98% rename from src/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java rename to src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java index 8c260cd92..cbe05f27e 100644 --- a/src/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java @@ -94,6 +94,7 @@ public class BackupReceiverFragment extends Fragment implements DcEventCenter.Dc } else if (permille == 1000) { getTransferActivity().setTransferState(BackupTransferActivity.TransferState.TRANSFER_SUCCESS); getTransferActivity().doFinish(); + dcContext.assumeMultiDevice(); return; } diff --git a/src/org/thoughtcrime/securesms/qr/BackupTransferActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/BackupTransferActivity.java similarity index 97% rename from src/org/thoughtcrime/securesms/qr/BackupTransferActivity.java rename to src/main/java/org/thoughtcrime/securesms/qr/BackupTransferActivity.java index fadf4b5fc..9244e3a2f 100644 --- a/src/org/thoughtcrime/securesms/qr/BackupTransferActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/BackupTransferActivity.java @@ -20,7 +20,6 @@ import org.thoughtcrime.securesms.BaseActionBarActivity; import org.thoughtcrime.securesms.ConversationListActivity; import org.thoughtcrime.securesms.LogViewActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.WebViewActivity; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.NotificationController; @@ -118,8 +117,7 @@ public class BackupTransferActivity extends BaseActionBarActivity { finishOrAskToFinish(); return true; case R.id.troubleshooting: - // once help is evolved, it may be a more visible button, may be localized, may be offline - WebViewActivity.openUrlInBrowser(this, "https://delta.chat/en/help#multiclient"); + DcHelper.openHelp(this, "#multiclient"); return true; case R.id.view_log_button: startActivity(new Intent(this, LogViewActivity.class)); diff --git a/src/org/thoughtcrime/securesms/qr/QrActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java similarity index 94% rename from src/org/thoughtcrime/securesms/qr/QrActivity.java rename to src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java index fe2f4cf68..ae35535bf 100644 --- a/src/org/thoughtcrime/securesms/qr/QrActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrActivity.java @@ -15,6 +15,7 @@ import android.view.MenuItem; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.view.MenuCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; @@ -30,6 +31,7 @@ import com.google.zxing.common.HybridBinarizer; import org.thoughtcrime.securesms.BaseActionBarActivity; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.contacts.NewContactActivity; import org.thoughtcrime.securesms.mms.AttachmentManager; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; @@ -68,7 +70,7 @@ public class QrActivity extends BaseActionBarActivity { setSupportActionBar(ViewUtil.findById(this, R.id.toolbar)); assert getSupportActionBar() != null; - getSupportActionBar().setTitle(R.string.qr_code); + getSupportActionBar().setTitle(R.string.menu_new_contact); getSupportActionBar().setDisplayHomeAsUpEnabled(true); int lastSelectedTab = PreferenceManager.getDefaultSharedPreferences(this).getInt("qrTab", TAB_SHOW); @@ -110,10 +112,10 @@ public class QrActivity extends BaseActionBarActivity { @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); - if(tabLayout.getSelectedTabPosition() == TAB_SHOW) { - getMenuInflater().inflate(R.menu.qr_show, menu); - } else { - getMenuInflater().inflate(R.menu.qr_scan, menu); + getMenuInflater().inflate(R.menu.qr_show, menu); + if(tabLayout.getSelectedTabPosition() == TAB_SCAN) { + menu.findItem(R.id.withdraw).setVisible(false); + menu.findItem(R.id.copy).setVisible(false); } return super.onPrepareOptionsMenu(menu); } @@ -133,8 +135,11 @@ public class QrActivity extends BaseActionBarActivity { case android.R.id.home: finish(); return true; + case R.id.new_classic_contact: + this.startActivity(new Intent(this, NewContactActivity.class)); + break; case R.id.share: - qrShowFragment.shareQr(); + qrShowFragment.shareInviteURL(); break; case R.id.copy: qrShowFragment.copyQrData(); diff --git a/src/org/thoughtcrime/securesms/qr/QrCodeHandler.java b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java similarity index 93% rename from src/org/thoughtcrime/securesms/qr/QrCodeHandler.java rename to src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java index 8e2b909f0..34a0361bc 100644 --- a/src/org/thoughtcrime/securesms/qr/QrCodeHandler.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java @@ -65,8 +65,9 @@ public class QrCodeHandler { break; case DcContext.DC_QR_ACCOUNT: - String domain = qrParsed.getText1(); - builder.setMessage(activity.getString(R.string.qraccount_ask_create_and_login_another, domain)); + case DcContext.DC_QR_LOGIN: + final String scope = qrParsed.getText1(); + builder.setMessage(activity.getString(qrParsed.getState() == DcContext.DC_QR_ACCOUNT ? R.string.qraccount_ask_create_and_login_another : R.string.qrlogin_ask_login_another, scope)); builder.setPositiveButton(R.string.ok, (dialog, which) -> { AccountManager.getInstance().addAccountFromQr(activity, rawString); }); @@ -78,7 +79,7 @@ public class QrCodeHandler { builder.setTitle(R.string.multidevice_receiver_title); builder.setMessage(activity.getString(R.string.multidevice_receiver_scanning_ask) + "\n\n" + activity.getString(R.string.multidevice_same_network_hint)); builder.setPositiveButton(R.string.perm_continue, (dialog, which) -> { - AccountManager.getInstance().addAccountFromQr(activity, rawString); + AccountManager.getInstance().addAccountFromSecondDevice(activity, rawString); }); builder.setNegativeButton(R.string.cancel, null); builder.setCancelable(false); @@ -88,16 +89,6 @@ public class QrCodeHandler { BackupTransferActivity.appendSSID(activity, alertDialog.findViewById(android.R.id.message)); return; - case DcContext.DC_QR_LOGIN: - String email = qrParsed.getText1(); - builder.setMessage(activity.getString(R.string.qrlogin_ask_login_another, email)); - builder.setPositiveButton(R.string.ok, (dialog, which) -> { - AccountManager.getInstance().addAccountFromQr(activity, rawString); - }); - 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) -> { diff --git a/src/org/thoughtcrime/securesms/qr/QrScanFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/QrScanFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/qr/QrScanFragment.java rename to src/main/java/org/thoughtcrime/securesms/qr/QrScanFragment.java diff --git a/src/org/thoughtcrime/securesms/qr/QrShowActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java similarity index 93% rename from src/org/thoughtcrime/securesms/qr/QrShowActivity.java rename to src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java index e86799069..f3237d03e 100644 --- a/src/org/thoughtcrime/securesms/qr/QrShowActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrShowActivity.java @@ -68,6 +68,9 @@ public class QrShowActivity extends AppCompatActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.qr_show, menu); + menu.findItem(R.id.new_classic_contact).setVisible(false); + menu.findItem(R.id.paste).setVisible(false); + menu.findItem(R.id.load_from_image).setVisible(false); return super.onCreateOptionsMenu(menu); } @@ -87,7 +90,7 @@ public class QrShowActivity extends AppCompatActivity { finish(); return true; case R.id.share: - fragment.shareQr(); + fragment.shareInviteURL(); break; case R.id.copy: fragment.copyQrData(); diff --git a/src/org/thoughtcrime/securesms/qr/QrShowFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java similarity index 82% rename from src/org/thoughtcrime/securesms/qr/QrShowFragment.java rename to src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java index ccb1535de..5c6c009dc 100644 --- a/src/org/thoughtcrime/securesms/qr/QrShowFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrShowFragment.java @@ -2,10 +2,7 @@ package org.thoughtcrime.securesms.qr; import android.app.Activity; import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; @@ -30,12 +27,8 @@ import org.thoughtcrime.securesms.components.ScaleStableImageView; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.util.DynamicTheme; -import org.thoughtcrime.securesms.util.FileProviderUtil; import org.thoughtcrime.securesms.util.Util; -import java.io.File; -import java.io.FileOutputStream; - public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDelegate { private final static String TAG = QrShowFragment.class.getSimpleName(); @@ -103,33 +96,21 @@ public class QrShowFragment extends Fragment implements DcEventCenter.DcEventDel return svg.replace("y=\"281.136\"", "y=\"296\""); } - public void shareQr() { + public void shareInviteURL() { try { - File file = new File(getActivity().getExternalCacheDir(), "share-qr.png"); - file.createNewFile(); - file.setReadable(true, false); - FileOutputStream stream = new FileOutputStream(file); - Bitmap bitmap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - canvas.drawRGB(255, 255, 255); // Clear background to white - SVG svg = SVG.getFromString(fixSVG(dcContext.getSecurejoinQrSvg(chatId))); - svg.renderToCanvas(canvas); - bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); - stream.flush(); - stream.close(); - Uri uri = FileProviderUtil.getUriFor(getActivity(), file); Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("image/png"); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + intent.setType("text/plain"); + String inviteURL = Util.QrDataToInviteURL(dcContext.getSecurejoinQr(chatId)); + intent.putExtra(Intent.EXTRA_TEXT, inviteURL); startActivity(Intent.createChooser(intent, getString(R.string.chat_share_with_title))); } catch (Exception e) { - Log.e(TAG, "failed to share QR", e); + Log.e(TAG, "failed to share invite URL", e); } } public void copyQrData() { - Util.writeTextToClipboard(getActivity(), DcHelper.getContext(getActivity()).getSecurejoinQr(chatId)); + String inviteURL = Util.QrDataToInviteURL(dcContext.getSecurejoinQr(chatId)); + Util.writeTextToClipboard(getActivity(), inviteURL); Toast.makeText(getActivity(), getString(R.string.copied_to_clipboard), Toast.LENGTH_SHORT).show(); } diff --git a/src/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java b/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java similarity index 87% rename from src/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java rename to src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java index 1187d100b..b2d03ec79 100644 --- a/src/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/RegistrationQrActivity.java @@ -5,6 +5,7 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.KeyEvent; +import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -15,6 +16,7 @@ import com.journeyapps.barcodescanner.CompoundBarcodeView; import org.thoughtcrime.securesms.BaseActionBarActivity; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.permissions.Permissions; public class RegistrationQrActivity extends BaseActionBarActivity { @@ -77,6 +79,9 @@ public class RegistrationQrActivity extends BaseActionBarActivity { case android.R.id.home: finish(); return true; + case R.id.troubleshooting: + DcHelper.openHelp(this, "#multiclient"); + return true; } return false; @@ -117,6 +122,15 @@ public class RegistrationQrActivity extends BaseActionBarActivity { } } + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + menu.clear(); + getMenuInflater().inflate(R.menu.registration_qr_activity, menu); + boolean addAsAnotherDevice = getIntent().getBooleanExtra(ADD_AS_SECOND_DEVICE_EXTRA, false); + menu.findItem(R.id.troubleshooting).setVisible(addAsAnotherDevice); + return super.onPrepareOptionsMenu(menu); + } + @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); diff --git a/src/org/thoughtcrime/securesms/reactions/AddReactionView.java b/src/main/java/org/thoughtcrime/securesms/reactions/AddReactionView.java similarity index 64% rename from src/org/thoughtcrime/securesms/reactions/AddReactionView.java rename to src/main/java/org/thoughtcrime/securesms/reactions/AddReactionView.java index 123acf076..fdd38fb0d 100644 --- a/src/org/thoughtcrime/securesms/reactions/AddReactionView.java +++ b/src/main/java/org/thoughtcrime/securesms/reactions/AddReactionView.java @@ -1,11 +1,14 @@ package org.thoughtcrime.securesms.reactions; import android.content.Context; +import android.os.Build; import android.util.AttributeSet; import android.view.View; import android.widget.LinearLayout; +import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; +import androidx.emoji2.emojipicker.EmojiPickerView; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; @@ -16,13 +19,14 @@ import com.b44t.messenger.rpc.Rpc; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiTextView; import org.thoughtcrime.securesms.connect.DcHelper; -import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.ViewUtil; import java.util.Map; public class AddReactionView extends LinearLayout { private EmojiTextView [] defaultReactionViews; + private EmojiTextView anyReactionView; + private boolean anyReactionClearsReaction; private Context context; private DcContext dcContext; private Rpc rpc; @@ -51,7 +55,12 @@ public class AddReactionView extends LinearLayout { }; for (int i = 0; i < defaultReactionViews.length; i++) { final int ii = i; - defaultReactionViews[i].setOnClickListener(v -> reactionClicked(ii)); + defaultReactionViews[i].setOnClickListener(v -> defaultReactionClicked(ii)); + } + anyReactionView = findViewById(R.id.reaction_any); + anyReactionView.setOnClickListener(v -> anyReactionClicked()); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { + anyReactionView.setVisibility(View.GONE); // EmojiPickerView requires SDK 21 or newer } } } @@ -59,10 +68,6 @@ public class AddReactionView extends LinearLayout { public void show(DcMsg msgToReactTo, View parentView, AddReactionListener listener) { init(); // init delayed as needed - if (!Prefs.getBooleanPreference(context, "pref_send_reactions", false)) { - return; - } - if ( msgToReactTo.isInfo() || msgToReactTo.getType() == DcMsg.DC_MSG_VIDEOCHAT_INVITATION || !dcContext.getChat(msgToReactTo.getChatId()).canSend()) { @@ -73,14 +78,26 @@ public class AddReactionView extends LinearLayout { this.listener = listener; final String existingReaction = getSelfReaction(); + boolean existingHilited = false; for (EmojiTextView defaultReactionView : defaultReactionViews) { if (defaultReactionView.getText().toString().equals(existingReaction)) { defaultReactionView.setBackground(ContextCompat.getDrawable(context, R.drawable.reaction_pill_background_selected)); + existingHilited = true; } else { defaultReactionView.setBackground(null); } } + if (existingReaction != null && !existingHilited) { + anyReactionView.setText(existingReaction); + anyReactionView.setBackground(ContextCompat.getDrawable(context, R.drawable.reaction_pill_background_selected)); + anyReactionClearsReaction = true; + } else { + anyReactionView.setText("⋯"); + anyReactionView.setBackground(null); + anyReactionClearsReaction = false; + } + final int offset = (int)(this.getHeight() * 0.666); int x = (int)parentView.getX(); if (msgToReactTo.isOutgoing()) { @@ -121,17 +138,48 @@ public class AddReactionView extends LinearLayout { return result; } - private void reactionClicked(int i) { + private void defaultReactionClicked(int i) { + final String reaction = defaultReactionViews[i].getText().toString(); + sendReaction(reaction); + + if (listener != null) { + listener.onShallHide(); + } + } + + private void anyReactionClicked() { + if (anyReactionClearsReaction) { + sendReaction(null); + } else { + View pickerLayout = View.inflate(context, R.layout.reaction_picker, null); + + final AlertDialog alertDialog = new AlertDialog.Builder(context) + .setView(pickerLayout) + .setTitle(R.string.react) + .setPositiveButton(R.string.cancel, null) + .create(); + + EmojiPickerView pickerView = ViewUtil.findById(pickerLayout, R.id.emoji_picker); + pickerView.setOnEmojiPickedListener((it) -> { + sendReaction(it.getEmoji()); + alertDialog.dismiss(); + }); + + alertDialog.show(); + } + + if (listener != null) { + listener.onShallHide(); + } + } + + private void sendReaction(final String reaction) { try { - final String reaction = defaultReactionViews[i].getText().toString(); - if (reaction.equals(getSelfReaction())) { + if (reaction == null || reaction.equals(getSelfReaction())) { rpc.sendReaction(dcContext.getAccountId(), msgToReactTo.getId(), ""); } else { rpc.sendReaction(dcContext.getAccountId(), msgToReactTo.getId(), reaction); } - if (listener != null) { - listener.onShallHide(); - } } catch(Exception e) { e.printStackTrace(); } diff --git a/src/org/thoughtcrime/securesms/reactions/ReactionRecipientItem.java b/src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientItem.java similarity index 100% rename from src/org/thoughtcrime/securesms/reactions/ReactionRecipientItem.java rename to src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientItem.java diff --git a/src/org/thoughtcrime/securesms/reactions/ReactionRecipientsAdapter.java b/src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientsAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/reactions/ReactionRecipientsAdapter.java rename to src/main/java/org/thoughtcrime/securesms/reactions/ReactionRecipientsAdapter.java diff --git a/src/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java b/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java similarity index 100% rename from src/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java rename to src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java diff --git a/src/org/thoughtcrime/securesms/reactions/ReactionsDetailsFragment.java b/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsDetailsFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/reactions/ReactionsDetailsFragment.java rename to src/main/java/org/thoughtcrime/securesms/reactions/ReactionsDetailsFragment.java diff --git a/src/org/thoughtcrime/securesms/recipients/Recipient.java b/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java similarity index 88% rename from src/org/thoughtcrime/securesms/recipients/Recipient.java rename to src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 9225e79dd..3942c3bd6 100644 --- a/src/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -21,13 +21,15 @@ import android.content.Context; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.net.Uri; +import android.text.TextUtils; + import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import android.text.TextUtils; import com.b44t.messenger.DcChat; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; +import com.b44t.messenger.rpc.VcardContact; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.contacts.avatars.ContactPhoto; @@ -37,15 +39,14 @@ import org.thoughtcrime.securesms.contacts.avatars.GroupRecordContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.LocalFileContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.SystemContactPhoto; +import org.thoughtcrime.securesms.contacts.avatars.VcardContactPhoto; import org.thoughtcrime.securesms.database.Address; import org.thoughtcrime.securesms.util.Hash; import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Util; -import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.WeakHashMap; @@ -65,6 +66,7 @@ public class Recipient { private final @Nullable DcChat dcChat; private @Nullable DcContact dcContact; + private final @Nullable VcardContact vContact; public static @NonNull Recipient fromChat(@NonNull Context context, int dcMsgId) { DcContext dcContext = DcHelper.getContext(context); @@ -90,21 +92,26 @@ public class Recipient { } public Recipient(@NonNull Context context, @NonNull DcChat dcChat) { - this(context, dcChat, null, null); + this(context, dcChat, null, null, null); + } + + public Recipient(@NonNull Context context, @NonNull VcardContact vContact) { + this(context, null, null, null, vContact); } public Recipient(@NonNull Context context, @NonNull DcContact dcContact) { - this(context, null, dcContact, null); + this(context, null, dcContact, null, null); } public Recipient(@NonNull Context context, @NonNull DcContact dcContact, @NonNull String profileName) { - this(context, null, dcContact, profileName); + this(context, null, dcContact, profileName, null); } - private Recipient(@NonNull Context context, @Nullable DcChat dcChat, @Nullable DcContact dcContact, @Nullable String profileName) { + private Recipient(@NonNull Context context, @Nullable DcChat dcChat, @Nullable DcContact dcContact, @Nullable String profileName, @Nullable VcardContact vContact) { this.dcChat = dcChat; this.dcContact = dcContact; this.profileName = profileName; + this.vContact = vContact; this.contactUri = null; this.systemContactPhoto = null; this.customLabel = null; @@ -141,6 +148,9 @@ public class Recipient { else if(dcContact!=null) { return dcContact.getDisplayName(); } + else if(vContact!=null) { + return vContact.getDisplayName(); + } return ""; } @@ -168,18 +178,6 @@ public class Recipient { return dcChat!=null && dcChat.isMultiUser(); } - public @NonNull List loadParticipants(Context context) { - List participants = new ArrayList<>(); - if (dcChat!=null) { - DcContext dcContext = DcHelper.getAccounts(context).getAccount(dcChat.getAccountId()); - int[] contactIds = dcContext.getChatContacts(dcChat.getId()); - for (int contactId : contactIds) { - participants.add(new Recipient(context, dcContext.getContact(contactId))); - } - } - return participants; - } - public synchronized void addListener(RecipientModifiedListener listener) { listeners.add(listener); } @@ -200,15 +198,21 @@ public class Recipient { else if(dcContact!=null) { rgb = dcContact.getColor(); } - int argb = Color.argb(0xFF, Color.red(rgb), Color.green(rgb), Color.blue(rgb)); - return argb; + else if(vContact!=null) { + rgb = Color.parseColor(vContact.getColor()); + } + return Color.argb(0xFF, Color.red(rgb), Color.green(rgb), Color.blue(rgb)); } public synchronized @NonNull Drawable getFallbackAvatarDrawable(Context context) { - return getFallbackContactPhoto().asDrawable(context, getFallbackAvatarColor()); + return getFallbackAvatarDrawable(context, true); } - public synchronized @NonNull FallbackContactPhoto getFallbackContactPhoto() { + public synchronized @NonNull Drawable getFallbackAvatarDrawable(Context context, boolean roundShape) { + return getFallbackContactPhoto().asDrawable(context, getFallbackAvatarColor(), roundShape); + } + + public synchronized @NonNull GeneratedContactPhoto getFallbackContactPhoto() { String name = getName(); if (!TextUtils.isEmpty(profileName)) return new GeneratedContactPhoto(profileName); else if (!TextUtils.isEmpty(name)) return new GeneratedContactPhoto(name); @@ -231,6 +235,10 @@ public class Recipient { } } + if (vContact!=null && vContact.hasProfileImage()) { + return new VcardContactPhoto(vContact); + } + if (systemContactPhoto != null) { return new SystemContactPhoto(address, systemContactPhoto, 0); } @@ -262,7 +270,7 @@ public class Recipient { @Override public boolean equals(Object o) { if (this == o) return true; - if (o == null || !(o instanceof Recipient)) return false; + if (!(o instanceof Recipient)) return false; Recipient that = (Recipient) o; @@ -290,6 +298,7 @@ public class Recipient { return dcChat!=null? dcChat : new DcChat(0, 0); } + @NonNull @Override public String toString() { return "Recipient{" + diff --git a/src/org/thoughtcrime/securesms/recipients/RecipientForeverObserver.java b/src/main/java/org/thoughtcrime/securesms/recipients/RecipientForeverObserver.java similarity index 100% rename from src/org/thoughtcrime/securesms/recipients/RecipientForeverObserver.java rename to src/main/java/org/thoughtcrime/securesms/recipients/RecipientForeverObserver.java diff --git a/src/org/thoughtcrime/securesms/recipients/RecipientModifiedListener.java b/src/main/java/org/thoughtcrime/securesms/recipients/RecipientModifiedListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/recipients/RecipientModifiedListener.java rename to src/main/java/org/thoughtcrime/securesms/recipients/RecipientModifiedListener.java diff --git a/src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java diff --git a/src/org/thoughtcrime/securesms/scribbles/ImageEditorHud.java b/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHud.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/ImageEditorHud.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorHud.java diff --git a/src/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java b/src/main/java/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java similarity index 91% rename from src/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java index de0af535c..e278fb676 100644 --- a/src/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/scribbles/ScribbleActivity.java @@ -11,6 +11,10 @@ public class ScribbleActivity extends PassphraseRequiredActionBarActivity { public static final String CROP_AVATAR = "crop_avatar"; ImageEditorFragment imageEditorFragment; + protected boolean allowInLockedMode() { + return getIntent().getBooleanExtra(CROP_AVATAR, false); + } + @Override protected void onPreCreate() { dynamicTheme = new DynamicNoActionBarTheme(); diff --git a/src/org/thoughtcrime/securesms/scribbles/StickerLoader.java b/src/main/java/org/thoughtcrime/securesms/scribbles/StickerLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/StickerLoader.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/StickerLoader.java diff --git a/src/org/thoughtcrime/securesms/scribbles/StickerSelectActivity.java b/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectActivity.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/StickerSelectActivity.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectActivity.java diff --git a/src/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java b/src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/StickerSelectFragment.java diff --git a/src/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java b/src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/UriGlideRenderer.java diff --git a/src/org/thoughtcrime/securesms/scribbles/widget/ColorPaletteAdapter.java b/src/main/java/org/thoughtcrime/securesms/scribbles/widget/ColorPaletteAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/widget/ColorPaletteAdapter.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/widget/ColorPaletteAdapter.java diff --git a/src/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java b/src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java similarity index 100% rename from src/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java rename to src/main/java/org/thoughtcrime/securesms/scribbles/widget/VerticalSlideColorPicker.java diff --git a/src/org/thoughtcrime/securesms/search/SearchFragment.java b/src/main/java/org/thoughtcrime/securesms/search/SearchFragment.java similarity index 75% rename from src/org/thoughtcrime/securesms/search/SearchFragment.java rename to src/main/java/org/thoughtcrime/securesms/search/SearchFragment.java index 557e290ed..a292f69fd 100644 --- a/src/org/thoughtcrime/securesms/search/SearchFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/search/SearchFragment.java @@ -1,28 +1,33 @@ package org.thoughtcrime.securesms.search; -import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelProviders; +import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent; + import android.content.res.Configuration; import android.os.Bundle; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.appcompat.app.AlertDialog; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; +import androidx.lifecycle.ViewModelProvider; +import androidx.lifecycle.ViewModelProviders; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.b44t.messenger.DcChat; import com.b44t.messenger.DcChatlist; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcEvent; import com.b44t.messenger.DcMsg; +import org.thoughtcrime.securesms.BaseConversationListAdapter; +import org.thoughtcrime.securesms.BaseConversationListFragment; import org.thoughtcrime.securesms.ConversationListActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcEventCenter; @@ -32,13 +37,13 @@ import org.thoughtcrime.securesms.search.model.SearchResult; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import java.util.Locale; - -import static org.thoughtcrime.securesms.util.RelayUtil.isRelayingMessageContent; +import java.util.Set; /** * A fragment that is displayed to do full-text search of messages, groups, and contacts. */ -public class SearchFragment extends Fragment implements SearchListAdapter.EventListener, DcEventCenter.DcEventDelegate { +public class SearchFragment extends BaseConversationListFragment + implements SearchListAdapter.EventListener, DcEventCenter.DcEventDelegate { public static final String TAG = "SearchFragment"; public static final String EXTRA_LOCALE = "locale"; @@ -68,8 +73,8 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL this.locale = (Locale) getArguments().getSerializable(EXTRA_LOCALE); - viewModel = ViewModelProviders.of(this, (ViewModelProvider.Factory) new SearchViewModel.Factory(getContext())).get(SearchViewModel.class); - DcEventCenter eventCenter = DcHelper.getEventCenter(getContext()); + viewModel = ViewModelProviders.of(this, (ViewModelProvider.Factory) new SearchViewModel.Factory(requireContext())).get(SearchViewModel.class); + DcEventCenter eventCenter = DcHelper.getEventCenter(requireContext()); eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this); eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this); eventCenter.addObserver(DcContext.DC_EVENT_INCOMING_MSG, this); @@ -95,10 +100,12 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { noResultsView = view.findViewById(R.id.search_no_results); listView = view.findViewById(R.id.search_list); + fab = view.findViewById(R.id.fab); listAdapter = new SearchListAdapter(getContext(), GlideApp.with(this), this, locale); listDecoration = new StickyHeaderDecoration(listAdapter, false, true); + fab.setVisibility(View.GONE); listView.setAdapter(listAdapter); listView.addItemDecoration(listDecoration); listView.setLayoutManager(new LinearLayoutManager(getContext())); @@ -107,7 +114,7 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL @Override public void onStart() { super.onStart(); - viewModel.includeMessageQueries(!isRelayingMessageContent(getActivity())); + viewModel.setForwardingMode(isRelayingMessageContent(getActivity())); viewModel.getSearchResult().observe(this, result -> { result = result != null ? result : SearchResult.EMPTY; @@ -129,7 +136,7 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL } @Override - public void onConfigurationChanged(Configuration newConfig) { + public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); if (listDecoration != null) { @@ -139,26 +146,32 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL @Override public void onDestroy() { - DcHelper.getEventCenter(getContext()).removeObservers(this); + DcHelper.getEventCenter(requireContext()).removeObservers(this); super.onDestroy(); } @Override public void onConversationClicked(@NonNull DcChatlist.Item chatlistItem) { - ConversationListActivity conversationList = (ConversationListActivity) getActivity(); - if (conversationList != null) { - conversationList.onCreateConversation(chatlistItem.chatId); - } + onItemClick(chatlistItem.chatId); + } + + @Override + public void onConversationLongClicked(@NonNull DcChatlist.Item chatlistItem) { + onItemLongClick(chatlistItem.chatId); } @Override public void onContactClicked(@NonNull DcContact contact) { + if (actionMode != null) { + return; + } + ConversationListActivity conversationList = (ConversationListActivity) getActivity(); if (conversationList != null) { - DcContext dcContext = DcHelper.getContext(getContext()); + DcContext dcContext = DcHelper.getContext(requireContext()); int chatId = dcContext.getChatIdByContactId(contact.getId()); if(chatId==0) { - new AlertDialog.Builder(getContext()) + new AlertDialog.Builder(requireContext()) .setMessage(getString(R.string.ask_start_chat_with, contact.getNameNAddr())) .setCancelable(true) .setNegativeButton(android.R.string.cancel, null) @@ -175,9 +188,13 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL @Override public void onMessageClicked(@NonNull DcMsg message) { + if (actionMode != null) { + return; + } + ConversationListActivity conversationList = (ConversationListActivity) getActivity(); if (conversationList != null) { - DcContext dcContext = DcHelper.getContext(getContext()); + DcContext dcContext = DcHelper.getContext(requireContext()); int chatId = message.getChatId(); int startingPosition = DcMsg.getMessagePosition(message, dcContext); conversationList.openConversation(chatId, startingPosition); @@ -198,4 +215,31 @@ public class SearchFragment extends Fragment implements SearchListAdapter.EventL viewModel.updateQuery(); } } + + @Override + protected boolean offerToArchive() { + DcContext dcContext = DcHelper.getContext(requireActivity()); + final Set selectedChats = listAdapter.getBatchSelections(); + for (long chatId : selectedChats) { + DcChat dcChat = dcContext.getChat((int)chatId); + if (dcChat.getVisibility() != DcChat.DC_CHAT_VISIBILITY_ARCHIVED) { + return true; + } + } + return false; + } + + @Override + protected void setFabVisibility(boolean isActionMode) { + if (isActionMode && isRelayingMessageContent(getActivity())) { + fab.setVisibility(View.VISIBLE); + } else { + fab.setVisibility(View.GONE); + } + } + + @Override + protected BaseConversationListAdapter getListAdapter() { + return listAdapter; + } } diff --git a/src/org/thoughtcrime/securesms/search/SearchListAdapter.java b/src/main/java/org/thoughtcrime/securesms/search/SearchListAdapter.java similarity index 90% rename from src/org/thoughtcrime/securesms/search/SearchListAdapter.java rename to src/main/java/org/thoughtcrime/securesms/search/SearchListAdapter.java index 7923822a3..b29c66797 100644 --- a/src/org/thoughtcrime/securesms/search/SearchListAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/search/SearchListAdapter.java @@ -1,19 +1,21 @@ package org.thoughtcrime.securesms.search; import android.content.Context; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.recyclerview.widget.RecyclerView; + import com.b44t.messenger.DcChatlist; import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; +import org.thoughtcrime.securesms.BaseConversationListAdapter; import org.thoughtcrime.securesms.ConversationListItem; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcHelper; @@ -22,10 +24,10 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.search.model.SearchResult; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; -import java.util.Collections; import java.util.Locale; +import java.util.Set; -class SearchListAdapter extends RecyclerView.Adapter +class SearchListAdapter extends BaseConversationListAdapter implements StickyHeaderDecoration.StickyHeaderAdapter { private static final int TYPE_CHATS = 1; @@ -66,7 +68,7 @@ class SearchListAdapter extends RecyclerView.Adapter selectedThreads, + boolean batchMode, @Nullable String query) { DcContext dcContext = DcHelper.getContext(context); ThreadRecord threadRecord = DcHelper.getThreadRecord(context, chatlistItem.summary, dcContext.getChat(chatlistItem.chatId)); - root.bind(threadRecord, chatlistItem.msgId, chatlistItem.summary, glideRequests, locale, Collections.emptySet(), false, query); + root.bind(threadRecord, chatlistItem.msgId, chatlistItem.summary, glideRequests, locale, selectedThreads, batchMode, query); root.setOnClickListener(view -> eventListener.onConversationClicked(chatlistItem)); + root.setOnLongClickListener(view -> { + eventListener.onConversationLongClicked(chatlistItem); + return true; + }); } void bind(@NonNull DcContact contactResult, diff --git a/src/org/thoughtcrime/securesms/search/SearchViewModel.java b/src/main/java/org/thoughtcrime/securesms/search/SearchViewModel.java similarity index 91% rename from src/org/thoughtcrime/securesms/search/SearchViewModel.java rename to src/main/java/org/thoughtcrime/securesms/search/SearchViewModel.java index e436e65e5..900674a56 100644 --- a/src/org/thoughtcrime/securesms/search/SearchViewModel.java +++ b/src/main/java/org/thoughtcrime/securesms/search/SearchViewModel.java @@ -22,7 +22,7 @@ class SearchViewModel extends ViewModel { private final ObservingLiveData searchResult; private String lastQuery; private final DcContext dcContext; - private boolean queryMessages = true; + private boolean forwarding = false; private boolean inBgSearch; private boolean needsAnotherBgSearch; @@ -35,8 +35,8 @@ class SearchViewModel extends ViewModel { return searchResult; } - public void includeMessageQueries(boolean include) { - queryMessages = include; + public void setForwardingMode(boolean forwarding) { + this.forwarding = forwarding; } @@ -69,7 +69,7 @@ class SearchViewModel extends ViewModel { } } - private void queryAndCallback(@NonNull String query, @NonNull SearchRepository.Callback callback) { + private void queryAndCallback(@NonNull String query, @NonNull SearchViewModel.Callback callback) { int overallCnt = 0; if (TextUtils.isEmpty(query)) { @@ -79,7 +79,7 @@ class SearchViewModel extends ViewModel { // #1 search for chats long startMs = System.currentTimeMillis(); - DcChatlist conversations = dcContext.getChatlist(0, query, 0); + DcChatlist conversations = dcContext.getChatlist(forwarding? DcContext.DC_GCL_FOR_FORWARDING : 0, query, 0); overallCnt += conversations.getCnt(); Log.i(TAG, "⏰ getChatlist(" + query + "): " + (System.currentTimeMillis() - startMs) + "ms"); @@ -96,7 +96,7 @@ class SearchViewModel extends ViewModel { Log.i(TAG, "⏰ getContacts(" + query + "): " + (System.currentTimeMillis() - startMs) + "ms"); // #3 search for messages - if (!queryMessages) { + if (forwarding) { Log.i(TAG, "... searchMsgs() disabled by caller"); callback.onResult(new SearchResult(query, contacts, conversations, new int[0])); return; @@ -147,4 +147,8 @@ class SearchViewModel extends ViewModel { return modelClass.cast(new SearchViewModel(context)); } } + + public interface Callback { + void onResult(@NonNull SearchResult result); + } } diff --git a/src/org/thoughtcrime/securesms/search/model/SearchResult.java b/src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java similarity index 100% rename from src/org/thoughtcrime/securesms/search/model/SearchResult.java rename to src/main/java/org/thoughtcrime/securesms/search/model/SearchResult.java diff --git a/src/org/thoughtcrime/securesms/service/BootReceiver.java b/src/main/java/org/thoughtcrime/securesms/service/BootReceiver.java similarity index 100% rename from src/org/thoughtcrime/securesms/service/BootReceiver.java rename to src/main/java/org/thoughtcrime/securesms/service/BootReceiver.java diff --git a/src/org/thoughtcrime/securesms/service/GenericForegroundService.java b/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java similarity index 100% rename from src/org/thoughtcrime/securesms/service/GenericForegroundService.java rename to src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java diff --git a/src/org/thoughtcrime/securesms/service/IPCAddAccountsService.java b/src/main/java/org/thoughtcrime/securesms/service/IPCAddAccountsService.java similarity index 100% rename from src/org/thoughtcrime/securesms/service/IPCAddAccountsService.java rename to src/main/java/org/thoughtcrime/securesms/service/IPCAddAccountsService.java diff --git a/src/org/thoughtcrime/securesms/service/NotificationController.java b/src/main/java/org/thoughtcrime/securesms/service/NotificationController.java similarity index 100% rename from src/org/thoughtcrime/securesms/service/NotificationController.java rename to src/main/java/org/thoughtcrime/securesms/service/NotificationController.java diff --git a/src/org/thoughtcrime/securesms/service/PanicResponderListener.java b/src/main/java/org/thoughtcrime/securesms/service/PanicResponderListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/service/PanicResponderListener.java rename to src/main/java/org/thoughtcrime/securesms/service/PanicResponderListener.java diff --git a/src/org/thoughtcrime/securesms/util/AccessibilityUtil.java b/src/main/java/org/thoughtcrime/securesms/util/AccessibilityUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/AccessibilityUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/AccessibilityUtil.java diff --git a/src/org/thoughtcrime/securesms/util/AndroidSignalProtocolLogger.java b/src/main/java/org/thoughtcrime/securesms/util/AndroidSignalProtocolLogger.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/AndroidSignalProtocolLogger.java rename to src/main/java/org/thoughtcrime/securesms/util/AndroidSignalProtocolLogger.java diff --git a/src/org/thoughtcrime/securesms/util/AsyncLoader.java b/src/main/java/org/thoughtcrime/securesms/util/AsyncLoader.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/AsyncLoader.java rename to src/main/java/org/thoughtcrime/securesms/util/AsyncLoader.java diff --git a/src/org/thoughtcrime/securesms/util/BitmapDecodingException.java b/src/main/java/org/thoughtcrime/securesms/util/BitmapDecodingException.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/BitmapDecodingException.java rename to src/main/java/org/thoughtcrime/securesms/util/BitmapDecodingException.java diff --git a/src/org/thoughtcrime/securesms/util/BitmapUtil.java b/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java similarity index 80% rename from src/org/thoughtcrime/securesms/util/BitmapUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java index ef704f8b2..8c2a94703 100644 --- a/src/org/thoughtcrime/securesms/util/BitmapUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/BitmapUtil.java @@ -1,42 +1,25 @@ package org.thoughtcrime.securesms.util; -import android.content.Context; import android.graphics.Bitmap; -import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.ColorFilter; import android.graphics.ImageFormat; -import android.graphics.Paint; -import android.graphics.PorterDuff; -import android.graphics.PorterDuffColorFilter; import android.graphics.Rect; import android.graphics.YuvImage; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import androidx.exifinterface.media.ExifInterface; -import androidx.core.content.ContextCompat; import android.util.Log; import android.util.Pair; -import android.view.View; - -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.DownsampleStrategy; - -import org.thoughtcrime.securesms.mms.GlideApp; -import org.thoughtcrime.securesms.mms.MediaConstraints; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicBoolean; import javax.microedition.khronos.egl.EGL10; @@ -268,45 +251,4 @@ public class BitmapUtil { return Math.min(maximumTextureSize, MAX_ALLOWED_TEXTURE_SIZE); } - - /** - * Generate a Bitmap from an Android SDK View. - * - * @param view the View to be drawn to a Bitmap - * @return the generated bitmap - */ - public static Bitmap generate(@NonNull View view) { - int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); - view.measure(measureSpec, measureSpec); - - int measuredWidth = view.getMeasuredWidth(); - int measuredHeight = view.getMeasuredHeight(); - - view.layout(0, 0, measuredWidth, measuredHeight); - Bitmap bitmap = Bitmap.createBitmap(measuredWidth, measuredHeight, Bitmap.Config.ARGB_8888); - bitmap.eraseColor(Color.TRANSPARENT); - Canvas canvas = new Canvas(bitmap); - view.draw(canvas); - return bitmap; - } - - public static Bitmap generateColoredBitmap(Context context, int colorFilter, @DrawableRes int res) { - Bitmap icon = getBitmap(context, res); - Paint paint = new Paint(); - ColorFilter filter = new PorterDuffColorFilter(colorFilter, PorterDuff.Mode.SRC_IN); - paint.setColorFilter(filter); - Canvas canvas = new Canvas(icon); - canvas.drawBitmap(icon, 0, 0, paint); - return icon; - } - - private static Bitmap getBitmap(Context context, @DrawableRes int res) { - Drawable drawable = ContextCompat.getDrawable(context, res); - Canvas canvas = new Canvas(); - Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); - canvas.setBitmap(bitmap); - drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); - drawable.draw(canvas); - return bitmap; - } } diff --git a/src/org/thoughtcrime/securesms/util/Conversions.java b/src/main/java/org/thoughtcrime/securesms/util/Conversions.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Conversions.java rename to src/main/java/org/thoughtcrime/securesms/util/Conversions.java diff --git a/src/org/thoughtcrime/securesms/util/DateUtils.java b/src/main/java/org/thoughtcrime/securesms/util/DateUtils.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/DateUtils.java rename to src/main/java/org/thoughtcrime/securesms/util/DateUtils.java diff --git a/src/org/thoughtcrime/securesms/util/Debouncer.java b/src/main/java/org/thoughtcrime/securesms/util/Debouncer.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Debouncer.java rename to src/main/java/org/thoughtcrime/securesms/util/Debouncer.java diff --git a/src/org/thoughtcrime/securesms/util/DrawableUtil.java b/src/main/java/org/thoughtcrime/securesms/util/DrawableUtil.java similarity index 53% rename from src/org/thoughtcrime/securesms/util/DrawableUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/DrawableUtil.java index a34b897a7..b1aaef80b 100644 --- a/src/org/thoughtcrime/securesms/util/DrawableUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/DrawableUtil.java @@ -2,11 +2,8 @@ package org.thoughtcrime.securesms.util; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.drawable.Drawable; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import androidx.core.graphics.drawable.DrawableCompat; public final class DrawableUtil { @@ -14,18 +11,6 @@ public final class DrawableUtil { private static final int SHORTCUT_INFO_WRAPPED_SIZE = ViewUtil.dpToPx(72); private static final int SHORTCUT_INFO_PADDING = (SHORTCUT_INFO_BITMAP_SIZE - SHORTCUT_INFO_WRAPPED_SIZE) / 2; - private DrawableUtil() {} - - public static @NonNull Bitmap toBitmap(@NonNull Drawable drawable, int width, int height) { - Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - - drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); - drawable.draw(canvas); - - return bitmap; - } - public static @NonNull Bitmap wrapBitmapForShortcutInfo(@NonNull Bitmap toWrap) { Bitmap bitmap = Bitmap.createBitmap(SHORTCUT_INFO_BITMAP_SIZE, SHORTCUT_INFO_BITMAP_SIZE, Bitmap.Config.ARGB_8888); Bitmap scaled = Bitmap.createScaledBitmap(toWrap, SHORTCUT_INFO_WRAPPED_SIZE, SHORTCUT_INFO_WRAPPED_SIZE, true); @@ -35,13 +20,4 @@ public final class DrawableUtil { return bitmap; } - - /** - * Returns a new {@link Drawable} that safely wraps and tints the provided drawable. - */ - public static @NonNull Drawable tint(@NonNull Drawable drawable, @ColorInt int tint) { - Drawable tinted = DrawableCompat.wrap(drawable).mutate(); - DrawableCompat.setTint(tinted, tint); - return tinted; - } } diff --git a/src/org/thoughtcrime/securesms/util/DynamicLanguage.java b/src/main/java/org/thoughtcrime/securesms/util/DynamicLanguage.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/DynamicLanguage.java rename to src/main/java/org/thoughtcrime/securesms/util/DynamicLanguage.java diff --git a/src/org/thoughtcrime/securesms/util/DynamicNoActionBarTheme.java b/src/main/java/org/thoughtcrime/securesms/util/DynamicNoActionBarTheme.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/DynamicNoActionBarTheme.java rename to src/main/java/org/thoughtcrime/securesms/util/DynamicNoActionBarTheme.java diff --git a/src/org/thoughtcrime/securesms/util/DynamicTheme.java b/src/main/java/org/thoughtcrime/securesms/util/DynamicTheme.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/DynamicTheme.java rename to src/main/java/org/thoughtcrime/securesms/util/DynamicTheme.java diff --git a/src/org/thoughtcrime/securesms/util/FileProviderUtil.java b/src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/FileProviderUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/FileProviderUtil.java diff --git a/src/org/thoughtcrime/securesms/util/FileUtils.java b/src/main/java/org/thoughtcrime/securesms/util/FileUtils.java similarity index 85% rename from src/org/thoughtcrime/securesms/util/FileUtils.java rename to src/main/java/org/thoughtcrime/securesms/util/FileUtils.java index b4c1683eb..b7a55f551 100644 --- a/src/org/thoughtcrime/securesms/util/FileUtils.java +++ b/src/main/java/org/thoughtcrime/securesms/util/FileUtils.java @@ -2,13 +2,8 @@ package org.thoughtcrime.securesms.util; import android.text.TextUtils; -import java.io.FileDescriptor; -import java.nio.charset.StandardCharsets; - public class FileUtils { - public static native int getFileDescriptorOwner(FileDescriptor fileDescriptor); - public static String sanitizeFilename(String name) { if (TextUtils.isEmpty(name) || ".".equals(name) || "..".equals(name)) { return "(invalid)"; diff --git a/src/org/thoughtcrime/securesms/util/FutureTaskListener.java b/src/main/java/org/thoughtcrime/securesms/util/FutureTaskListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/FutureTaskListener.java rename to src/main/java/org/thoughtcrime/securesms/util/FutureTaskListener.java diff --git a/src/org/thoughtcrime/securesms/util/Hash.java b/src/main/java/org/thoughtcrime/securesms/util/Hash.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Hash.java rename to src/main/java/org/thoughtcrime/securesms/util/Hash.java diff --git a/src/org/thoughtcrime/securesms/util/Hex.java b/src/main/java/org/thoughtcrime/securesms/util/Hex.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Hex.java rename to src/main/java/org/thoughtcrime/securesms/util/Hex.java diff --git a/src/org/thoughtcrime/securesms/util/IntentUtils.java b/src/main/java/org/thoughtcrime/securesms/util/IntentUtils.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/IntentUtils.java rename to src/main/java/org/thoughtcrime/securesms/util/IntentUtils.java diff --git a/src/org/thoughtcrime/securesms/util/JsonUtils.java b/src/main/java/org/thoughtcrime/securesms/util/JsonUtils.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/JsonUtils.java rename to src/main/java/org/thoughtcrime/securesms/util/JsonUtils.java diff --git a/src/org/thoughtcrime/securesms/util/LRUCache.java b/src/main/java/org/thoughtcrime/securesms/util/LRUCache.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/LRUCache.java rename to src/main/java/org/thoughtcrime/securesms/util/LRUCache.java diff --git a/src/org/thoughtcrime/securesms/util/ListenableFutureTask.java b/src/main/java/org/thoughtcrime/securesms/util/ListenableFutureTask.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ListenableFutureTask.java rename to src/main/java/org/thoughtcrime/securesms/util/ListenableFutureTask.java diff --git a/src/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java similarity index 95% rename from src/org/thoughtcrime/securesms/util/LongClickCopySpan.java rename to src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index e389868e5..5801ac607 100644 --- a/src/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -16,6 +16,7 @@ import com.b44t.messenger.DcContext; import org.thoughtcrime.securesms.ConversationActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.connect.DcHelper; +import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.util.Util; public class LongClickCopySpan extends ClickableSpan { @@ -72,6 +73,9 @@ public class LongClickCopySpan extends ClickableSpan { } catch (Exception e) { e.printStackTrace(); } + } else if (Util.isInviteURL(url)) { + QrCodeHandler qrCodeHandler = new QrCodeHandler((Activity) widget.getContext()); + qrCodeHandler.handleQrData(url); } else { IntentUtils.showBrowserIntent(widget.getContext(), url); } diff --git a/src/org/thoughtcrime/securesms/util/LongClickMovementMethod.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/LongClickMovementMethod.java rename to src/main/java/org/thoughtcrime/securesms/util/LongClickMovementMethod.java diff --git a/src/org/thoughtcrime/securesms/util/MailtoUtil.java b/src/main/java/org/thoughtcrime/securesms/util/MailtoUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/MailtoUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/MailtoUtil.java diff --git a/src/org/thoughtcrime/securesms/util/MediaUtil.java b/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java similarity index 97% rename from src/org/thoughtcrime/securesms/util/MediaUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java index 70ca04ce4..7b205b992 100644 --- a/src/org/thoughtcrime/securesms/util/MediaUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/MediaUtil.java @@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.Slide; import org.thoughtcrime.securesms.mms.StickerSlide; +import org.thoughtcrime.securesms.mms.VcardSlide; import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.providers.PersistentBlobProvider; @@ -48,6 +49,7 @@ public class MediaUtil { public static final String VIDEO_UNSPECIFIED = "video/*"; public static final String OCTET = "application/octet-stream"; public static final String WEBXDC = "application/webxdc+zip"; + public static final String VCARD = "text/vcard"; public static Slide getSlideForMsg(Context context, DcMsg dcMsg) { @@ -63,6 +65,8 @@ public class MediaUtil { } else if (dcMsg.getType() == DcMsg.DC_MSG_AUDIO || dcMsg.getType() == DcMsg.DC_MSG_VOICE) { slide = new AudioSlide(context, dcMsg); + } else if (dcMsg.getType() == DcMsg.DC_MSG_VCARD) { + slide = new VcardSlide(context, dcMsg); } else if (dcMsg.getType() == DcMsg.DC_MSG_FILE || dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) { slide = new DocumentSlide(context, dcMsg); @@ -301,6 +305,8 @@ public class MediaUtil { return "webp"; case WEBXDC: return "xdc"; + case VCARD: + return "vcf"; } return null; } diff --git a/src/org/thoughtcrime/securesms/util/Pair.java b/src/main/java/org/thoughtcrime/securesms/util/Pair.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Pair.java rename to src/main/java/org/thoughtcrime/securesms/util/Pair.java diff --git a/src/org/thoughtcrime/securesms/util/ParcelUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ParcelUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ParcelUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ParcelUtil.java diff --git a/src/org/thoughtcrime/securesms/util/Prefs.java b/src/main/java/org/thoughtcrime/securesms/util/Prefs.java similarity index 97% rename from src/org/thoughtcrime/securesms/util/Prefs.java rename to src/main/java/org/thoughtcrime/securesms/util/Prefs.java index 56a8e1f3a..c12d2f5bd 100644 --- a/src/org/thoughtcrime/securesms/util/Prefs.java +++ b/src/main/java/org/thoughtcrime/securesms/util/Prefs.java @@ -15,6 +15,7 @@ import androidx.core.app.NotificationCompat; import com.b44t.messenger.DcContext; +import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference; @@ -61,13 +62,11 @@ public class Prefs { private static final String PREF_CONTACT_PHOTO_IDENTIFIERS = "pref_contact_photo_identifiers"; - private static final String MAP_CENTER_LATITUDE = "pref_map_center_latitude"; - private static final String MAP_CENTER_LONGITUDE = "pref_map_center_longitude"; - private static final String MAP_ZOOM = "pref_map_zoom"; - public static final String ALWAYS_LOAD_REMOTE_CONTENT = "pref_always_load_remote_content"; public static final boolean ALWAYS_LOAD_REMOTE_CONTENT_DEFAULT = false; + public static final String LAST_DEVICE_MSG_LABEL = "pref_last_device_msg_id"; + public enum VibrateState { DEFAULT(0), ENABLED(1), DISABLED(2); private final int id; @@ -173,6 +172,10 @@ public class Prefs { return getBooleanPreference(context, NOTIFICATION_PREF, true); } + public static boolean isPushEnabled(Context context) { + return BuildConfig.USE_PLAY_SERVICES && getBooleanPreference(context, "pref_push_enabled", true); + } + public static boolean isHardCompressionEnabled(Context context) { return DcHelper.getContext(context).getConfigInt(DcHelper.CONFIG_MEDIA_QUALITY) == DcContext.DC_MEDIA_QUALITY_WORSE; } diff --git a/src/org/thoughtcrime/securesms/util/RelayUtil.java b/src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/RelayUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/RelayUtil.java diff --git a/src/org/thoughtcrime/securesms/util/ResUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ResUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ResUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ResUtil.java diff --git a/src/org/thoughtcrime/securesms/util/SaveAttachmentTask.java b/src/main/java/org/thoughtcrime/securesms/util/SaveAttachmentTask.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SaveAttachmentTask.java rename to src/main/java/org/thoughtcrime/securesms/util/SaveAttachmentTask.java diff --git a/src/org/thoughtcrime/securesms/util/ScreenLockUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ScreenLockUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ScreenLockUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ScreenLockUtil.java diff --git a/src/org/thoughtcrime/securesms/util/SelectedContactsAdapter.java b/src/main/java/org/thoughtcrime/securesms/util/SelectedContactsAdapter.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SelectedContactsAdapter.java rename to src/main/java/org/thoughtcrime/securesms/util/SelectedContactsAdapter.java diff --git a/src/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java b/src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java diff --git a/src/org/thoughtcrime/securesms/util/ServiceUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ServiceUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ServiceUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ServiceUtil.java diff --git a/src/org/thoughtcrime/securesms/util/SignalProtocolLogger.java b/src/main/java/org/thoughtcrime/securesms/util/SignalProtocolLogger.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SignalProtocolLogger.java rename to src/main/java/org/thoughtcrime/securesms/util/SignalProtocolLogger.java diff --git a/src/org/thoughtcrime/securesms/util/SignalProtocolLoggerProvider.java b/src/main/java/org/thoughtcrime/securesms/util/SignalProtocolLoggerProvider.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SignalProtocolLoggerProvider.java rename to src/main/java/org/thoughtcrime/securesms/util/SignalProtocolLoggerProvider.java diff --git a/src/org/thoughtcrime/securesms/util/SpanUtil.java b/src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/SpanUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/SpanUtil.java diff --git a/src/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java b/src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java rename to src/main/java/org/thoughtcrime/securesms/util/StickyHeaderDecoration.java diff --git a/src/org/thoughtcrime/securesms/util/Stopwatch.java b/src/main/java/org/thoughtcrime/securesms/util/Stopwatch.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/Stopwatch.java rename to src/main/java/org/thoughtcrime/securesms/util/Stopwatch.java diff --git a/src/org/thoughtcrime/securesms/util/StorageUtil.java b/src/main/java/org/thoughtcrime/securesms/util/StorageUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/StorageUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/StorageUtil.java diff --git a/src/org/thoughtcrime/securesms/util/StreamUtil.java b/src/main/java/org/thoughtcrime/securesms/util/StreamUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/StreamUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/StreamUtil.java diff --git a/src/org/thoughtcrime/securesms/util/ThemeUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ThemeUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ThemeUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ThemeUtil.java diff --git a/src/org/thoughtcrime/securesms/util/ThreadUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ThreadUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/ThreadUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ThreadUtil.java diff --git a/src/org/thoughtcrime/securesms/util/Util.java b/src/main/java/org/thoughtcrime/securesms/util/Util.java similarity index 94% rename from src/org/thoughtcrime/securesms/util/Util.java rename to src/main/java/org/thoughtcrime/securesms/util/Util.java index 90f9a03af..6c962c2cf 100644 --- a/src/org/thoughtcrime/securesms/util/Util.java +++ b/src/main/java/org/thoughtcrime/securesms/util/Util.java @@ -23,6 +23,7 @@ import android.content.ClipDescription; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; +import android.net.Uri; import android.os.AsyncTask; import android.os.Build.VERSION; import android.os.Build.VERSION_CODES; @@ -47,15 +48,14 @@ import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.security.SecureRandom; import java.text.DecimalFormat; import java.util.Arrays; -import java.util.Collection; import java.util.Objects; import java.util.concurrent.CountDownLatch; public class Util { private static final String TAG = Util.class.getSimpleName(); + private static final String INVITE_DOMAIN = "i.delta.chat"; public static final Handler handler = new Handler(Looper.getMainLooper()); @@ -63,6 +63,23 @@ public class Util { return value == null || value.getText() == null || TextUtils.isEmpty(value.getTextTrimmed()); } + public static boolean isInviteURL(Uri uri) { + return INVITE_DOMAIN.equals(uri.getHost()) && uri.getEncodedFragment() != null; + } + + public static boolean isInviteURL(String url) { + try { + return isInviteURL(Uri.parse(url)); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public static String QrDataToInviteURL(String qrData) { + return "https://" + INVITE_DOMAIN + "/#" + qrData.split(":", 2)[1].replaceFirst("#", "&"); + } + public static CharSequence getBoldedString(String value) { SpannableString spanned = new SpannableString(value); spanned.setSpan(new StyleSpan(Typeface.BOLD), 0, @@ -149,16 +166,6 @@ public class Util { return success; } - public static byte[] getSecretBytes(int size) { - byte[] secret = new byte[size]; - getSecureRandom().nextBytes(secret); - return secret; - } - - public static SecureRandom getSecureRandom() { - return new SecureRandom(); - } - public static boolean isMainThread() { return Looper.myLooper() == Looper.getMainLooper(); } diff --git a/src/org/thoughtcrime/securesms/util/ViewUtil.java b/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java similarity index 90% rename from src/org/thoughtcrime/securesms/util/ViewUtil.java rename to src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java index c9f67e73d..ff6ffd3c8 100644 --- a/src/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java @@ -38,7 +38,6 @@ import android.view.ViewGroup; import android.view.ViewStub; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; -import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; import com.b44t.messenger.util.concurrent.ListenableFuture; @@ -49,47 +48,19 @@ import org.thoughtcrime.securesms.util.views.Stub; public class ViewUtil { @SuppressWarnings("deprecation") public static void setBackground(final @NonNull View v, final @Nullable Drawable drawable) { - if (VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN) { - v.setBackground(drawable); - } else { - v.setBackgroundDrawable(drawable); - } - } - - public static void setY(final @NonNull View v, final int y) { - if (VERSION.SDK_INT >= 11) { - ViewCompat.setY(v, y); - } else { - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); - params.topMargin = y; - v.setLayoutParams(params); - } + v.setBackground(drawable); } public static float getY(final @NonNull View v) { - if (VERSION.SDK_INT >= 11) { - return ViewCompat.getY(v); - } else { - return ((ViewGroup.MarginLayoutParams)v.getLayoutParams()).topMargin; - } + return ViewCompat.getY(v); } public static void setX(final @NonNull View v, final int x) { - if (VERSION.SDK_INT >= 11) { - ViewCompat.setX(v, x); - } else { - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams)v.getLayoutParams(); - params.leftMargin = x; - v.setLayoutParams(params); - } + ViewCompat.setX(v, x); } public static float getX(final @NonNull View v) { - if (VERSION.SDK_INT >= 11) { - return ViewCompat.getX(v); - } else { - return ((LayoutParams)v.getLayoutParams()).leftMargin; - } + return ViewCompat.getX(v); } public static void swapChildInPlace(ViewGroup parent, View toRemove, View toAdd, int defaultIndex) { diff --git a/src/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java b/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java rename to src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Absent.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Absent.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Absent.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Absent.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Function.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Function.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Function.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Function.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Optional.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Optional.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Optional.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Optional.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Preconditions.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Preconditions.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Preconditions.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Preconditions.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Present.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Present.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Present.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Present.java diff --git a/src/org/thoughtcrime/securesms/util/guava/Supplier.java b/src/main/java/org/thoughtcrime/securesms/util/guava/Supplier.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/guava/Supplier.java rename to src/main/java/org/thoughtcrime/securesms/util/guava/Supplier.java diff --git a/src/org/thoughtcrime/securesms/util/spans/CenterAlignedRelativeSizeSpan.java b/src/main/java/org/thoughtcrime/securesms/util/spans/CenterAlignedRelativeSizeSpan.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/spans/CenterAlignedRelativeSizeSpan.java rename to src/main/java/org/thoughtcrime/securesms/util/spans/CenterAlignedRelativeSizeSpan.java diff --git a/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java b/src/main/java/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java similarity index 91% rename from src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java rename to src/main/java/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java index 1f3f30fd8..04c10d815 100644 --- a/src/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java +++ b/src/main/java/org/thoughtcrime/securesms/util/task/ProgressDialogAsyncTask.java @@ -31,10 +31,6 @@ public abstract class ProgressDialogAsyncTask extends this.onCancelListener = onCancelListener; } - public ProgressDialogAsyncTask(Context context, int title, int message) { - this(context, context.getString(title), context.getString(message)); - } - @Override protected void onPreExecute() { final Context context = contextReference.get(); diff --git a/src/org/thoughtcrime/securesms/util/task/SnackbarAsyncTask.java b/src/main/java/org/thoughtcrime/securesms/util/task/SnackbarAsyncTask.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/task/SnackbarAsyncTask.java rename to src/main/java/org/thoughtcrime/securesms/util/task/SnackbarAsyncTask.java diff --git a/src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java b/src/main/java/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java rename to src/main/java/org/thoughtcrime/securesms/util/views/ConversationAdaptiveActionsToolbar.java diff --git a/src/org/thoughtcrime/securesms/util/views/ProgressDialog.java b/src/main/java/org/thoughtcrime/securesms/util/views/ProgressDialog.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/views/ProgressDialog.java rename to src/main/java/org/thoughtcrime/securesms/util/views/ProgressDialog.java diff --git a/src/org/thoughtcrime/securesms/util/views/Stub.java b/src/main/java/org/thoughtcrime/securesms/util/views/Stub.java similarity index 100% rename from src/org/thoughtcrime/securesms/util/views/Stub.java rename to src/main/java/org/thoughtcrime/securesms/util/views/Stub.java diff --git a/src/org/thoughtcrime/securesms/video/VideoPlayer.java b/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java similarity index 67% rename from src/org/thoughtcrime/securesms/video/VideoPlayer.java rename to src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java index 7fddf7768..e5b001a41 100644 --- a/src/org/thoughtcrime/securesms/video/VideoPlayer.java +++ b/src/main/java/org/thoughtcrime/securesms/video/VideoPlayer.java @@ -17,17 +17,12 @@ package org.thoughtcrime.securesms.video; import android.content.Context; -import android.os.Build; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import android.util.AttributeSet; -import android.util.Log; import android.view.Window; import android.view.WindowManager; import android.widget.FrameLayout; -import android.widget.MediaController; -import android.widget.Toast; -import android.widget.VideoView; import com.google.android.exoplayer2.DefaultLoadControl; import com.google.android.exoplayer2.ExoPlayerFactory; @@ -48,23 +43,15 @@ import com.google.android.exoplayer2.upstream.DefaultBandwidthMeter; import com.google.android.exoplayer2.upstream.DefaultDataSourceFactory; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.attachments.AttachmentServer; -import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.video.exo.AttachmentDataSourceFactory; -import java.io.IOException; - public class VideoPlayer extends FrameLayout { - private static final String TAG = VideoPlayer.class.getName(); - - @Nullable private final VideoView videoView; @Nullable private final SimpleExoPlayerView exoView; @Nullable private SimpleExoPlayer exoPlayer; - @Nullable private AttachmentServer attachmentServer; @Nullable private Window window; public VideoPlayer(Context context) { @@ -80,36 +67,21 @@ public class VideoPlayer extends FrameLayout { inflate(context, R.layout.video_player, this); - if (Build.VERSION.SDK_INT >= 16) { - this.exoView = ViewUtil.findById(this, R.id.video_view); - this.videoView = null; - } else { - this.videoView = ViewUtil.findById(this, R.id.video_view); - this.exoView = null; - initializeVideoViewControls(videoView); - } + this.exoView = ViewUtil.findById(this, R.id.video_view); } public void setVideoSource(@NonNull VideoSlide videoSource, boolean autoplay) - throws IOException { - if (Build.VERSION.SDK_INT >= 16) setExoViewSource(videoSource, autoplay); - else setVideoViewSource(videoSource, autoplay); + setExoViewSource(videoSource, autoplay); } public void pause() { - if (this.attachmentServer != null && this.videoView != null) { - this.videoView.stopPlayback(); - } else if (this.exoPlayer != null) { + if (this.exoPlayer != null) { this.exoPlayer.setPlayWhenReady(false); } } public void cleanup() { - if (this.attachmentServer != null) { - this.attachmentServer.stop(); - } - if (this.exoPlayer != null) { this.exoPlayer.release(); } @@ -120,7 +92,6 @@ public class VideoPlayer extends FrameLayout { } private void setExoViewSource(@NonNull VideoSlide videoSource, boolean autoplay) - throws IOException { BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); TrackSelection.Factory videoTrackSelectionFactory = new AdaptiveTrackSelection.Factory(bandwidthMeter); @@ -142,40 +113,6 @@ public class VideoPlayer extends FrameLayout { exoPlayer.setPlayWhenReady(autoplay); } - private void setVideoViewSource(@NonNull VideoSlide videoSource, boolean autoplay) - throws IOException - { - if (this.attachmentServer != null) { - this.attachmentServer.stop(); - } - - if (videoSource.getUri() != null && PartAuthority.isLocalUri(videoSource.getUri())) { - Log.w(TAG, "Starting video attachment server for part provider Uri..."); - this.attachmentServer = new AttachmentServer(getContext(), videoSource.asAttachment()); - this.attachmentServer.start(); - - //noinspection ConstantConditions - this.videoView.setVideoURI(this.attachmentServer.getUri()); - } else if (videoSource.getUri() != null) { - Log.w(TAG, "Playing video directly from non-local Uri..."); - //noinspection ConstantConditions - this.videoView.setVideoURI(videoSource.getUri()); - } else { - Toast.makeText(getContext(), getContext().getString(R.string.error), Toast.LENGTH_LONG).show(); - return; - } - - if (autoplay) this.videoView.start(); - } - - private void initializeVideoViewControls(@NonNull VideoView videoView) { - MediaController mediaController = new MediaController(getContext()); - mediaController.setAnchorView(videoView); - mediaController.setMediaPlayer(videoView); - - videoView.setMediaController(mediaController); - } - private static class ExoPlayerListener implements Player.EventListener { private final Window window; diff --git a/src/org/thoughtcrime/securesms/video/exo/AttachmentDataSource.java b/src/main/java/org/thoughtcrime/securesms/video/exo/AttachmentDataSource.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/exo/AttachmentDataSource.java rename to src/main/java/org/thoughtcrime/securesms/video/exo/AttachmentDataSource.java diff --git a/src/org/thoughtcrime/securesms/video/exo/AttachmentDataSourceFactory.java b/src/main/java/org/thoughtcrime/securesms/video/exo/AttachmentDataSourceFactory.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/exo/AttachmentDataSourceFactory.java rename to src/main/java/org/thoughtcrime/securesms/video/exo/AttachmentDataSourceFactory.java diff --git a/src/org/thoughtcrime/securesms/video/recode/InputSurface.java b/src/main/java/org/thoughtcrime/securesms/video/recode/InputSurface.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/InputSurface.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/InputSurface.java diff --git a/src/org/thoughtcrime/securesms/video/recode/MP4Builder.java b/src/main/java/org/thoughtcrime/securesms/video/recode/MP4Builder.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/MP4Builder.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/MP4Builder.java diff --git a/src/org/thoughtcrime/securesms/video/recode/Mp4Movie.java b/src/main/java/org/thoughtcrime/securesms/video/recode/Mp4Movie.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/Mp4Movie.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/Mp4Movie.java diff --git a/src/org/thoughtcrime/securesms/video/recode/OutputSurface.java b/src/main/java/org/thoughtcrime/securesms/video/recode/OutputSurface.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/OutputSurface.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/OutputSurface.java diff --git a/src/org/thoughtcrime/securesms/video/recode/Sample.java b/src/main/java/org/thoughtcrime/securesms/video/recode/Sample.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/Sample.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/Sample.java diff --git a/src/org/thoughtcrime/securesms/video/recode/TextureRenderer.java b/src/main/java/org/thoughtcrime/securesms/video/recode/TextureRenderer.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/TextureRenderer.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/TextureRenderer.java diff --git a/src/org/thoughtcrime/securesms/video/recode/Track.java b/src/main/java/org/thoughtcrime/securesms/video/recode/Track.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/Track.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/Track.java diff --git a/src/org/thoughtcrime/securesms/video/recode/VideoRecoder.java b/src/main/java/org/thoughtcrime/securesms/video/recode/VideoRecoder.java similarity index 100% rename from src/org/thoughtcrime/securesms/video/recode/VideoRecoder.java rename to src/main/java/org/thoughtcrime/securesms/video/recode/VideoRecoder.java diff --git a/src/org/thoughtcrime/securesms/videochat/VideochatUtil.java b/src/main/java/org/thoughtcrime/securesms/videochat/VideochatUtil.java similarity index 100% rename from src/org/thoughtcrime/securesms/videochat/VideochatUtil.java rename to src/main/java/org/thoughtcrime/securesms/videochat/VideochatUtil.java diff --git a/res/anim/animation_toggle_in.xml b/src/main/res/anim/animation_toggle_in.xml similarity index 100% rename from res/anim/animation_toggle_in.xml rename to src/main/res/anim/animation_toggle_in.xml diff --git a/res/anim/animation_toggle_out.xml b/src/main/res/anim/animation_toggle_out.xml similarity index 100% rename from res/anim/animation_toggle_out.xml rename to src/main/res/anim/animation_toggle_out.xml diff --git a/res/anim/fade_scale_in.xml b/src/main/res/anim/fade_scale_in.xml similarity index 100% rename from res/anim/fade_scale_in.xml rename to src/main/res/anim/fade_scale_in.xml diff --git a/res/anim/fade_scale_out.xml b/src/main/res/anim/fade_scale_out.xml similarity index 100% rename from res/anim/fade_scale_out.xml rename to src/main/res/anim/fade_scale_out.xml diff --git a/res/anim/slide_from_right.xml b/src/main/res/anim/slide_from_right.xml similarity index 100% rename from res/anim/slide_from_right.xml rename to src/main/res/anim/slide_from_right.xml diff --git a/res/anim/slide_to_right.xml b/src/main/res/anim/slide_to_right.xml similarity index 100% rename from res/anim/slide_to_right.xml rename to src/main/res/anim/slide_to_right.xml diff --git a/res/animator/bottom_pause_to_play_animation.xml b/src/main/res/animator/bottom_pause_to_play_animation.xml similarity index 100% rename from res/animator/bottom_pause_to_play_animation.xml rename to src/main/res/animator/bottom_pause_to_play_animation.xml diff --git a/res/animator/bottom_play_to_pause_animation.xml b/src/main/res/animator/bottom_play_to_pause_animation.xml similarity index 100% rename from res/animator/bottom_play_to_pause_animation.xml rename to src/main/res/animator/bottom_play_to_pause_animation.xml diff --git a/res/animator/rotate_90_animation.xml b/src/main/res/animator/rotate_90_animation.xml similarity index 100% rename from res/animator/rotate_90_animation.xml rename to src/main/res/animator/rotate_90_animation.xml diff --git a/res/animator/rotate_minus_90_animation.xml b/src/main/res/animator/rotate_minus_90_animation.xml similarity index 100% rename from res/animator/rotate_minus_90_animation.xml rename to src/main/res/animator/rotate_minus_90_animation.xml diff --git a/res/animator/upper_pause_to_play_animation.xml b/src/main/res/animator/upper_pause_to_play_animation.xml similarity index 100% rename from res/animator/upper_pause_to_play_animation.xml rename to src/main/res/animator/upper_pause_to_play_animation.xml diff --git a/res/animator/upper_play_to_pause_animation.xml b/src/main/res/animator/upper_play_to_pause_animation.xml similarity index 100% rename from res/animator/upper_play_to_pause_animation.xml rename to src/main/res/animator/upper_play_to_pause_animation.xml diff --git a/res/color/text_color_dark_theme.xml b/src/main/res/color/text_color_dark_theme.xml similarity index 100% rename from res/color/text_color_dark_theme.xml rename to src/main/res/color/text_color_dark_theme.xml diff --git a/res/color/text_color_secondary_dark_theme.xml b/src/main/res/color/text_color_secondary_dark_theme.xml similarity index 100% rename from res/color/text_color_secondary_dark_theme.xml rename to src/main/res/color/text_color_secondary_dark_theme.xml diff --git a/res/drawable-hdpi-v11/icon_notification.png b/src/main/res/drawable-hdpi-v11/icon_notification.png similarity index 100% rename from res/drawable-hdpi-v11/icon_notification.png rename to src/main/res/drawable-hdpi-v11/icon_notification.png diff --git a/res/drawable-hdpi/check.png b/src/main/res/drawable-hdpi/check.png similarity index 100% rename from res/drawable-hdpi/check.png rename to src/main/res/drawable-hdpi/check.png diff --git a/res/drawable-hdpi/divet_lower_right_dark.png b/src/main/res/drawable-hdpi/divet_lower_right_dark.png similarity index 100% rename from res/drawable-hdpi/divet_lower_right_dark.png rename to src/main/res/drawable-hdpi/divet_lower_right_dark.png diff --git a/res/drawable-hdpi/divet_lower_right_light.png b/src/main/res/drawable-hdpi/divet_lower_right_light.png similarity index 100% rename from res/drawable-hdpi/divet_lower_right_light.png rename to src/main/res/drawable-hdpi/divet_lower_right_light.png diff --git a/res/drawable-hdpi/ic_account_box_dark.png b/src/main/res/drawable-hdpi/ic_account_box_dark.png similarity index 100% rename from res/drawable-hdpi/ic_account_box_dark.png rename to src/main/res/drawable-hdpi/ic_account_box_dark.png diff --git a/res/drawable-hdpi/ic_account_box_light.png b/src/main/res/drawable-hdpi/ic_account_box_light.png similarity index 100% rename from res/drawable-hdpi/ic_account_box_light.png rename to src/main/res/drawable-hdpi/ic_account_box_light.png diff --git a/res/drawable-hdpi/ic_add_white_24dp.png b/src/main/res/drawable-hdpi/ic_add_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_add_white_24dp.png rename to src/main/res/drawable-hdpi/ic_add_white_24dp.png diff --git a/res/drawable-hdpi/ic_advanced_white_24dp.png b/src/main/res/drawable-hdpi/ic_advanced_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_advanced_white_24dp.png rename to src/main/res/drawable-hdpi/ic_advanced_white_24dp.png diff --git a/res/drawable-hdpi/ic_archive_white_24dp.png b/src/main/res/drawable-hdpi/ic_archive_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_archive_white_24dp.png rename to src/main/res/drawable-hdpi/ic_archive_white_24dp.png diff --git a/res/drawable-hdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-hdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-hdpi/ic_attach_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_attach_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_attach_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_attach_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_attach_white_24dp.png b/src/main/res/drawable-hdpi/ic_attach_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_attach_white_24dp.png rename to src/main/res/drawable-hdpi/ic_attach_white_24dp.png diff --git a/res/drawable-hdpi/ic_backspace_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_backspace_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_backspace_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_backspace_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_blur_on_white_24.png b/src/main/res/drawable-hdpi/ic_blur_on_white_24.png similarity index 100% rename from res/drawable-hdpi/ic_blur_on_white_24.png rename to src/main/res/drawable-hdpi/ic_blur_on_white_24.png diff --git a/res/drawable-hdpi/ic_brightness_6_white_24dp.png b/src/main/res/drawable-hdpi/ic_brightness_6_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_brightness_6_white_24dp.png rename to src/main/res/drawable-hdpi/ic_brightness_6_white_24dp.png diff --git a/res/drawable-hdpi/ic_brush_highlight_32.webp b/src/main/res/drawable-hdpi/ic_brush_highlight_32.webp similarity index 100% rename from res/drawable-hdpi/ic_brush_highlight_32.webp rename to src/main/res/drawable-hdpi/ic_brush_highlight_32.webp diff --git a/res/drawable-hdpi/ic_brush_marker_32.webp b/src/main/res/drawable-hdpi/ic_brush_marker_32.webp similarity index 100% rename from res/drawable-hdpi/ic_brush_marker_32.webp rename to src/main/res/drawable-hdpi/ic_brush_marker_32.webp diff --git a/res/drawable-hdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_camera_alt_white_24dp.png rename to src/main/res/drawable-hdpi/ic_camera_alt_white_24dp.png diff --git a/res/drawable-hdpi/ic_check_white_24dp.png b/src/main/res/drawable-hdpi/ic_check_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_check_white_24dp.png rename to src/main/res/drawable-hdpi/ic_check_white_24dp.png diff --git a/res/drawable-hdpi/ic_circle_fill_white_48dp.png b/src/main/res/drawable-hdpi/ic_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-hdpi/ic_circle_fill_white_48dp.png rename to src/main/res/drawable-hdpi/ic_circle_fill_white_48dp.png diff --git a/res/drawable-hdpi/ic_clear_white_24dp.png b/src/main/res/drawable-hdpi/ic_clear_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_clear_white_24dp.png rename to src/main/res/drawable-hdpi/ic_clear_white_24dp.png diff --git a/res/drawable-hdpi/ic_close_white_18dp.webp b/src/main/res/drawable-hdpi/ic_close_white_18dp.webp similarity index 100% rename from res/drawable-hdpi/ic_close_white_18dp.webp rename to src/main/res/drawable-hdpi/ic_close_white_18dp.webp diff --git a/res/drawable-hdpi/ic_close_white_24dp.png b/src/main/res/drawable-hdpi/ic_close_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_close_white_24dp.png rename to src/main/res/drawable-hdpi/ic_close_white_24dp.png diff --git a/res/drawable-hdpi/ic_contact_picture.png b/src/main/res/drawable-hdpi/ic_contact_picture.png similarity index 100% rename from res/drawable-hdpi/ic_contact_picture.png rename to src/main/res/drawable-hdpi/ic_contact_picture.png diff --git a/res/drawable-hdpi/ic_content_copy_white_24dp.png b/src/main/res/drawable-hdpi/ic_content_copy_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_content_copy_white_24dp.png rename to src/main/res/drawable-hdpi/ic_content_copy_white_24dp.png diff --git a/res/drawable-hdpi/ic_create_white_24dp.png b/src/main/res/drawable-hdpi/ic_create_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_create_white_24dp.png rename to src/main/res/drawable-hdpi/ic_create_white_24dp.png diff --git a/res/drawable-hdpi/ic_crop_32.webp b/src/main/res/drawable-hdpi/ic_crop_32.webp similarity index 100% rename from res/drawable-hdpi/ic_crop_32.webp rename to src/main/res/drawable-hdpi/ic_crop_32.webp diff --git a/res/drawable-hdpi/ic_delete_white_24dp.png b/src/main/res/drawable-hdpi/ic_delete_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_delete_white_24dp.png rename to src/main/res/drawable-hdpi/ic_delete_white_24dp.png diff --git a/res/drawable-hdpi/ic_delivery_status_read.png b/src/main/res/drawable-hdpi/ic_delivery_status_read.png similarity index 100% rename from res/drawable-hdpi/ic_delivery_status_read.png rename to src/main/res/drawable-hdpi/ic_delivery_status_read.png diff --git a/res/drawable-hdpi/ic_delivery_status_sending.png b/src/main/res/drawable-hdpi/ic_delivery_status_sending.png similarity index 100% rename from res/drawable-hdpi/ic_delivery_status_sending.png rename to src/main/res/drawable-hdpi/ic_delivery_status_sending.png diff --git a/res/drawable-hdpi/ic_delivery_status_sent.png b/src/main/res/drawable-hdpi/ic_delivery_status_sent.png similarity index 100% rename from res/drawable-hdpi/ic_delivery_status_sent.png rename to src/main/res/drawable-hdpi/ic_delivery_status_sent.png diff --git a/res/drawable-hdpi/ic_emoji_32.webp b/src/main/res/drawable-hdpi/ic_emoji_32.webp similarity index 100% rename from res/drawable-hdpi/ic_emoji_32.webp rename to src/main/res/drawable-hdpi/ic_emoji_32.webp diff --git a/res/drawable-hdpi/ic_flip_32.webp b/src/main/res/drawable-hdpi/ic_flip_32.webp similarity index 100% rename from res/drawable-hdpi/ic_flip_32.webp rename to src/main/res/drawable-hdpi/ic_flip_32.webp diff --git a/res/drawable-hdpi/ic_forum_white_24dp.png b/src/main/res/drawable-hdpi/ic_forum_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_forum_white_24dp.png rename to src/main/res/drawable-hdpi/ic_forum_white_24dp.png diff --git a/res/drawable-hdpi/ic_forward_white_24dp.png b/src/main/res/drawable-hdpi/ic_forward_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_forward_white_24dp.png rename to src/main/res/drawable-hdpi/ic_forward_white_24dp.png diff --git a/res/drawable-hdpi/ic_group_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_group_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_group_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_group_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_group_white_24dp.png b/src/main/res/drawable-hdpi/ic_group_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_group_white_24dp.png rename to src/main/res/drawable-hdpi/ic_group_white_24dp.png diff --git a/res/drawable-hdpi/ic_headset_white_24dp.png b/src/main/res/drawable-hdpi/ic_headset_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_headset_white_24dp.png rename to src/main/res/drawable-hdpi/ic_headset_white_24dp.png diff --git a/res/drawable-hdpi/ic_help_white_24dp.png b/src/main/res/drawable-hdpi/ic_help_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_help_white_24dp.png rename to src/main/res/drawable-hdpi/ic_help_white_24dp.png diff --git a/res/drawable-hdpi/ic_image_dark.png b/src/main/res/drawable-hdpi/ic_image_dark.png similarity index 100% rename from res/drawable-hdpi/ic_image_dark.png rename to src/main/res/drawable-hdpi/ic_image_dark.png diff --git a/res/drawable-hdpi/ic_image_light.png b/src/main/res/drawable-hdpi/ic_image_light.png similarity index 100% rename from res/drawable-hdpi/ic_image_light.png rename to src/main/res/drawable-hdpi/ic_image_light.png diff --git a/res/drawable-hdpi/ic_image_white_24dp.png b/src/main/res/drawable-hdpi/ic_image_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_image_white_24dp.png rename to src/main/res/drawable-hdpi/ic_image_white_24dp.png diff --git a/res/drawable-hdpi/ic_info_outline_dark.png b/src/main/res/drawable-hdpi/ic_info_outline_dark.png similarity index 100% rename from res/drawable-hdpi/ic_info_outline_dark.png rename to src/main/res/drawable-hdpi/ic_info_outline_dark.png diff --git a/res/drawable-hdpi/ic_info_outline_light.png b/src/main/res/drawable-hdpi/ic_info_outline_light.png similarity index 100% rename from res/drawable-hdpi/ic_info_outline_light.png rename to src/main/res/drawable-hdpi/ic_info_outline_light.png diff --git a/res/drawable-hdpi/ic_info_outline_white_24dp.png b/src/main/res/drawable-hdpi/ic_info_outline_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_info_outline_white_24dp.png rename to src/main/res/drawable-hdpi/ic_info_outline_white_24dp.png diff --git a/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png b/src/main/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_insert_drive_file_white_24dp.png rename to src/main/res/drawable-hdpi/ic_insert_drive_file_white_24dp.png diff --git a/res/drawable-hdpi/ic_keyboard_arrow_down_white_24dp.png b/src/main/res/drawable-hdpi/ic_keyboard_arrow_down_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_keyboard_arrow_down_white_24dp.png rename to src/main/res/drawable-hdpi/ic_keyboard_arrow_down_white_24dp.png diff --git a/res/drawable-hdpi/ic_keyboard_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_keyboard_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_keyboard_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_keyboard_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_keyboard_white_24dp.png b/src/main/res/drawable-hdpi/ic_keyboard_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_keyboard_white_24dp.png rename to src/main/res/drawable-hdpi/ic_keyboard_white_24dp.png diff --git a/res/drawable-hdpi/ic_launch_white_24dp.png b/src/main/res/drawable-hdpi/ic_launch_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_launch_white_24dp.png rename to src/main/res/drawable-hdpi/ic_launch_white_24dp.png diff --git a/res/drawable-hdpi/ic_local_dining_white_24dp.png b/src/main/res/drawable-hdpi/ic_local_dining_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_local_dining_white_24dp.png rename to src/main/res/drawable-hdpi/ic_local_dining_white_24dp.png diff --git a/res/drawable-hdpi/ic_location_off_white_24.png b/src/main/res/drawable-hdpi/ic_location_off_white_24.png similarity index 100% rename from res/drawable-hdpi/ic_location_off_white_24.png rename to src/main/res/drawable-hdpi/ic_location_off_white_24.png diff --git a/res/drawable-hdpi/ic_location_on_white_24dp.png b/src/main/res/drawable-hdpi/ic_location_on_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_location_on_white_24dp.png rename to src/main/res/drawable-hdpi/ic_location_on_white_24dp.png diff --git a/res/drawable-hdpi/ic_lock_white_18dp.png b/src/main/res/drawable-hdpi/ic_lock_white_18dp.png similarity index 100% rename from res/drawable-hdpi/ic_lock_white_18dp.png rename to src/main/res/drawable-hdpi/ic_lock_white_18dp.png diff --git a/res/drawable-hdpi/ic_lock_white_24dp.png b/src/main/res/drawable-hdpi/ic_lock_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_lock_white_24dp.png rename to src/main/res/drawable-hdpi/ic_lock_white_24dp.png diff --git a/res/drawable-hdpi/ic_mic_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_mic_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_mic_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_mic_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_mic_white_24dp.png b/src/main/res/drawable-hdpi/ic_mic_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_mic_white_24dp.png rename to src/main/res/drawable-hdpi/ic_mic_white_24dp.png diff --git a/res/drawable-hdpi/ic_mic_white_48dp.png b/src/main/res/drawable-hdpi/ic_mic_white_48dp.png similarity index 100% rename from res/drawable-hdpi/ic_mic_white_48dp.png rename to src/main/res/drawable-hdpi/ic_mic_white_48dp.png diff --git a/res/drawable-hdpi/ic_mood_grey600_24dp.png b/src/main/res/drawable-hdpi/ic_mood_grey600_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_mood_grey600_24dp.png rename to src/main/res/drawable-hdpi/ic_mood_grey600_24dp.png diff --git a/res/drawable-hdpi/ic_mood_white_24dp.png b/src/main/res/drawable-hdpi/ic_mood_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_mood_white_24dp.png rename to src/main/res/drawable-hdpi/ic_mood_white_24dp.png diff --git a/res/drawable-hdpi/ic_movie_creation_dark.png b/src/main/res/drawable-hdpi/ic_movie_creation_dark.png similarity index 100% rename from res/drawable-hdpi/ic_movie_creation_dark.png rename to src/main/res/drawable-hdpi/ic_movie_creation_dark.png diff --git a/res/drawable-hdpi/ic_movie_creation_light.png b/src/main/res/drawable-hdpi/ic_movie_creation_light.png similarity index 100% rename from res/drawable-hdpi/ic_movie_creation_light.png rename to src/main/res/drawable-hdpi/ic_movie_creation_light.png diff --git a/res/drawable-hdpi/ic_notifications_white_24dp.png b/src/main/res/drawable-hdpi/ic_notifications_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_notifications_white_24dp.png rename to src/main/res/drawable-hdpi/ic_notifications_white_24dp.png diff --git a/res/drawable-hdpi/ic_pause_circle_fill_white_48dp.png b/src/main/res/drawable-hdpi/ic_pause_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-hdpi/ic_pause_circle_fill_white_48dp.png rename to src/main/res/drawable-hdpi/ic_pause_circle_fill_white_48dp.png diff --git a/res/drawable-hdpi/ic_person_white_24dp.png b/src/main/res/drawable-hdpi/ic_person_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_person_white_24dp.png rename to src/main/res/drawable-hdpi/ic_person_white_24dp.png diff --git a/res/drawable-hdpi/ic_pets_white_24dp.png b/src/main/res/drawable-hdpi/ic_pets_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_pets_white_24dp.png rename to src/main/res/drawable-hdpi/ic_pets_white_24dp.png diff --git a/res/drawable-hdpi/ic_photo_camera_dark.png b/src/main/res/drawable-hdpi/ic_photo_camera_dark.png similarity index 100% rename from res/drawable-hdpi/ic_photo_camera_dark.png rename to src/main/res/drawable-hdpi/ic_photo_camera_dark.png diff --git a/res/drawable-hdpi/ic_photo_camera_light.png b/src/main/res/drawable-hdpi/ic_photo_camera_light.png similarity index 100% rename from res/drawable-hdpi/ic_photo_camera_light.png rename to src/main/res/drawable-hdpi/ic_photo_camera_light.png diff --git a/res/drawable-hdpi/ic_pin_white.png b/src/main/res/drawable-hdpi/ic_pin_white.png similarity index 100% rename from res/drawable-hdpi/ic_pin_white.png rename to src/main/res/drawable-hdpi/ic_pin_white.png diff --git a/res/drawable-hdpi/ic_play_circle_fill_white_48dp.png b/src/main/res/drawable-hdpi/ic_play_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-hdpi/ic_play_circle_fill_white_48dp.png rename to src/main/res/drawable-hdpi/ic_play_circle_fill_white_48dp.png diff --git a/res/drawable-hdpi/ic_reply.png b/src/main/res/drawable-hdpi/ic_reply.png similarity index 100% rename from res/drawable-hdpi/ic_reply.png rename to src/main/res/drawable-hdpi/ic_reply.png diff --git a/res/drawable-hdpi/ic_reply_white_24dp.png b/src/main/res/drawable-hdpi/ic_reply_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_reply_white_24dp.png rename to src/main/res/drawable-hdpi/ic_reply_white_24dp.png diff --git a/res/drawable-hdpi/ic_reply_white_36dp.png b/src/main/res/drawable-hdpi/ic_reply_white_36dp.png similarity index 100% rename from res/drawable-hdpi/ic_reply_white_36dp.png rename to src/main/res/drawable-hdpi/ic_reply_white_36dp.png diff --git a/res/drawable-hdpi/ic_rotate_32.webp b/src/main/res/drawable-hdpi/ic_rotate_32.webp similarity index 100% rename from res/drawable-hdpi/ic_rotate_32.webp rename to src/main/res/drawable-hdpi/ic_rotate_32.webp diff --git a/res/drawable-hdpi/ic_send_push.png b/src/main/res/drawable-hdpi/ic_send_push.png similarity index 100% rename from res/drawable-hdpi/ic_send_push.png rename to src/main/res/drawable-hdpi/ic_send_push.png diff --git a/res/drawable-hdpi/ic_send_push_white_24dp.png b/src/main/res/drawable-hdpi/ic_send_push_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_send_push_white_24dp.png rename to src/main/res/drawable-hdpi/ic_send_push_white_24dp.png diff --git a/res/drawable-hdpi/ic_send_sms_insecure.png b/src/main/res/drawable-hdpi/ic_send_sms_insecure.png similarity index 100% rename from res/drawable-hdpi/ic_send_sms_insecure.png rename to src/main/res/drawable-hdpi/ic_send_sms_insecure.png diff --git a/res/drawable-hdpi/ic_send_sms_insecure_dark.png b/src/main/res/drawable-hdpi/ic_send_sms_insecure_dark.png similarity index 100% rename from res/drawable-hdpi/ic_send_sms_insecure_dark.png rename to src/main/res/drawable-hdpi/ic_send_sms_insecure_dark.png diff --git a/res/drawable-hdpi/ic_send_sms_white_24dp.png b/src/main/res/drawable-hdpi/ic_send_sms_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_send_sms_white_24dp.png rename to src/main/res/drawable-hdpi/ic_send_sms_white_24dp.png diff --git a/res/drawable-hdpi/ic_swap_vert_white_24dp.png b/src/main/res/drawable-hdpi/ic_swap_vert_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_swap_vert_white_24dp.png rename to src/main/res/drawable-hdpi/ic_swap_vert_white_24dp.png diff --git a/res/drawable-hdpi/ic_tag_faces_white_24dp.png b/src/main/res/drawable-hdpi/ic_tag_faces_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_tag_faces_white_24dp.png rename to src/main/res/drawable-hdpi/ic_tag_faces_white_24dp.png diff --git a/res/drawable-hdpi/ic_text_32.webp b/src/main/res/drawable-hdpi/ic_text_32.webp similarity index 100% rename from res/drawable-hdpi/ic_text_32.webp rename to src/main/res/drawable-hdpi/ic_text_32.webp diff --git a/res/drawable-hdpi/ic_trash_filled_32.webp b/src/main/res/drawable-hdpi/ic_trash_filled_32.webp similarity index 100% rename from res/drawable-hdpi/ic_trash_filled_32.webp rename to src/main/res/drawable-hdpi/ic_trash_filled_32.webp diff --git a/res/drawable-hdpi/ic_unarchive_white_24dp.png b/src/main/res/drawable-hdpi/ic_unarchive_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_unarchive_white_24dp.png rename to src/main/res/drawable-hdpi/ic_unarchive_white_24dp.png diff --git a/res/drawable-hdpi/ic_undo_32.webp b/src/main/res/drawable-hdpi/ic_undo_32.webp similarity index 100% rename from res/drawable-hdpi/ic_undo_32.webp rename to src/main/res/drawable-hdpi/ic_undo_32.webp diff --git a/res/drawable-hdpi/ic_unlocked_white_24dp.png b/src/main/res/drawable-hdpi/ic_unlocked_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_unlocked_white_24dp.png rename to src/main/res/drawable-hdpi/ic_unlocked_white_24dp.png diff --git a/res/drawable-hdpi/ic_unpin_white.png b/src/main/res/drawable-hdpi/ic_unpin_white.png similarity index 100% rename from res/drawable-hdpi/ic_unpin_white.png rename to src/main/res/drawable-hdpi/ic_unpin_white.png diff --git a/res/drawable-hdpi/ic_volume_off_grey600_18dp.png b/src/main/res/drawable-hdpi/ic_volume_off_grey600_18dp.png similarity index 100% rename from res/drawable-hdpi/ic_volume_off_grey600_18dp.png rename to src/main/res/drawable-hdpi/ic_volume_off_grey600_18dp.png diff --git a/res/drawable-hdpi/ic_volume_off_white_18dp.png b/src/main/res/drawable-hdpi/ic_volume_off_white_18dp.png similarity index 100% rename from res/drawable-hdpi/ic_volume_off_white_18dp.png rename to src/main/res/drawable-hdpi/ic_volume_off_white_18dp.png diff --git a/res/drawable-hdpi/ic_volume_up_dark.png b/src/main/res/drawable-hdpi/ic_volume_up_dark.png similarity index 100% rename from res/drawable-hdpi/ic_volume_up_dark.png rename to src/main/res/drawable-hdpi/ic_volume_up_dark.png diff --git a/res/drawable-hdpi/ic_volume_up_light.png b/src/main/res/drawable-hdpi/ic_volume_up_light.png similarity index 100% rename from res/drawable-hdpi/ic_volume_up_light.png rename to src/main/res/drawable-hdpi/ic_volume_up_light.png diff --git a/res/drawable-hdpi/ic_warning_dark.png b/src/main/res/drawable-hdpi/ic_warning_dark.png similarity index 100% rename from res/drawable-hdpi/ic_warning_dark.png rename to src/main/res/drawable-hdpi/ic_warning_dark.png diff --git a/res/drawable-hdpi/ic_warning_light.png b/src/main/res/drawable-hdpi/ic_warning_light.png similarity index 100% rename from res/drawable-hdpi/ic_warning_light.png rename to src/main/res/drawable-hdpi/ic_warning_light.png diff --git a/res/drawable-hdpi/ic_wb_sunny_white_24dp.png b/src/main/res/drawable-hdpi/ic_wb_sunny_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_wb_sunny_white_24dp.png rename to src/main/res/drawable-hdpi/ic_wb_sunny_white_24dp.png diff --git a/res/drawable-hdpi/ic_work_white_24dp.png b/src/main/res/drawable-hdpi/ic_work_white_24dp.png similarity index 100% rename from res/drawable-hdpi/ic_work_white_24dp.png rename to src/main/res/drawable-hdpi/ic_work_white_24dp.png diff --git a/res/drawable-hdpi/msg_encr_out.png b/src/main/res/drawable-hdpi/msg_encr_out.png similarity index 100% rename from res/drawable-hdpi/msg_encr_out.png rename to src/main/res/drawable-hdpi/msg_encr_out.png diff --git a/res/drawable-hdpi/notification_permanent.png b/src/main/res/drawable-hdpi/notification_permanent.png similarity index 100% rename from res/drawable-hdpi/notification_permanent.png rename to src/main/res/drawable-hdpi/notification_permanent.png diff --git a/res/drawable-hdpi/notify_panel_notification_icon_bg.png b/src/main/res/drawable-hdpi/notify_panel_notification_icon_bg.png similarity index 100% rename from res/drawable-hdpi/notify_panel_notification_icon_bg.png rename to src/main/res/drawable-hdpi/notify_panel_notification_icon_bg.png diff --git a/res/drawable-hdpi/quick_camera_dark.png b/src/main/res/drawable-hdpi/quick_camera_dark.png similarity index 100% rename from res/drawable-hdpi/quick_camera_dark.png rename to src/main/res/drawable-hdpi/quick_camera_dark.png diff --git a/res/drawable-hdpi/quick_camera_exit_fullscreen.png b/src/main/res/drawable-hdpi/quick_camera_exit_fullscreen.png similarity index 100% rename from res/drawable-hdpi/quick_camera_exit_fullscreen.png rename to src/main/res/drawable-hdpi/quick_camera_exit_fullscreen.png diff --git a/res/drawable-hdpi/quick_camera_front.png b/src/main/res/drawable-hdpi/quick_camera_front.png similarity index 100% rename from res/drawable-hdpi/quick_camera_front.png rename to src/main/res/drawable-hdpi/quick_camera_front.png diff --git a/res/drawable-hdpi/quick_camera_fullscreen.png b/src/main/res/drawable-hdpi/quick_camera_fullscreen.png similarity index 100% rename from res/drawable-hdpi/quick_camera_fullscreen.png rename to src/main/res/drawable-hdpi/quick_camera_fullscreen.png diff --git a/res/drawable-hdpi/quick_camera_hide.png b/src/main/res/drawable-hdpi/quick_camera_hide.png similarity index 100% rename from res/drawable-hdpi/quick_camera_hide.png rename to src/main/res/drawable-hdpi/quick_camera_hide.png diff --git a/res/drawable-hdpi/quick_camera_light.png b/src/main/res/drawable-hdpi/quick_camera_light.png similarity index 100% rename from res/drawable-hdpi/quick_camera_light.png rename to src/main/res/drawable-hdpi/quick_camera_light.png diff --git a/res/drawable-hdpi/quick_camera_rear.png b/src/main/res/drawable-hdpi/quick_camera_rear.png similarity index 100% rename from res/drawable-hdpi/quick_camera_rear.png rename to src/main/res/drawable-hdpi/quick_camera_rear.png diff --git a/res/drawable-hdpi/quick_shutter_button.png b/src/main/res/drawable-hdpi/quick_shutter_button.png similarity index 100% rename from res/drawable-hdpi/quick_shutter_button.png rename to src/main/res/drawable-hdpi/quick_shutter_button.png diff --git a/res/drawable-land/background_hd.jpg b/src/main/res/drawable-land/background_hd.jpg similarity index 100% rename from res/drawable-land/background_hd.jpg rename to src/main/res/drawable-land/background_hd.jpg diff --git a/res/drawable-land/background_hd_dark.jpg b/src/main/res/drawable-land/background_hd_dark.jpg similarity index 100% rename from res/drawable-land/background_hd_dark.jpg rename to src/main/res/drawable-land/background_hd_dark.jpg diff --git a/res/drawable-ldrtl-hdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-ldrtl-hdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-ldrtl-hdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-ldrtl-hdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-ldrtl-mdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-ldrtl-mdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-ldrtl-mdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-ldrtl-mdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-ldrtl-xhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-ldrtl-xhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-ldrtl-xhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-ldrtl-xhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-ldrtl-xxhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-ldrtl-xxhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-ldrtl-xxhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-ldrtl-xxhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-ldrtl-xxxhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-ldrtl-xxxhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-ldrtl/message_bubble_background_received_alone.xml b/src/main/res/drawable-ldrtl/message_bubble_background_received_alone.xml similarity index 100% rename from res/drawable-ldrtl/message_bubble_background_received_alone.xml rename to src/main/res/drawable-ldrtl/message_bubble_background_received_alone.xml diff --git a/res/drawable-ldrtl/message_bubble_background_sent_alone.xml b/src/main/res/drawable-ldrtl/message_bubble_background_sent_alone.xml similarity index 100% rename from res/drawable-ldrtl/message_bubble_background_sent_alone.xml rename to src/main/res/drawable-ldrtl/message_bubble_background_sent_alone.xml diff --git a/res/drawable-mdpi-v11/icon_notification.png b/src/main/res/drawable-mdpi-v11/icon_notification.png similarity index 100% rename from res/drawable-mdpi-v11/icon_notification.png rename to src/main/res/drawable-mdpi-v11/icon_notification.png diff --git a/res/drawable-mdpi-v9/icon_notification.png b/src/main/res/drawable-mdpi-v9/icon_notification.png similarity index 100% rename from res/drawable-mdpi-v9/icon_notification.png rename to src/main/res/drawable-mdpi-v9/icon_notification.png diff --git a/res/drawable-mdpi/check.png b/src/main/res/drawable-mdpi/check.png similarity index 100% rename from res/drawable-mdpi/check.png rename to src/main/res/drawable-mdpi/check.png diff --git a/res/drawable-mdpi/divet_lower_right_dark.png b/src/main/res/drawable-mdpi/divet_lower_right_dark.png similarity index 100% rename from res/drawable-mdpi/divet_lower_right_dark.png rename to src/main/res/drawable-mdpi/divet_lower_right_dark.png diff --git a/res/drawable-mdpi/divet_lower_right_light.png b/src/main/res/drawable-mdpi/divet_lower_right_light.png similarity index 100% rename from res/drawable-mdpi/divet_lower_right_light.png rename to src/main/res/drawable-mdpi/divet_lower_right_light.png diff --git a/res/drawable-mdpi/ic_account_box_dark.png b/src/main/res/drawable-mdpi/ic_account_box_dark.png similarity index 100% rename from res/drawable-mdpi/ic_account_box_dark.png rename to src/main/res/drawable-mdpi/ic_account_box_dark.png diff --git a/res/drawable-mdpi/ic_account_box_light.png b/src/main/res/drawable-mdpi/ic_account_box_light.png similarity index 100% rename from res/drawable-mdpi/ic_account_box_light.png rename to src/main/res/drawable-mdpi/ic_account_box_light.png diff --git a/res/drawable-mdpi/ic_add_white_24dp.png b/src/main/res/drawable-mdpi/ic_add_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_add_white_24dp.png rename to src/main/res/drawable-mdpi/ic_add_white_24dp.png diff --git a/res/drawable-mdpi/ic_advanced_white_24dp.png b/src/main/res/drawable-mdpi/ic_advanced_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_advanced_white_24dp.png rename to src/main/res/drawable-mdpi/ic_advanced_white_24dp.png diff --git a/res/drawable-mdpi/ic_archive_white_24dp.png b/src/main/res/drawable-mdpi/ic_archive_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_archive_white_24dp.png rename to src/main/res/drawable-mdpi/ic_archive_white_24dp.png diff --git a/res/drawable-mdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-mdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-mdpi/ic_attach_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_attach_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_attach_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_attach_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_attach_white_24dp.png b/src/main/res/drawable-mdpi/ic_attach_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_attach_white_24dp.png rename to src/main/res/drawable-mdpi/ic_attach_white_24dp.png diff --git a/res/drawable-mdpi/ic_backspace_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_backspace_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_backspace_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_backspace_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_blur_on_white_24.png b/src/main/res/drawable-mdpi/ic_blur_on_white_24.png similarity index 100% rename from res/drawable-mdpi/ic_blur_on_white_24.png rename to src/main/res/drawable-mdpi/ic_blur_on_white_24.png diff --git a/res/drawable-mdpi/ic_brightness_6_white_24dp.png b/src/main/res/drawable-mdpi/ic_brightness_6_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_brightness_6_white_24dp.png rename to src/main/res/drawable-mdpi/ic_brightness_6_white_24dp.png diff --git a/res/drawable-mdpi/ic_brush_highlight_32.webp b/src/main/res/drawable-mdpi/ic_brush_highlight_32.webp similarity index 100% rename from res/drawable-mdpi/ic_brush_highlight_32.webp rename to src/main/res/drawable-mdpi/ic_brush_highlight_32.webp diff --git a/res/drawable-mdpi/ic_brush_marker_32.webp b/src/main/res/drawable-mdpi/ic_brush_marker_32.webp similarity index 100% rename from res/drawable-mdpi/ic_brush_marker_32.webp rename to src/main/res/drawable-mdpi/ic_brush_marker_32.webp diff --git a/res/drawable-mdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_camera_alt_white_24dp.png rename to src/main/res/drawable-mdpi/ic_camera_alt_white_24dp.png diff --git a/res/drawable-mdpi/ic_check_white_24dp.png b/src/main/res/drawable-mdpi/ic_check_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_check_white_24dp.png rename to src/main/res/drawable-mdpi/ic_check_white_24dp.png diff --git a/res/drawable-mdpi/ic_circle_fill_white_48dp.png b/src/main/res/drawable-mdpi/ic_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-mdpi/ic_circle_fill_white_48dp.png rename to src/main/res/drawable-mdpi/ic_circle_fill_white_48dp.png diff --git a/res/drawable-mdpi/ic_clear_white_24dp.png b/src/main/res/drawable-mdpi/ic_clear_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_clear_white_24dp.png rename to src/main/res/drawable-mdpi/ic_clear_white_24dp.png diff --git a/res/drawable-mdpi/ic_close_white_18dp.webp b/src/main/res/drawable-mdpi/ic_close_white_18dp.webp similarity index 100% rename from res/drawable-mdpi/ic_close_white_18dp.webp rename to src/main/res/drawable-mdpi/ic_close_white_18dp.webp diff --git a/res/drawable-mdpi/ic_close_white_24dp.png b/src/main/res/drawable-mdpi/ic_close_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_close_white_24dp.png rename to src/main/res/drawable-mdpi/ic_close_white_24dp.png diff --git a/res/drawable-mdpi/ic_contact_picture.png b/src/main/res/drawable-mdpi/ic_contact_picture.png similarity index 100% rename from res/drawable-mdpi/ic_contact_picture.png rename to src/main/res/drawable-mdpi/ic_contact_picture.png diff --git a/res/drawable-mdpi/ic_content_copy_white_24dp.png b/src/main/res/drawable-mdpi/ic_content_copy_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_content_copy_white_24dp.png rename to src/main/res/drawable-mdpi/ic_content_copy_white_24dp.png diff --git a/res/drawable-mdpi/ic_create_white_24dp.png b/src/main/res/drawable-mdpi/ic_create_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_create_white_24dp.png rename to src/main/res/drawable-mdpi/ic_create_white_24dp.png diff --git a/res/drawable-mdpi/ic_crop_32.webp b/src/main/res/drawable-mdpi/ic_crop_32.webp similarity index 100% rename from res/drawable-mdpi/ic_crop_32.webp rename to src/main/res/drawable-mdpi/ic_crop_32.webp diff --git a/res/drawable-mdpi/ic_delete_white_24dp.png b/src/main/res/drawable-mdpi/ic_delete_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_delete_white_24dp.png rename to src/main/res/drawable-mdpi/ic_delete_white_24dp.png diff --git a/res/drawable-mdpi/ic_delivery_status_read.png b/src/main/res/drawable-mdpi/ic_delivery_status_read.png similarity index 100% rename from res/drawable-mdpi/ic_delivery_status_read.png rename to src/main/res/drawable-mdpi/ic_delivery_status_read.png diff --git a/res/drawable-mdpi/ic_delivery_status_sending.png b/src/main/res/drawable-mdpi/ic_delivery_status_sending.png similarity index 100% rename from res/drawable-mdpi/ic_delivery_status_sending.png rename to src/main/res/drawable-mdpi/ic_delivery_status_sending.png diff --git a/res/drawable-mdpi/ic_delivery_status_sent.png b/src/main/res/drawable-mdpi/ic_delivery_status_sent.png similarity index 100% rename from res/drawable-mdpi/ic_delivery_status_sent.png rename to src/main/res/drawable-mdpi/ic_delivery_status_sent.png diff --git a/res/drawable-mdpi/ic_emoji_32.webp b/src/main/res/drawable-mdpi/ic_emoji_32.webp similarity index 100% rename from res/drawable-mdpi/ic_emoji_32.webp rename to src/main/res/drawable-mdpi/ic_emoji_32.webp diff --git a/res/drawable-mdpi/ic_flip_32.png b/src/main/res/drawable-mdpi/ic_flip_32.png similarity index 100% rename from res/drawable-mdpi/ic_flip_32.png rename to src/main/res/drawable-mdpi/ic_flip_32.png diff --git a/res/drawable-mdpi/ic_forum_white_24dp.png b/src/main/res/drawable-mdpi/ic_forum_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_forum_white_24dp.png rename to src/main/res/drawable-mdpi/ic_forum_white_24dp.png diff --git a/res/drawable-mdpi/ic_forward_white_24dp.png b/src/main/res/drawable-mdpi/ic_forward_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_forward_white_24dp.png rename to src/main/res/drawable-mdpi/ic_forward_white_24dp.png diff --git a/res/drawable-mdpi/ic_group_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_group_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_group_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_group_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_group_white_24dp.png b/src/main/res/drawable-mdpi/ic_group_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_group_white_24dp.png rename to src/main/res/drawable-mdpi/ic_group_white_24dp.png diff --git a/res/drawable-mdpi/ic_headset_white_24dp.png b/src/main/res/drawable-mdpi/ic_headset_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_headset_white_24dp.png rename to src/main/res/drawable-mdpi/ic_headset_white_24dp.png diff --git a/res/drawable-mdpi/ic_help_white_24dp.png b/src/main/res/drawable-mdpi/ic_help_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_help_white_24dp.png rename to src/main/res/drawable-mdpi/ic_help_white_24dp.png diff --git a/res/drawable-mdpi/ic_image_dark.png b/src/main/res/drawable-mdpi/ic_image_dark.png similarity index 100% rename from res/drawable-mdpi/ic_image_dark.png rename to src/main/res/drawable-mdpi/ic_image_dark.png diff --git a/res/drawable-mdpi/ic_image_light.png b/src/main/res/drawable-mdpi/ic_image_light.png similarity index 100% rename from res/drawable-mdpi/ic_image_light.png rename to src/main/res/drawable-mdpi/ic_image_light.png diff --git a/res/drawable-mdpi/ic_image_white_24dp.png b/src/main/res/drawable-mdpi/ic_image_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_image_white_24dp.png rename to src/main/res/drawable-mdpi/ic_image_white_24dp.png diff --git a/res/drawable-mdpi/ic_info_outline_dark.png b/src/main/res/drawable-mdpi/ic_info_outline_dark.png similarity index 100% rename from res/drawable-mdpi/ic_info_outline_dark.png rename to src/main/res/drawable-mdpi/ic_info_outline_dark.png diff --git a/res/drawable-mdpi/ic_info_outline_light.png b/src/main/res/drawable-mdpi/ic_info_outline_light.png similarity index 100% rename from res/drawable-mdpi/ic_info_outline_light.png rename to src/main/res/drawable-mdpi/ic_info_outline_light.png diff --git a/res/drawable-mdpi/ic_info_outline_white_24dp.png b/src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_info_outline_white_24dp.png rename to src/main/res/drawable-mdpi/ic_info_outline_white_24dp.png diff --git a/res/drawable-mdpi/ic_insert_drive_file_white_24dp.png b/src/main/res/drawable-mdpi/ic_insert_drive_file_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_insert_drive_file_white_24dp.png rename to src/main/res/drawable-mdpi/ic_insert_drive_file_white_24dp.png diff --git a/res/drawable-mdpi/ic_keyboard_arrow_down_white_24dp.png b/src/main/res/drawable-mdpi/ic_keyboard_arrow_down_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_keyboard_arrow_down_white_24dp.png rename to src/main/res/drawable-mdpi/ic_keyboard_arrow_down_white_24dp.png diff --git a/res/drawable-mdpi/ic_keyboard_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_keyboard_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_keyboard_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_keyboard_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_keyboard_white_24dp.png b/src/main/res/drawable-mdpi/ic_keyboard_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_keyboard_white_24dp.png rename to src/main/res/drawable-mdpi/ic_keyboard_white_24dp.png diff --git a/res/drawable-mdpi/ic_launch_white_24dp.png b/src/main/res/drawable-mdpi/ic_launch_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_launch_white_24dp.png rename to src/main/res/drawable-mdpi/ic_launch_white_24dp.png diff --git a/res/drawable-mdpi/ic_local_dining_white_24dp.png b/src/main/res/drawable-mdpi/ic_local_dining_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_local_dining_white_24dp.png rename to src/main/res/drawable-mdpi/ic_local_dining_white_24dp.png diff --git a/res/drawable-mdpi/ic_location_on_white_24dp.png b/src/main/res/drawable-mdpi/ic_location_on_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_location_on_white_24dp.png rename to src/main/res/drawable-mdpi/ic_location_on_white_24dp.png diff --git a/res/drawable-mdpi/ic_lock_white_18dp.png b/src/main/res/drawable-mdpi/ic_lock_white_18dp.png similarity index 100% rename from res/drawable-mdpi/ic_lock_white_18dp.png rename to src/main/res/drawable-mdpi/ic_lock_white_18dp.png diff --git a/res/drawable-mdpi/ic_lock_white_24dp.png b/src/main/res/drawable-mdpi/ic_lock_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_lock_white_24dp.png rename to src/main/res/drawable-mdpi/ic_lock_white_24dp.png diff --git a/res/drawable-mdpi/ic_mic_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_mic_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_mic_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_mic_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_mic_white_24dp.png b/src/main/res/drawable-mdpi/ic_mic_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_mic_white_24dp.png rename to src/main/res/drawable-mdpi/ic_mic_white_24dp.png diff --git a/res/drawable-mdpi/ic_mic_white_48dp.png b/src/main/res/drawable-mdpi/ic_mic_white_48dp.png similarity index 100% rename from res/drawable-mdpi/ic_mic_white_48dp.png rename to src/main/res/drawable-mdpi/ic_mic_white_48dp.png diff --git a/res/drawable-mdpi/ic_mood_grey600_24dp.png b/src/main/res/drawable-mdpi/ic_mood_grey600_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_mood_grey600_24dp.png rename to src/main/res/drawable-mdpi/ic_mood_grey600_24dp.png diff --git a/res/drawable-mdpi/ic_mood_white_24dp.png b/src/main/res/drawable-mdpi/ic_mood_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_mood_white_24dp.png rename to src/main/res/drawable-mdpi/ic_mood_white_24dp.png diff --git a/res/drawable-mdpi/ic_movie_creation_dark.png b/src/main/res/drawable-mdpi/ic_movie_creation_dark.png similarity index 100% rename from res/drawable-mdpi/ic_movie_creation_dark.png rename to src/main/res/drawable-mdpi/ic_movie_creation_dark.png diff --git a/res/drawable-mdpi/ic_movie_creation_light.png b/src/main/res/drawable-mdpi/ic_movie_creation_light.png similarity index 100% rename from res/drawable-mdpi/ic_movie_creation_light.png rename to src/main/res/drawable-mdpi/ic_movie_creation_light.png diff --git a/res/drawable-mdpi/ic_notifications_white_24dp.png b/src/main/res/drawable-mdpi/ic_notifications_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_notifications_white_24dp.png rename to src/main/res/drawable-mdpi/ic_notifications_white_24dp.png diff --git a/res/drawable-mdpi/ic_pause_circle_fill_white_48dp.png b/src/main/res/drawable-mdpi/ic_pause_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-mdpi/ic_pause_circle_fill_white_48dp.png rename to src/main/res/drawable-mdpi/ic_pause_circle_fill_white_48dp.png diff --git a/res/drawable-mdpi/ic_person_white_24dp.png b/src/main/res/drawable-mdpi/ic_person_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_person_white_24dp.png rename to src/main/res/drawable-mdpi/ic_person_white_24dp.png diff --git a/res/drawable-mdpi/ic_pets_white_24dp.png b/src/main/res/drawable-mdpi/ic_pets_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_pets_white_24dp.png rename to src/main/res/drawable-mdpi/ic_pets_white_24dp.png diff --git a/res/drawable-mdpi/ic_photo_camera_dark.png b/src/main/res/drawable-mdpi/ic_photo_camera_dark.png similarity index 100% rename from res/drawable-mdpi/ic_photo_camera_dark.png rename to src/main/res/drawable-mdpi/ic_photo_camera_dark.png diff --git a/res/drawable-mdpi/ic_photo_camera_light.png b/src/main/res/drawable-mdpi/ic_photo_camera_light.png similarity index 100% rename from res/drawable-mdpi/ic_photo_camera_light.png rename to src/main/res/drawable-mdpi/ic_photo_camera_light.png diff --git a/res/drawable-mdpi/ic_pin_white.png b/src/main/res/drawable-mdpi/ic_pin_white.png similarity index 100% rename from res/drawable-mdpi/ic_pin_white.png rename to src/main/res/drawable-mdpi/ic_pin_white.png diff --git a/res/drawable-mdpi/ic_play_circle_fill_white_48dp.png b/src/main/res/drawable-mdpi/ic_play_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-mdpi/ic_play_circle_fill_white_48dp.png rename to src/main/res/drawable-mdpi/ic_play_circle_fill_white_48dp.png diff --git a/res/drawable-mdpi/ic_reply.png b/src/main/res/drawable-mdpi/ic_reply.png similarity index 100% rename from res/drawable-mdpi/ic_reply.png rename to src/main/res/drawable-mdpi/ic_reply.png diff --git a/res/drawable-mdpi/ic_reply_white_24dp.png b/src/main/res/drawable-mdpi/ic_reply_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_reply_white_24dp.png rename to src/main/res/drawable-mdpi/ic_reply_white_24dp.png diff --git a/res/drawable-mdpi/ic_reply_white_36dp.png b/src/main/res/drawable-mdpi/ic_reply_white_36dp.png similarity index 100% rename from res/drawable-mdpi/ic_reply_white_36dp.png rename to src/main/res/drawable-mdpi/ic_reply_white_36dp.png diff --git a/res/drawable-mdpi/ic_rotate_32.webp b/src/main/res/drawable-mdpi/ic_rotate_32.webp similarity index 100% rename from res/drawable-mdpi/ic_rotate_32.webp rename to src/main/res/drawable-mdpi/ic_rotate_32.webp diff --git a/res/drawable-mdpi/ic_send_push.png b/src/main/res/drawable-mdpi/ic_send_push.png similarity index 100% rename from res/drawable-mdpi/ic_send_push.png rename to src/main/res/drawable-mdpi/ic_send_push.png diff --git a/res/drawable-mdpi/ic_send_push_white_24dp.png b/src/main/res/drawable-mdpi/ic_send_push_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_send_push_white_24dp.png rename to src/main/res/drawable-mdpi/ic_send_push_white_24dp.png diff --git a/res/drawable-mdpi/ic_send_sms_insecure.png b/src/main/res/drawable-mdpi/ic_send_sms_insecure.png similarity index 100% rename from res/drawable-mdpi/ic_send_sms_insecure.png rename to src/main/res/drawable-mdpi/ic_send_sms_insecure.png diff --git a/res/drawable-mdpi/ic_send_sms_insecure_dark.png b/src/main/res/drawable-mdpi/ic_send_sms_insecure_dark.png similarity index 100% rename from res/drawable-mdpi/ic_send_sms_insecure_dark.png rename to src/main/res/drawable-mdpi/ic_send_sms_insecure_dark.png diff --git a/res/drawable-mdpi/ic_send_sms_white_24dp.png b/src/main/res/drawable-mdpi/ic_send_sms_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_send_sms_white_24dp.png rename to src/main/res/drawable-mdpi/ic_send_sms_white_24dp.png diff --git a/res/drawable-mdpi/ic_swap_vert_white_24dp.png b/src/main/res/drawable-mdpi/ic_swap_vert_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_swap_vert_white_24dp.png rename to src/main/res/drawable-mdpi/ic_swap_vert_white_24dp.png diff --git a/res/drawable-mdpi/ic_tag_faces_white_24dp.png b/src/main/res/drawable-mdpi/ic_tag_faces_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_tag_faces_white_24dp.png rename to src/main/res/drawable-mdpi/ic_tag_faces_white_24dp.png diff --git a/res/drawable-mdpi/ic_text_32.webp b/src/main/res/drawable-mdpi/ic_text_32.webp similarity index 100% rename from res/drawable-mdpi/ic_text_32.webp rename to src/main/res/drawable-mdpi/ic_text_32.webp diff --git a/res/drawable-mdpi/ic_trash_filled_32.webp b/src/main/res/drawable-mdpi/ic_trash_filled_32.webp similarity index 100% rename from res/drawable-mdpi/ic_trash_filled_32.webp rename to src/main/res/drawable-mdpi/ic_trash_filled_32.webp diff --git a/res/drawable-mdpi/ic_unarchive_white_24dp.png b/src/main/res/drawable-mdpi/ic_unarchive_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_unarchive_white_24dp.png rename to src/main/res/drawable-mdpi/ic_unarchive_white_24dp.png diff --git a/res/drawable-mdpi/ic_undo_32.webp b/src/main/res/drawable-mdpi/ic_undo_32.webp similarity index 100% rename from res/drawable-mdpi/ic_undo_32.webp rename to src/main/res/drawable-mdpi/ic_undo_32.webp diff --git a/res/drawable-mdpi/ic_unlocked_white_24dp.png b/src/main/res/drawable-mdpi/ic_unlocked_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_unlocked_white_24dp.png rename to src/main/res/drawable-mdpi/ic_unlocked_white_24dp.png diff --git a/res/drawable-mdpi/ic_unpin_white.png b/src/main/res/drawable-mdpi/ic_unpin_white.png similarity index 100% rename from res/drawable-mdpi/ic_unpin_white.png rename to src/main/res/drawable-mdpi/ic_unpin_white.png diff --git a/res/drawable-mdpi/ic_volume_off_grey600_18dp.png b/src/main/res/drawable-mdpi/ic_volume_off_grey600_18dp.png similarity index 100% rename from res/drawable-mdpi/ic_volume_off_grey600_18dp.png rename to src/main/res/drawable-mdpi/ic_volume_off_grey600_18dp.png diff --git a/res/drawable-mdpi/ic_volume_off_white_18dp.png b/src/main/res/drawable-mdpi/ic_volume_off_white_18dp.png similarity index 100% rename from res/drawable-mdpi/ic_volume_off_white_18dp.png rename to src/main/res/drawable-mdpi/ic_volume_off_white_18dp.png diff --git a/res/drawable-mdpi/ic_volume_up_dark.png b/src/main/res/drawable-mdpi/ic_volume_up_dark.png similarity index 100% rename from res/drawable-mdpi/ic_volume_up_dark.png rename to src/main/res/drawable-mdpi/ic_volume_up_dark.png diff --git a/res/drawable-mdpi/ic_volume_up_light.png b/src/main/res/drawable-mdpi/ic_volume_up_light.png similarity index 100% rename from res/drawable-mdpi/ic_volume_up_light.png rename to src/main/res/drawable-mdpi/ic_volume_up_light.png diff --git a/res/drawable-mdpi/ic_warning_dark.png b/src/main/res/drawable-mdpi/ic_warning_dark.png similarity index 100% rename from res/drawable-mdpi/ic_warning_dark.png rename to src/main/res/drawable-mdpi/ic_warning_dark.png diff --git a/res/drawable-mdpi/ic_warning_light.png b/src/main/res/drawable-mdpi/ic_warning_light.png similarity index 100% rename from res/drawable-mdpi/ic_warning_light.png rename to src/main/res/drawable-mdpi/ic_warning_light.png diff --git a/res/drawable-mdpi/ic_wb_sunny_white_24dp.png b/src/main/res/drawable-mdpi/ic_wb_sunny_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_wb_sunny_white_24dp.png rename to src/main/res/drawable-mdpi/ic_wb_sunny_white_24dp.png diff --git a/res/drawable-mdpi/ic_work_white_24dp.png b/src/main/res/drawable-mdpi/ic_work_white_24dp.png similarity index 100% rename from res/drawable-mdpi/ic_work_white_24dp.png rename to src/main/res/drawable-mdpi/ic_work_white_24dp.png diff --git a/res/drawable-mdpi/msg_encr_out.png b/src/main/res/drawable-mdpi/msg_encr_out.png similarity index 100% rename from res/drawable-mdpi/msg_encr_out.png rename to src/main/res/drawable-mdpi/msg_encr_out.png diff --git a/res/drawable-mdpi/notification_permanent.png b/src/main/res/drawable-mdpi/notification_permanent.png similarity index 100% rename from res/drawable-mdpi/notification_permanent.png rename to src/main/res/drawable-mdpi/notification_permanent.png diff --git a/res/drawable-mdpi/notify_panel_notification_icon_bg.png b/src/main/res/drawable-mdpi/notify_panel_notification_icon_bg.png similarity index 100% rename from res/drawable-mdpi/notify_panel_notification_icon_bg.png rename to src/main/res/drawable-mdpi/notify_panel_notification_icon_bg.png diff --git a/res/drawable-mdpi/quick_camera_dark.png b/src/main/res/drawable-mdpi/quick_camera_dark.png similarity index 100% rename from res/drawable-mdpi/quick_camera_dark.png rename to src/main/res/drawable-mdpi/quick_camera_dark.png diff --git a/res/drawable-mdpi/quick_camera_exit_fullscreen.png b/src/main/res/drawable-mdpi/quick_camera_exit_fullscreen.png similarity index 100% rename from res/drawable-mdpi/quick_camera_exit_fullscreen.png rename to src/main/res/drawable-mdpi/quick_camera_exit_fullscreen.png diff --git a/res/drawable-mdpi/quick_camera_front.png b/src/main/res/drawable-mdpi/quick_camera_front.png similarity index 100% rename from res/drawable-mdpi/quick_camera_front.png rename to src/main/res/drawable-mdpi/quick_camera_front.png diff --git a/res/drawable-mdpi/quick_camera_fullscreen.png b/src/main/res/drawable-mdpi/quick_camera_fullscreen.png similarity index 100% rename from res/drawable-mdpi/quick_camera_fullscreen.png rename to src/main/res/drawable-mdpi/quick_camera_fullscreen.png diff --git a/res/drawable-mdpi/quick_camera_hide.png b/src/main/res/drawable-mdpi/quick_camera_hide.png similarity index 100% rename from res/drawable-mdpi/quick_camera_hide.png rename to src/main/res/drawable-mdpi/quick_camera_hide.png diff --git a/res/drawable-mdpi/quick_camera_light.png b/src/main/res/drawable-mdpi/quick_camera_light.png similarity index 100% rename from res/drawable-mdpi/quick_camera_light.png rename to src/main/res/drawable-mdpi/quick_camera_light.png diff --git a/res/drawable-mdpi/quick_camera_rear.png b/src/main/res/drawable-mdpi/quick_camera_rear.png similarity index 100% rename from res/drawable-mdpi/quick_camera_rear.png rename to src/main/res/drawable-mdpi/quick_camera_rear.png diff --git a/res/drawable-mdpi/quick_shutter_button.png b/src/main/res/drawable-mdpi/quick_shutter_button.png similarity index 100% rename from res/drawable-mdpi/quick_shutter_button.png rename to src/main/res/drawable-mdpi/quick_shutter_button.png diff --git a/res/drawable-night/button_background.xml b/src/main/res/drawable-night/button_background.xml similarity index 100% rename from res/drawable-night/button_background.xml rename to src/main/res/drawable-night/button_background.xml diff --git a/res/drawable-night/button_secondary_background.xml b/src/main/res/drawable-night/button_secondary_background.xml similarity index 100% rename from res/drawable-night/button_secondary_background.xml rename to src/main/res/drawable-night/button_secondary_background.xml diff --git a/res/drawable-v21/circle_touch_highlight_background.xml b/src/main/res/drawable-v21/circle_touch_highlight_background.xml similarity index 100% rename from res/drawable-v21/circle_touch_highlight_background.xml rename to src/main/res/drawable-v21/circle_touch_highlight_background.xml diff --git a/res/drawable-v21/conversation_list_item_background.xml b/src/main/res/drawable-v21/conversation_list_item_background.xml similarity index 100% rename from res/drawable-v21/conversation_list_item_background.xml rename to src/main/res/drawable-v21/conversation_list_item_background.xml diff --git a/res/drawable-v21/conversation_list_item_background_dark.xml b/src/main/res/drawable-v21/conversation_list_item_background_dark.xml similarity index 100% rename from res/drawable-v21/conversation_list_item_background_dark.xml rename to src/main/res/drawable-v21/conversation_list_item_background_dark.xml diff --git a/res/drawable-v21/pinned_list_item_background.xml b/src/main/res/drawable-v21/pinned_list_item_background.xml similarity index 100% rename from res/drawable-v21/pinned_list_item_background.xml rename to src/main/res/drawable-v21/pinned_list_item_background.xml diff --git a/res/drawable-v21/pinned_list_item_background_dark.xml b/src/main/res/drawable-v21/pinned_list_item_background_dark.xml similarity index 100% rename from res/drawable-v21/pinned_list_item_background_dark.xml rename to src/main/res/drawable-v21/pinned_list_item_background_dark.xml diff --git a/res/drawable-v21/touch_highlight_background.xml b/src/main/res/drawable-v21/touch_highlight_background.xml similarity index 100% rename from res/drawable-v21/touch_highlight_background.xml rename to src/main/res/drawable-v21/touch_highlight_background.xml diff --git a/res/drawable-xhdpi-v11/icon_notification.png b/src/main/res/drawable-xhdpi-v11/icon_notification.png similarity index 100% rename from res/drawable-xhdpi-v11/icon_notification.png rename to src/main/res/drawable-xhdpi-v11/icon_notification.png diff --git a/res/drawable-xhdpi/attach_camera.png b/src/main/res/drawable-xhdpi/attach_camera.png similarity index 100% rename from res/drawable-xhdpi/attach_camera.png rename to src/main/res/drawable-xhdpi/attach_camera.png diff --git a/res/drawable-xhdpi/attach_record_video.png b/src/main/res/drawable-xhdpi/attach_record_video.png similarity index 100% rename from res/drawable-xhdpi/attach_record_video.png rename to src/main/res/drawable-xhdpi/attach_record_video.png diff --git a/res/drawable-xhdpi/check.png b/src/main/res/drawable-xhdpi/check.png similarity index 100% rename from res/drawable-xhdpi/check.png rename to src/main/res/drawable-xhdpi/check.png diff --git a/res/drawable-xhdpi/divet_lower_right_dark.png b/src/main/res/drawable-xhdpi/divet_lower_right_dark.png similarity index 100% rename from res/drawable-xhdpi/divet_lower_right_dark.png rename to src/main/res/drawable-xhdpi/divet_lower_right_dark.png diff --git a/res/drawable-xhdpi/divet_lower_right_light.png b/src/main/res/drawable-xhdpi/divet_lower_right_light.png similarity index 100% rename from res/drawable-xhdpi/divet_lower_right_light.png rename to src/main/res/drawable-xhdpi/divet_lower_right_light.png diff --git a/res/drawable-xhdpi/ic_account_box_dark.png b/src/main/res/drawable-xhdpi/ic_account_box_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_account_box_dark.png rename to src/main/res/drawable-xhdpi/ic_account_box_dark.png diff --git a/res/drawable-xhdpi/ic_account_box_light.png b/src/main/res/drawable-xhdpi/ic_account_box_light.png similarity index 100% rename from res/drawable-xhdpi/ic_account_box_light.png rename to src/main/res/drawable-xhdpi/ic_account_box_light.png diff --git a/res/drawable-xhdpi/ic_add_white_24dp.png b/src/main/res/drawable-xhdpi/ic_add_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_add_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_add_white_24dp.png diff --git a/res/drawable-xhdpi/ic_advanced_white_24dp.png b/src/main/res/drawable-xhdpi/ic_advanced_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_advanced_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_advanced_white_24dp.png diff --git a/res/drawable-xhdpi/ic_archive_white_24dp.png b/src/main/res/drawable-xhdpi/ic_archive_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_archive_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_archive_white_24dp.png diff --git a/res/drawable-xhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-xhdpi/ic_attach_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_attach_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_attach_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_attach_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_attach_white_24dp.png b/src/main/res/drawable-xhdpi/ic_attach_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_attach_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_attach_white_24dp.png diff --git a/res/drawable-xhdpi/ic_backspace_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_backspace_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_backspace_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_backspace_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_blur_on_white_24.png b/src/main/res/drawable-xhdpi/ic_blur_on_white_24.png similarity index 100% rename from res/drawable-xhdpi/ic_blur_on_white_24.png rename to src/main/res/drawable-xhdpi/ic_blur_on_white_24.png diff --git a/res/drawable-xhdpi/ic_brightness_6_white_24dp.png b/src/main/res/drawable-xhdpi/ic_brightness_6_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_brightness_6_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_brightness_6_white_24dp.png diff --git a/res/drawable-xhdpi/ic_brush_highlight_32.webp b/src/main/res/drawable-xhdpi/ic_brush_highlight_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_brush_highlight_32.webp rename to src/main/res/drawable-xhdpi/ic_brush_highlight_32.webp diff --git a/res/drawable-xhdpi/ic_brush_marker_32.webp b/src/main/res/drawable-xhdpi/ic_brush_marker_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_brush_marker_32.webp rename to src/main/res/drawable-xhdpi/ic_brush_marker_32.webp diff --git a/res/drawable-xhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_camera_alt_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_camera_alt_white_24dp.png diff --git a/res/drawable-xhdpi/ic_check_white_24dp.png b/src/main/res/drawable-xhdpi/ic_check_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_check_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_check_white_24dp.png diff --git a/res/drawable-xhdpi/ic_circle_fill_white_48dp.png b/src/main/res/drawable-xhdpi/ic_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xhdpi/ic_circle_fill_white_48dp.png rename to src/main/res/drawable-xhdpi/ic_circle_fill_white_48dp.png diff --git a/res/drawable-xhdpi/ic_clear_white_24dp.png b/src/main/res/drawable-xhdpi/ic_clear_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_clear_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_clear_white_24dp.png diff --git a/res/drawable-xhdpi/ic_close_white_18dp.webp b/src/main/res/drawable-xhdpi/ic_close_white_18dp.webp similarity index 100% rename from res/drawable-xhdpi/ic_close_white_18dp.webp rename to src/main/res/drawable-xhdpi/ic_close_white_18dp.webp diff --git a/res/drawable-xhdpi/ic_close_white_24dp.png b/src/main/res/drawable-xhdpi/ic_close_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_close_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_close_white_24dp.png diff --git a/res/drawable-xhdpi/ic_contact_picture.png b/src/main/res/drawable-xhdpi/ic_contact_picture.png similarity index 100% rename from res/drawable-xhdpi/ic_contact_picture.png rename to src/main/res/drawable-xhdpi/ic_contact_picture.png diff --git a/res/drawable-xhdpi/ic_content_copy_white_24dp.png b/src/main/res/drawable-xhdpi/ic_content_copy_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_content_copy_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_content_copy_white_24dp.png diff --git a/res/drawable-xhdpi/ic_create_white_24dp.png b/src/main/res/drawable-xhdpi/ic_create_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_create_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_create_white_24dp.png diff --git a/res/drawable-xhdpi/ic_crop_32.webp b/src/main/res/drawable-xhdpi/ic_crop_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_crop_32.webp rename to src/main/res/drawable-xhdpi/ic_crop_32.webp diff --git a/res/drawable-xhdpi/ic_delete_white_24dp.png b/src/main/res/drawable-xhdpi/ic_delete_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_delete_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_delete_white_24dp.png diff --git a/res/drawable-xhdpi/ic_delivery_status_read.png b/src/main/res/drawable-xhdpi/ic_delivery_status_read.png similarity index 100% rename from res/drawable-xhdpi/ic_delivery_status_read.png rename to src/main/res/drawable-xhdpi/ic_delivery_status_read.png diff --git a/res/drawable-xhdpi/ic_delivery_status_sending.png b/src/main/res/drawable-xhdpi/ic_delivery_status_sending.png similarity index 100% rename from res/drawable-xhdpi/ic_delivery_status_sending.png rename to src/main/res/drawable-xhdpi/ic_delivery_status_sending.png diff --git a/res/drawable-xhdpi/ic_delivery_status_sent.png b/src/main/res/drawable-xhdpi/ic_delivery_status_sent.png similarity index 100% rename from res/drawable-xhdpi/ic_delivery_status_sent.png rename to src/main/res/drawable-xhdpi/ic_delivery_status_sent.png diff --git a/res/drawable-xhdpi/ic_emoji_32.webp b/src/main/res/drawable-xhdpi/ic_emoji_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_emoji_32.webp rename to src/main/res/drawable-xhdpi/ic_emoji_32.webp diff --git a/res/drawable-xhdpi/ic_flip_32.webp b/src/main/res/drawable-xhdpi/ic_flip_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_flip_32.webp rename to src/main/res/drawable-xhdpi/ic_flip_32.webp diff --git a/res/drawable-xhdpi/ic_forum_white_24dp.png b/src/main/res/drawable-xhdpi/ic_forum_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_forum_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_forum_white_24dp.png diff --git a/res/drawable-xhdpi/ic_forward_white_24dp.png b/src/main/res/drawable-xhdpi/ic_forward_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_forward_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_forward_white_24dp.png diff --git a/res/drawable-xhdpi/ic_group_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_group_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_group_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_group_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_group_white_24dp.png b/src/main/res/drawable-xhdpi/ic_group_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_group_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_group_white_24dp.png diff --git a/res/drawable-xhdpi/ic_headset_white_24dp.png b/src/main/res/drawable-xhdpi/ic_headset_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_headset_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_headset_white_24dp.png diff --git a/res/drawable-xhdpi/ic_help_white_24dp.png b/src/main/res/drawable-xhdpi/ic_help_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_help_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_help_white_24dp.png diff --git a/res/drawable-xhdpi/ic_image_dark.png b/src/main/res/drawable-xhdpi/ic_image_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_image_dark.png rename to src/main/res/drawable-xhdpi/ic_image_dark.png diff --git a/res/drawable-xhdpi/ic_image_light.png b/src/main/res/drawable-xhdpi/ic_image_light.png similarity index 100% rename from res/drawable-xhdpi/ic_image_light.png rename to src/main/res/drawable-xhdpi/ic_image_light.png diff --git a/res/drawable-xhdpi/ic_image_white_24dp.png b/src/main/res/drawable-xhdpi/ic_image_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_image_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_image_white_24dp.png diff --git a/res/drawable-xhdpi/ic_info_outline_dark.png b/src/main/res/drawable-xhdpi/ic_info_outline_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_info_outline_dark.png rename to src/main/res/drawable-xhdpi/ic_info_outline_dark.png diff --git a/res/drawable-xhdpi/ic_info_outline_light.png b/src/main/res/drawable-xhdpi/ic_info_outline_light.png similarity index 100% rename from res/drawable-xhdpi/ic_info_outline_light.png rename to src/main/res/drawable-xhdpi/ic_info_outline_light.png diff --git a/res/drawable-xhdpi/ic_info_outline_white_24dp.png b/src/main/res/drawable-xhdpi/ic_info_outline_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_info_outline_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_info_outline_white_24dp.png diff --git a/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png b/src/main/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_insert_drive_file_white_24dp.png diff --git a/res/drawable-xhdpi/ic_keyboard_arrow_down_white_24dp.png b/src/main/res/drawable-xhdpi/ic_keyboard_arrow_down_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_keyboard_arrow_down_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_keyboard_arrow_down_white_24dp.png diff --git a/res/drawable-xhdpi/ic_keyboard_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_keyboard_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_keyboard_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_keyboard_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_keyboard_white_24dp.png b/src/main/res/drawable-xhdpi/ic_keyboard_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_keyboard_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_keyboard_white_24dp.png diff --git a/res/drawable-xhdpi/ic_launch_white_24dp.png b/src/main/res/drawable-xhdpi/ic_launch_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_launch_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_launch_white_24dp.png diff --git a/res/drawable-xhdpi/ic_local_dining_white_24dp.png b/src/main/res/drawable-xhdpi/ic_local_dining_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_local_dining_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_local_dining_white_24dp.png diff --git a/res/drawable-xhdpi/ic_location_chatlist.png b/src/main/res/drawable-xhdpi/ic_location_chatlist.png similarity index 100% rename from res/drawable-xhdpi/ic_location_chatlist.png rename to src/main/res/drawable-xhdpi/ic_location_chatlist.png diff --git a/res/drawable-xhdpi/ic_location_msg.png b/src/main/res/drawable-xhdpi/ic_location_msg.png similarity index 100% rename from res/drawable-xhdpi/ic_location_msg.png rename to src/main/res/drawable-xhdpi/ic_location_msg.png diff --git a/res/drawable-xhdpi/ic_location_off_white_24.png b/src/main/res/drawable-xhdpi/ic_location_off_white_24.png similarity index 100% rename from res/drawable-xhdpi/ic_location_off_white_24.png rename to src/main/res/drawable-xhdpi/ic_location_off_white_24.png diff --git a/res/drawable-xhdpi/ic_location_on_white_24dp.png b/src/main/res/drawable-xhdpi/ic_location_on_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_location_on_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_location_on_white_24dp.png diff --git a/res/drawable-xhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xhdpi/ic_lock_white_18dp.png similarity index 100% rename from res/drawable-xhdpi/ic_lock_white_18dp.png rename to src/main/res/drawable-xhdpi/ic_lock_white_18dp.png diff --git a/res/drawable-xhdpi/ic_lock_white_24dp.png b/src/main/res/drawable-xhdpi/ic_lock_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_lock_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_lock_white_24dp.png diff --git a/res/drawable-xhdpi/ic_mic_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_mic_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_mic_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_mic_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_mic_white_24dp.png b/src/main/res/drawable-xhdpi/ic_mic_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_mic_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_mic_white_24dp.png diff --git a/res/drawable-xhdpi/ic_mic_white_48dp.png b/src/main/res/drawable-xhdpi/ic_mic_white_48dp.png similarity index 100% rename from res/drawable-xhdpi/ic_mic_white_48dp.png rename to src/main/res/drawable-xhdpi/ic_mic_white_48dp.png diff --git a/res/drawable-xhdpi/ic_mood_grey600_24dp.png b/src/main/res/drawable-xhdpi/ic_mood_grey600_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_mood_grey600_24dp.png rename to src/main/res/drawable-xhdpi/ic_mood_grey600_24dp.png diff --git a/res/drawable-xhdpi/ic_mood_white_24dp.png b/src/main/res/drawable-xhdpi/ic_mood_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_mood_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_mood_white_24dp.png diff --git a/res/drawable-xhdpi/ic_movie_creation_dark.png b/src/main/res/drawable-xhdpi/ic_movie_creation_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_movie_creation_dark.png rename to src/main/res/drawable-xhdpi/ic_movie_creation_dark.png diff --git a/res/drawable-xhdpi/ic_movie_creation_light.png b/src/main/res/drawable-xhdpi/ic_movie_creation_light.png similarity index 100% rename from res/drawable-xhdpi/ic_movie_creation_light.png rename to src/main/res/drawable-xhdpi/ic_movie_creation_light.png diff --git a/res/drawable-xhdpi/ic_notifications_white_24dp.png b/src/main/res/drawable-xhdpi/ic_notifications_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_notifications_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_notifications_white_24dp.png diff --git a/res/drawable-xhdpi/ic_pause_circle_fill_white_48dp.png b/src/main/res/drawable-xhdpi/ic_pause_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xhdpi/ic_pause_circle_fill_white_48dp.png rename to src/main/res/drawable-xhdpi/ic_pause_circle_fill_white_48dp.png diff --git a/res/drawable-xhdpi/ic_person_white_24dp.png b/src/main/res/drawable-xhdpi/ic_person_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_person_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_person_white_24dp.png diff --git a/res/drawable-xhdpi/ic_pets_white_24dp.png b/src/main/res/drawable-xhdpi/ic_pets_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_pets_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_pets_white_24dp.png diff --git a/res/drawable-xhdpi/ic_photo_camera_dark.png b/src/main/res/drawable-xhdpi/ic_photo_camera_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_photo_camera_dark.png rename to src/main/res/drawable-xhdpi/ic_photo_camera_dark.png diff --git a/res/drawable-xhdpi/ic_photo_camera_light.png b/src/main/res/drawable-xhdpi/ic_photo_camera_light.png similarity index 100% rename from res/drawable-xhdpi/ic_photo_camera_light.png rename to src/main/res/drawable-xhdpi/ic_photo_camera_light.png diff --git a/res/drawable-xhdpi/ic_pin_white.png b/src/main/res/drawable-xhdpi/ic_pin_white.png similarity index 100% rename from res/drawable-xhdpi/ic_pin_white.png rename to src/main/res/drawable-xhdpi/ic_pin_white.png diff --git a/res/drawable-xhdpi/ic_pinned_chatlist.png b/src/main/res/drawable-xhdpi/ic_pinned_chatlist.png similarity index 100% rename from res/drawable-xhdpi/ic_pinned_chatlist.png rename to src/main/res/drawable-xhdpi/ic_pinned_chatlist.png diff --git a/res/drawable-xhdpi/ic_play_circle_fill_white_48dp.png b/src/main/res/drawable-xhdpi/ic_play_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xhdpi/ic_play_circle_fill_white_48dp.png rename to src/main/res/drawable-xhdpi/ic_play_circle_fill_white_48dp.png diff --git a/res/drawable-xhdpi/ic_reply.png b/src/main/res/drawable-xhdpi/ic_reply.png similarity index 100% rename from res/drawable-xhdpi/ic_reply.png rename to src/main/res/drawable-xhdpi/ic_reply.png diff --git a/res/drawable-xhdpi/ic_reply_white_24dp.png b/src/main/res/drawable-xhdpi/ic_reply_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_reply_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_reply_white_24dp.png diff --git a/res/drawable-xhdpi/ic_reply_white_36dp.png b/src/main/res/drawable-xhdpi/ic_reply_white_36dp.png similarity index 100% rename from res/drawable-xhdpi/ic_reply_white_36dp.png rename to src/main/res/drawable-xhdpi/ic_reply_white_36dp.png diff --git a/res/drawable-xhdpi/ic_rotate_32.webp b/src/main/res/drawable-xhdpi/ic_rotate_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_rotate_32.webp rename to src/main/res/drawable-xhdpi/ic_rotate_32.webp diff --git a/res/drawable-xhdpi/ic_search_down.png b/src/main/res/drawable-xhdpi/ic_search_down.png similarity index 100% rename from res/drawable-xhdpi/ic_search_down.png rename to src/main/res/drawable-xhdpi/ic_search_down.png diff --git a/res/drawable-xhdpi/ic_search_up.png b/src/main/res/drawable-xhdpi/ic_search_up.png similarity index 100% rename from res/drawable-xhdpi/ic_search_up.png rename to src/main/res/drawable-xhdpi/ic_search_up.png diff --git a/res/drawable-xhdpi/ic_send_push.png b/src/main/res/drawable-xhdpi/ic_send_push.png similarity index 100% rename from res/drawable-xhdpi/ic_send_push.png rename to src/main/res/drawable-xhdpi/ic_send_push.png diff --git a/res/drawable-xhdpi/ic_send_push_white_24dp.png b/src/main/res/drawable-xhdpi/ic_send_push_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_send_push_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_send_push_white_24dp.png diff --git a/res/drawable-xhdpi/ic_send_sms_insecure.png b/src/main/res/drawable-xhdpi/ic_send_sms_insecure.png similarity index 100% rename from res/drawable-xhdpi/ic_send_sms_insecure.png rename to src/main/res/drawable-xhdpi/ic_send_sms_insecure.png diff --git a/res/drawable-xhdpi/ic_send_sms_insecure_dark.png b/src/main/res/drawable-xhdpi/ic_send_sms_insecure_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_send_sms_insecure_dark.png rename to src/main/res/drawable-xhdpi/ic_send_sms_insecure_dark.png diff --git a/res/drawable-xhdpi/ic_send_sms_white_24dp.png b/src/main/res/drawable-xhdpi/ic_send_sms_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_send_sms_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_send_sms_white_24dp.png diff --git a/res/drawable-xhdpi/ic_swap_vert_white_24dp.png b/src/main/res/drawable-xhdpi/ic_swap_vert_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_swap_vert_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_swap_vert_white_24dp.png diff --git a/res/drawable-xhdpi/ic_tag_faces_white_24dp.png b/src/main/res/drawable-xhdpi/ic_tag_faces_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_tag_faces_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_tag_faces_white_24dp.png diff --git a/res/drawable-xhdpi/ic_text_32.webp b/src/main/res/drawable-xhdpi/ic_text_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_text_32.webp rename to src/main/res/drawable-xhdpi/ic_text_32.webp diff --git a/res/drawable-xhdpi/ic_trash_filled_32.webp b/src/main/res/drawable-xhdpi/ic_trash_filled_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_trash_filled_32.webp rename to src/main/res/drawable-xhdpi/ic_trash_filled_32.webp diff --git a/res/drawable-xhdpi/ic_unarchive_white_24dp.png b/src/main/res/drawable-xhdpi/ic_unarchive_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_unarchive_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_unarchive_white_24dp.png diff --git a/res/drawable-xhdpi/ic_undo_32.webp b/src/main/res/drawable-xhdpi/ic_undo_32.webp similarity index 100% rename from res/drawable-xhdpi/ic_undo_32.webp rename to src/main/res/drawable-xhdpi/ic_undo_32.webp diff --git a/res/drawable-xhdpi/ic_unlocked_white_24dp.png b/src/main/res/drawable-xhdpi/ic_unlocked_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_unlocked_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_unlocked_white_24dp.png diff --git a/res/drawable-xhdpi/ic_unpin_white.png b/src/main/res/drawable-xhdpi/ic_unpin_white.png similarity index 100% rename from res/drawable-xhdpi/ic_unpin_white.png rename to src/main/res/drawable-xhdpi/ic_unpin_white.png diff --git a/res/drawable-xhdpi/ic_volume_off_grey600_18dp.png b/src/main/res/drawable-xhdpi/ic_volume_off_grey600_18dp.png similarity index 100% rename from res/drawable-xhdpi/ic_volume_off_grey600_18dp.png rename to src/main/res/drawable-xhdpi/ic_volume_off_grey600_18dp.png diff --git a/res/drawable-xhdpi/ic_volume_off_white_18dp.png b/src/main/res/drawable-xhdpi/ic_volume_off_white_18dp.png similarity index 100% rename from res/drawable-xhdpi/ic_volume_off_white_18dp.png rename to src/main/res/drawable-xhdpi/ic_volume_off_white_18dp.png diff --git a/res/drawable-xhdpi/ic_volume_up_dark.png b/src/main/res/drawable-xhdpi/ic_volume_up_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_volume_up_dark.png rename to src/main/res/drawable-xhdpi/ic_volume_up_dark.png diff --git a/res/drawable-xhdpi/ic_volume_up_light.png b/src/main/res/drawable-xhdpi/ic_volume_up_light.png similarity index 100% rename from res/drawable-xhdpi/ic_volume_up_light.png rename to src/main/res/drawable-xhdpi/ic_volume_up_light.png diff --git a/res/drawable-xhdpi/ic_warning_dark.png b/src/main/res/drawable-xhdpi/ic_warning_dark.png similarity index 100% rename from res/drawable-xhdpi/ic_warning_dark.png rename to src/main/res/drawable-xhdpi/ic_warning_dark.png diff --git a/res/drawable-xhdpi/ic_warning_light.png b/src/main/res/drawable-xhdpi/ic_warning_light.png similarity index 100% rename from res/drawable-xhdpi/ic_warning_light.png rename to src/main/res/drawable-xhdpi/ic_warning_light.png diff --git a/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png b/src/main/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_wb_sunny_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_wb_sunny_white_24dp.png diff --git a/res/drawable-xhdpi/ic_work_white_24dp.png b/src/main/res/drawable-xhdpi/ic_work_white_24dp.png similarity index 100% rename from res/drawable-xhdpi/ic_work_white_24dp.png rename to src/main/res/drawable-xhdpi/ic_work_white_24dp.png diff --git a/res/drawable-xhdpi/msg_encr_out.png b/src/main/res/drawable-xhdpi/msg_encr_out.png similarity index 100% rename from res/drawable-xhdpi/msg_encr_out.png rename to src/main/res/drawable-xhdpi/msg_encr_out.png diff --git a/res/drawable-xhdpi/notification_permanent.png b/src/main/res/drawable-xhdpi/notification_permanent.png similarity index 100% rename from res/drawable-xhdpi/notification_permanent.png rename to src/main/res/drawable-xhdpi/notification_permanent.png diff --git a/res/drawable-xhdpi/notify_panel_notification_icon_bg.png b/src/main/res/drawable-xhdpi/notify_panel_notification_icon_bg.png similarity index 100% rename from res/drawable-xhdpi/notify_panel_notification_icon_bg.png rename to src/main/res/drawable-xhdpi/notify_panel_notification_icon_bg.png diff --git a/res/drawable-xhdpi/quick_camera_dark.png b/src/main/res/drawable-xhdpi/quick_camera_dark.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_dark.png rename to src/main/res/drawable-xhdpi/quick_camera_dark.png diff --git a/res/drawable-xhdpi/quick_camera_exit_fullscreen.png b/src/main/res/drawable-xhdpi/quick_camera_exit_fullscreen.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_exit_fullscreen.png rename to src/main/res/drawable-xhdpi/quick_camera_exit_fullscreen.png diff --git a/res/drawable-xhdpi/quick_camera_front.png b/src/main/res/drawable-xhdpi/quick_camera_front.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_front.png rename to src/main/res/drawable-xhdpi/quick_camera_front.png diff --git a/res/drawable-xhdpi/quick_camera_fullscreen.png b/src/main/res/drawable-xhdpi/quick_camera_fullscreen.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_fullscreen.png rename to src/main/res/drawable-xhdpi/quick_camera_fullscreen.png diff --git a/res/drawable-xhdpi/quick_camera_hide.png b/src/main/res/drawable-xhdpi/quick_camera_hide.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_hide.png rename to src/main/res/drawable-xhdpi/quick_camera_hide.png diff --git a/res/drawable-xhdpi/quick_camera_light.png b/src/main/res/drawable-xhdpi/quick_camera_light.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_light.png rename to src/main/res/drawable-xhdpi/quick_camera_light.png diff --git a/res/drawable-xhdpi/quick_camera_rear.png b/src/main/res/drawable-xhdpi/quick_camera_rear.png similarity index 100% rename from res/drawable-xhdpi/quick_camera_rear.png rename to src/main/res/drawable-xhdpi/quick_camera_rear.png diff --git a/res/drawable-xhdpi/quick_shutter_button.png b/src/main/res/drawable-xhdpi/quick_shutter_button.png similarity index 100% rename from res/drawable-xhdpi/quick_shutter_button.png rename to src/main/res/drawable-xhdpi/quick_shutter_button.png diff --git a/res/drawable-xhdpi/slidearrow.png b/src/main/res/drawable-xhdpi/slidearrow.png similarity index 100% rename from res/drawable-xhdpi/slidearrow.png rename to src/main/res/drawable-xhdpi/slidearrow.png diff --git a/res/drawable-xxhdpi-v11/icon_notification.png b/src/main/res/drawable-xxhdpi-v11/icon_notification.png similarity index 100% rename from res/drawable-xxhdpi-v11/icon_notification.png rename to src/main/res/drawable-xxhdpi-v11/icon_notification.png diff --git a/res/drawable-xxhdpi/check.png b/src/main/res/drawable-xxhdpi/check.png similarity index 100% rename from res/drawable-xxhdpi/check.png rename to src/main/res/drawable-xxhdpi/check.png diff --git a/res/drawable-xxhdpi/divet_lower_right_dark.png b/src/main/res/drawable-xxhdpi/divet_lower_right_dark.png similarity index 100% rename from res/drawable-xxhdpi/divet_lower_right_dark.png rename to src/main/res/drawable-xxhdpi/divet_lower_right_dark.png diff --git a/res/drawable-xxhdpi/divet_lower_right_light.png b/src/main/res/drawable-xxhdpi/divet_lower_right_light.png similarity index 100% rename from res/drawable-xxhdpi/divet_lower_right_light.png rename to src/main/res/drawable-xxhdpi/divet_lower_right_light.png diff --git a/res/drawable-xxhdpi/ic_account_box_dark.png b/src/main/res/drawable-xxhdpi/ic_account_box_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_account_box_dark.png rename to src/main/res/drawable-xxhdpi/ic_account_box_dark.png diff --git a/res/drawable-xxhdpi/ic_account_box_light.png b/src/main/res/drawable-xxhdpi/ic_account_box_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_account_box_light.png rename to src/main/res/drawable-xxhdpi/ic_account_box_light.png diff --git a/res/drawable-xxhdpi/ic_add_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_add_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_add_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_add_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_advanced_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_advanced_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_advanced_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_advanced_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_archive_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_archive_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_archive_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_archive_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_attach_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_attach_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_attach_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_attach_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_attach_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_attach_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_attach_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_attach_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_backspace_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_backspace_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_backspace_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_backspace_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_blur_on_white_24.png b/src/main/res/drawable-xxhdpi/ic_blur_on_white_24.png similarity index 100% rename from res/drawable-xxhdpi/ic_blur_on_white_24.png rename to src/main/res/drawable-xxhdpi/ic_blur_on_white_24.png diff --git a/res/drawable-xxhdpi/ic_brightness_6_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_brightness_6_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_brightness_6_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_brightness_6_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_brush_highlight_32.webp b/src/main/res/drawable-xxhdpi/ic_brush_highlight_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_brush_highlight_32.webp rename to src/main/res/drawable-xxhdpi/ic_brush_highlight_32.webp diff --git a/res/drawable-xxhdpi/ic_brush_marker_32.webp b/src/main/res/drawable-xxhdpi/ic_brush_marker_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_brush_marker_32.webp rename to src/main/res/drawable-xxhdpi/ic_brush_marker_32.webp diff --git a/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_camera_alt_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_camera_alt_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_check_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_check_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_check_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_check_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png b/src/main/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_circle_fill_white_48dp.png rename to src/main/res/drawable-xxhdpi/ic_circle_fill_white_48dp.png diff --git a/res/drawable-xxhdpi/ic_clear_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_clear_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_clear_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_close_white_18dp.webp b/src/main/res/drawable-xxhdpi/ic_close_white_18dp.webp similarity index 100% rename from res/drawable-xxhdpi/ic_close_white_18dp.webp rename to src/main/res/drawable-xxhdpi/ic_close_white_18dp.webp diff --git a/res/drawable-xxhdpi/ic_close_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_close_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_close_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_close_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_contact_picture.png b/src/main/res/drawable-xxhdpi/ic_contact_picture.png similarity index 100% rename from res/drawable-xxhdpi/ic_contact_picture.png rename to src/main/res/drawable-xxhdpi/ic_contact_picture.png diff --git a/res/drawable-xxhdpi/ic_content_copy_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_content_copy_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_content_copy_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_content_copy_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_create_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_create_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_create_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_create_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_crop_32.webp b/src/main/res/drawable-xxhdpi/ic_crop_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_crop_32.webp rename to src/main/res/drawable-xxhdpi/ic_crop_32.webp diff --git a/res/drawable-xxhdpi/ic_delete_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_delete_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_delete_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_delivery_status_read.png b/src/main/res/drawable-xxhdpi/ic_delivery_status_read.png similarity index 100% rename from res/drawable-xxhdpi/ic_delivery_status_read.png rename to src/main/res/drawable-xxhdpi/ic_delivery_status_read.png diff --git a/res/drawable-xxhdpi/ic_delivery_status_sending.png b/src/main/res/drawable-xxhdpi/ic_delivery_status_sending.png similarity index 100% rename from res/drawable-xxhdpi/ic_delivery_status_sending.png rename to src/main/res/drawable-xxhdpi/ic_delivery_status_sending.png diff --git a/res/drawable-xxhdpi/ic_delivery_status_sent.png b/src/main/res/drawable-xxhdpi/ic_delivery_status_sent.png similarity index 100% rename from res/drawable-xxhdpi/ic_delivery_status_sent.png rename to src/main/res/drawable-xxhdpi/ic_delivery_status_sent.png diff --git a/res/drawable-xxhdpi/ic_emoji_32.webp b/src/main/res/drawable-xxhdpi/ic_emoji_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_emoji_32.webp rename to src/main/res/drawable-xxhdpi/ic_emoji_32.webp diff --git a/res/drawable-xxhdpi/ic_flip_32.webp b/src/main/res/drawable-xxhdpi/ic_flip_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_flip_32.webp rename to src/main/res/drawable-xxhdpi/ic_flip_32.webp diff --git a/res/drawable-xxhdpi/ic_forum_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_forum_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_forum_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_forum_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_forward_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_forward_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_forward_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_forward_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_group_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_group_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_group_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_group_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_group_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_group_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_group_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_group_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_headset_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_headset_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_headset_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_headset_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_help_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_help_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_help_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_help_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_image_dark.png b/src/main/res/drawable-xxhdpi/ic_image_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_image_dark.png rename to src/main/res/drawable-xxhdpi/ic_image_dark.png diff --git a/res/drawable-xxhdpi/ic_image_light.png b/src/main/res/drawable-xxhdpi/ic_image_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_image_light.png rename to src/main/res/drawable-xxhdpi/ic_image_light.png diff --git a/res/drawable-xxhdpi/ic_image_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_image_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_image_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_image_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_info_outline_dark.png b/src/main/res/drawable-xxhdpi/ic_info_outline_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_info_outline_dark.png rename to src/main/res/drawable-xxhdpi/ic_info_outline_dark.png diff --git a/res/drawable-xxhdpi/ic_info_outline_light.png b/src/main/res/drawable-xxhdpi/ic_info_outline_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_info_outline_light.png rename to src/main/res/drawable-xxhdpi/ic_info_outline_light.png diff --git a/res/drawable-xxhdpi/ic_info_outline_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_info_outline_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_info_outline_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_info_outline_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_insert_drive_file_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_keyboard_arrow_down_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_down_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_keyboard_arrow_down_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_keyboard_arrow_down_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_keyboard_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_keyboard_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_keyboard_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_keyboard_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_keyboard_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_keyboard_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_launch_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_launch_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_launch_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_launch_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_local_dining_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_local_dining_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_local_dining_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_local_dining_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_location_off_white_24.png b/src/main/res/drawable-xxhdpi/ic_location_off_white_24.png similarity index 100% rename from res/drawable-xxhdpi/ic_location_off_white_24.png rename to src/main/res/drawable-xxhdpi/ic_location_off_white_24.png diff --git a/res/drawable-xxhdpi/ic_location_on_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_location_on_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_location_on_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_location_on_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_lock_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_lock_white_18dp.png rename to src/main/res/drawable-xxhdpi/ic_lock_white_18dp.png diff --git a/res/drawable-xxhdpi/ic_lock_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_lock_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_lock_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_lock_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_mic_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_mic_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_mic_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_mic_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_mic_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_mic_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_mic_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_mic_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_mic_white_48dp.png b/src/main/res/drawable-xxhdpi/ic_mic_white_48dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_mic_white_48dp.png rename to src/main/res/drawable-xxhdpi/ic_mic_white_48dp.png diff --git a/res/drawable-xxhdpi/ic_mood_grey600_24dp.png b/src/main/res/drawable-xxhdpi/ic_mood_grey600_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_mood_grey600_24dp.png rename to src/main/res/drawable-xxhdpi/ic_mood_grey600_24dp.png diff --git a/res/drawable-xxhdpi/ic_mood_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_mood_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_mood_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_mood_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_movie_creation_dark.png b/src/main/res/drawable-xxhdpi/ic_movie_creation_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_movie_creation_dark.png rename to src/main/res/drawable-xxhdpi/ic_movie_creation_dark.png diff --git a/res/drawable-xxhdpi/ic_movie_creation_light.png b/src/main/res/drawable-xxhdpi/ic_movie_creation_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_movie_creation_light.png rename to src/main/res/drawable-xxhdpi/ic_movie_creation_light.png diff --git a/res/drawable-xxhdpi/ic_notifications_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_notifications_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_notifications_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_notifications_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_pause_circle_fill_white_48dp.png b/src/main/res/drawable-xxhdpi/ic_pause_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_pause_circle_fill_white_48dp.png rename to src/main/res/drawable-xxhdpi/ic_pause_circle_fill_white_48dp.png diff --git a/res/drawable-xxhdpi/ic_person_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_person_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_person_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_person_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_pets_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_pets_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_pets_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_pets_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_photo_camera_dark.png b/src/main/res/drawable-xxhdpi/ic_photo_camera_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_photo_camera_dark.png rename to src/main/res/drawable-xxhdpi/ic_photo_camera_dark.png diff --git a/res/drawable-xxhdpi/ic_photo_camera_light.png b/src/main/res/drawable-xxhdpi/ic_photo_camera_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_photo_camera_light.png rename to src/main/res/drawable-xxhdpi/ic_photo_camera_light.png diff --git a/res/drawable-xxhdpi/ic_pin_white.png b/src/main/res/drawable-xxhdpi/ic_pin_white.png similarity index 100% rename from res/drawable-xxhdpi/ic_pin_white.png rename to src/main/res/drawable-xxhdpi/ic_pin_white.png diff --git a/res/drawable-xxhdpi/ic_play_circle_fill_white_48dp.png b/src/main/res/drawable-xxhdpi/ic_play_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_play_circle_fill_white_48dp.png rename to src/main/res/drawable-xxhdpi/ic_play_circle_fill_white_48dp.png diff --git a/res/drawable-xxhdpi/ic_reply.png b/src/main/res/drawable-xxhdpi/ic_reply.png similarity index 100% rename from res/drawable-xxhdpi/ic_reply.png rename to src/main/res/drawable-xxhdpi/ic_reply.png diff --git a/res/drawable-xxhdpi/ic_reply_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_reply_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_reply_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_reply_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_reply_white_36dp.png b/src/main/res/drawable-xxhdpi/ic_reply_white_36dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_reply_white_36dp.png rename to src/main/res/drawable-xxhdpi/ic_reply_white_36dp.png diff --git a/res/drawable-xxhdpi/ic_rotate_32.webp b/src/main/res/drawable-xxhdpi/ic_rotate_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_rotate_32.webp rename to src/main/res/drawable-xxhdpi/ic_rotate_32.webp diff --git a/res/drawable-xxhdpi/ic_search_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_search_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_search_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_search_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_send_push.png b/src/main/res/drawable-xxhdpi/ic_send_push.png similarity index 100% rename from res/drawable-xxhdpi/ic_send_push.png rename to src/main/res/drawable-xxhdpi/ic_send_push.png diff --git a/res/drawable-xxhdpi/ic_send_push_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_send_push_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_send_push_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_send_push_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_send_sms_insecure.png b/src/main/res/drawable-xxhdpi/ic_send_sms_insecure.png similarity index 100% rename from res/drawable-xxhdpi/ic_send_sms_insecure.png rename to src/main/res/drawable-xxhdpi/ic_send_sms_insecure.png diff --git a/res/drawable-xxhdpi/ic_send_sms_insecure_dark.png b/src/main/res/drawable-xxhdpi/ic_send_sms_insecure_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_send_sms_insecure_dark.png rename to src/main/res/drawable-xxhdpi/ic_send_sms_insecure_dark.png diff --git a/res/drawable-xxhdpi/ic_send_sms_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_send_sms_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_send_sms_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_send_sms_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_swap_vert_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_swap_vert_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_swap_vert_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_swap_vert_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_tag_faces_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_tag_faces_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_text_32.webp b/src/main/res/drawable-xxhdpi/ic_text_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_text_32.webp rename to src/main/res/drawable-xxhdpi/ic_text_32.webp diff --git a/res/drawable-xxhdpi/ic_trash_filled_32.webp b/src/main/res/drawable-xxhdpi/ic_trash_filled_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_trash_filled_32.webp rename to src/main/res/drawable-xxhdpi/ic_trash_filled_32.webp diff --git a/res/drawable-xxhdpi/ic_unarchive_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_unarchive_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_unarchive_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_unarchive_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_undo_32.webp b/src/main/res/drawable-xxhdpi/ic_undo_32.webp similarity index 100% rename from res/drawable-xxhdpi/ic_undo_32.webp rename to src/main/res/drawable-xxhdpi/ic_undo_32.webp diff --git a/res/drawable-xxhdpi/ic_unlocked_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_unlocked_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_unlocked_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_unlocked_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_unpin_white.png b/src/main/res/drawable-xxhdpi/ic_unpin_white.png similarity index 100% rename from res/drawable-xxhdpi/ic_unpin_white.png rename to src/main/res/drawable-xxhdpi/ic_unpin_white.png diff --git a/res/drawable-xxhdpi/ic_volume_off_grey600_18dp.png b/src/main/res/drawable-xxhdpi/ic_volume_off_grey600_18dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_volume_off_grey600_18dp.png rename to src/main/res/drawable-xxhdpi/ic_volume_off_grey600_18dp.png diff --git a/res/drawable-xxhdpi/ic_volume_off_white_18dp.png b/src/main/res/drawable-xxhdpi/ic_volume_off_white_18dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_volume_off_white_18dp.png rename to src/main/res/drawable-xxhdpi/ic_volume_off_white_18dp.png diff --git a/res/drawable-xxhdpi/ic_volume_up_dark.png b/src/main/res/drawable-xxhdpi/ic_volume_up_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_volume_up_dark.png rename to src/main/res/drawable-xxhdpi/ic_volume_up_dark.png diff --git a/res/drawable-xxhdpi/ic_volume_up_light.png b/src/main/res/drawable-xxhdpi/ic_volume_up_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_volume_up_light.png rename to src/main/res/drawable-xxhdpi/ic_volume_up_light.png diff --git a/res/drawable-xxhdpi/ic_warning_dark.png b/src/main/res/drawable-xxhdpi/ic_warning_dark.png similarity index 100% rename from res/drawable-xxhdpi/ic_warning_dark.png rename to src/main/res/drawable-xxhdpi/ic_warning_dark.png diff --git a/res/drawable-xxhdpi/ic_warning_light.png b/src/main/res/drawable-xxhdpi/ic_warning_light.png similarity index 100% rename from res/drawable-xxhdpi/ic_warning_light.png rename to src/main/res/drawable-xxhdpi/ic_warning_light.png diff --git a/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_wb_sunny_white_24dp.png diff --git a/res/drawable-xxhdpi/ic_work_white_24dp.png b/src/main/res/drawable-xxhdpi/ic_work_white_24dp.png similarity index 100% rename from res/drawable-xxhdpi/ic_work_white_24dp.png rename to src/main/res/drawable-xxhdpi/ic_work_white_24dp.png diff --git a/res/drawable-xxhdpi/msg_encr_out.png b/src/main/res/drawable-xxhdpi/msg_encr_out.png similarity index 100% rename from res/drawable-xxhdpi/msg_encr_out.png rename to src/main/res/drawable-xxhdpi/msg_encr_out.png diff --git a/res/drawable-xxhdpi/notification_permanent.png b/src/main/res/drawable-xxhdpi/notification_permanent.png similarity index 100% rename from res/drawable-xxhdpi/notification_permanent.png rename to src/main/res/drawable-xxhdpi/notification_permanent.png diff --git a/res/drawable-xxhdpi/quick_camera_dark.png b/src/main/res/drawable-xxhdpi/quick_camera_dark.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_dark.png rename to src/main/res/drawable-xxhdpi/quick_camera_dark.png diff --git a/res/drawable-xxhdpi/quick_camera_exit_fullscreen.png b/src/main/res/drawable-xxhdpi/quick_camera_exit_fullscreen.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_exit_fullscreen.png rename to src/main/res/drawable-xxhdpi/quick_camera_exit_fullscreen.png diff --git a/res/drawable-xxhdpi/quick_camera_front.png b/src/main/res/drawable-xxhdpi/quick_camera_front.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_front.png rename to src/main/res/drawable-xxhdpi/quick_camera_front.png diff --git a/res/drawable-xxhdpi/quick_camera_fullscreen.png b/src/main/res/drawable-xxhdpi/quick_camera_fullscreen.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_fullscreen.png rename to src/main/res/drawable-xxhdpi/quick_camera_fullscreen.png diff --git a/res/drawable-xxhdpi/quick_camera_hide.png b/src/main/res/drawable-xxhdpi/quick_camera_hide.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_hide.png rename to src/main/res/drawable-xxhdpi/quick_camera_hide.png diff --git a/res/drawable-xxhdpi/quick_camera_light.png b/src/main/res/drawable-xxhdpi/quick_camera_light.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_light.png rename to src/main/res/drawable-xxhdpi/quick_camera_light.png diff --git a/res/drawable-xxhdpi/quick_camera_rear.png b/src/main/res/drawable-xxhdpi/quick_camera_rear.png similarity index 100% rename from res/drawable-xxhdpi/quick_camera_rear.png rename to src/main/res/drawable-xxhdpi/quick_camera_rear.png diff --git a/res/drawable-xxhdpi/quick_shutter_button.png b/src/main/res/drawable-xxhdpi/quick_shutter_button.png similarity index 100% rename from res/drawable-xxhdpi/quick_shutter_button.png rename to src/main/res/drawable-xxhdpi/quick_shutter_button.png diff --git a/res/drawable-xxxhdpi/ic_advanced_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_advanced_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_advanced_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_advanced_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_archive_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_archive_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_archive_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_archive_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_arrow_back_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_blur_on_white_24.png b/src/main/res/drawable-xxxhdpi/ic_blur_on_white_24.png similarity index 100% rename from res/drawable-xxxhdpi/ic_blur_on_white_24.png rename to src/main/res/drawable-xxxhdpi/ic_blur_on_white_24.png diff --git a/res/drawable-xxxhdpi/ic_brightness_6_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_brightness_6_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_brightness_6_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_brightness_6_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_brush_highlight_32.webp b/src/main/res/drawable-xxxhdpi/ic_brush_highlight_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_brush_highlight_32.webp rename to src/main/res/drawable-xxxhdpi/ic_brush_highlight_32.webp diff --git a/res/drawable-xxxhdpi/ic_brush_marker_32.webp b/src/main/res/drawable-xxxhdpi/ic_brush_marker_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_brush_marker_32.webp rename to src/main/res/drawable-xxxhdpi/ic_brush_marker_32.webp diff --git a/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_camera_alt_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_check_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_check_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_check_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_check_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png b/src/main/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png rename to src/main/res/drawable-xxxhdpi/ic_circle_fill_white_48dp.png diff --git a/res/drawable-xxxhdpi/ic_clear_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_clear_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_clear_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_close_white_18dp.webp b/src/main/res/drawable-xxxhdpi/ic_close_white_18dp.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_close_white_18dp.webp rename to src/main/res/drawable-xxxhdpi/ic_close_white_18dp.webp diff --git a/res/drawable-xxxhdpi/ic_close_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_close_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_close_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_close_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_content_copy_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_content_copy_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_content_copy_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_content_copy_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_crop_32.webp b/src/main/res/drawable-xxxhdpi/ic_crop_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_crop_32.webp rename to src/main/res/drawable-xxxhdpi/ic_crop_32.webp diff --git a/res/drawable-xxxhdpi/ic_delete_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_delete_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_delete_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_delivery_status_read.png b/src/main/res/drawable-xxxhdpi/ic_delivery_status_read.png similarity index 100% rename from res/drawable-xxxhdpi/ic_delivery_status_read.png rename to src/main/res/drawable-xxxhdpi/ic_delivery_status_read.png diff --git a/res/drawable-xxxhdpi/ic_delivery_status_sending.png b/src/main/res/drawable-xxxhdpi/ic_delivery_status_sending.png similarity index 100% rename from res/drawable-xxxhdpi/ic_delivery_status_sending.png rename to src/main/res/drawable-xxxhdpi/ic_delivery_status_sending.png diff --git a/res/drawable-xxxhdpi/ic_delivery_status_sent.png b/src/main/res/drawable-xxxhdpi/ic_delivery_status_sent.png similarity index 100% rename from res/drawable-xxxhdpi/ic_delivery_status_sent.png rename to src/main/res/drawable-xxxhdpi/ic_delivery_status_sent.png diff --git a/res/drawable-xxxhdpi/ic_emoji_32.webp b/src/main/res/drawable-xxxhdpi/ic_emoji_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_emoji_32.webp rename to src/main/res/drawable-xxxhdpi/ic_emoji_32.webp diff --git a/res/drawable-xxxhdpi/ic_flip_32.webp b/src/main/res/drawable-xxxhdpi/ic_flip_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_flip_32.webp rename to src/main/res/drawable-xxxhdpi/ic_flip_32.webp diff --git a/res/drawable-xxxhdpi/ic_forum_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_forum_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_forum_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_forum_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_headset_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_headset_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_headset_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_headset_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_help_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_help_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_help_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_help_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_image_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_image_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_image_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_insert_drive_file_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_insert_drive_file_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_insert_drive_file_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_insert_drive_file_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_keyboard_arrow_down_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_down_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_keyboard_arrow_down_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_down_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_keyboard_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_keyboard_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_keyboard_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_keyboard_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_launch_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_launch_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_launch_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_launch_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_local_dining_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_local_dining_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_location_off_white_24.png b/src/main/res/drawable-xxxhdpi/ic_location_off_white_24.png similarity index 100% rename from res/drawable-xxxhdpi/ic_location_off_white_24.png rename to src/main/res/drawable-xxxhdpi/ic_location_off_white_24.png diff --git a/res/drawable-xxxhdpi/ic_location_on_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_location_on_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_location_on_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_location_on_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_mic_grey600_24dp.png b/src/main/res/drawable-xxxhdpi/ic_mic_grey600_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_mic_grey600_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_mic_grey600_24dp.png diff --git a/res/drawable-xxxhdpi/ic_mic_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_mic_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_mic_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_mic_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_mic_white_48dp.png b/src/main/res/drawable-xxxhdpi/ic_mic_white_48dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_mic_white_48dp.png rename to src/main/res/drawable-xxxhdpi/ic_mic_white_48dp.png diff --git a/res/drawable-xxxhdpi/ic_notifications_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_notifications_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_notifications_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_notifications_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_pause_circle_fill_white_48dp.png b/src/main/res/drawable-xxxhdpi/ic_pause_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_pause_circle_fill_white_48dp.png rename to src/main/res/drawable-xxxhdpi/ic_pause_circle_fill_white_48dp.png diff --git a/res/drawable-xxxhdpi/ic_person_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_person_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_person_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_person_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_pets_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_pets_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_pets_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_pets_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_photo_camera_dark.png b/src/main/res/drawable-xxxhdpi/ic_photo_camera_dark.png similarity index 100% rename from res/drawable-xxxhdpi/ic_photo_camera_dark.png rename to src/main/res/drawable-xxxhdpi/ic_photo_camera_dark.png diff --git a/res/drawable-xxxhdpi/ic_photo_camera_light.png b/src/main/res/drawable-xxxhdpi/ic_photo_camera_light.png similarity index 100% rename from res/drawable-xxxhdpi/ic_photo_camera_light.png rename to src/main/res/drawable-xxxhdpi/ic_photo_camera_light.png diff --git a/res/drawable-xxxhdpi/ic_pin_white.png b/src/main/res/drawable-xxxhdpi/ic_pin_white.png similarity index 100% rename from res/drawable-xxxhdpi/ic_pin_white.png rename to src/main/res/drawable-xxxhdpi/ic_pin_white.png diff --git a/res/drawable-xxxhdpi/ic_play_circle_fill_white_48dp.png b/src/main/res/drawable-xxxhdpi/ic_play_circle_fill_white_48dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_play_circle_fill_white_48dp.png rename to src/main/res/drawable-xxxhdpi/ic_play_circle_fill_white_48dp.png diff --git a/res/drawable-xxxhdpi/ic_reply_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_reply_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_reply_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_reply_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_reply_white_36dp.png b/src/main/res/drawable-xxxhdpi/ic_reply_white_36dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_reply_white_36dp.png rename to src/main/res/drawable-xxxhdpi/ic_reply_white_36dp.png diff --git a/res/drawable-xxxhdpi/ic_rotate_32.webp b/src/main/res/drawable-xxxhdpi/ic_rotate_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_rotate_32.webp rename to src/main/res/drawable-xxxhdpi/ic_rotate_32.webp diff --git a/res/drawable-xxxhdpi/ic_send_push_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_send_push_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_send_push_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_send_push_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_send_sms_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_send_sms_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_send_sms_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_send_sms_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_swap_vert_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_swap_vert_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_swap_vert_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_swap_vert_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_tag_faces_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_text_32.webp b/src/main/res/drawable-xxxhdpi/ic_text_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_text_32.webp rename to src/main/res/drawable-xxxhdpi/ic_text_32.webp diff --git a/res/drawable-xxxhdpi/ic_trash_filled_32.webp b/src/main/res/drawable-xxxhdpi/ic_trash_filled_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_trash_filled_32.webp rename to src/main/res/drawable-xxxhdpi/ic_trash_filled_32.webp diff --git a/res/drawable-xxxhdpi/ic_unarchive_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_unarchive_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_unarchive_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_unarchive_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_undo_32.webp b/src/main/res/drawable-xxxhdpi/ic_undo_32.webp similarity index 100% rename from res/drawable-xxxhdpi/ic_undo_32.webp rename to src/main/res/drawable-xxxhdpi/ic_undo_32.webp diff --git a/res/drawable-xxxhdpi/ic_unpin_white.png b/src/main/res/drawable-xxxhdpi/ic_unpin_white.png similarity index 100% rename from res/drawable-xxxhdpi/ic_unpin_white.png rename to src/main/res/drawable-xxxhdpi/ic_unpin_white.png diff --git a/res/drawable-xxxhdpi/ic_volume_off_grey600_18dp.png b/src/main/res/drawable-xxxhdpi/ic_volume_off_grey600_18dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_volume_off_grey600_18dp.png rename to src/main/res/drawable-xxxhdpi/ic_volume_off_grey600_18dp.png diff --git a/res/drawable-xxxhdpi/ic_volume_off_white_18dp.png b/src/main/res/drawable-xxxhdpi/ic_volume_off_white_18dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_volume_off_white_18dp.png rename to src/main/res/drawable-xxxhdpi/ic_volume_off_white_18dp.png diff --git a/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_wb_sunny_white_24dp.png diff --git a/res/drawable-xxxhdpi/ic_work_white_24dp.png b/src/main/res/drawable-xxxhdpi/ic_work_white_24dp.png similarity index 100% rename from res/drawable-xxxhdpi/ic_work_white_24dp.png rename to src/main/res/drawable-xxxhdpi/ic_work_white_24dp.png diff --git a/res/drawable/archived_indicator_background.xml b/src/main/res/drawable/archived_indicator_background.xml similarity index 100% rename from res/drawable/archived_indicator_background.xml rename to src/main/res/drawable/archived_indicator_background.xml diff --git a/res/drawable/attachment_selector_shadow.xml b/src/main/res/drawable/attachment_selector_shadow.xml similarity index 100% rename from res/drawable/attachment_selector_shadow.xml rename to src/main/res/drawable/attachment_selector_shadow.xml diff --git a/res/drawable/background_hd.jpg b/src/main/res/drawable/background_hd.jpg similarity index 100% rename from res/drawable/background_hd.jpg rename to src/main/res/drawable/background_hd.jpg diff --git a/res/drawable/background_hd_dark.jpg b/src/main/res/drawable/background_hd_dark.jpg similarity index 100% rename from res/drawable/background_hd_dark.jpg rename to src/main/res/drawable/background_hd_dark.jpg diff --git a/res/drawable/badge_divider.xml b/src/main/res/drawable/badge_divider.xml similarity index 100% rename from res/drawable/badge_divider.xml rename to src/main/res/drawable/badge_divider.xml diff --git a/res/drawable/baseline_qr_code_24.xml b/src/main/res/drawable/baseline_qr_code_24.xml similarity index 100% rename from res/drawable/baseline_qr_code_24.xml rename to src/main/res/drawable/baseline_qr_code_24.xml diff --git a/res/drawable/button_background.xml b/src/main/res/drawable/button_background.xml similarity index 100% rename from res/drawable/button_background.xml rename to src/main/res/drawable/button_background.xml diff --git a/res/drawable/button_secondary_background.xml b/src/main/res/drawable/button_secondary_background.xml similarity index 100% rename from res/drawable/button_secondary_background.xml rename to src/main/res/drawable/button_secondary_background.xml diff --git a/res/drawable/circle_alpha.xml b/src/main/res/drawable/circle_alpha.xml similarity index 100% rename from res/drawable/circle_alpha.xml rename to src/main/res/drawable/circle_alpha.xml diff --git a/res/drawable/circle_tintable.xml b/src/main/res/drawable/circle_tintable.xml similarity index 100% rename from res/drawable/circle_tintable.xml rename to src/main/res/drawable/circle_tintable.xml diff --git a/res/drawable/circle_touch_highlight_background.xml b/src/main/res/drawable/circle_touch_highlight_background.xml similarity index 100% rename from res/drawable/circle_touch_highlight_background.xml rename to src/main/res/drawable/circle_touch_highlight_background.xml diff --git a/res/drawable/circle_universal_overlay.xml b/src/main/res/drawable/circle_universal_overlay.xml similarity index 100% rename from res/drawable/circle_universal_overlay.xml rename to src/main/res/drawable/circle_universal_overlay.xml diff --git a/res/drawable/circle_white.xml b/src/main/res/drawable/circle_white.xml similarity index 100% rename from res/drawable/circle_white.xml rename to src/main/res/drawable/circle_white.xml diff --git a/res/drawable/clickable_card_dark.xml b/src/main/res/drawable/clickable_card_dark.xml similarity index 100% rename from res/drawable/clickable_card_dark.xml rename to src/main/res/drawable/clickable_card_dark.xml diff --git a/res/drawable/clickable_card_light.xml b/src/main/res/drawable/clickable_card_light.xml similarity index 100% rename from res/drawable/clickable_card_light.xml rename to src/main/res/drawable/clickable_card_light.xml diff --git a/res/drawable/compose_background_dark.xml b/src/main/res/drawable/compose_background_dark.xml similarity index 100% rename from res/drawable/compose_background_dark.xml rename to src/main/res/drawable/compose_background_dark.xml diff --git a/res/drawable/compose_background_light.xml b/src/main/res/drawable/compose_background_light.xml similarity index 100% rename from res/drawable/compose_background_light.xml rename to src/main/res/drawable/compose_background_light.xml diff --git a/res/drawable/compose_divider_background.xml b/src/main/res/drawable/compose_divider_background.xml similarity index 100% rename from res/drawable/compose_divider_background.xml rename to src/main/res/drawable/compose_divider_background.xml diff --git a/res/drawable/contact_list_divider_dark.xml b/src/main/res/drawable/contact_list_divider_dark.xml similarity index 100% rename from res/drawable/contact_list_divider_dark.xml rename to src/main/res/drawable/contact_list_divider_dark.xml diff --git a/res/drawable/contact_list_divider_light.xml b/src/main/res/drawable/contact_list_divider_light.xml similarity index 100% rename from res/drawable/contact_list_divider_light.xml rename to src/main/res/drawable/contact_list_divider_light.xml diff --git a/res/drawable/contact_photo_background.xml b/src/main/res/drawable/contact_photo_background.xml similarity index 100% rename from res/drawable/contact_photo_background.xml rename to src/main/res/drawable/contact_photo_background.xml diff --git a/res/drawable/conversation_attachment_close_circle.xml b/src/main/res/drawable/conversation_attachment_close_circle.xml similarity index 100% rename from res/drawable/conversation_attachment_close_circle.xml rename to src/main/res/drawable/conversation_attachment_close_circle.xml diff --git a/res/drawable/conversation_attachment_edit.xml b/src/main/res/drawable/conversation_attachment_edit.xml similarity index 100% rename from res/drawable/conversation_attachment_edit.xml rename to src/main/res/drawable/conversation_attachment_edit.xml diff --git a/res/drawable/conversation_item_background.xml b/src/main/res/drawable/conversation_item_background.xml similarity index 100% rename from res/drawable/conversation_item_background.xml rename to src/main/res/drawable/conversation_item_background.xml diff --git a/res/drawable/conversation_item_background_animated.xml b/src/main/res/drawable/conversation_item_background_animated.xml similarity index 100% rename from res/drawable/conversation_item_background_animated.xml rename to src/main/res/drawable/conversation_item_background_animated.xml diff --git a/res/drawable/conversation_item_sent_indicator_text_shape.xml b/src/main/res/drawable/conversation_item_sent_indicator_text_shape.xml similarity index 100% rename from res/drawable/conversation_item_sent_indicator_text_shape.xml rename to src/main/res/drawable/conversation_item_sent_indicator_text_shape.xml diff --git a/res/drawable/conversation_item_sent_indicator_text_shape_dark.xml b/src/main/res/drawable/conversation_item_sent_indicator_text_shape_dark.xml similarity index 100% rename from res/drawable/conversation_item_sent_indicator_text_shape_dark.xml rename to src/main/res/drawable/conversation_item_sent_indicator_text_shape_dark.xml diff --git a/res/drawable/conversation_item_update_background.xml b/src/main/res/drawable/conversation_item_update_background.xml similarity index 100% rename from res/drawable/conversation_item_update_background.xml rename to src/main/res/drawable/conversation_item_update_background.xml diff --git a/res/drawable/conversation_list_divider_shape.xml b/src/main/res/drawable/conversation_list_divider_shape.xml similarity index 100% rename from res/drawable/conversation_list_divider_shape.xml rename to src/main/res/drawable/conversation_list_divider_shape.xml diff --git a/res/drawable/conversation_list_divider_shape_dark.xml b/src/main/res/drawable/conversation_list_divider_shape_dark.xml similarity index 100% rename from res/drawable/conversation_list_divider_shape_dark.xml rename to src/main/res/drawable/conversation_list_divider_shape_dark.xml diff --git a/res/drawable/conversation_list_item_background.xml b/src/main/res/drawable/conversation_list_item_background.xml similarity index 100% rename from res/drawable/conversation_list_item_background.xml rename to src/main/res/drawable/conversation_list_item_background.xml diff --git a/res/drawable/conversation_list_item_background_dark.xml b/src/main/res/drawable/conversation_list_item_background_dark.xml similarity index 100% rename from res/drawable/conversation_list_item_background_dark.xml rename to src/main/res/drawable/conversation_list_item_background_dark.xml diff --git a/res/drawable/dismiss_background.xml b/src/main/res/drawable/dismiss_background.xml similarity index 100% rename from res/drawable/dismiss_background.xml rename to src/main/res/drawable/dismiss_background.xml diff --git a/res/drawable/emoji_variation_selector_background_dark.xml b/src/main/res/drawable/emoji_variation_selector_background_dark.xml similarity index 100% rename from res/drawable/emoji_variation_selector_background_dark.xml rename to src/main/res/drawable/emoji_variation_selector_background_dark.xml diff --git a/res/drawable/emoji_variation_selector_background_light.xml b/src/main/res/drawable/emoji_variation_selector_background_light.xml similarity index 100% rename from res/drawable/emoji_variation_selector_background_light.xml rename to src/main/res/drawable/emoji_variation_selector_background_light.xml diff --git a/res/drawable/floating_mini_bg_dark.xml b/src/main/res/drawable/floating_mini_bg_dark.xml similarity index 100% rename from res/drawable/floating_mini_bg_dark.xml rename to src/main/res/drawable/floating_mini_bg_dark.xml diff --git a/res/drawable/floating_mini_bg_light.xml b/src/main/res/drawable/floating_mini_bg_light.xml similarity index 100% rename from res/drawable/floating_mini_bg_light.xml rename to src/main/res/drawable/floating_mini_bg_light.xml diff --git a/res/drawable/ic_advanced_24dp.xml b/src/main/res/drawable/ic_advanced_24dp.xml similarity index 100% rename from res/drawable/ic_advanced_24dp.xml rename to src/main/res/drawable/ic_advanced_24dp.xml diff --git a/res/drawable/ic_baseline_devices_24.xml b/src/main/res/drawable/ic_baseline_devices_24.xml similarity index 100% rename from res/drawable/ic_baseline_devices_24.xml rename to src/main/res/drawable/ic_baseline_devices_24.xml diff --git a/res/drawable/ic_blur_on_white_24.png b/src/main/res/drawable/ic_blur_on_white_24.png similarity index 100% rename from res/drawable/ic_blur_on_white_24.png rename to src/main/res/drawable/ic_blur_on_white_24.png diff --git a/res/drawable/ic_brightness_6_24dp.xml b/src/main/res/drawable/ic_brightness_6_24dp.xml similarity index 100% rename from res/drawable/ic_brightness_6_24dp.xml rename to src/main/res/drawable/ic_brightness_6_24dp.xml diff --git a/res/drawable/ic_check_outline_22.xml b/src/main/res/drawable/ic_check_outline_22.xml similarity index 100% rename from res/drawable/ic_check_outline_22.xml rename to src/main/res/drawable/ic_check_outline_22.xml diff --git a/res/drawable/ic_chevron_up.xml b/src/main/res/drawable/ic_chevron_up.xml similarity index 100% rename from res/drawable/ic_chevron_up.xml rename to src/main/res/drawable/ic_chevron_up.xml diff --git a/res/drawable/ic_circle_checkbox.xml b/src/main/res/drawable/ic_circle_checkbox.xml similarity index 100% rename from res/drawable/ic_circle_checkbox.xml rename to src/main/res/drawable/ic_circle_checkbox.xml diff --git a/res/drawable/ic_circle_status.xml b/src/main/res/drawable/ic_circle_status.xml similarity index 100% rename from res/drawable/ic_circle_status.xml rename to src/main/res/drawable/ic_circle_status.xml diff --git a/res/drawable/ic_delivery_status_failed.xml b/src/main/res/drawable/ic_delivery_status_failed.xml similarity index 100% rename from res/drawable/ic_delivery_status_failed.xml rename to src/main/res/drawable/ic_delivery_status_failed.xml diff --git a/res/drawable/ic_emoji_activity_dark_20.xml b/src/main/res/drawable/ic_emoji_activity_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_activity_dark_20.xml rename to src/main/res/drawable/ic_emoji_activity_dark_20.xml diff --git a/res/drawable/ic_emoji_activity_light_20.xml b/src/main/res/drawable/ic_emoji_activity_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_activity_light_20.xml rename to src/main/res/drawable/ic_emoji_activity_light_20.xml diff --git a/res/drawable/ic_emoji_animal_dark_20.xml b/src/main/res/drawable/ic_emoji_animal_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_animal_dark_20.xml rename to src/main/res/drawable/ic_emoji_animal_dark_20.xml diff --git a/res/drawable/ic_emoji_animal_light_20.xml b/src/main/res/drawable/ic_emoji_animal_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_animal_light_20.xml rename to src/main/res/drawable/ic_emoji_animal_light_20.xml diff --git a/res/drawable/ic_emoji_emoticon_dark_20.xml b/src/main/res/drawable/ic_emoji_emoticon_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_emoticon_dark_20.xml rename to src/main/res/drawable/ic_emoji_emoticon_dark_20.xml diff --git a/res/drawable/ic_emoji_emoticon_light_20.xml b/src/main/res/drawable/ic_emoji_emoticon_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_emoticon_light_20.xml rename to src/main/res/drawable/ic_emoji_emoticon_light_20.xml diff --git a/res/drawable/ic_emoji_filled.xml b/src/main/res/drawable/ic_emoji_filled.xml similarity index 100% rename from res/drawable/ic_emoji_filled.xml rename to src/main/res/drawable/ic_emoji_filled.xml diff --git a/res/drawable/ic_emoji_flag_dark_20.xml b/src/main/res/drawable/ic_emoji_flag_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_flag_dark_20.xml rename to src/main/res/drawable/ic_emoji_flag_dark_20.xml diff --git a/res/drawable/ic_emoji_flag_light_20.xml b/src/main/res/drawable/ic_emoji_flag_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_flag_light_20.xml rename to src/main/res/drawable/ic_emoji_flag_light_20.xml diff --git a/res/drawable/ic_emoji_food_dark_20.xml b/src/main/res/drawable/ic_emoji_food_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_food_dark_20.xml rename to src/main/res/drawable/ic_emoji_food_dark_20.xml diff --git a/res/drawable/ic_emoji_food_light_20.xml b/src/main/res/drawable/ic_emoji_food_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_food_light_20.xml rename to src/main/res/drawable/ic_emoji_food_light_20.xml diff --git a/res/drawable/ic_emoji_object_dark_20.xml b/src/main/res/drawable/ic_emoji_object_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_object_dark_20.xml rename to src/main/res/drawable/ic_emoji_object_dark_20.xml diff --git a/res/drawable/ic_emoji_object_light_20.xml b/src/main/res/drawable/ic_emoji_object_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_object_light_20.xml rename to src/main/res/drawable/ic_emoji_object_light_20.xml diff --git a/res/drawable/ic_emoji_outline.xml b/src/main/res/drawable/ic_emoji_outline.xml similarity index 100% rename from res/drawable/ic_emoji_outline.xml rename to src/main/res/drawable/ic_emoji_outline.xml diff --git a/res/drawable/ic_emoji_people_dark_20.xml b/src/main/res/drawable/ic_emoji_people_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_people_dark_20.xml rename to src/main/res/drawable/ic_emoji_people_dark_20.xml diff --git a/res/drawable/ic_emoji_people_light_20.xml b/src/main/res/drawable/ic_emoji_people_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_people_light_20.xml rename to src/main/res/drawable/ic_emoji_people_light_20.xml diff --git a/res/drawable/ic_emoji_symbol_dark_20.xml b/src/main/res/drawable/ic_emoji_symbol_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_symbol_dark_20.xml rename to src/main/res/drawable/ic_emoji_symbol_dark_20.xml diff --git a/res/drawable/ic_emoji_symbol_light_20.xml b/src/main/res/drawable/ic_emoji_symbol_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_symbol_light_20.xml rename to src/main/res/drawable/ic_emoji_symbol_light_20.xml diff --git a/res/drawable/ic_emoji_travel_dark_20.xml b/src/main/res/drawable/ic_emoji_travel_dark_20.xml similarity index 100% rename from res/drawable/ic_emoji_travel_dark_20.xml rename to src/main/res/drawable/ic_emoji_travel_dark_20.xml diff --git a/res/drawable/ic_emoji_travel_light_20.xml b/src/main/res/drawable/ic_emoji_travel_light_20.xml similarity index 100% rename from res/drawable/ic_emoji_travel_light_20.xml rename to src/main/res/drawable/ic_emoji_travel_light_20.xml diff --git a/res/drawable/ic_forum_24dp.xml b/src/main/res/drawable/ic_forum_24dp.xml similarity index 100% rename from res/drawable/ic_forum_24dp.xml rename to src/main/res/drawable/ic_forum_24dp.xml diff --git a/res/drawable/ic_help_24dp.xml b/src/main/res/drawable/ic_help_24dp.xml similarity index 100% rename from res/drawable/ic_help_24dp.xml rename to src/main/res/drawable/ic_help_24dp.xml diff --git a/res/drawable/ic_lock.xml b/src/main/res/drawable/ic_lock.xml similarity index 100% rename from res/drawable/ic_lock.xml rename to src/main/res/drawable/ic_lock.xml diff --git a/res/drawable/ic_map_white_24dp.xml b/src/main/res/drawable/ic_map_white_24dp.xml similarity index 100% rename from res/drawable/ic_map_white_24dp.xml rename to src/main/res/drawable/ic_map_white_24dp.xml diff --git a/res/drawable/ic_notifications_24dp.xml b/src/main/res/drawable/ic_notifications_24dp.xml similarity index 100% rename from res/drawable/ic_notifications_24dp.xml rename to src/main/res/drawable/ic_notifications_24dp.xml diff --git a/res/drawable/ic_person_large.xml b/src/main/res/drawable/ic_person_large.xml similarity index 100% rename from res/drawable/ic_person_large.xml rename to src/main/res/drawable/ic_person_large.xml diff --git a/res/drawable/ic_recent_dark_20.xml b/src/main/res/drawable/ic_recent_dark_20.xml similarity index 100% rename from res/drawable/ic_recent_dark_20.xml rename to src/main/res/drawable/ic_recent_dark_20.xml diff --git a/res/drawable/ic_recent_light_20.xml b/src/main/res/drawable/ic_recent_light_20.xml similarity index 100% rename from res/drawable/ic_recent_light_20.xml rename to src/main/res/drawable/ic_recent_light_20.xml diff --git a/res/drawable/ic_share_white_24dp.xml b/src/main/res/drawable/ic_share_white_24dp.xml similarity index 100% rename from res/drawable/ic_share_white_24dp.xml rename to src/main/res/drawable/ic_share_white_24dp.xml diff --git a/res/drawable/ic_swap_vert_24dp.xml b/src/main/res/drawable/ic_swap_vert_24dp.xml similarity index 100% rename from res/drawable/ic_swap_vert_24dp.xml rename to src/main/res/drawable/ic_swap_vert_24dp.xml diff --git a/res/drawable/ic_timer_gray_18dp.xml b/src/main/res/drawable/ic_timer_gray_18dp.xml similarity index 100% rename from res/drawable/ic_timer_gray_18dp.xml rename to src/main/res/drawable/ic_timer_gray_18dp.xml diff --git a/res/drawable/ic_verified.xml b/src/main/res/drawable/ic_verified.xml similarity index 100% rename from res/drawable/ic_verified.xml rename to src/main/res/drawable/ic_verified.xml diff --git a/res/drawable/ic_verified_broken.xml b/src/main/res/drawable/ic_verified_broken.xml similarity index 100% rename from res/drawable/ic_verified_broken.xml rename to src/main/res/drawable/ic_verified_broken.xml diff --git a/res/drawable/ic_videocam_white_24dp.xml b/src/main/res/drawable/ic_videocam_white_24dp.xml similarity index 100% rename from res/drawable/ic_videocam_white_24dp.xml rename to src/main/res/drawable/ic_videocam_white_24dp.xml diff --git a/res/drawable/image_shade.xml b/src/main/res/drawable/image_shade.xml similarity index 100% rename from res/drawable/image_shade.xml rename to src/main/res/drawable/image_shade.xml diff --git a/res/drawable/import_export_item_background_dark.xml b/src/main/res/drawable/import_export_item_background_dark.xml similarity index 100% rename from res/drawable/import_export_item_background_dark.xml rename to src/main/res/drawable/import_export_item_background_dark.xml diff --git a/res/drawable/import_export_item_background_light.xml b/src/main/res/drawable/import_export_item_background_light.xml similarity index 100% rename from res/drawable/import_export_item_background_light.xml rename to src/main/res/drawable/import_export_item_background_light.xml diff --git a/src/main/res/drawable/intro1.png b/src/main/res/drawable/intro1.png new file mode 100644 index 000000000..cc9e97548 Binary files /dev/null and b/src/main/res/drawable/intro1.png differ diff --git a/res/drawable/media_keyboard_selected_background_dark.xml b/src/main/res/drawable/media_keyboard_selected_background_dark.xml similarity index 100% rename from res/drawable/media_keyboard_selected_background_dark.xml rename to src/main/res/drawable/media_keyboard_selected_background_dark.xml diff --git a/res/drawable/media_keyboard_selected_background_light.xml b/src/main/res/drawable/media_keyboard_selected_background_light.xml similarity index 100% rename from res/drawable/media_keyboard_selected_background_light.xml rename to src/main/res/drawable/media_keyboard_selected_background_light.xml diff --git a/res/drawable/message_bubble_background_received_alone.xml b/src/main/res/drawable/message_bubble_background_received_alone.xml similarity index 100% rename from res/drawable/message_bubble_background_received_alone.xml rename to src/main/res/drawable/message_bubble_background_received_alone.xml diff --git a/res/drawable/message_bubble_background_sent_alone.xml b/src/main/res/drawable/message_bubble_background_sent_alone.xml similarity index 100% rename from res/drawable/message_bubble_background_sent_alone.xml rename to src/main/res/drawable/message_bubble_background_sent_alone.xml diff --git a/res/drawable/pause_icon.xml b/src/main/res/drawable/pause_icon.xml similarity index 100% rename from res/drawable/pause_icon.xml rename to src/main/res/drawable/pause_icon.xml diff --git a/res/drawable/pause_to_play_animation.xml b/src/main/res/drawable/pause_to_play_animation.xml similarity index 100% rename from res/drawable/pause_to_play_animation.xml rename to src/main/res/drawable/pause_to_play_animation.xml diff --git a/res/drawable/pinned_list_item_background.xml b/src/main/res/drawable/pinned_list_item_background.xml similarity index 100% rename from res/drawable/pinned_list_item_background.xml rename to src/main/res/drawable/pinned_list_item_background.xml diff --git a/res/drawable/pinned_list_item_background_dark.xml b/src/main/res/drawable/pinned_list_item_background_dark.xml similarity index 100% rename from res/drawable/pinned_list_item_background_dark.xml rename to src/main/res/drawable/pinned_list_item_background_dark.xml diff --git a/res/drawable/play_icon.xml b/src/main/res/drawable/play_icon.xml similarity index 100% rename from res/drawable/play_icon.xml rename to src/main/res/drawable/play_icon.xml diff --git a/res/drawable/play_to_pause_animation.xml b/src/main/res/drawable/play_to_pause_animation.xml similarity index 100% rename from res/drawable/play_to_pause_animation.xml rename to src/main/res/drawable/play_to_pause_animation.xml diff --git a/res/drawable/quick_camera_shutter_ring.xml b/src/main/res/drawable/quick_camera_shutter_ring.xml similarity index 100% rename from res/drawable/quick_camera_shutter_ring.xml rename to src/main/res/drawable/quick_camera_shutter_ring.xml diff --git a/res/drawable/reaction_pill_background.xml b/src/main/res/drawable/reaction_pill_background.xml similarity index 100% rename from res/drawable/reaction_pill_background.xml rename to src/main/res/drawable/reaction_pill_background.xml diff --git a/res/drawable/reaction_pill_background_selected.xml b/src/main/res/drawable/reaction_pill_background_selected.xml similarity index 100% rename from res/drawable/reaction_pill_background_selected.xml rename to src/main/res/drawable/reaction_pill_background_selected.xml diff --git a/res/drawable/recording_lock_background_dark.xml b/src/main/res/drawable/recording_lock_background_dark.xml similarity index 100% rename from res/drawable/recording_lock_background_dark.xml rename to src/main/res/drawable/recording_lock_background_dark.xml diff --git a/res/drawable/recording_lock_background_light.xml b/src/main/res/drawable/recording_lock_background_light.xml similarity index 100% rename from res/drawable/recording_lock_background_light.xml rename to src/main/res/drawable/recording_lock_background_light.xml diff --git a/res/drawable/search_toolbar_shadow.xml b/src/main/res/drawable/search_toolbar_shadow.xml similarity index 100% rename from res/drawable/search_toolbar_shadow.xml rename to src/main/res/drawable/search_toolbar_shadow.xml diff --git a/res/drawable/send_button_bg_dark.xml b/src/main/res/drawable/send_button_bg_dark.xml similarity index 100% rename from res/drawable/send_button_bg_dark.xml rename to src/main/res/drawable/send_button_bg_dark.xml diff --git a/res/drawable/send_button_bg_light.xml b/src/main/res/drawable/send_button_bg_light.xml similarity index 100% rename from res/drawable/send_button_bg_light.xml rename to src/main/res/drawable/send_button_bg_light.xml diff --git a/res/drawable/sticker_missing_background.xml b/src/main/res/drawable/sticker_missing_background.xml similarity index 100% rename from res/drawable/sticker_missing_background.xml rename to src/main/res/drawable/sticker_missing_background.xml diff --git a/res/drawable/sticky_date_header_background_dark.xml b/src/main/res/drawable/sticky_date_header_background_dark.xml similarity index 100% rename from res/drawable/sticky_date_header_background_dark.xml rename to src/main/res/drawable/sticky_date_header_background_dark.xml diff --git a/res/drawable/sticky_date_header_background_light.xml b/src/main/res/drawable/sticky_date_header_background_light.xml similarity index 100% rename from res/drawable/sticky_date_header_background_light.xml rename to src/main/res/drawable/sticky_date_header_background_light.xml diff --git a/res/drawable/touch_highlight_background.xml b/src/main/res/drawable/touch_highlight_background.xml similarity index 100% rename from res/drawable/touch_highlight_background.xml rename to src/main/res/drawable/touch_highlight_background.xml diff --git a/res/drawable/triangle_bottom_right_corner.xml b/src/main/res/drawable/triangle_bottom_right_corner.xml similarity index 100% rename from res/drawable/triangle_bottom_right_corner.xml rename to src/main/res/drawable/triangle_bottom_right_corner.xml diff --git a/res/drawable/triangle_right.xml b/src/main/res/drawable/triangle_right.xml similarity index 100% rename from res/drawable/triangle_right.xml rename to src/main/res/drawable/triangle_right.xml diff --git a/res/layout-v16/video_player.xml b/src/main/res/layout-v16/video_player.xml similarity index 100% rename from res/layout-v16/video_player.xml rename to src/main/res/layout-v16/video_player.xml diff --git a/res/layout/account_selection_list_fragment.xml b/src/main/res/layout/account_selection_list_fragment.xml similarity index 100% rename from res/layout/account_selection_list_fragment.xml rename to src/main/res/layout/account_selection_list_fragment.xml diff --git a/res/layout/account_selection_list_item.xml b/src/main/res/layout/account_selection_list_item.xml similarity index 100% rename from res/layout/account_selection_list_item.xml rename to src/main/res/layout/account_selection_list_item.xml diff --git a/res/layout/activity_qr.xml b/src/main/res/layout/activity_qr.xml similarity index 100% rename from res/layout/activity_qr.xml rename to src/main/res/layout/activity_qr.xml diff --git a/res/layout/activity_qr_show.xml b/src/main/res/layout/activity_qr_show.xml similarity index 100% rename from res/layout/activity_qr_show.xml rename to src/main/res/layout/activity_qr_show.xml diff --git a/res/layout/activity_registration_2nd_device_qr.xml b/src/main/res/layout/activity_registration_2nd_device_qr.xml similarity index 100% rename from res/layout/activity_registration_2nd_device_qr.xml rename to src/main/res/layout/activity_registration_2nd_device_qr.xml diff --git a/res/layout/activity_registration_qr.xml b/src/main/res/layout/activity_registration_qr.xml similarity index 100% rename from res/layout/activity_registration_qr.xml rename to src/main/res/layout/activity_registration_qr.xml diff --git a/res/layout/activity_select_chat_background.xml b/src/main/res/layout/activity_select_chat_background.xml similarity index 100% rename from res/layout/activity_select_chat_background.xml rename to src/main/res/layout/activity_select_chat_background.xml diff --git a/res/layout/attachment_type_selector.xml b/src/main/res/layout/attachment_type_selector.xml similarity index 100% rename from res/layout/attachment_type_selector.xml rename to src/main/res/layout/attachment_type_selector.xml diff --git a/res/layout/audio_view.xml b/src/main/res/layout/audio_view.xml similarity index 100% rename from res/layout/audio_view.xml rename to src/main/res/layout/audio_view.xml diff --git a/res/layout/avatar_selector.xml b/src/main/res/layout/avatar_selector.xml similarity index 100% rename from res/layout/avatar_selector.xml rename to src/main/res/layout/avatar_selector.xml diff --git a/res/layout/avatar_view.xml b/src/main/res/layout/avatar_view.xml similarity index 100% rename from res/layout/avatar_view.xml rename to src/main/res/layout/avatar_view.xml diff --git a/res/layout/backup_provider_activity.xml b/src/main/res/layout/backup_provider_activity.xml similarity index 100% rename from res/layout/backup_provider_activity.xml rename to src/main/res/layout/backup_provider_activity.xml diff --git a/res/layout/backup_provider_fragment.xml b/src/main/res/layout/backup_provider_fragment.xml similarity index 100% rename from res/layout/backup_provider_fragment.xml rename to src/main/res/layout/backup_provider_fragment.xml diff --git a/res/layout/backup_receiver_fragment.xml b/src/main/res/layout/backup_receiver_fragment.xml similarity index 100% rename from res/layout/backup_receiver_fragment.xml rename to src/main/res/layout/backup_receiver_fragment.xml diff --git a/res/layout/contact_filter_toolbar.xml b/src/main/res/layout/contact_filter_toolbar.xml similarity index 97% rename from res/layout/contact_filter_toolbar.xml rename to src/main/res/layout/contact_filter_toolbar.xml index 307c925c5..94237fcef 100644 --- a/res/layout/contact_filter_toolbar.xml +++ b/src/main/res/layout/contact_filter_toolbar.xml @@ -21,7 +21,7 @@ android:contentDescription="@string/email_address" android:fontFamily="sans-serif" android:gravity="center_vertical" - android:hint="@string/contacts_enter_name_or_email" + android:hint="@string/search" android:ellipsize="end" android:inputType="textPersonName" android:textSize="18sp" /> diff --git a/res/layout/contact_selection_activity.xml b/src/main/res/layout/contact_selection_activity.xml similarity index 100% rename from res/layout/contact_selection_activity.xml rename to src/main/res/layout/contact_selection_activity.xml diff --git a/res/layout/contact_selection_list_divider.xml b/src/main/res/layout/contact_selection_list_divider.xml similarity index 100% rename from res/layout/contact_selection_list_divider.xml rename to src/main/res/layout/contact_selection_list_divider.xml diff --git a/res/layout/contact_selection_list_fragment.xml b/src/main/res/layout/contact_selection_list_fragment.xml similarity index 100% rename from res/layout/contact_selection_list_fragment.xml rename to src/main/res/layout/contact_selection_list_fragment.xml diff --git a/res/layout/contact_selection_list_item.xml b/src/main/res/layout/contact_selection_list_item.xml similarity index 100% rename from res/layout/contact_selection_list_item.xml rename to src/main/res/layout/contact_selection_list_item.xml diff --git a/res/layout/conversation_activity.xml b/src/main/res/layout/conversation_activity.xml similarity index 100% rename from res/layout/conversation_activity.xml rename to src/main/res/layout/conversation_activity.xml diff --git a/res/layout/conversation_activity_attachment_editor_stub.xml b/src/main/res/layout/conversation_activity_attachment_editor_stub.xml similarity index 86% rename from res/layout/conversation_activity_attachment_editor_stub.xml rename to src/main/res/layout/conversation_activity_attachment_editor_stub.xml index 40b60e5f6..81c2b18c5 100644 --- a/res/layout/conversation_activity_attachment_editor_stub.xml +++ b/src/main/res/layout/conversation_activity_attachment_editor_stub.xml @@ -69,6 +69,17 @@ android:padding="8dp" android:background="@drawable/message_bubble_background_sent_alone"/> + + diff --git a/res/layout/conversation_activity_emojidrawer_stub.xml b/src/main/res/layout/conversation_activity_emojidrawer_stub.xml similarity index 100% rename from res/layout/conversation_activity_emojidrawer_stub.xml rename to src/main/res/layout/conversation_activity_emojidrawer_stub.xml diff --git a/res/layout/conversation_fragment.xml b/src/main/res/layout/conversation_fragment.xml similarity index 93% rename from res/layout/conversation_fragment.xml rename to src/main/res/layout/conversation_fragment.xml index 0c3d7c828..a4f8c7ee9 100644 --- a/res/layout/conversation_fragment.xml +++ b/src/main/res/layout/conversation_fragment.xml @@ -113,6 +113,13 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/AddReaction"/> + diff --git a/res/layout/conversation_input_panel.xml b/src/main/res/layout/conversation_input_panel.xml similarity index 100% rename from res/layout/conversation_input_panel.xml rename to src/main/res/layout/conversation_input_panel.xml diff --git a/res/layout/conversation_item_footer.xml b/src/main/res/layout/conversation_item_footer.xml similarity index 100% rename from res/layout/conversation_item_footer.xml rename to src/main/res/layout/conversation_item_footer.xml diff --git a/res/layout/conversation_item_header.xml b/src/main/res/layout/conversation_item_header.xml similarity index 100% rename from res/layout/conversation_item_header.xml rename to src/main/res/layout/conversation_item_header.xml diff --git a/res/layout/conversation_item_last_seen.xml b/src/main/res/layout/conversation_item_last_seen.xml similarity index 100% rename from res/layout/conversation_item_last_seen.xml rename to src/main/res/layout/conversation_item_last_seen.xml diff --git a/res/layout/conversation_item_received.xml b/src/main/res/layout/conversation_item_received.xml similarity index 94% rename from res/layout/conversation_item_received.xml rename to src/main/res/layout/conversation_item_received.xml index 5c9e8ad78..c5654a094 100644 --- a/res/layout/conversation_item_received.xml +++ b/src/main/res/layout/conversation_item_received.xml @@ -153,6 +153,16 @@ android:layout_marginLeft="@dimen/message_bubble_horizontal_padding" android:layout_marginRight="@dimen/message_bubble_horizontal_padding" /> + + + + + diff --git a/res/layout/conversation_item_videochat.xml b/src/main/res/layout/conversation_item_videochat.xml similarity index 100% rename from res/layout/conversation_item_videochat.xml rename to src/main/res/layout/conversation_item_videochat.xml diff --git a/res/layout/conversation_item_webxdc.xml b/src/main/res/layout/conversation_item_webxdc.xml similarity index 100% rename from res/layout/conversation_item_webxdc.xml rename to src/main/res/layout/conversation_item_webxdc.xml diff --git a/res/layout/conversation_list_activity.xml b/src/main/res/layout/conversation_list_activity.xml similarity index 80% rename from res/layout/conversation_list_activity.xml rename to src/main/res/layout/conversation_list_activity.xml index 70d57ce5a..4a8136aaf 100644 --- a/res/layout/conversation_list_activity.xml +++ b/src/main/res/layout/conversation_list_activity.xml @@ -24,19 +24,36 @@ android:layout_width="match_parent" android:layout_height="match_parent"> + + + - - @@ -17,4 +18,14 @@ android:layout_width="match_parent" android:layout_height="match_parent"/> - \ No newline at end of file + + diff --git a/res/layout/fragment_view_log.xml b/src/main/res/layout/fragment_view_log.xml similarity index 100% rename from res/layout/fragment_view_log.xml rename to src/main/res/layout/fragment_view_log.xml diff --git a/res/layout/group_create_activity.xml b/src/main/res/layout/group_create_activity.xml similarity index 100% rename from res/layout/group_create_activity.xml rename to src/main/res/layout/group_create_activity.xml diff --git a/res/layout/image_editor_fragment.xml b/src/main/res/layout/image_editor_fragment.xml similarity index 100% rename from res/layout/image_editor_fragment.xml rename to src/main/res/layout/image_editor_fragment.xml diff --git a/res/layout/image_editor_hud.xml b/src/main/res/layout/image_editor_hud.xml similarity index 100% rename from res/layout/image_editor_hud.xml rename to src/main/res/layout/image_editor_hud.xml diff --git a/src/main/res/layout/instant_onboarding_activity.xml b/src/main/res/layout/instant_onboarding_activity.xml new file mode 100644 index 000000000..f9f3125f0 --- /dev/null +++ b/src/main/res/layout/instant_onboarding_activity.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + +