Counterpart of https://github.com/chatmail/core/pull/6851
* Make sending of statistics into a setting
* feat: Count securejoin sources and UI paths
* feat: Rename self_reporting to send_statistics
* Adapt core's API change
* WIP, untested: Adapt to a rename on the core side
* Adapt to generated jsonrpc
* New strings and a new dialog
* Adapt to the API change
* Rewording: `...and support research`
* "More Info" button rather than link
* Small fixes
* Open the correct survey (though it doesn't work yet)
* Changelog
* Update help
* Fix compile error
* Fix compilation
* Revert submodule change
* Don't show a device message yet
* Move "Send Statistics" setting
* Fix compilation error
* Remove unused constant
---------
Co-authored-by: adb <adb@merlinux.eu>
it was renamed first on iOS from 'Chats and Media' to 'Chats'
to not confuse with 'All Apps and Media' -
however, that point is also valid for android,
but even if not, it is good for inner consistency and simpler documentation.
moreover, the settings are in reality also about contacts and more,
so just a broad chats is fine.
but also for outer consistency,
this seems better - also in quite some other apps,
it is just called 'chats'
this removes the addendum 'on all your devices'
from the 'really delete?' questions.
- after polls, and looking at what other apps are doing,
it is just the default expectation, that a message is deleted from all devices,
also, we do not have an option (nor do not want to have)
- so, at that point - fresh user, one device -
there is no need to clutter with other convepts and relativation.
also, most user will never have more devices.
- ppl anyway do not read -
but if they do, it is good to have things as much on point as possible :)
- the question fits better to the "delete for everyone" option
- simplify code and strings,
as device message deletion is no longer special
(there, we never said "on all your devices")
the addendum 'from your devices' was added as
one year ago, for technical limitations, deletion was really on one device.
when we removed that limitation, we added to addendum,
so ppl used to old apps have a chance to get the change.
meanwhile, the new default is clear and settled and the addendum
does more harm and raise questions than doing good.
instead, one should be asked whether to add a transport.
- it is very probably the more wanted action -
when one wants a new profile, it is better to learn first,
that one has to go over "switch profil"
- less can go wrong -
if ppl play around,
adding a transport is less harmful than a new profile
where they do not know how to switch, send from different ones etc.
by the bare title, this is not clear to everyone.
technically, i also tried <PreferenceCategory summary>,
but that does not wrap text.
moved down 'app picker' for better layout and to match
order of other UI.
- 'backgound' term is used in many other contextes
- 'messages' may also be confused with what the user usually thinks of being a 'message',
similar for 'send'
* deprecate 'what is webxdc?' string"
it is used when an in-app is on the screen (on desktop),
however, instead of helping, immediately raises another question,
as the user just did not know about webxdc at all at that point
(we are not using the term in the apps at all).
better just use the string 'Help' and open
offline help at #webxdc - the entry is also just improved :)
* add 'help' to app-menu
* just 'help' may be confused with 'help about that app', be little more specific
* update CHANGELOG
Before this PR, when a QR code couldn't be loaded because of https://github.com/chatmail/core/pull/7399, Delta Chat crashed.
Now, the button does nothing.
It's not perfect, but easy to do, and only about an edge case where the user tried out the experimental broadcast channels in the past, and now tries to add a new member to a broadcast channel created with an old version of DC.
The hollistic alternative would be to switch to RPC for getSecurejoinQrSvg, so that the UI can get a proper error message.
---------
Co-authored-by: adb <adb@merlinux.eu>
Determinate Systems server is installing its own fork of Nix
that is apparently not open source:
<https://lobste.rs/s/be78ef/dropping_upstream_nix_from_determinate#c_m3hq6r>
The company behind it also pushes the users to use FlakeHub
and has other problems.
[Lix] installer is a fork of The Determinate Nix Installer.
I uninstalled Nix preivously installed with The Determinate Nix Installer
and installed Lix, it works just the same for Android builds.
Upstream Nix would also be fine,
but it still has old installer that does not enable Flakes
and breaks on macOS on upgrades apparently,
so we cannot recommend it as the easiest way.
[Lix]: https://lix.systems/
the string can be used for the action to put a message to 'Saved Messages'.
it will be useful esp. on desktop,
where plain 'Save' often has the mindset of 'Files',
esp. for older ppl :)
the added noun tries to break that.
additionally, desktop can resort menu items,
but that alone would not solve the issue.
there are also thoughs about renaming that alltogether,
eg. to bookmark, but that is a larger and more breaking change,
also the messages are not just 'bookmarked' on purpose,
to eg. survive auto deletion.
- with the recent change to start the timer when the chat is opened,
one minute is too easy too short to miss important information
- "30 minutes" does not really fit into the distribution;
all other option have at least the factor 5 to the previous one,
from "30 minutes" to "60 minutes", the time is doubled only.
removing the overall number of options and dropping the ones without larger usecases,
does not only simplifies UI;
having less tiny details also reduces noise in groups
where ppl people changing it very often for various weird reasons
(found the latter point somewhere in the Signal forum, btw)
this improves readability of info messages
by setting the foreground to while.
`universal_overlay` was made for that;
it is in use like that on iOS/desktop since a long time.
moreover, other parts using the combination of
`conversation_item_update_bg_color`/`conversation_item_update_text_color`
are improved equally, eg. the day titles.
Since buildToolsVersion is not specified in `build.gradle`,
default version is set by Android Gradle Plugin.
Gradle plugin was updated in a77b1a5dd6,
so build tools version should be updated in flake.nix
to the corresponding version, otherwise building
fails while trying to install 35.0.0 into
read-only path managed by Nix.
* remove green checkmarks from chatlist
* remove green checkmark from contact lists
* remove green checkmark from chat-protected info-message (DC_INFO_PROTECTION_ENABLED)
* remove green checkmark from profile title
* add green checkmark to "Introduced by..." line
* when tapping chat-protected or chat-e2ee info-message, open help at #e2ee
* update changelog
* Update CHANGELOG.md
Co-authored-by: Hocuri <hocuri@gmx.de>
* add verified checkmark when verifier is unknown but contact is verified
* Update CHANGELOG.md
---------
Co-authored-by: Hocuri <hocuri@gmx.de>
Co-authored-by: bjoern <r10s@b44t.com>
* add device message
* apply tweaks of @hpk42 and @hocuri
* change two emojis, donate as discussed and 🔲 instead of ⌘ which is known as a keyboard shortcut symbol, at least on mac, and adds confusion
---------
Co-authored-by: B. Petersen <r10s@b44t.com>
as discussed with @hpk42, we want to simplify the terms used in UI,
as there is no switch-forth-and-back, the "from now on" is superfluous,
and the "guaranteed" at least noisy and raises questions.
also, this allows us to use the same string when establishing via vcard contacts,
which is a good thing to move forward just now.
the faq will explain nuances then
* fix: Small channel fixes
- In the profile view of an InBroadcast, the subtitle said "Contact".
I just removed the subtitle, because it already says "Channel" at the
top.
- When tapping on the avatar of an InBroadcast, an "Edit" button was shown
* fix: Also disable edit button for mailinglists
* Rename "broadcast list" to "channel"/"broadcast channel" both in UI and code
* feat: Add new channel types
* Update CHANGELOG.md
* adb's review
* refactor: Rename BroadcastChannel to Broadcast
* Revert accidental change
* Make it possible to leave channels
- In a chat, if the chat is an InBroadcast, and it's not a contact
request, then the `Leave` menu option is shown with the translated
stock string `menu_leave_channel` as its label.
- If the user clicks on it, the confirmation dialog has
`menu_leave_channel` (rather than `menu_leave_group`) as its positive
option.
Counterpart of https://github.com/chatmail/core/pull/6984.
---------
Co-authored-by: adbenitez <asieldbenitez@gmail.com>
Co-authored-by: adb <adb@merlinux.eu>
* adapt divider to style used elsewhere
* offer copy-to-clipboard on long-tap address
* Revert "offer copy-to-clipboard on long-tap address"
This reverts commit 92570b8e1ef5898b99a9a2769eea0e1e16bf25e1.
* show copy-context menu on long pressing address
* duplicate ProfileActivity to AllMediaActivity
* update CHANGELOG
* remove profile stuff from AllMediaActivity
* remove media stuff from ProfileActivity
* remove TabLayout from ProfileActivity
* decouple header from viewType
* easier name editing
* add link to 'apps & media'
* move bio up
* move 'send message' up
* prepare avatar/title/subtitle
* set title
* set subtitle to member count
* add address to profile
* rename ProfileSettings* to just Profile*
* set avatar
* use avatar view
* adaptive avatar cell height
* no endless growing of online-indicator
* simplify
* handle tap on avatars
* rename Profile* to AllMedia*
* set title accordingly
* move 'last seen' up
* edit name by tapping
* Revert "edit name by tapping"
This reverts commit 6727b168302fbe50cbde803fbc83692965d3df59.
Reason is that it introduces uncertainity what happens if the name is tapped -
we do not want to nudge ppl to edit the group name in a similar way.
we may revert this revert,
but for now, let's see if the icon atop isn't sufficient.
* add media count
* space below avatar
* refactor allmedia viewtypes
* select the first tab that has content
* format footer
* remove unused headers
* space above header
* add dividers
* tweak some spacings
* tap on avatar only for enlarge/set avatar
* immediate view of first tap
* tweak value display
* add icons to buttons
* tweak paddings
* no address for self-talk and device-chat
* use signature background for less cluttered UI
* avoid global state modification and showing eg. app-icon tinted also elsewhere
* tweak sizes
* move introduced-by/server down. these information become less important the more chats you have with the contact - and otherwise just clutter UI
* update CHANGELOG
* typo
* use more normal font and spacing for footer
* open "media" deterministically
remove the smart forwarding to "tab with content",
which results in unclear behaviour.
also, we want to push for apps,
which is also the thing that really changes.
when searching for an image, another tap is fine.
also otherwise, we say "[attach] Contact", "[attach] File", "[attach] Video" etc. -
so it should be "[attach] App" as well.
this is also what desktop/iOS are doing.
the title in the app picker itself, however,
is fine with reading "Apps" - it shows multiple ones
we got some feedback,
that ppl were wondering if others can use an app
once drafted and opend.
the old title "Tap to open" might even underline that impression.
this PR changes the title to "Tap 'Send' to share"
(we need to be super-short here, "Tap 'Send' to let others use the app" is already too much :)
the sending out of apps is the much more important step than to open,
play a game and then wondering ...
ppl will figure out the latter themselves,
wondering if one can configure eg. a poll before sending -
and if not, then it's that.
it is unclear, which time this is - time of adding or time of last update?
it is the prior, however,
both are not important enough to clutter the list,
also desktop/ios do not show them.
i assume, the time display was just kept when adapting from files view.
by making the apps easier accessible,
(cmp https://github.com/deltachat/deltachat-ios/pull/2721 )
we really only want an uncluttered list.
the instructions are shown when there are no Apps, Images etc. in a chat.
while the "shared in this chat" wording
is maybe more correct on an abstract way
(there are other ways than "attach" to have an app),
the "attached in this chat" points implicitly better to the new app selector -
esp. as the same wording is used for "images",
where the avg user usually knows about how to get that attached.
this little rewording comes from a discussion with @hpk42,
surely, there can be more improvements :)
the fix could have been avoid by checking for null
or not being overly specific with the exception.
as this is a very sensible area,
where any failure is dramatic,
we do both.
i think, it is even an improvement for Android:
the hint is now also anchored by 'System Settings'
which is more in focus by casual users than 'App Settings' (long tap icon).
also, some android derivates may have different order,
which is captured better by a broader hint.
classic onboarding allows not setting a displayname on purpose,
however, that results in broken webxdc layouts
as the name is then replaced by a 40-or-so-chars-hash-without-spaces.
one can argue, that apps should handle that gracefully,
but most do not and just look buggy.
it seems reasonable,
to use the email address in that case,
same as we do at other places if the name is unknwon.
(tbh, i thought it was like that, but i mixed sth up in OS comparison).
this was also the situation before we changed selfAddr calculation, btw.
it is anyway a cornercase, webxdc cannot send the address somewhere
nor can correlate reasonably, and if the user sets a name, things are fine
(and more often than not we nudge user to set one :)
* remove address from primary settings UI
showing the address here prominently results in bad UX
as ppl try to pass the address around,
which will not result in e2ee and will often not work.
see https://github.com/deltachat/deltachat-ios/pull/2664
for more resoning and discussion, eg. why remove it unconditionally
* show status
* update changelog
---------
Co-authored-by: adb <adb@merlinux.eu>
Co-authored-by: adbenitez <asieldbenitez@gmail.com>
Running ndk-make.sh triggers a complete rust rebuild, because some compiler flags are changed. Then when you run a normal cargo command again (cargo check etc.), there is another rebuild. My solution is to locally change the target directory. This PR makes ndk-make.sh support such custom target directories.
* prefer NAME over NAME (ADDR)
this tunes the usage of email addresses further down,
in all cases, the profile should only be a tap away before or afterwards,
so, these mentionings were never really critical
* update CHANGELOG
* Update CHANGELOG.md
Co-authored-by: adb <adb@merlinux.eu>
---------
Co-authored-by: adb <adb@merlinux.eu>
* tune down usage of 'e-mail' wording, where not needed in primary UI
* strike another provider
* remove e2ee hint for address book, the option was introduced at #2950 where hiding for chatmail (#3050) was not in place
* Update src/main/res/values/strings.xml
Co-authored-by: Hocuri <hocuri@gmx.de>
* Update src/main/res/values/strings.xml
Co-authored-by: Hocuri <hocuri@gmx.de>
* Update src/main/res/values/strings.xml
Co-authored-by: Hocuri <hocuri@gmx.de>
* leave aeap as is, it will be removed anyways
* pick up 'relay' wording
* reword deletion warning
* revert 'messages relayed'; this is not really the experience user can expect
---------
Co-authored-by: Hocuri <hocuri@gmx.de>
* add stock string needed when securejoin takes longer than expected
* apply wording suggestions
* stroke 'as expected', this is not an error, we're offline first, it is fine and continues in bg
do not say "Delete on all your devices"
when deleting a message in the "Device Messages" chat.
while this is a minor,
it is one of the first things the user may see,
better be correct there to not give a false first impression of correctness :)
this PR adds a hint about making sure no 3rd party
can see the "Add Second Device" QR code.
the dialog and the hint are already used on all OS,
so that is a low hanging fruit -
(compared to other ideas of changing flow direction etc,
which we might go for at some point;
however, that would be lots of effort on all UI,
is tricky UX wise, will come with new bugs and other cornercases,
and are also not bullet save against careless users,
"hey, scan my QR code ... no, from 'Add Second Device, Next, Next ...'" :)
* remove deprecated strings, usage was checked with ./scripts/grep-string.sh
* add new 'Chat with...', needed currently only for iOS
* update translations
- use clear "Delta Chat Homepage" for opening our homepage
(instead of unclear "Learn more about Delta Chat",
which is esp. weird, when used from inside the help)
- do not "promote" GitHub in our menu entry,
instead of "Contribute on GitHub", just say "Contribute".
destination URL is our contribute page then -
that is also more useful for ppl doing eg. translations
* fix: Use msg.getFilename() instead of the file's name in some cases
* fix: Use msg.getFilename() instead of the file's name in initializeDraft()
* fix: Use msg.getFilename() instead of the file's name in MediaItem
* fix: Use the correct file name in MediaView
* refactor: `msg` param of `getManuallyCalculatedSlideInfo()` was always null
* Improve comment
* Revert "refactor: `msg` param of `getManuallyCalculatedSlideInfo()` was always null"
We will unfortunately need getManuallyCalculatedSlideInfo() with `msg`
param
This reverts commit 60e8248db32dc22812d3f23da194bab644802045.
* fix: Fix drafting images
This fixes a bug introduced in 14f69f87e8b11a7d0568e58593946a1f1c01e75e:
When you drafted an image, pressed Back, and opened the chat again, then
the height of the drafted image was wrong and tapping the image opened a
preview for the wrong image.
I do think that theoretically it would be nicer to use getSlideForMsg
here, because we already have a DcMsg, but this didn't work because a)
the width and height wasn't gotten from the msg and instead 0 was passed
and b) the code tries to save a msgId instead of the message instead,
and loading the message from the database fails later since it's just a
draft.
I didn't want to try and fix these things, because they might be bigger
refactorings and I don't know the code.
* fix: Use the original message's filemime if there is one
...instead of trying to guess the mimetype from the uri
* Make the attachment background the same as the input bar background
Two different users recently complained that they find drafting images confusing. One of them thought that they had already sent it, the other one didn't know how to send it (both of them figured it out after ~10s, but still, it's nicer to avoid such confusion). In both cases, the problem was that the background of the attached file is the same as the chat background, not the same as the input bar, even though the attached file belongs to the input bar and not to the chat.
* Add a stroke around the to-be attachment
# GitHub Copilot Instructions for ArcaneChat Android
## Project Overview
ArcaneChat is a Delta Chat Android client built on top of the official Delta Chat client with several improvements. It is a messenger app that uses email infrastructure for secure communication.
**Technology Stack:**
- **Language:** Java (Java 8 compatibility)
- **Build System:** Gradle with Android Gradle Plugin 8.11.1
body:'[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite) [<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
body:'[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat) [<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite) [<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)'
- Executing `./gradlew assembleDebug` inside the container fails with `The SDK directory '/home/user/Android/Sdk' does not exist.`:
The problem is that Android Studio (outside the container) automatically creates a file `local.properties` with a content like `sdk.dir=/home/username/Android/Sdk`,
so, Gradle-inside-the-container looks for the Sdk at `/home/username/Android/Sdk`, where it can't find it.
You could:
- either: remove the file or just the line starting with `sdk.dir`
- or: run `./gradlew assembleDebug` from outside the container (however, there may be incompatibility issues if different versions are installed inside and outside the container)
- Running the image fails with `ERRO[0000] The storage 'driver' option must be set in /etc/containers/storage.conf, guarantee proper operation.`:
In /etc/containers/storage.conf, replace the line: `driver = ""` with: `driver = "overlay"`.
You can also set the `driver` option to something else, you just need to set it to _something_.
[Read about possible options here](https://github.com/containers/storage/blob/master/docs/containers-storage.conf.5.md#storage-table).
## <a name="setup-podman"></a>Setup Podman
These instructions were only tested on a Manjaro machine so far. If anything doesn't work, please open an issue.
See https://wiki.archlinux.org/index.php/Podman#Rootless_Podman for more information.
## <a name="install-build-environment"></a>Install Build Environment (without Docker or Podman)
To setup build environment manually:
- _Either_, in Android Studio, go to "Tools / SDK Manager / SDK Tools", enable "Show Package Details",
select "CMake" and the desired NDK (install the same NDK version as the [Dockerfile](https://github.com/deltachat/deltachat-android/blob/master/Dockerfile)), hit "Apply".
- _Or_ read [Dockerfile](https://github.com/deltachat/deltachat-android/blob/master/Dockerfile) and mimic what it does.
Then, in both cases, install Rust using [rustup](https://rustup.rs/)
and Rust toolchains for cross-compilation by executing `scripts/install-toolchains.sh`.
Then, configure `ANDROID_NDK_ROOT` environment variable to point to the Android NDK
installation directory e.g. by adding this to your `.bashrc`:
```bash
exportANDROID_NDK_ROOT=${HOME}/Android/Sdk/ndk/[version]# (or wherever your NDK is) Note that there is no `/` at the end!
`obj/local/armeabi-v7a` is the extracted path from `deltachat-gplay-release-X.X.X.apk-symbols.zip` file from https://download.delta.chat/android/symbols/
Replace `armeabi-v7a` by the correct architecture the logs come from (can be guessed by trial and error)
* Allow to add relay from clipboard or image if camera permission is not granted
* Avoid crash in the "View Log" screen
* Update to core 2.34.0
## v2.33.1
2025-12
* Target Android 16
* Change color of links in text messages
* Improve edge-to-edge support
* Add the option (opt-in) to send anonymous statistics to Delta Chat's developers
* Metadata protection: protect message recipients
* Allow to withdraw channel invite links and QR codes
* Allow to open externally links clicked inside in-chat apps
* Do not show "1 member" when the process of joining the group is not finished
* Make search case-insensitive for non-ASCII chat and contact names
* Improve handling of video recoding
* Send .webm videos as file, they are not supported by all platforms
* Tweak advanced section and wording of some advanced options
* Fix: avoid crash in push notifications handling
* Fix: avoid freezing in background
* Fix: clean up web storage of deleted in-chat apps
* Fix: avoid crash when exporting some files with wrong image MIME type
* Expose new "Multi-device mode" option instead of "Delete from server" for chatmail profiles
* Opened in-chat apps got a 'About Apps' menu item
* Avoid gray avatar on profile creation
* Avoid last item in chat list being covered by the floating button
* Add disk usage statistics to log
* New experimental feature: several addresses per profile
* Update to core 2.33.0
## v2.25.0
2025-11
* Make it possible to invite members into a channel via a QR code,
and make channels more secure
* metadata protection: protect Date header
* metadata protection: protect Autocrypt header
* better multi-device: synchronize group creation across devices
* data saving: do not send Autocrypt header in read receipts
* improve onboarding speed
* allow to save to storage files shared from inside in-chat apps
* reduce app size
* don't show badge counter in app icon for the permanent background notification
* fix sorting of old media in gallery
* fix text direction in "x members" subtitle for RTL languages
* fix group invite QR screen's layout
* tweak text hints in advanced classic e-mail configuration
* remove deprecated "companion app" code
* remove deprecated "Watch Sent Folder" preference
* remove deprecated "send self-report" preference
* don't show email address in shared vcard
* update to core 2.25.0
## v2.22.0
2025-10
* target Android 15
* improve readability of info messages in dark mode
* drop too short disappearing messages options
* fix Direct Share shortcuts
* fix: don't show error message when cancelling profile creation
* enable permanent notification by default if push notifications are not available
* hide "clone chat" and member list for incoming channels
* show warning if background notifications will be unreliable
* warn if the app has not been updated after 6 months instead of 1 year
* avoid "unknown sender for this chat" error
* properly display "Messages are end-to-end encrypted." in all encrypted groups
* show dialog if user has permanently denied camera permission and tries to take picture for group avatar
* several small fixes and improvements
* add experimental built-in calls
* update to core 2.22.0
## v2.11.0
2025-08
* add "After 1 year" option to disappearing messages
* improve image quality when setting group avatars
* add Estonian translation, update other translations
* allow to clone email chats
* fix some small bugs
* update to core 2.11.0
## v2.10.0
2025-08
* fix "Archived" item's layout in chat-list
* don't enlarge "Saved Messages" and "Devices Messages" avatars on click
* share email address for email contacts instead of vCard
* open existing encrypted chat when opening a mailto link or clicking an email address in a message bubble
* update to core 2.10.0
## v2.9.0
2025-07
* hide contact email addresses in search results
* disable non-functional message editing and ephemeral messages timer settings in classic email thread chat
* don't enlarge email chats avatar placeholder
* improve message date/status footer layout, also in RTL languages
* display correct text when receiving a "Disappearing messages enabled" system message
* Update to core 2.9.0
## v2.8.0
2025-07
* Profiles focus on recognizing contacts
* See the number of media directly in the profile, no need to tap around
* Clearer app lists by removing redundant "App" subtitle
* New button for quick access to the apps sent in current chat
* New icon for the in-chat apps button
* Improve hint for app drafts
* Add Text-To-Speech (TTS) support for in-chat apps
* New icon for the QR icon
* Start rebuilding the experimental broadcast lists
into proper channels - note that this is work-in-progress
* Improved separation between unencrypted chats/contacts and encrypted ones, avoiding mixing of encrypted and unencrypted messages in the same chat
* Removed padlocks, as encrypted is the default "normal" state. Instead, unencrypted email is marked with a small email / letter (✉️) icon
* Classic email chats/threads get a big email / letter icon making it easy to recognize
* After some time, add a device message asking to donate. Can't wait? Donate today at https://delta.chat/donate
* Allow to sort profiles up in the profile switcher
* Add new option to create unencrypted email thread
* Green checkmarks are removed where they mostly refer to guaranteed encryption, which is the default now. They are still used for profile's "Introduced by"
* Update to core 2.8.0
## v1.58.4
2025-05
* make in-chat apps properly work when they are not sent yet, in draft mode
* better avatar quality
* some more bug fixes and updated translations
* update to core 1.159.5
## v1.58.3
2025-05
* fix: webxdc.selfName uses the name otherwise displayed
* fix potential crash on startup
* add donation link to app settings
* update to core 1.159.3
## v1.58.2
2025-04
* fix draft writing area disappearing for some chats
* update to core 1.159.2
## v1.58.1
2025-04
* tapping info messages with contacts open the contact's profile
* hide superfluous "Show Classic E-mails" advanced setting for chatmail
* show profile bio/status under name in main settings screen
* remove mostly non-telling transport addresses when referring to a contact;
the contact's profile gives a much better overview
* Disable AEAP to enable us to overhaul some things - there are big changes underway in this area, which will come in a few months
* don't display email address in contact list and member list for contacts with green-checkmark
* avoid crash in Notifications preferences if ringtone title can't be read
* don't display forwarded messages as "edited" if original message was edited
* support importing contact from ProtonMail vCard attachments received in chats
* send encrypted in the experimental broadcast lists feature
* wait for QR scan (or invite link click) process to complete before allowing to send messages
* show connectivity status dot when profile is connecting or not connected
* never send Autocrypt-Gossip in broadcast lists.
* update to core 1.159.1
## v1.56.1
2025-03
* ignore click in info-messages from deleted in-chat apps
* data saving: do not send messages to the server if user is the only member of the chat in single-device usage
* protect metadata: encrypt message's sent date
* do not fail to send messages in groups if some encryption keys are missing
* synchronize contact name changes across devices
* fix changing group names that was not working in some situations
* fix: do not show outdated message text in "Message Info" of an edited message
* some more small bug fixes and updated translations
* update to core 1.158.0
## v1.56.0
2025-03
* allow to edit messages
* allow to delete messages for everyone
* add mute option "8 hours"
* add menu option to easily save/unsave selected message
* improve deletion confirmation for "Device Messages"
* remove dangerous encryption options
* always paste as plain text in message draft area
* some small bug fixes and updated translations
* update to core 1.157.2
## v1.54.4
2025-03
* allow better avatar (profile picture) quality
* remove notifications from chat that was deleted from other device
* when a chat is deleted, also delete its messages from server
* avoid freezing when opening the app for the first time after install
* avoid crash when adding chat shortcut to home screen
* some small bug fixes and updated translations
* update to core 1.156.3
## v1.54.3
2025-03
* allow to add any chat to the home screen
* update "forward message" icon and organize the messages actions bar
* do not allow non-members to change ephemeral timer settings of groups
* properly display padlock when the message is not sent over the network
* sync message deletion to other devices
* sync chat deletion across devices
* Show sender in "Saved Messages"
* allow scanning multiple QR-invitation codes without needing to wait for completion to scan the next one
* when reactions are seen in one device, remove notification from your other devices
* don't disturb with notification when someone leave a group
* detect incompatible profiles from newer app version when importing them
* prepare the app for receiving edited messages
* prepare the app for receiving message deletion requests
* do some small bug fixes
* update translations
* update to core 1.156.2
## v1.54.0
2025-02
* enhanced "Saved Messages" feature, now when forwarding a message to "Saved Messages" chat, it retains the sender information and a button to jump to the original message
* Saved messages are marked by a bookmark sign
* improve explanation when blocking a contact
* improve wording in empty "apps" and "files" tabs in chat media screen
* remove deprecated/legacy built-in "half-camera"
* UI improvement: keep avatars aligned to message bubble when message has reactions
* fix problems when opening attachments in external apps
* fix a bug with some big images appearing as blank/transparent
* some other small bug fixes
* update translations
* update to core 1.155.4
## v1.52.1
2025-01
* the app now requires less storage on your SD card by deduplicating newly received/sent files
* some small bug fixes
* update translations
* update to core 1.155.1
## v1.52.0
2025-01
* new group consistency algorithm
* fix: don't show animated .webp stickers as static stickers
* fix the chat shortcuts (created via long-press in launcher) to properly support multi-profile
* fix some small bugs in certain android versions and special situations
* avoid the app freezing in slow phones in some situations
* improve menu in the help screen
* update translations
* update to core 1.155.0
## v1.50.5
2025-01
* fix push-notifications handling for certain devices where it was not working correctly
* update translations
* using core 1.153.0
## v1.50.4
2025-01
* properly send as animated stickers GIF files selected from keyboard
* improve emoji picker in landscape mode and when changing from landscape to portrait
* avoid crash when receiving push notifications if the user restricted the app from working in background
* improve UI when attaching a file or image to easily recognize it is attached but not sent yet
* avoid slow loading of in-chat apps in some devices when quickly re-opening an app after closing it
* allow to select multiple images at once in the media picker via "Gallery" button
* mark holiday notice messages as bot-generated
* don't mark contacts as bot when receiving location-only and sync messages
* prefer to encrypt even if peers have their preference to "no preference"
* start ephemeral messages timers when the chat is archived or noticed
A [Delta Chat](https://delta.chat/) client for Android.
A [Delta Chat](https://delta.chat/) client for Android. Learn more at: https://arcanechat.me
[<img src="store/get-it-on-gplay.png" alt="Get it on Google Play" height="48">](https://play.google.com/store/apps/details?id=com.github.arcanechat)
[<img src="store/get-it-on-fdroid.png" alt="Get it on F-Droid" height="48">](https://f-droid.org/packages/chat.delta.lite)
[<img src="store/get-it-on-IzzyOnDroid.png" alt="Get it on IzzyOnDroid" height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png" alt="Disponible en Apklis" height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png" alt="Get it on GitHub" height="48">](https://github.com/ArcaneChat/android/releases/latest/download/ArcaneChat-gplay.apk)
@@ -16,7 +15,6 @@ This app has some extended support for WebXDC apps:
-`window.webxdc.arcanechat` a string with the ArcaneChat version and can be used by app developers
to detect when they can use the ArcaneChat-specific features.
-`window.webxdc.isCommunity` true if the current account is a community account
-`sendToChat()`: extra property `subject` can be set to a text string to set message/email's subject.
-`sendToChat()`: extra property `html` can be set to a string of html markup to set the HTML part of the email/message.
-`sendToChat()`: the file object parameter also accepts a `type` field that can be one of:
@@ -32,4 +30,4 @@ This app has some extended support for WebXDC apps:
This app is based on the [official Delta Chat client](https://github.com/deltachat/deltachat-android) with several improvements.
This app uses a [modified](https://github.com/ArcaneChat/core) version of the [Delta Chat Core Library](https://github.com/deltachat/deltachat-core-rust).
This app uses a [modified](https://github.com/ArcaneChat/core) version of the [Chatmail Core Library](https://github.com/chatmail/core).
implementation'com.google.zxing:core:3.3.0'// fixed version to support SDK<24
implementation('com.journeyapps:zxing-android-embedded:4.3.0'){transitive=false}// 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.makeramen:roundedimageview:2.3.0'// crops the avatars to circles
implementation'com.github.amulyakhare:TextDrawable:558677ea31'// 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
implementation('com.davemorrissey.labs:subsampling-scale-image-view:3.10.0'){// for the zooming on photos / media
ArcaneChat is a decentralized and secure messenger app that is compatible with the existing e-mail infrastructure.
ArcaneChat is a decentralized and secure instant messenger that is easy to use for friends and family.
Some features at a glance:
• Anonymous. Instant onboarding without a phone number, e-mail or other private data.
💬 Reliable instant messaging with multi-profile and multi-device support.
• Flexible. Supports multiple chat profiles and is easy to setup on multiple devices.
⚡️ Sign-up easily using secure fast chatmail servers. You don’t need a phone number or any private data.
• Extensible. Use mini-apps in chats like shopping lists, calendars or games.
📧 Alternatively, use your existing classic e-mail address to read your inbox as chats.
• Reliable. Works under bad and adversarial network conditions.
🎮 Interactive mini-apps in chats for gaming and collaboration.
• Secure. Audited End-to-End encryption safe against network and server attacks.
🔒 Audited end-to-end encryption safe against network and server attacks.
• Sovereign. Can be run with your own e-mail address or server.
ArcaneChat is a Delta Chat client and was created with a focus on usability, good user experience, and saving data plan. Also the app usually experiments with new features that eventually might get added to the official Delta Chat client.
@@ -23,17 +23,14 @@ ArcaneChat is a Delta Chat client and was created with a focus on usability, goo
<li>Multiple color themes/skins</li>
<li>It is possible to disable profiles to completely disconnect them saving data/bandwidth</li>
<li>You can easily see the connection status of all your profiles in the profile switcher</li>
<li>A videochat instance is set by default</li>
<li>Location streaming feature enabled by default and extra option to share location for 12 hours</li>
<li>Extra option to share location for 12 hours</li>
<li>Clicking on a message with a POI location, will open the POI on the map</li>
<li>Last-seen status of contacts is shown in your contact list, like in WhatsApp, Telegram, etc.</li>
<li>Videos are played in loop, useful for short GIF videos</li>
<li>Verified icon is shown in the chat list for the "Device Messages" chat</li>
<li>Verified icon is shown in the chat list for the "Device Messages" and "Saved Messages" chat to avoid fishing attempts by scammer pretending to be the official chats</li>
<li>Voice messages have more aggressive compression in "worse quality" mode to save data plan</li>
<li>Automatic download of messages limited to 640KB by default</li>
<li>Profile's display name is always shown in the app's title bar instead of the name of the app</li>
<li>Your avatar is visible to other users in Mailing Lists</li>
<li>Can be selected as app to open .xdc files</li>
<li>For mini-apps developers: there are some extra features in the WebXDC API, check https://github.com/ArcaneChat/android/#webxdc</li>
<li>Better settings organization with additional "Privacy" section</li>
ArcaneChat — децентрализованный и защищённый мессенджер, удобный для друзей и семьи.
• Анонимность. Мгновенный вход без номера телефона, e-mail или других личных данных.
• Гибкость. Поддерживает несколько профилей чатов и легко настраивается на нескольких устройствах.
• Расширяемость. В чатах можно использовать мини-приложения: списки покупок, календари или игры.
• Надёжность. Работает даже при плохом соединении и в сложных сетевых условиях.
• Безопасность. Проверенное сквозное шифрование, защищённое от сетевых и серверных атак.
• Самостоятельность. Может работать с вашим собственным e-mail-адресом или сервером.
ArcaneChat — клиент Delta Chat, разработанный с акцентом на удобство, качественный UX и экономию трафика. Также приложение часто экспериментирует с новыми функциями, которые со временем могут быть добавлены в официальный клиент Delta Chat.
<b>Основные отличия от официального клиента Delta Chat:</b>
<ul>
<li>Поддержка некоторых стилей markdown в текстовых сообщениях (жирный, курсив, зачёркнутый и т.д.)</li>
- nuovo inserimento: puoi creare un nuovo profilo con un tocco su "Crea Nuovo Profilo" - oppure utilizzare un accesso esistente o la configurazione del secondo dispositivo come al solito
i contatti possono essere allegati come "Schede" in "Allega/Contatto"; quando il destinatario tocca le carte, è possibile stabilire la crittografia end-to-end garantita
- aggiungi contatti manualmente in "Nuova Chat / Nuovo Contatto / Aggiungi Contatto Manualmente"
- invia qualsiasi emoji come reazione
- mostrare le reazioni nei riepiloghi
- blocca/archivia/ecc. le chat direttamente dai risultati di ricerca
- aggiungi un'opzione per contrassegnare tutte le chat selezionate come "Lette" (tocca a lungo una chat per avviare la modalità di selezione)
- i nuovi profili chatmail per dispositivo singolo hanno come impostazione predefinita "Elimina Messaggi Dopo il Download"
- quando si utilizza un profilo chatmail su più dispositivi, la cancellazione viene modificata in "Automatica" (la strategia di cancellazione dipende quindi dal server)
*-If`verifierId`!=0,displaytext"Introduced by ..."withthenameandaddressofthecontactformattedby`name_and_addr`/`nameAndAddr`.Prefixthetextbyagreencheckmark.
/** `Automatic` means that provider database setting should be taken. If there is no provider database setting for certificate checks, check certificates strictly. */
automatic,
/** Ensure that TLS certificate is valid for the server hostname. */
strict,
/** Accept certificates that are expired, self-signed or otherwise not valid for the server hostname. */
/** An action cannot be performed because the user is not in the group. Reported eg. after a call to setChatName(), setChatProfileImage(), addContactToChat(), removeContactFromChat(), and messages sending functions. */
/** Messages or chats changed. One or more messages or chats changed for various reasons in the database: - Messages sent, received or removed - Chats created, deleted or archived - A draft has been set */
publicstaticclassMsgsChangedextendsEventType{
/** Set if only a single chat is affected by the changes, otherwise 0. */
publicIntegerchatId;
/** Set if only a single message is affected by the changes, otherwise 0. */
/** ID of the chat where the message is assigned. */
publicIntegerchatId;
/** ID of the message. */
publicIntegermsgId;
}
/** Downloading a bunch of messages just finished. This is an event to allow the UI to only show one notification per message bunch, instead of cluttering the user with many notifications. */
/** Messages were seen or noticed. chat id is always set. */
publicstaticclassMsgsNoticedextendsEventType{
publicIntegerchatId;
}
/** A single message is sent successfully. State changed from DC_STATE_OUT_PENDING to DC_STATE_OUT_DELIVERED, see `Message.state`. */
publicstaticclassMsgDeliveredextendsEventType{
/** ID of the chat which the message belongs to. */
publicIntegerchatId;
/** ID of the message that was successfully sent. */
publicIntegermsgId;
}
/** A single message could not be sent. State changed from DC_STATE_OUT_PENDING or DC_STATE_OUT_DELIVERED to DC_STATE_OUT_FAILED, see `Message.state`. */
publicstaticclassMsgFailedextendsEventType{
/** ID of the chat which the message belongs to. */
publicIntegerchatId;
/** ID of the message that could not be sent. */
publicIntegermsgId;
}
/** A single message is read by the receiver. State changed from DC_STATE_OUT_DELIVERED to DC_STATE_OUT_MDN_RCVD, see `Message.state`. */
publicstaticclassMsgReadextendsEventType{
/** ID of the chat which the message belongs to. */
/** Location of one or more contact has changed. */
publicstaticclassLocationChangedextendsEventType{
/** contact_id of the contact for which the location has changed. If the locations of several contacts have been changed, this parameter is set to `None`. */
/** The type of the joined chat. This can take the same values as `BasicChat.chatType` ([`crate::api::types::chat::BasicChat::chat_type`]). */
publicChatTypechatType;
/** ID of the contact that wants to join. */
publicIntegercontactId;
/** Progress, always 1000. */
publicIntegerprogress;
}
/** Progress information of a secure-join handshake from the view of the joiner (Bob, the person who scans the QR code). The events are typically sent while secureJoin(), which may take some time, is executed. */
/** Progress as: 400=vg-/vc-request-with-auth sent, typically shown as "alice@addr verified, introducing myself." (Bob has verified alice and waits until Alice does the same for him) 1000=vg-member-added/vc-contact-confirm received */
publicIntegerprogress;
}
/** The connectivity to the server changed. This means that you should refresh the connectivity view and possibly the connectivtiy HTML; see getConnectivity() and getConnectivityHtml() for details. */
/** A multi-device synced config value changed. Maybe the app needs to refresh smth. For uniformity this is emitted on the source device too. The value isn't here, otherwise it would be logged which might not be good for privacy. */
/** Inform that a single chat list item changed and needs to be rerendered. If `chat_id` is set to None, then all currently visible chats need to be rerendered, and all not-visible items need to be cleared from cache if the UI has a cache. */
/** Note that this is different from [`ChatListItem::is_self_in_group`](`crate::api::types::chat_list::ChatListItemFetchResult::ChatListItem::is_self_in_group`). This property should only be accessed when [`FullChat::chat_type`] is [`Chattype::Group`]. */
/** Check if a message has a POI location bound to it. These locations are also returned by `get_locations` method. The UI may decide to display a special icon beside such messages. */
publicBooleanhasLocation;
publicIntegerid;
/** if is_info is set, this refers to the contact profile that should be opened when the info message is tapped. */
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.