Compare commits

...

1631 Commits

Author SHA1 Message Date
adbenitez 1b0b87f148 update build.gradle 2025-10-15 18:19:26 +02:00
adbenitez a955d6f2f7 Merge remote-tracking branch 'upstream/main' 2025-10-13 16:28:46 +02:00
adb 2143bc01d1 Merge pull request #3945 from deltachat/update-core-and-stuff-13/10/25
Update core to 2.20.0
2025-10-13 16:07:51 +02:00
adbenitez 5a3728428b update changelog 2025-10-13 15:47:38 +02:00
adbenitez f236085b92 update deltachat-core-rust to 'chore(release): prepare for 2.20.0' of 'v2.20.0' 2025-10-13 15:44:58 +02:00
adb b0cea8f099 Merge pull request #3943 from deltachat/update-core-and-stuff-10/10/25
Update core to 2.18.0
2025-10-10 18:04:23 +02:00
adbenitez 7590b21928 update version number and strings 2025-10-10 17:39:05 +02:00
adbenitez ea7fd0ec22 update deltachat-core-rust to 'chore(release): prepare for 2.18.0' of 'v2.18.0' 2025-10-10 15:57:51 +02:00
adb 6a4e40d17b Merge pull request #3937 from deltachat/link2xt/recommend-lix-instead-of-determinate-nix-installer
Recommend Lix instead of Determinate Nix Installer
2025-10-10 15:28:02 +02:00
adb 5302e86011 Merge pull request #3938 from deltachat/adb/speedup-ci
speed up the PR's apk preview building
2025-10-10 13:30:18 +02:00
adb 5382e880a9 Merge branch 'main' into adb/speedup-ci 2025-10-10 12:29:24 +02:00
adb 2385b236c7 Merge pull request #3940 from deltachat/prep-2.17.0
update build.gradle
2025-10-10 12:28:30 +02:00
adbenitez 5224119f9e update build.gradle 2025-10-09 20:09:12 +02:00
adb dfef2b4120 Merge pull request #3939 from deltachat/update-translations-9/10/25
update translations
2025-10-09 20:05:55 +02:00
adbenitez 6d7f417233 update translations 2025-10-09 20:04:07 +02:00
adb 05ef95e757 Merge branch 'main' into adb/speedup-ci 2025-10-09 18:45:54 +02:00
adbenitez 8aa45b7bc9 speed up the PR's apk preview building 2025-10-09 16:49:29 +02:00
link2xt 7cea23caf5 Recommend Lix instead of Determinate Nix Installer
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/
2025-10-09 14:08:03 +00:00
adbenitez 4a2bed3e6c Merge remote-tracking branch 'upstream/main' 2025-10-09 15:39:22 +02:00
adbenitez 3aa2fbf67a Merge remote-tracking branch 'upstream/main' 2025-10-09 15:34:30 +02:00
adb c5d9471f2a Merge pull request #3936 from deltachat/adb/remove-awebp-dep
remove dependency for awebp, it is supported by Android
2025-10-09 15:01:38 +02:00
adb 5117b70c58 Merge pull request #3935 from deltachat/adb/deprecated-videochat-stock
don't set deprecated/unused stock strings
2025-10-09 14:27:54 +02:00
adbenitez da4d17aa14 remove dependency for awebp, it is supported by Android 2025-10-09 14:22:51 +02:00
adbenitez 6135813bff don't set deprecated/unused stock strings 2025-10-09 14:08:08 +02:00
adb 8547f7aab8 Merge pull request #3934 from deltachat/adb/update-calls-webapp-v0.10.0-beta
update calls webapp to v0.10.0-beta
2025-10-08 20:02:41 +02:00
adb 6dca20045c Merge branch 'main' into adb/update-calls-webapp-v0.10.0-beta 2025-10-08 19:17:17 +02:00
adbenitez 58ef777091 update calls webapp to v0.10.0-beta 2025-10-08 19:16:12 +02:00
B. Petersen 4a836b3d82 string 'Calls' not used at all 2025-10-08 19:11:09 +02:00
B. Petersen 363122fd15 clarify some strings 2025-10-08 19:11:09 +02:00
adb b751219c78 Merge pull request #3785 from deltachat/adb/integrated-videocalls
Android calls UI
2025-10-08 18:36:19 +02:00
adbenitez e586fafc54 tweak call footer's date format 2025-10-08 16:58:27 +02:00
adbenitez 2c04319c52 Merge branch 'adb/integrated-videocalls' of https://github.com/deltachat/deltachat-android into adb/integrated-videocalls 2025-10-08 16:45:55 +02:00
adbenitez f9607e4453 tweak call message-type colors 2025-10-08 16:45:17 +02:00
adb 6aec209ebc Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2025-10-08 14:31:33 +00:00
adbenitez 9adc9b34e5 fix string 2025-10-08 15:58:32 +02:00
adb 9267501bc1 Merge branch 'main' into adb/integrated-videocalls 2025-10-08 15:47:00 +02:00
adb 924c3f8920 Update src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java
Co-authored-by: bjoern <r10s@b44t.com>
2025-10-08 13:45:21 +00:00
adb 8f93dacbff Update src/main/res/xml/preferences_advanced.xml
Co-authored-by: bjoern <r10s@b44t.com>
2025-10-08 13:40:10 +00:00
adb a07e9312ea Merge pull request #3932 from deltachat/adb/issue-3930
process permissions result in GroupCreateActivity
2025-10-08 12:48:26 +02:00
adbenitez 79f6010d5f update changelog 2025-10-08 12:08:39 +02:00
adbenitez c5af1d4f2b process permissions result in GroupCreateActivity 2025-10-08 12:05:38 +02:00
adb 20a3820871 Merge pull request #3931 from deltachat/adb/media-preview-edge2edge
fix edge-to-edge in MediaPreviewActivity
2025-10-08 11:52:08 +02:00
adb cb0d1106b4 Merge branch 'main' into adb/media-preview-edge2edge 2025-10-08 11:19:52 +02:00
adb 291ef86a4f Merge branch 'main' into adb/integrated-videocalls 2025-10-08 11:17:40 +02:00
adb b0457bc036 Merge pull request #3925 from deltachat/adb/new-rpc-bindings
use auto-generated RPC bindings
2025-10-08 11:17:01 +02:00
adbenitez 4d7107314a fix edge-to-edge in MediaPreviewActivity 2025-10-07 19:15:07 +02:00
adbenitez 4185219088 update calls webapp to v0.9.0-beta 2025-10-07 14:32:18 +02:00
adb ef51492d0b Merge branch 'main' into adb/new-rpc-bindings 2025-10-06 18:20:00 +02:00
adbenitez 4dc10f977e update calls-webapp 0.8.0 2025-10-06 16:06:49 +02:00
adbenitez aaba52dba6 Merge branch 'adb/integrated-videocalls' of https://github.com/deltachat/deltachat-android into adb/integrated-videocalls 2025-10-06 15:51:22 +02:00
adbenitez ca4808aaca tweak strings 2025-10-06 15:51:10 +02:00
adb 66324fe914 Merge branch 'adb/new-rpc-bindings' into adb/integrated-videocalls 2025-10-06 15:49:19 +02:00
adbenitez a5f67e9d9f update core to 2.17.0 2025-10-06 15:48:22 +02:00
B. Petersen 8b5c887402 add 'Save Message' string
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.
2025-10-03 14:33:20 +02:00
adbenitez 183cb03577 set new calls-related stock strings 2025-10-02 17:09:28 +02:00
adbenitez b1e6d59ba9 now it is CallState.Canceled not CallState.Cancelled 2025-10-02 17:05:43 +02:00
adb 33f38889c1 Merge branch 'adb/new-rpc-bindings' into adb/integrated-videocalls 2025-10-02 15:45:19 +02:00
adbenitez f97e800907 update core 2025-10-02 15:44:49 +02:00
adbenitez 21e597d09e add instructions on JSON-RPC binding generation 2025-10-02 15:28:21 +02:00
adbenitez 6b040b160d update changelog 2025-10-02 15:11:00 +02:00
adbenitez 57e5523bf3 update core to v2.16.0 2025-10-02 15:07:01 +02:00
adbenitez 874492c9ae update calls web-app 2025-10-01 16:16:52 +02:00
adbenitez 8ae6407461 add call duration to message bubble 2025-09-30 22:41:14 +02:00
adbenitez ae8ce94c00 add spaces around == 2025-09-30 22:39:37 +02:00
adbenitez 74208fff69 update CallInfo 2025-09-30 22:37:47 +02:00
adbenitez 7ace2b9baf add spaces arround == 2025-09-30 20:46:01 +02:00
adbenitez f28fffb9df update core 2025-09-30 20:07:47 +02:00
adbenitez 349e8d80c8 hide delivery status if not sending or error 2025-09-30 17:30:38 +02:00
adbenitez 4b9217e3e6 rename calls package 2025-09-30 16:29:47 +02:00
adbenitez 4e6e805ede remove unused old videochat invitation API 2025-09-30 15:59:58 +02:00
adbenitez 02a1c86f01 allow to pick call and call back by clicking call messages 2025-09-27 19:43:00 +02:00
adbenitez b28fb4ac9e update calls webapp 2025-09-27 19:36:35 +02:00
adbenitez fddc80e60b use new call_info RPC API 2025-09-27 01:09:50 +02:00
adb e5b1becf13 Merge branch 'adb/new-rpc-bindings' into adb/integrated-videocalls 2025-09-27 01:02:32 +02:00
adbenitez 01b78e37fd update src/main/java/chat/delta/rpc/types/CallState.java 2025-09-27 01:02:06 +02:00
adbenitez d0b1f36f60 fix imports, import from new Rpc package 2025-09-27 00:17:34 +02:00
adb e388464d28 Merge branch 'adb/new-rpc-bindings' into adb/integrated-videocalls 2025-09-27 00:14:07 +02:00
adbenitez afc7a04b63 revert changes in Rpc class 2025-09-27 00:13:13 +02:00
adbenitez b871e42b86 use auto-generated RPC bindings 2025-09-26 23:40:26 +02:00
adbenitez 3479233f82 offer incoming call when clicking on the notification 2025-09-26 18:00:06 +02:00
adbenitez 7e3e35a9a1 update calls-app to 0.6.0-beta 2025-09-26 17:47:35 +02:00
adbenitez 92711444e4 update calls-app to 0.6.0-beta 2025-09-26 17:25:47 +02:00
adb ec576d7159 Merge branch 'main' into adb/integrated-videocalls 2025-09-24 16:29:51 +02:00
adb 70a05221ab Merge pull request #3924 from deltachat/adb/update-workflows
update workflows and fix adding artifact link as comment to PRs
2025-09-24 16:29:27 +02:00
adbenitez 6335cfa178 update workflows and fix adding artifact link as comment to PRs 2025-09-24 15:35:55 +02:00
adbenitez ebda8c4577 hide calls button in "Saved Messages" and "Device Messages" 2025-09-24 14:23:52 +02:00
adbenitez de9a2df1b4 update DeclineCallReceiver.java 2025-09-22 18:43:20 +02:00
adbenitez a3c7e3db3d use RPC for call API 2025-09-22 18:33:59 +02:00
adbenitez 249fc829be fix constant numbering in ConversationAdapter.java 2025-09-22 17:44:27 +02:00
adb 5b62f7bf25 Merge pull request #3920 from deltachat/adb/issue-3916
improve displaying of call messages
2025-09-19 20:17:54 +02:00
adbenitez df6c858b92 improve displaying of calls messages 2025-09-19 18:44:06 +02:00
adbenitez c9816ae785 don't allow to edit call messages 2025-09-19 14:29:46 +02:00
adbenitez a24069ce3d ask for required permissions in incoming call 2025-09-17 19:27:45 +02:00
adbenitez f770f817d0 tweak preference name 2025-09-17 17:52:00 +02:00
adbenitez bee804e095 update to new calls-app's API 2025-09-12 18:59:34 +02:00
adbenitez 6b1c6b37ac add support for calls.getIceServers() and calls.getAvatar() 2025-09-12 15:59:00 +02:00
adbenitez 881e69c176 remove unused code 2025-09-11 21:58:54 +02:00
adbenitez ac6df2ff85 update changelog 2025-09-11 21:50:03 +02:00
adbenitez 7698ac5c06 some tweaks 2025-09-11 21:44:15 +02:00
adbenitez c2abe42b60 don't reject call on notification dismiss 2025-09-11 16:50:28 +02:00
adbenitez 3e95197d02 tweak calls channel 2025-09-11 16:33:15 +02:00
adbenitez 534a75feaa remove notification on accepted call 2025-09-11 13:22:21 +02:00
adbenitez 7a11234431 go back to chat after finishing call 2025-09-10 21:04:08 +02:00
adbenitez 0e91537a4d allow to decline calls and remove call notification 2025-09-10 20:47:25 +02:00
adbenitez b074bf1819 allow to answer from notification 2025-09-10 18:55:19 +02:00
adbenitez b8d2552aa8 remove unused imports 2025-09-10 16:04:55 +02:00
adbenitez 320c120a61 don't use calls integration API 2025-09-10 13:01:05 +02:00
adbenitez 6c1a3c850a tweak preview-apk workflow 2025-09-09 18:18:05 +02:00
adbenitez 7ec87f55b6 auto-accept calls for testing 2025-09-09 17:39:29 +02:00
adbenitez f6ce98f9a2 remove DC_MSG_VIDEOCHAT_INVITATION 2025-09-09 16:10:42 +02:00
adbenitez cb465ec85e remove outdated info message types 2025-09-09 15:16:56 +02:00
adbenitez 6f10a90c5f update calls webapp 0.4.0-beta 2025-09-09 14:58:05 +02:00
adb 9f439c852f Merge branch 'main' into adb/integrated-videocalls 2025-09-09 13:48:53 +02:00
adbenitez 2cc0451a8a update core 2025-09-09 13:48:40 +02:00
adb 02230d05a1 Merge pull request #3912 from deltachat/update-core-and-stuff-9/9/25
Update core to 2.13.0
2025-09-09 13:47:39 +02:00
adbenitez 9a6f6d7ea6 update strings 2025-09-09 13:45:24 +02:00
adbenitez f4cd299f70 update changelog 2025-09-09 13:35:49 +02:00
adbenitez d0358a4d0c update deltachat-core-rust to 'chore(release): prepare for 2.13.0' of 'v2.13.0' 2025-09-09 13:23:33 +02:00
adbenitez 4fc115b93d add basic notification 2025-09-09 13:22:20 +02:00
adbenitez 0157510c5d don't ask to start call 2025-09-06 21:39:06 +02:00
adbenitez 831ce19689 update core 2025-09-05 18:43:16 +02:00
adbenitez 9431e26696 end call on closing webview 2025-09-05 14:58:10 +02:00
adbenitez 9ef01dd352 add calls button 2025-09-03 16:07:19 +02:00
adbenitez 01c766db41 remove old videochat invitations 2025-09-03 16:02:09 +02:00
adb 364d15442a Merge branch 'main' into adb/integrated-videocalls 2025-09-03 14:21:53 +02:00
adb 32eefaab42 Merge pull request #3908 from deltachat/adb/issue-3893
show warning if background notifications will be unreliable
2025-09-02 18:12:46 +02:00
adb 4b8177f7f0 Merge branch 'main' into adb/issue-3893 2025-09-02 18:12:24 +02:00
B. Petersen 092a5caf8b deprecate another string 2025-09-02 18:11:39 +02:00
B. Petersen bfe4438773 deprecate some strings 2025-09-02 18:11:39 +02:00
adbenitez d251fffc07 update changelog 2025-09-02 17:37:22 +02:00
adb 180c2bc8de Merge branch 'main' into adb/issue-3893 2025-09-02 17:35:57 +02:00
adb 082815f676 Merge pull request #3910 from deltachat/adb/issue-3907
disable clone option for incoming channel
2025-09-02 17:02:07 +02:00
adbenitez 640688d774 update code to new calls app path 2025-09-02 14:59:06 +02:00
adbenitez 30868198a2 update calls webapp 2025-09-02 14:17:30 +02:00
adb 75673ef1ad Merge branch 'main' into adb/integrated-videocalls 2025-09-02 14:15:25 +02:00
adbenitez 478d937b3c tweak behavior 2025-09-02 00:01:36 +02:00
adb 7a5eb6bea6 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2025-09-01 14:46:45 +00:00
adbenitez 0142d51835 update changelog 2025-09-01 16:45:51 +02:00
adbenitez 075bad3638 hide member list on incoming channels 2025-09-01 16:44:51 +02:00
adbenitez 1f173bae9b disable clone option for incoming channel 2025-09-01 16:33:52 +02:00
adbenitez 2deb61477f show warning if background notifications will be unreliable 2025-09-01 15:52:10 +02:00
adb fcc1ab1079 Merge pull request #3899 from deltachat/link2xt/nix-35
nix: update to Android platform 35
2025-08-27 17:14:25 +02:00
link2xt c72207da8a nix: update to Android platform 35 2025-08-27 00:32:50 +00:00
adb 82233d7862 Merge pull request #3898 from deltachat/adb/issue-3894
default to permanent notification if push is not possible
2025-08-26 16:26:28 +02:00
adbenitez 2547a0435c improve preference handling 2025-08-26 15:54:09 +02:00
adbenitez b6ce6d908f Merge branch 'adb/issue-3894' of https://github.com/deltachat/deltachat-android into adb/issue-3894 2025-08-26 13:24:04 +02:00
adbenitez c6bbb0a524 improve code 2025-08-26 13:23:54 +02:00
adb 826258a1be Merge branch 'main' into adb/issue-3894 2025-08-22 17:42:41 +02:00
B. Petersen 05dde13e68 update CHANGELOG 2025-08-22 17:35:32 +02:00
B. Petersen 06130c7cd8 fix initial selection 2025-08-22 17:35:32 +02:00
B. Petersen 5d7c701da8 drop disappearing messages options 1 and 30 minutes
- 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)
2025-08-22 17:35:32 +02:00
adbenitez 91e898ee96 update changelog 2025-08-22 16:39:33 +02:00
adb 61e9466c59 Merge branch 'main' into adb/issue-3894 2025-08-22 16:38:37 +02:00
adbenitez 39c48d3dcd default to permanent notification if push is not possible 2025-08-22 16:36:00 +02:00
adbenitez 1c7c3f06e6 prototype with TelecomManager and ConnectionService APIs 2025-08-22 15:17:32 +02:00
B. Petersen d4ddb68137 remove deprecated strings 2025-08-20 17:47:07 +02:00
adbenitez c9ac421315 update call.html 2025-08-19 14:00:51 +02:00
adb e14bf24bb1 Merge branch 'main' into adb/integrated-videocalls 2025-08-18 15:22:52 +02:00
adb 700d11f600 Merge pull request #3889 from deltachat/adb/issue-3688
avoid superfluous error message when user cancel configuration
2025-08-18 15:12:16 +02:00
adbenitez fbb33c735c Merge branch 'adb/integrated-videocalls' of https://github.com/deltachat/deltachat-android into adb/integrated-videocalls 2025-08-18 14:58:46 +02:00
adbenitez 7cc9d7ea2f update core 2025-08-18 14:58:35 +02:00
adb ca27be240e Merge branch 'main' into adb/integrated-videocalls 2025-08-18 14:53:03 +02:00
adbenitez 8ab9b92517 update core 2025-08-18 14:47:57 +02:00
adbenitez f95b48ad6a Merge remote-tracking branch 'upstream/main' 2025-08-17 19:31:59 +02:00
adbenitez 8ebdc5414a update changelog 2025-08-17 18:33:03 +02:00
adbenitez a0e07cb2ea avoid superfluous error message when user cancel configuration 2025-08-17 18:30:22 +02:00
adb 152360d94a Merge pull request #3888 from deltachat/adb/issue-3853
fix direct share shortcuts
2025-08-16 21:31:26 +02:00
adbenitez 8513f7cd36 update changelog 2025-08-16 20:18:12 +02:00
adbenitez 17e3f3afdd fix direct share shortcuts 2025-08-16 20:10:53 +02:00
adb 7d7f62dae1 Merge pull request #3814 from deltachat/adb/issue-3795
target SDK 35 and implement edge-to-edge
2025-08-16 19:24:50 +02:00
adb 2bd0a0d935 Merge branch 'main' into adb/issue-3795 2025-08-16 17:08:37 +02:00
B. Petersen cf0414dd66 update CHANGELOG 2025-08-16 17:02:41 +02:00
B. Petersen 5fbd065882 improve info messages for dark theme
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.
2025-08-16 17:02:41 +02:00
adb 5982a9dd8f Merge branch 'main' into adb/issue-3795 2025-08-16 16:15:59 +02:00
adbenitez 4b20e3f41f update changelog 2025-08-16 16:15:23 +02:00
adb ac8d8886cc Merge pull request #3885 from deltachat/link2xt/build-tools-35
Update Android SDK Build Tools to 35.0.0 in flake.nix
2025-08-16 16:13:58 +02:00
adbenitez a803d472bf don't use setStatusBarColor 2025-08-16 03:19:37 +02:00
adbenitez 396ed14067 adapt activities to edge-to-edge 2025-08-16 02:10:02 +02:00
adbenitez 5faea5e40a revert empty line 2025-08-15 23:24:19 +02:00
adbenitez 08bb248919 revert status bar color hack 2025-08-15 23:23:02 +02:00
link2xt 30dd7a9c33 Update Android SDK Build Tools to 35.0.0 in flake.nix
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.
2025-08-14 16:13:49 +00:00
adb 28f57a2ccb Merge branch 'main' into adb/issue-3795 2025-08-14 16:25:04 +02:00
adbenitez c0717237ad Merge remote-tracking branch 'upstream/main' 2025-08-13 16:28:56 +02:00
adb 5716372453 Merge pull request #3884 from deltachat/prep-2.11.0
prepare 2.11.0
2025-08-13 14:45:56 +02:00
adbenitez d362cf4467 bump version 2025-08-13 14:45:06 +02:00
adb 56118d3732 Merge pull request #3883 from deltachat/imgbot
[ImgBot] Optimize images
2025-08-13 14:00:48 +02:00
adb a03f51f7c5 Merge pull request #3875 from deltachat/adb/issue-3874
avoid NPE in DecryptableUri
2025-08-13 13:56:49 +02:00
ImgBotApp 6cf59133c2 [ImgBot] Optimize images
*Total -- 3,963.23kb -> 2,946.99kb (25.64%)

/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -- 981.79kb -> 657.29kb (33.05%)
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -- 481.97kb -> 350.50kb (27.28%)
/fastlane/metadata/android/en-US/images/phoneScreenshots/4.png -- 357.58kb -> 272.44kb (23.81%)
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -- 967.63kb -> 750.70kb (22.42%)
/fastlane/metadata/android/en-US/images/phoneScreenshots/5.png -- 1,174.26kb -> 916.06kb (21.99%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2025-08-13 11:56:18 +00:00
adb ef8d833f5e Merge branch 'main' into adb/issue-3874 2025-08-13 13:55:37 +02:00
adb b110c1f91e Merge pull request #3467 from deltachat/adb/issue-3437
add "After 1 year" option to disappearing messages
2025-08-13 13:55:04 +02:00
adbenitez e53a1f0b22 update changelog 2025-08-13 13:54:41 +02:00
adb 5a5cbfceb7 Merge branch 'main' into adb/issue-3437 2025-08-13 13:47:42 +02:00
adb 57a557a9b4 Merge pull request #3882 from deltachat/update-core-and-stuff-13/8/25
update core to 2.11.0
2025-08-13 13:45:20 +02:00
adbenitez 2328bf1e2a update translations 2025-08-13 13:44:34 +02:00
adbenitez ce4c9aaba0 update changelog 2025-08-13 13:18:54 +02:00
adbenitez 71a2cb7a5b update deltachat-core-rust to 'chore(release): prepare for 2.11.0' of 'v2.11.0' 2025-08-13 13:11:36 +02:00
adb 79462c0596 Merge branch 'main' into adb/issue-3795 2025-08-12 17:16:36 +02:00
adb 68f5d1ae27 Merge pull request #3881 from deltachat/adb/dont-use-android.R.id.content
don't use android.R.id.content
2025-08-12 16:34:31 +02:00
adbenitez 77caced5ed don't use android.R.id.content 2025-08-12 15:56:25 +02:00
adb 88a4f99cf8 Merge branch 'main' into adb/issue-3795 2025-08-12 15:19:37 +02:00
B. Petersen 42544fd447 update translations 2025-08-12 14:57:13 +02:00
adb 5ff869cd4a Merge pull request #3879 from deltachat/adb/issue-3878
call dcContext.deleteMsgs() in background thread
2025-08-09 16:35:00 +02:00
adbenitez 4af1666a31 call dcContext.deleteMsgs() in background thread 2025-08-09 16:01:46 +02:00
adbenitez 786fd3f47d avoid NPE in DecryptableUri 2025-08-09 15:24:02 +02:00
adb a0d9315ff4 Merge pull request #3873 from deltachat/adb/improve-screenshots
update screenshots
2025-08-09 00:51:07 +02:00
adbenitez 86954a3c42 update screenshots 2025-08-09 00:15:05 +02:00
adb f136b6d7d1 Merge branch 'main' into adb/issue-3795 2025-08-08 15:44:23 +02:00
adbenitez 9e4b744046 set ephemeral timer stock strings for 1 year 2025-08-08 15:36:24 +02:00
adb 8db4604224 Merge branch 'main' into adb/issue-3437 2025-08-08 15:12:01 +02:00
adb 43f9094c04 Merge pull request #3872 from deltachat/r10s/allow-cloning-email-chats
allow to clone email chats
2025-08-08 15:08:56 +02:00
adb 1217e65889 Merge branch 'main' into adb/issue-3437 2025-08-08 15:08:28 +02:00
adb d8eaf0ad4b Merge branch 'main' into adb/issue-3795 2025-08-08 15:04:52 +02:00
adb 4fbb8d2b78 Merge branch 'main' into r10s/allow-cloning-email-chats 2025-08-08 14:50:06 +02:00
adb 7cebd04086 Merge pull request #3867 from deltachat/adb/issue-3608
make apk builds more reproducible
2025-08-08 14:33:22 +02:00
adb b584fdfd89 Merge pull request #3870 from deltachat/adb/issue-3782
improve group image quality
2025-08-08 14:32:51 +02:00
B. Petersen db35fef6db update CHANGELOG 2025-08-08 13:39:15 +02:00
B. Petersen 068102a0d8 allow to clone email chats
this was disallowed at a time where we had no api
to create ad-hoc "new email" chats
2025-08-08 13:36:00 +02:00
adb 02ff8a2a6b Merge branch 'main' into adb/issue-3608 2025-08-08 13:03:28 +02:00
adbenitez 321b5a223b fix comment for 1 year value 2025-08-08 00:42:29 +02:00
adb ab7fd960ca Merge branch 'main' into adb/issue-3437 2025-08-08 00:38:46 +02:00
adbenitez dec685023e use same max. avatar size for groups and profiles, remove superflous class 2025-08-08 00:17:30 +02:00
adbenitez 168d2ae16c improve group image quality 2025-08-07 23:59:05 +02:00
adb e55249182a Merge pull request #3869 from deltachat/adb/update-deps-6/8/25
remove some dependecies and upgrade others
2025-08-07 23:50:43 +02:00
adbenitez 0966487978 pin firebase version 2025-08-07 23:14:06 +02:00
adbenitez fd057485db remove com.annimon:stream dependency 2025-08-07 17:45:01 +02:00
adbenitez a68f3a7024 remove dependecy on com.pnikosis:materialish-progress 2025-08-06 19:40:47 +02:00
adbenitez 1dad6ebf8a remove unused me.leolin:ShortcutBadger and com.jpardogo.materialtabstrip:library 2025-08-06 19:39:49 +02:00
adbenitez a77b1a5dd6 update gradle and some deps 2025-08-06 19:38:41 +02:00
adbenitez c0a65e2e9f properly set the pre-selected option 2025-08-06 15:48:27 +02:00
adbenitez 82ef0560a5 change to 1 year 2025-08-06 15:19:40 +02:00
adb 9166b2a42a Merge branch 'main' into adb/issue-3437 2025-08-06 15:01:14 +02:00
adb 2ef3811a56 Merge branch 'main' into adb/issue-3795 2025-08-06 14:47:41 +02:00
adb 1b91c1c482 Merge branch 'main' into adb/issue-3608 2025-08-06 14:47:13 +02:00
adbenitez 0d8962f76c make apk builds more reproducible 2025-08-06 14:45:25 +02:00
adb e98535418c Merge pull request #3865 from deltachat/adb/issue-3860
update screenshots
2025-08-06 14:06:45 +02:00
adbenitez 5eb9065d89 update screenshots 2025-08-05 18:35:08 +02:00
adb 9e70c43ab8 Merge pull request #3862 from deltachat/prep-2.10.0
Prepare 2.10.0
2025-08-05 12:37:28 +02:00
adbenitez fc8bfabeb2 update changelog 2025-08-05 11:56:40 +02:00
adbenitez 681c22293f update version number 2025-08-05 11:51:14 +02:00
adb bed8d511fe Merge pull request #3861 from deltachat/update-core-and-stuff-5/8/25
Update core to 2.10.0
2025-08-05 11:49:15 +02:00
adbenitez eeeb686868 update strings 2025-08-05 11:33:38 +02:00
adbenitez 76dda10a31 update changelog 2025-08-05 11:26:33 +02:00
adbenitez 6a7c4f24e9 update deltachat-core-rust to 'chore(release): prepare for 2.10.0' of 'v2.10.0' 2025-08-05 11:22:29 +02:00
adb 8cdfafd7c3 Merge pull request #3859 from deltachat/hoc/lookup-key-contacts-too
fix: Lookup key contacts by addr when clicking on a link
2025-08-05 11:20:46 +02:00
Hocuri 1c6faeac04 fix: Lookup key contacts by addr when clicking on a link
Companion PR to https://github.com/chatmail/core/pull/7073
2025-08-04 16:02:39 +02:00
adbenitez 7ecf0a7daa Merge remote-tracking branch 'upstream/main' 2025-08-03 00:25:01 +02:00
adb b2bf7e8ae7 Merge pull request #3858 from deltachat/adb/issue-3850
share address for email contacts
2025-08-02 22:24:15 +00:00
adbenitez 0a34456302 update changelog 2025-08-02 21:51:10 +02:00
adb 3ebcc1dd99 Merge branch 'main' into adb/issue-3850 2025-08-02 19:50:24 +00:00
adb ff7df0e1e6 Merge pull request #3856 from deltachat/adb/issue-3855
don't enlarge avatars for special chats
2025-08-02 19:49:42 +00:00
adbenitez 68cd070b98 share address for email contacts 2025-08-02 21:48:58 +02:00
adb 8ff8cffa15 Merge branch 'main' into adb/issue-3855 2025-08-02 19:31:59 +00:00
adb dc216feb30 Merge pull request #3857 from deltachat/adb/fix-changelog-typos-2/8/25
fix typos in changelog
2025-08-02 19:31:21 +00:00
adbenitez 84fc885617 fix typos in changelog 2025-08-02 21:30:31 +02:00
adbenitez 72bcbe80c0 update changelog 2025-08-02 21:27:49 +02:00
adbenitez b4ed26b842 don't enlarge avatars for special chats 2025-08-02 21:25:45 +02:00
adb 7be6b0a1ee Merge pull request #3854 from deltachat/adb/fix-archived-link-item
fix archived link item's layout
2025-08-01 18:17:43 +00:00
adbenitez 9a2fdcdcbd update changelogC 2025-08-01 19:42:48 +02:00
adbenitez e81960f98a fix "Archived" item's layout in chatlit 2025-08-01 19:41:49 +02:00
adbenitez a37fcfcaf7 Merge remote-tracking branch 'upstream/main' 2025-07-31 23:14:46 +02:00
adb fd4a377752 Merge pull request #3852 from deltachat/prep-2.9.0
prepare 2.9.0
2025-07-31 19:45:21 +00:00
adbenitez d40652d394 prepare 2.9.0 2025-07-31 21:44:18 +02:00
adb aacca5531c Merge pull request #3851 from deltachat/update-core-and-stuff-31/7/25
update to core v2.9.0
2025-07-31 19:17:39 +00:00
adbenitez 51cb844e63 update strings 2025-07-31 21:17:09 +02:00
adbenitez ef0b8efcfa update changelog 2025-07-31 21:13:53 +02:00
adbenitez 3e943483da update deltachat-core-rust to 'chore(release): prepare for 2.9.0' of 'v2.9.0' 2025-07-31 21:10:26 +02:00
adb a9013bb574 Merge pull request #3846 from deltachat/adb/issue-3841
improve footer layout
2025-07-31 19:09:07 +00:00
adbenitez aa5fcb139e update changelog 2025-07-31 17:00:00 +02:00
adb c526c42d19 Merge branch 'main' into adb/issue-3841 2025-07-31 14:56:54 +00:00
adb f66003c6b1 Merge pull request #3847 from deltachat/adb/disable-edit-on-classic-email
improve classic email threads/chats UX
2025-07-31 14:56:31 +00:00
adbenitez cc64142e7b don't enlage email chats avatar placeholder 2025-07-31 16:47:58 +02:00
adbenitez a280407370 update changelog 2025-07-31 16:26:44 +02:00
adb dda5efedc4 Merge branch 'main' into adb/issue-3841 2025-07-31 14:21:14 +00:00
adb 1cd4ec1ec9 Merge branch 'main' into adb/disable-edit-on-classic-email 2025-07-31 14:17:58 +00:00
adb 1a8b905071 Merge pull request #3848 from deltachat/adb/issue-3845
hide address in search results
2025-07-31 14:17:43 +00:00
adbenitez de13a70c66 update changelog 2025-07-31 16:17:15 +02:00
adb 2caa98e08a Merge branch 'main' into adb/issue-3841 2025-07-30 21:54:32 +00:00
adb ba997d9f71 Merge branch 'main' into adb/disable-edit-on-classic-email 2025-07-30 21:54:20 +00:00
B. Petersen 3985f2f468 remove stock strings no longer in use 2025-07-30 23:49:39 +02:00
adbenitez 86bd38bdad hide address in search results 2025-07-30 23:49:36 +02:00
adbenitez ffa1c69be2 improve code efficiency 2025-07-30 23:37:54 +02:00
adbenitez 3a3388ed59 disable non-functional disappearing timer option for email threads 2025-07-30 23:37:16 +02:00
adbenitez 8c04c199e6 disable editing messages on classic email threads 2025-07-30 23:30:59 +02:00
adbenitez ecdbbed8c1 improve footer layout 2025-07-30 23:22:51 +02:00
adbenitez e6f4a616fb Merge remote-tracking branch 'upstream/main' 2025-07-28 22:55:43 +02:00
adb 68f270eea3 Merge pull request #3844 from deltachat/prep-2.8.0
prepare 2.8.0
2025-07-28 20:44:37 +00:00
adbenitez 52aeec8d17 update version number 2025-07-28 22:44:01 +02:00
adb bdcaffde3d Merge pull request #3843 from deltachat/update-core-and-stuff-28/7/25
Update to core 2.8.0
2025-07-28 20:32:27 +00:00
adbenitez d19dcb41ec update translations 2025-07-28 22:31:11 +02:00
adbenitez 5525cfa5a9 update changelog 2025-07-28 22:01:46 +02:00
adbenitez 8715e9eba2 update deltachat-core-rust to 'chore(release): prepare for 2.8.0' of 'v2.8.0' 2025-07-28 21:58:11 +02:00
adbenitez 3cc58c2a0f update readme 2025-07-25 01:12:57 +02:00
adbenitez 5cc5a80990 Merge remote-tracking branch 'upstream/main' 2025-07-24 18:43:44 +02:00
adb 52c0197682 Merge pull request #3837 from deltachat/update-to-core-2.6.0
prepare 2.6.0
2025-07-23 16:07:40 +00:00
adbenitez c75adbe93c update strings 2025-07-23 15:55:02 +02:00
adbenitez f16c59897d update version number 2025-07-23 15:54:44 +02:00
adbenitez 636235148f update deltachat-core-rust to 'chore(release): prepare for 2.6.0' of 'v2.6.0' 2025-07-23 15:51:58 +02:00
adb 46226a7ab5 Merge pull request #3835 from deltachat/prep-2.5.0
prepare 2.5.0
2025-07-22 20:06:40 +00:00
adbenitez f11ae0a5ff prepare 2.5.0 2025-07-22 17:35:42 +02:00
adb 2264e1bf22 Merge pull request #3834 from deltachat/adb/issue-3827
don't show "delete for everyone" in unencrypted chats
2025-07-22 15:33:24 +00:00
adbenitez c095510a42 don't show "delete for everyone" in unnecrypted chats 2025-07-22 16:56:25 +02:00
adbenitez fe6838e315 Merge remote-tracking branch 'upstream/main' 2025-07-22 16:47:51 +02:00
adb 6dbbdae2df Merge pull request #3833 from deltachat/adb/update-core-2.5.0
update core to v2.5.0
2025-07-22 14:46:04 +00:00
adbenitez a5070c879a update changelog 2025-07-22 16:45:45 +02:00
adbenitez 1bbf352c4c update deltachat-core-rust to 'chore(release): prepare for 2.5.0' of 'v2.5.0' 2025-07-22 16:37:58 +02:00
adbenitez 011ba4595b Merge remote-tracking branch 'upstream/main' 2025-07-22 16:08:45 +02:00
adb 10345ab8c3 Merge pull request #3818 from deltachat/adb/tune-down-fetchworker
don't use FetchWorker if we have push notifications
2025-07-22 13:36:08 +00:00
adb b5d0878511 Merge pull request #3832 from deltachat/update-core-and-stuff-22.7.25
Update core to 2.4.0
2025-07-22 13:35:37 +00:00
adbenitez 8a393ad274 update translations 2025-07-22 15:29:41 +02:00
adbenitez 84e8be9776 update changelog 2025-07-22 15:05:05 +02:00
adbenitez da6aa901ca update deltachat-core-rust to 'chore(release): prepare for 2.4.0' of 'v2.4.0' 2025-07-22 15:03:19 +02:00
adb 8b52a99327 tune down green checkmark (#3828)
* 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>
2025-07-22 14:21:59 +02:00
B. Petersen 9c6271b1d1 update translations 2025-07-22 14:18:39 +02:00
B. Petersen 8564259787 update local help 2025-07-22 14:18:39 +02:00
B. Petersen 9e7ee3170e message about moved profile-switch no longer needed 2025-07-22 00:50:41 +02:00
B. Petersen b2cdff820a deprecate some stock strings; none of them are in use in core any longer 2025-07-22 00:50:41 +02:00
adbenitez f1789950a6 Merge remote-tracking branch 'upstream/main' 2025-07-20 21:29:15 +02:00
adb 0bc8750984 Merge pull request #3826 from deltachat/prep-2.3.0-beta
bump version
2025-07-20 19:18:18 +00:00
adbenitez 6351bcc11e bump version 2025-07-20 21:17:16 +02:00
adb 66ae731a37 Merge pull request #3825 from deltachat/adb/update-translations-20-07-25
update translations and changelog
2025-07-20 19:13:27 +00:00
adbenitez cc1fd53021 update translations and changelog 2025-07-20 21:11:07 +02:00
adbenitez 3937f0e149 remove unnecessary "force encryption" 2025-07-20 20:23:02 +02:00
adbenitez 2839250011 don't show last seen for saved messages and device chats 2025-07-20 01:15:27 +02:00
adbenitez 5844563de4 update core 2025-07-19 19:55:25 +02:00
adbenitez a8698a03df update scripts 2025-07-19 19:53:53 +02:00
adbenitez 6a6044c77d improve profile 2025-07-19 19:52:12 +02:00
adbenitez 2a0be883c2 Merge remote-tracking branch 'upstream/main' 2025-07-19 16:44:15 +02:00
B. Petersen 5ff8101c2c replace 'half blocked' by 'contact request' 2025-07-19 15:02:52 +02:00
B. Petersen 9e87a4b2a8 allow tapping new e2ee-info-messages; remove outdated protection-broken path 2025-07-19 15:02:52 +02:00
B. Petersen 9740921f25 update translations 2025-07-19 15:01:34 +02:00
B. Petersen de2892a4c2 update deltachat-core-rust to 'chore(release): prepare for 2.3.0' of 'v2.3.0' 2025-07-19 15:01:34 +02:00
adb c344b18326 add device message (#3820)
* 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>
2025-07-19 14:47:26 +02:00
B. Petersen 54d2516f6c add string 'E-Mail' 2025-07-18 13:32:49 +02:00
B. Petersen 8f61bec805 update translations 2025-07-18 13:32:49 +02:00
B. Petersen 107fe00afa simplify e2ee strings
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
2025-07-16 23:57:58 +02:00
adbenitez 8642563c86 don't use FetchWorker if we have push notifications 2025-07-16 18:51:57 +02:00
adb c9d4d2bdbc Merge pull request #3815 from deltachat/adb/allow-to-create-new-unencrypted-group
Add new option to create unencrypted email thread
2025-07-16 14:16:04 +00:00
adbenitez 83f5d0793a hide "add contact manually" from "new chat" screen and from group memeber selection 2025-07-16 15:47:27 +02:00
adbenitez 16dd79aa9a hide edit pencil when enlarging avatar of unencrypted group 2025-07-15 22:03:55 +02:00
adbenitez d7c3303cec allow to create new unencrypted group 2025-07-15 22:03:31 +02:00
adbenitez a9541a936e implement edge-to-edge 2025-07-15 17:43:32 +02:00
adb 54f2d2e991 Merge pull request #3810 from deltachat/adb/account-move-to-top
allow to "move to top" accounts in the accounts list
2025-07-15 15:38:37 +00:00
adb 8daaa45aa3 Merge branch 'main' into adb/account-move-to-top 2025-07-15 15:38:24 +00:00
bjoern fa40d4fb44 make donate device message translatable (#3813)
* make donate device message translatable

* update CHANGELOG

* Update CHANGELOG.md

Co-authored-by: Hocuri <hocuri@gmx.de>

* Update src/main/res/values/strings.xml

---------

Co-authored-by: Hocuri <hocuri@gmx.de>
2025-07-14 11:25:45 +02:00
B. Petersen a26ce76964 update translations 2025-07-13 14:05:48 +02:00
B. Petersen 2e798c5b04 add strings missing for 'new email' 2025-07-13 14:05:48 +02:00
adbenitez 9104971baa update changelog 2025-07-12 01:13:37 +02:00
adbenitez 3d6dc80d8a update deltachat-core-rust to 'chore(release): prepare for 2.1.0' of 'v2.1.0' 2025-07-12 01:12:13 +02:00
adbenitez 410072358d temporarily check core's main branch with "set_accounts_order" support 2025-07-11 16:01:32 +02:00
adbenitez 1d7d0dd329 allow to "move to top" accounts in the account selector 2025-07-11 16:01:10 +02:00
adb 15ed570dce Merge pull request #3809 from deltachat/adb/prep-1.59.0
update version number
2025-07-10 20:35:43 +00:00
Hocuri 90cf75421b fix: Small channel fixes (#3807)
* 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
2025-07-10 19:30:52 +02:00
adbenitez a8aecea814 update version number 2025-07-10 18:33:55 +02:00
adb fcf98ab7e9 Merge pull request #3808 from deltachat/adb/update-strings
update strings and local help
2025-07-10 16:32:35 +00:00
adbenitez e1d6b8f3b8 update strings and local help 2025-07-10 18:05:41 +02:00
bjoern 629532a996 Update translations 2025 07 10 (#3806)
* pull translations

* update channel hint as discussed

* add some more translator hints

* pull again after uploading new strings
2025-07-10 13:45:14 +02:00
B. Petersen 36798a2f57 fix profile's edit display
this was lost on merging main to channels-pr at
https://github.com/deltachat/deltachat-android/pull/3783/files#diff-4e3273297b4c47b24d3616a9030a5c2de21519ebcfc0c6d5e49c6ded45476a72L117
2025-07-10 13:03:26 +02:00
Hocuri 717777f628 Show channels in a proper "Channel" chat (#3783)
* 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>
2025-07-10 10:32:04 +02:00
adbenitez 5af2d4fa8f Merge remote-tracking branch 'upstream/main' 2025-07-09 23:51:26 +02:00
adb 23d521beed Merge pull request #3793 from deltachat/adb/pgp-contacts2
adapt to new key-contacts
2025-07-09 21:07:00 +00:00
adb b699451c2a Update CHANGELOG.md
Co-authored-by: Hocuri <hocuri@gmx.de>
2025-07-09 20:34:53 +00:00
adbenitez fa6fad5787 update changelog 2025-07-09 22:20:49 +02:00
adbenitez ab641df8f9 update core to 2.0.0 2025-07-09 22:13:08 +02:00
adbenitez 90ced3efb0 Merge remote-tracking branch 'origin/main' into adb/pgp-contacts2 2025-07-09 17:36:10 +02:00
B. Petersen 0d50af1aa5 mailinglist profile: addr in subtitle, no members
this is follow up for #3792 and does the same as before -
showing no members for mailinglists and showing its address in the subtitle
2025-07-09 17:32:27 +02:00
adbenitez 7f982e6302 update core 2025-07-08 23:24:01 +02:00
adb 0ba20e9fc8 Merge branch 'main' into adb/pgp-contacts2 2025-07-08 21:20:15 +00:00
adb cf0df03d9f Merge pull request #3803 from deltachat/adb/issue-3798
modify QR icon
2025-07-08 21:19:34 +00:00
adbenitez 111629ace2 Merge remote-tracking branch 'upstream/main' 2025-07-08 22:14:42 +02:00
adbenitez 8afe5739a8 Merge commit '466329995' 2025-07-08 22:13:38 +02:00
adbenitez b9520c95ed Merge branch 'main' into adb/pgp-contacts2 2025-07-08 18:08:51 +02:00
adb 1cf01c6414 Merge branch 'main' into adb/issue-3798 2025-07-08 15:21:49 +00:00
bjoern 98d5259d0e tweak new profile (#3800)
* 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
2025-07-08 05:27:42 +02:00
adb 0945696450 Merge pull request #3802 from deltachat/adb/issue-3801
hidde "chats in common" header when no chats in common
2025-07-07 23:20:27 +00:00
adbenitez 59ec5826aa update changelog 2025-07-07 18:39:51 +02:00
adbenitez e6415abda2 modify QR icon 2025-07-07 17:42:16 +02:00
adbenitez f9885fbcad hidde "chats in common" header when no chats in common 2025-07-07 17:30:45 +02:00
bjoern 4663299951 re-focus profile (#3792)
* 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.
2025-07-05 11:16:30 +02:00
adbenitez 0ee08fee42 update core 2025-06-30 20:49:50 +02:00
adbenitez bd8698c3f3 add DcContact.isKeyContact() 2025-06-30 18:58:28 +02:00
adbenitez 0f694876f5 update core submodule 2025-06-27 00:39:10 +02:00
adbenitez 55ea8bbbce Merge branch 'adb/pgp-contacts2' of https://github.com/deltachat/deltachat-android into adb/pgp-contacts2 2025-06-25 14:47:12 +02:00
adbenitez ae2c152382 don't allow to edit mailinglist name
it will get reset on next incoming message anyways
2025-06-25 14:45:22 +02:00
adbenitez 825ee6a79e don't allow to leave email threads 2025-06-25 14:45:05 +02:00
adb edd7938497 Merge branch 'main' into adb/pgp-contacts2 2025-06-24 18:13:01 +00:00
adbenitez f0d62f41c9 show email address for email contacts 2025-06-24 20:12:37 +02:00
adbenitez b5e7f13819 don't allow to edit or clone email threads 2025-06-24 20:05:18 +02:00
adbenitez 9a1c6ce2ad don't show email icon on pending downloads 2025-06-24 18:01:52 +02:00
adbenitez 966d8784f3 adapt to new PGP-contacts 2025-06-24 17:46:51 +02:00
adbenitez 571f49ab13 revert meeting change 2025-06-20 19:04:42 +02:00
adbenitez 365f1dbbe6 basic call 2025-06-20 18:56:45 +02:00
adbenitez 100bb06e20 Merge remote-tracking branch 'origin/r10s/call-api' into adb/integrated-videocalls 2025-06-20 18:54:58 +02:00
adbenitez 27f662707a fix VideochatUtil 2025-06-19 17:20:46 +02:00
adbenitez 3086c72304 undo temporary test 2025-06-19 17:17:53 +02:00
B. Petersen eee218a3b6 add call api 2025-06-19 00:48:59 +02:00
adbenitez fa868077b0 test integrated webxdc 2025-06-18 17:41:09 +02:00
adb e8776177ba Merge branch 'main' into adb/integrated-videocalls 2025-06-18 15:28:04 +00:00
bjoern 9caf94d035 add some DeltaTouch specific strings (#3788)
* add some DeltaTouch specific strings

* typo
2025-06-13 16:43:49 +02:00
B. Petersen 7593ec1831 reword 'Shared Chats' to 'Chats in Common' 2025-06-12 19:36:30 +02:00
adb 677c0592fc Merge branch 'main' into adb/integrated-videocalls 2025-06-12 12:57:07 +00:00
adb 0cc58006ba Merge pull request #3786 from deltachat/adb/improve-reactions-dialog
allow to react with same emoji as others
2025-06-12 12:56:47 +00:00
adbenitez 60e3f475de update build.gradle 2025-06-10 17:45:34 +02:00
adbenitez 8f47783aaf update core 2025-06-10 17:11:34 +02:00
adbenitez a521974b3b Merge remote-tracking branch 'upstream/adb/integrated-videocalls' 2025-06-10 17:10:17 +02:00
adbenitez 2aa71e3eb2 Merge remote-tracking branch 'upstream/adb/improve-reactions-dialog' 2025-06-10 16:35:06 +02:00
adbenitez 005cf835a1 allow to react with same emoji as others 2025-06-10 16:28:56 +02:00
adbenitez 5fb61b008b set name when joining call 2025-06-10 16:05:56 +02:00
adbenitez dd93de3833 improve the videocalls: open in internal webview 2025-06-10 15:20:34 +02:00
adbenitez a13e31a5f7 don't register to open arbitrary files and links 2025-06-10 12:58:20 +02:00
adbenitez 3d891d07a9 undo unnecessary changes 2025-06-10 12:58:04 +02:00
adb bd3c4f9186 Merge pull request #3780 from deltachat/adb/webxdc-tts
add Web API's TTS support to webxdc
2025-05-31 10:46:24 +00:00
adbenitez f4f0df3adb Merge remote-tracking branch 'upstream/adb/webxdc-tts' 2025-05-27 16:08:21 +02:00
adbenitez 6fbe5e2f56 update core 2025-05-27 16:07:30 +02:00
adbenitez edeec415a1 Merge remote-tracking branch 'upstream/main' 2025-05-27 16:05:23 +02:00
adbenitez 90350729d5 Merge branch 'adb/webxdc-tts' of https://github.com/deltachat/deltachat-android into adb/webxdc-tts 2025-05-26 17:40:44 +02:00
adbenitez 7ae4cd4dd3 update changelog 2025-05-26 17:40:03 +02:00
adbenitez 0b50dd445f update changelog 2025-05-26 17:39:01 +02:00
adb bd40f4eb04 Merge branch 'main' into adb/webxdc-tts 2025-05-26 15:38:26 +00:00
adbenitez cfdfab1716 check if lang is empty 2025-05-26 17:37:06 +02:00
adbenitez f8d0fd3f77 update webxdc.js 2025-05-26 17:33:47 +02:00
adbenitez 7186afa321 add Web API's TTS support to webxdc 2025-05-26 17:31:47 +02:00
B. Petersen 201f6e46b0 remove 'metadata' folder again
the 'metadata' folder was already removed at
https://github.com/deltachat/deltachat-android/pull/3211/files ,
however then re-created with unimportant files by weblate,
cmp. https://github.com/deltachat/deltachat-android/issues/3414

as the latter seems to be no longer the case,
remove the folder again and see if it stays away now :)
2025-05-25 11:51:14 +02:00
Yurt Page 813d4324f7 README.md: add link Transifex translations 2025-05-25 11:05:33 +02:00
B. Petersen 27875b83bc unify singular/plural in attach menu
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
2025-05-24 16:26:08 +02:00
B. Petersen 29d04afc51 update CHANGELOG 2025-05-24 13:24:53 +02:00
B. Petersen e6655fa21d point out that app drafts need to be sent
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.
2025-05-24 13:24:53 +02:00
adb 7712ada816 Merge pull request #3776 from deltachat/adb/add-direct-action-for-apps-tab
show action button to see the list of apps sent in chat
2025-05-23 14:59:13 +00:00
adbenitez 52788976e3 update changelog 2025-05-23 15:13:24 +02:00
adbenitez 56f55be938 update apps icon 2025-05-23 15:07:19 +02:00
adbenitez 47350b1809 show action button to see the list of apps sent in chat 2025-05-23 14:26:34 +02:00
B. Petersen bb410a1bb1 update CHANGELOG 2025-05-23 13:43:35 +02:00
B. Petersen 04ed9e27c1 remove ambigious time from app list
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.
2025-05-23 13:43:35 +02:00
B. Petersen 93c52ec527 remove redundant 'App' subtitle in 'Apps' list 2025-05-23 13:43:35 +02:00
B. Petersen a7b86dd59a update translations 2025-05-21 19:17:20 +02:00
B. Petersen 5587eda657 clearer instructions how to add apps&co to a chat
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 :)
2025-05-19 22:42:43 +02:00
adb b8a1daff45 Merge pull request #3769 from deltachat/adb/fix-changelog-19/5/25
fix version header
2025-05-19 11:12:17 +00:00
adbenitez deddc5dd29 fix version header 2025-05-19 13:11:31 +02:00
adbenitez 2f371c69cf Merge remote-tracking branch 'upstream/main' 2025-05-19 12:56:38 +02:00
adbenitez c4aa00d40d Merge remote-tracking branch 'upstream/main' 2025-05-15 17:56:41 +02:00
adb 46b5ae4831 Merge pull request #3767 from deltachat/adb/tweak-dcmsg-getWebxdcInfo
avoid causing and logging exception in getWebxdcInfo
2025-05-15 15:38:43 +00:00
adbenitez 16e89bb58a avoid causing and logging exception in getWebxdcInfo if getWebxdcInfoJson returns empty string 2025-05-15 14:19:52 +02:00
adb 1566ea87d3 Merge pull request #3766 from deltachat/prep-1.58.4
prepare 1.58.4
2025-05-15 11:38:11 +00:00
adbenitez cf653f41b7 prepare 1.58.4 2025-05-15 12:49:47 +02:00
adb 785729272a Merge pull request #3765 from deltachat/update-core-and-stuff-15/5/25
Update core to 1.159.5
2025-05-15 10:48:05 +00:00
adbenitez a881f84a03 update changelog 2025-05-15 12:11:09 +02:00
adbenitez d3b2f2df97 update translations 2025-05-15 12:11:01 +02:00
adbenitez f518a3eea9 update deltachat-core-rust to 'chore(release): prepare for 1.159.5' of 'v1.159.5' 2025-05-15 11:56:48 +02:00
l 20819912ee Update Rust to 1.86.0 (#3763) 2025-05-13 15:59:01 +00:00
adb 25ad133e1f Merge pull request #3764 from deltachat/simon/fix-typo-in-full-description
fix typo in full_description
2025-05-13 11:17:19 +00:00
Simon Laux 4eef4a86b5 fix typo in full_description 2025-05-13 00:13:31 +00:00
adb fb50b03af4 Merge pull request #3760 from deltachat/prep-1.58.3
prepare v1.58.3
2025-05-06 14:29:26 +00:00
adbenitez b6ffc8df9e prepare v1.58.3 2025-05-06 16:03:15 +02:00
adb 9a71de6944 Merge pull request #3759 from deltachat/update-core-and-stuff-6/5/25
Update core to 1.159.3
2025-05-06 14:00:59 +00:00
adbenitez f6ab0b18a2 update strings 2025-05-06 15:50:41 +02:00
adbenitez f023961239 update changelog 2025-05-06 15:43:43 +02:00
adbenitez aeb78d579e update deltachat-core-rust to 'chore(release): prepare for 1.159.3' of 'v1.159.3' 2025-05-06 15:37:55 +02:00
B. Petersen cdc47423f9 update translations 2025-05-06 11:47:00 +02:00
B. Petersen 9790730d75 remove deprecated strings 2025-05-06 11:47:00 +02:00
B. Petersen 6cc9a2594f add strings needed for iOS 2025-05-06 11:47:00 +02:00
adb 6814df2976 Merge pull request #3757 from deltachat/adb/add-donate-button
add "Donate" button to main settings
2025-05-05 21:41:30 +00:00
adbenitez 8e8b49508d update changelog 2025-05-05 22:11:15 +02:00
adbenitez 619ac2bb21 put donate and help in category 2025-05-05 21:48:15 +02:00
adbenitez f6750a1583 add "Donate" button to main settings 2025-05-05 19:11:21 +02:00
adb ce895355f5 Merge pull request #3756 from deltachat/r10s/fix-jsonrpc-crash
fix crash in JSONRPC
2025-05-05 14:31:54 +00:00
B. Petersen 17e45fd2ab log error if JSONRPC fails 2025-05-05 13:36:25 +02:00
B. Petersen 8f2b761361 update CHANGELOG 2025-05-03 21:01:15 +02:00
B. Petersen bc72fce060 fix crash in JSONRPC
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.
2025-05-03 20:39:20 +02:00
Hocuri 501a77e1dc refactor: Rename addTransport -> addOrUpdateTransport() (#3754)
The API was renamed in https://github.com/chatmail/core/pull/6800 (i.e. core v1.159.2)
2025-04-30 14:03:50 +02:00
adbenitez ad6f232d34 undo community hack 2025-04-27 02:11:35 +02:00
adbenitez efbe43ec70 Merge remote-tracking branch 'upstream/main' 2025-04-27 02:09:10 +02:00
B. Petersen 5e38b25c43 make 'microphone' hint fitting for desktop as well
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.
2025-04-26 17:33:06 +02:00
B. Petersen 6f3f356997 update CHANGELOG 2025-04-26 17:29:55 +02:00
B. Petersen d6f485511c fix selfName if displayname is not set
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 :)
2025-04-26 17:29:55 +02:00
adb a527b2f404 Merge pull request #3747 from deltachat/prep-1.58.2
prepare 1.58.2
2025-04-24 12:46:41 +00:00
adbenitez 7c77b946ed update version number 2025-04-24 14:45:50 +02:00
adb ca77886012 Merge pull request #3746 from deltachat/update-core-and-stuff-24/4/25
Update core to 1.159.2
2025-04-24 12:42:17 +00:00
adbenitez fa5e305dff update local help 2025-04-24 14:31:01 +02:00
adbenitez 9e70bfb5ae update changelog: fix core version 2025-04-24 14:08:57 +02:00
adbenitez f4c7a9439d update strings 2025-04-24 13:47:09 +02:00
adbenitez 5d05e99ad6 update changelog 2025-04-24 13:45:32 +02:00
adbenitez 79bd1c7cb3 update deltachat-core-rust to 'chore(release): prepare for 1.159.2' of 'v1.159.2' 2025-04-24 13:42:04 +02:00
adb 848a86c718 Merge pull request #3745 from deltachat/adb/fix-warnings-in-profile
fix some linter warnings in classes related to profile
2025-04-23 14:05:43 +00:00
adb e759efc389 Merge pull request #3744 from deltachat/adb/fix-some-linter-warnings-22/4/25
fix some linter warnings
2025-04-22 22:11:40 +00:00
adb 63ea218b98 Merge pull request #3743 from deltachat/adb/fix-lint-warnings-conversationlistitem
fix linter warnings in ConversationListItem
2025-04-22 21:49:16 +00:00
adbenitez 07f4a859f3 fix some linter warnings in classes related to profile 2025-04-22 23:22:57 +02:00
adbenitez 34eeec4a39 fix some linter warnings 2025-04-22 23:02:57 +02:00
adbenitez 7f1734b57c fix linter warnings in ConversationListItem 2025-04-22 22:53:47 +02:00
adbenitez 83fa4c493d Merge remote-tracking branch 'upstream/main' 2025-04-21 23:00:52 +02:00
adb cbc8d2b659 Merge pull request #3741 from deltachat/prep-1.58.1
Prepare 1.58.1
2025-04-19 21:20:25 +00:00
adbenitez 6ff1c7a689 update version number 2025-04-19 22:07:59 +02:00
adbenitez b10185b6b9 update changelog 2025-04-19 22:07:22 +02:00
adb 6ef35c6ce1 Merge pull request #3740 from deltachat/update-core-and-stuff-19/4/25
update core to 1.159.1
2025-04-19 20:05:20 +00:00
adbenitez e04e6dfe06 update changelog 2025-04-19 22:05:01 +02:00
adb 60b322d83e Merge branch 'main' into update-core-and-stuff-19/4/25 2025-04-19 19:59:31 +00:00
adb 94e597d2d1 Merge pull request #3583 from deltachat/adb/issue-3575
show profiles connectivity state
2025-04-19 19:56:14 +00:00
adbenitez c1168566f3 update translations 2025-04-19 21:32:02 +02:00
adbenitez 72fc6ca4dc update deltachat-core-rust to 'chore(release): prepare for 1.159.1' of 'v1.159.1' 2025-04-19 21:27:27 +02:00
adb b2a3042d02 Merge branch 'main' into adb/issue-3575 2025-04-19 19:24:55 +00:00
adb ed4c5e7a72 Merge pull request #3736 from deltachat/adb/issue-3735
fix and update PhotoView dependency
2025-04-17 11:15:47 +00:00
B. Petersen 29a0f3dadb update translations 2025-04-17 11:14:56 +02:00
B. Petersen 1820af288e update translations 2025-04-16 21:06:44 +02:00
B. Petersen be48179a25 update script to grep for strings to chatmail dirs 2025-04-16 21:06:44 +02:00
adbenitez 2aa4245563 fix and update PhotoView dependency 2025-04-15 17:48:55 +02:00
adbenitez 54b5dba6ea update changelog 2025-04-14 19:39:25 +02:00
adb 60fa0c98df Merge branch 'main' into adb/issue-3575 2025-04-14 17:32:37 +00:00
adbenitez ea60418a70 Merge remote-tracking branch 'upstream/main' 2025-04-13 14:34:50 +02:00
adb 2bd1493a42 Merge pull request #3732 from deltachat/prep-1.58.0
prepare 1.58.0
2025-04-13 10:56:34 +00:00
adbenitez 04a22cc8c6 update version number 2025-04-13 12:55:16 +02:00
adbenitez d2780c4c03 Merge remote-tracking branch 'upstream/main' 2025-04-13 12:21:53 +02:00
bjoern bc73e1a2ba open contact in scope when tapping info messages (#3710)
* open contact in scope when tapping info messages

* update CHANGELOG

---------

Co-authored-by: adb <adb@merlinux.eu>
2025-04-12 00:22:24 +02:00
adbenitez 0522aef0fd enable broadcast lists for chatmail again 2025-04-11 20:50:20 +02:00
adbenitez d5a0be0c9c Merge remote-tracking branch 'upstream/main' 2025-04-11 20:21:26 +02:00
adb d66acbb71e Merge pull request #3731 from deltachat/update-core-and-stuff-11/4/25
Update core to 1.159.0
2025-04-11 16:41:56 +00:00
adbenitez 5c06156463 Merge remote-tracking branch 'upstream/main' 2025-04-11 18:40:37 +02:00
adb c07b2b4aa1 Merge branch 'main' into update-core-and-stuff-11/4/25 2025-04-11 16:17:31 +00:00
bjoern 389dddc9ea remove address from primary settings UI (#3730)
* 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>
2025-04-11 18:15:36 +02:00
adbenitez 5dfdc94468 update translations 2025-04-11 18:12:57 +02:00
adbenitez 52d65c1bbb update deltachat-core-rust to 'chore(release): perpare for 1.159.0' of 'v1.159.0' 2025-04-11 18:00:51 +02:00
adbenitez f0f07055cf update changelog 2025-04-11 18:00:35 +02:00
adb c6c66f19f2 Merge pull request #3729 from deltachat/adb/issue-3701
remove address from contact list and group member list
2025-04-11 14:35:05 +00:00
adbenitez fb3d95264a Merge branch 'adb/issue-3701' of https://github.com/deltachat/deltachat-android into adb/issue-3701 2025-04-11 16:33:04 +02:00
adbenitez 92e67bd80a remove unused import 2025-04-11 16:32:53 +02:00
adb 1518bab671 Merge branch 'main' into adb/issue-3701 2025-04-11 14:32:06 +00:00
adb 632da643af Merge pull request #3724 from deltachat/adb/issue-3721
avoid NPE in UriGlideRenderer
2025-04-11 14:31:01 +00:00
adb 7353873281 Merge pull request #3725 from deltachat/adb/issue-3717
avoid SecurityException in NotificationsPreferenceFragment
2025-04-11 14:30:18 +00:00
adb f9ac0375b9 Update src/main/java/org/thoughtcrime/securesms/preferences/NotificationsPreferenceFragment.java
Co-authored-by: bjoern <r10s@b44t.com>
2025-04-11 14:29:14 +00:00
adbenitez 78820ec18a update changelog 2025-04-11 16:25:10 +02:00
adbenitez 3c0e4fd853 don't display last-seen etc. just hide address 2025-04-11 16:22:29 +02:00
adb 31c9de1f03 Merge pull request #3723 from deltachat/adb/issue-3719
catch IllegalArgumentException in InstantOnboardingActivity.progressError()
2025-04-10 21:43:09 +00:00
adbenitez 4240c8b324 remove address from contact list and group member list 2025-04-10 22:09:41 +02:00
B. Petersen f47fff292f update translations 2025-04-08 00:10:17 +02:00
B. Petersen 9106f12b77 remove now unused stock translations 2025-04-08 00:10:17 +02:00
B. Petersen be709fb6df update translations 2025-04-07 16:47:27 +02:00
B. Petersen fca0c03087 add a hint to 'Add Second Device' for ASM 2025-04-07 16:39:28 +02:00
adbenitez 2613be7216 update changelog 2025-04-06 18:34:39 +02:00
adbenitez 43941f9075 avoid SecurityException in NotificationsPreferenceFragment 2025-04-06 18:20:51 +02:00
adbenitez 765e2b490e avoid NPE in UriGlideRenderer 2025-04-06 16:12:49 +02:00
adbenitez cfae361b88 catch IllegalArgumentException in InstantOnboardingActivity.progressError() 2025-04-06 16:03:55 +02:00
B. Petersen bdebd98627 update translations 2025-04-04 20:01:42 +02:00
Hocuri be159407ff feat: In ndk-make.sh, support custom CARGO_TARGET_DIR (#3716)
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.
2025-04-03 12:35:00 +00:00
Hocuri 9daa2d77cd refactor: Remove dead 'configure' code (#3714)
* refactor: Remove dead configure code

* refactor: Remove unnecessary startIo() call; addTransport starts IO itself
2025-04-03 14:12:09 +02:00
Hocuri 05d2d0964f fix: Avoid NPE because of progressDialog (#3715) 2025-04-03 14:11:08 +02:00
Hocuri 10c4a105bb feat: Move to addTransport / addTransportFromQr API (#3676), remove AEAP message (#3698) 2025-04-02 18:14:49 +02:00
adbenitez fe602004c7 Merge remote-tracking branch 'upstream/main' 2025-04-02 17:18:16 +02:00
bjoern e2d7f2c3d3 prefer NAME over NAME (ADDR) (#3699)
* 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>
2025-04-02 16:41:36 +02:00
B. Petersen 6996836f80 update translations 2025-04-02 14:44:57 +02:00
bjoern 7d689dc1d6 tune down email wording (#3707)
* 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>
2025-04-02 14:34:56 +02:00
B. Petersen 9960423b57 better remove headline alltogether than trying to get an artificial ordering 2025-04-02 12:46:24 +02:00
B. Petersen 06183a9135 'App Access' is not about webxdc as the other options few lines above. use less confusing term 'System Integration' 2025-04-02 12:46:24 +02:00
B. Petersen 796acf1bb0 update translations 2025-04-02 12:45:37 +02:00
bjoern 64e4816f5e add stock string needed when securejoin takes longer than expected (#3709)
* 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
2025-04-02 12:35:19 +02:00
bjoern 1680d332f5 hide 'show classic email' for chatmail (#3708)
* hide 'show classic email' for chatmail

* update CHANGELOG
2025-04-01 16:42:48 +02:00
adb 77ee5c6bc0 Merge pull request #3706 from deltachat/adb/update-release-file
remove mention of Apklis
2025-03-30 16:26:01 +00:00
adbenitez f8c678b7ff Merge remote-tracking branch 'upstream/main' 2025-03-30 16:54:49 +02:00
adbenitez cde74ae2e1 remove mention of Apklis 2025-03-30 16:31:31 +02:00
adb 5fd3352d81 Merge pull request #3705 from deltachat/prep-1.56.1
prepare 1.56.1
2025-03-30 14:18:45 +00:00
adbenitez e41b7a4701 update version number 2025-03-30 16:03:45 +02:00
adb dd85322333 Merge pull request #3704 from deltachat/adb/issue-3702
avoid some ANRs in MessageSelectorFragment
2025-03-30 14:00:56 +00:00
adbenitez c7bffb85fd avoid ANR in MessageSelectorFragment.handleDeleteMessages 2025-03-30 15:51:16 +02:00
adbenitez 3518f3d213 avoid ANR in MessageSelectorFragment.handleResendMessage 2025-03-30 15:42:49 +02:00
adbenitez b31774c899 Merge remote-tracking branch 'upstream/main' 2025-03-30 15:28:03 +02:00
adb eebb64ff04 Merge pull request #3700 from deltachat/update-core-and-stuff-30/3/25
Update core  to 1.158.0
2025-03-30 13:17:34 +00:00
adbenitez ee1a6ea5c6 update changelog 2025-03-30 13:22:18 +02:00
adbenitez 063e80bbf7 update translations and built-in help 2025-03-30 13:03:13 +02:00
adbenitez 9f30ebd62c update release instructions 2025-03-30 13:02:49 +02:00
adbenitez ae53415545 update deltachat-core-rust to 'chore(release): prepare for 1.158.0' of 'v1.158.0' 2025-03-30 12:51:46 +02:00
adbenitez 8a495411a3 update release instructions 2025-03-30 12:50:47 +02:00
B. Petersen 2f432bfd3b depreacte the whole string 2025-03-22 21:11:09 +01:00
B. Petersen b2b006c512 improve copy-qr-code success wording; thanks for a translator hint 2025-03-22 21:11:09 +01:00
B. Petersen 7b63d383ee update translations 2025-03-22 14:22:41 +01:00
B. Petersen 2b3a56bb26 remove deprecated asm strings 2025-03-22 14:22:41 +01:00
adb e3408af5be Merge pull request #3694 from deltachat/adb/issue-3692
use Rpc to set contact's name
2025-03-21 13:47:32 +00:00
adbenitez b14b8eea9d use change_contact_name 2025-03-20 18:41:11 +01:00
B. Petersen 5e6c5d7c5e remove unused ASM code; the API calls were only partly removed at #3594 2025-03-20 18:40:29 +01:00
adbenitez c1eff8362f use Rpc.createContact() to set contact's name 2025-03-20 17:38:57 +01:00
B. Petersen fbca401488 update translations 2025-03-19 14:21:17 +01:00
B. Petersen 39fe0dd523 remove unused emoji resources; emoji were refactored at https://github.com/deltachat/deltachat-android/pull/3411 ff 2025-03-19 13:33:05 +01:00
B. Petersen 0491018c24 remove asm input field; importing keys was removed at https://github.com/deltachat/deltachat-android/pull/3594 2025-03-19 13:33:05 +01:00
B. Petersen f91ceb8463 remove quick camera resources; quick camera was removed at https://github.com/deltachat/deltachat-android/pull/3582 2025-03-19 13:33:05 +01:00
B. Petersen 9f1def20cd remove deprecated strings that are no longer in use; mark some strings as deprecated that are in use partly still 2025-03-19 13:33:05 +01:00
adb 64a8c7755d Merge pull request #3689 from deltachat/adb/dont-use-email-address
don't use email address as contact unique identifier
2025-03-19 12:27:56 +00:00
adbenitez 12807763d6 remove TODO comment 2025-03-19 13:03:18 +01:00
adbenitez fbf8637c97 don't use email address as contact unique identifier 2025-03-18 22:56:28 +01:00
adb 8aedbc60a4 Merge pull request #3687 from deltachat/adb/fix-crash-orphan-webxdc-info-msg
avoid crash when clicking orphan info messages from webxdc
2025-03-18 19:17:56 +00:00
adbenitez 38c3b5561b update changelog 2025-03-18 19:44:50 +01:00
adbenitez 3e21f9be4d avoid crash in orphan info messages from webxdc 2025-03-18 19:41:19 +01:00
B. Petersen ad1159c05c remove 'experimental, 1.36 required' hint from add-second-device 2025-03-17 13:51:46 +01:00
adbenitez 314ecf1639 add device message 2025-03-15 23:09:28 +01:00
adbenitez df6ac480c6 Merge remote-tracking branch 'upstream/main' 2025-03-15 22:05:36 +01:00
adb 8974a62a0c Merge pull request #3684 from deltachat/prep-1.56.0
prepare 1.56.0
2025-03-15 19:12:26 +00:00
adbenitez d2c8e2e63a Merge remote-tracking branch 'upstream/main' 2025-03-15 19:08:27 +01:00
adbenitez 11600184be update version number 2025-03-15 18:52:59 +01:00
adb ee78397614 Merge pull request #3594 from deltachat/adb/issue-3591
hide some option in Encryption category
2025-03-15 17:50:49 +00:00
adb b33311b9fb Merge branch 'main' into adb/issue-3591 2025-03-15 17:50:30 +00:00
adb b90f6e296a Merge pull request #3683 from deltachat/update-core-and-stuff-15/3/25
Update core to 1.157.2
2025-03-15 17:49:45 +00:00
adbenitez 5789390451 update changelog 2025-03-15 18:48:34 +01:00
adbenitez 1a84cd05a5 update translations 2025-03-15 18:44:49 +01:00
adbenitez 3578a9bef1 update deltachat-core-rust to 'chore(release): prepare for 1.157.2' of 'v1.157.2' 2025-03-15 18:24:35 +01:00
adbenitez 52280bf744 reduce padding of "or" separator in registration screen 2025-03-15 18:18:07 +01:00
adbenitez 26645da56d Merge remote-tracking branch 'upstream/main' 2025-03-15 17:44:58 +01:00
adbenitez 828ff3d8ca add scroll to registration screen for small screens 2025-03-15 17:25:12 +01:00
adb 7954e94d45 Merge pull request #3680 from deltachat/adb/paste-as-plain-text
force "paste as plain text" in composer
2025-03-15 15:24:42 +00:00
adb c1e47f4a9c Merge pull request #3681 from deltachat/adb/add-symbols-instructions-to-readme
add instructions about decoding symbols in core crash
2025-03-15 15:23:29 +00:00
adbenitez d3193221f6 add instructions about decoding symbols in core crash 2025-03-14 15:54:30 +01:00
adbenitez e7b4accea0 update changelog 2025-03-14 01:04:58 +01:00
adbenitez 67baedc0dc force "paste as plain text" in composer 2025-03-14 00:20:56 +01:00
adbenitez 74c02932c3 Merge remote-tracking branch 'upstream/main' 2025-03-13 18:24:28 +01:00
adbenitez 2968d033f2 update strings.xml 2025-03-13 17:47:43 +01:00
adbenitez 43d48fa510 update changelog 2025-03-13 17:47:36 +01:00
adb 337f353220 Merge branch 'main' into adb/issue-3591 2025-03-13 16:24:18 +00:00
adbenitez 218295c4f3 remove ASM handling 2025-03-13 17:22:53 +01:00
B. Petersen bf86d4f1b7 update CHANGELOG 2025-03-13 16:56:03 +01:00
B. Petersen d383bcc451 add mute option for 8 hours 2025-03-13 16:56:03 +01:00
adb 2e1a40b606 Merge branch 'main' into adb/issue-3591 2025-03-13 15:53:54 +00:00
B. Petersen 10c538ac8e no 'delete on all devices' for device messages
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 :)
2025-03-12 22:25:49 +01:00
adb 35852604ea Merge pull request #3633 from deltachat/adb/allow-to-edit-and-delete-for-all
allow to edit and delete for all
2025-03-12 19:18:43 +00:00
adbenitez 0c8ecaf8df add changelog entry 2025-03-12 20:06:27 +01:00
adb cbe70a93db Merge branch 'main' into adb/allow-to-edit-and-delete-for-all 2025-03-12 18:50:17 +00:00
adb 7768ef3ff9 Merge pull request #3674 from deltachat/adb/issue-3599
add action menu icon option to toggle message bookmark
2025-03-12 18:49:57 +00:00
adbenitez d337230a4b Merge branch 'adb/issue-3599' of https://github.com/deltachat/deltachat-android into adb/issue-3599 2025-03-12 19:31:13 +01:00
adbenitez de76377f3b change bookmark icons 2025-03-12 19:30:45 +01:00
adb f223b22ff8 Merge branch 'main' into adb/issue-3599 2025-03-12 17:56:08 +00:00
adb 9850e6fff7 Merge pull request #3673 from deltachat/adb/avoid-npe-in-processComposeControls
avoid NPE in processComposeControls
2025-03-12 16:56:22 +00:00
adbenitez 6ab94814ca update changelog 2025-03-12 17:32:25 +01:00
adb e0db504b18 Merge branch 'main' into adb/avoid-npe-in-processComposeControls 2025-03-12 16:25:22 +00:00
adb fe44eec6c8 Merge branch 'main' into adb/issue-3599 2025-03-12 16:23:55 +00:00
B. Petersen 7bc595a889 check for CHANGELOG in PRs changing .java files 2025-03-12 17:22:54 +01:00
adbenitez 5133461eb7 set title 2025-03-12 17:12:47 +01:00
adbenitez b4b12862fd add action menu icon option to toggle message bookmark 2025-03-12 17:06:18 +01:00
adbenitez 1340166a91 don't allow to delete info-messages for all 2025-03-12 16:22:45 +01:00
adbenitez 1663502d35 avoid NPE in processComposeControls 2025-03-12 16:16:34 +01:00
adbenitez 9a67f5b32a remove e2ee_enabled and import/export keys from advanced settings 2025-03-12 16:13:04 +01:00
adbenitez 773913409f hide the Encryption category completed for chatmail accounts 2025-03-12 14:47:40 +00:00
link2xt e6988e3f61 Format flake.nix 2025-03-12 02:43:37 +00:00
link2xt 0047259457 Update NDK in flake.nix from 27.0.11902837 to 27.2.12479018 2025-03-12 02:43:37 +00:00
adbenitez 3e9c977b3f Merge remote-tracking branch 'upstream/main' 2025-03-11 22:16:52 +01:00
adb 3a49e30d93 Merge pull request #3671 from deltachat/adb/issue-3670
check if activity is finishing before creating "one moment" dialog
2025-03-11 21:12:02 +00:00
adbenitez 11addb6522 check if activity is finishing before creating "one moment" dialog 2025-03-11 20:40:30 +01:00
adbenitez 6353bb94f4 improve "force encryption" option and warn when disabling 2025-03-11 18:23:12 +01:00
adb 5df2ba4325 Merge pull request #3667 from deltachat/adb/issue-3662
avoid ANR in ConversationActivity.processComposeControls
2025-03-10 23:20:37 +00:00
adbenitez 2f79310db6 update strings 2025-03-11 00:12:29 +01:00
adbenitez 129278443d Merge remote-tracking branch 'upstream/main' 2025-03-10 23:45:08 +01:00
adbenitez 0e27692c32 rename changelog 2025-03-10 23:39:35 +01:00
adbenitez 92be6947db update changelog 2025-03-10 23:39:03 +01:00
adb 884ba32ce9 Merge pull request #3669 from deltachat/prep-1.54.4
prepare 1.54.4
2025-03-10 22:22:14 +00:00
adbenitez fe2ac243c7 update changelog and increase version number 2025-03-10 22:20:26 +00:00
adb 4b978c0124 Merge pull request #3656 from deltachat/adb/use-chat-deleted-event
remove notifications from chat that was deleted from other device
2025-03-10 22:20:03 +00:00
adb 8bf799ec2a Merge pull request #3668 from deltachat/update-core-and-stuff-10/3/25
Update core to 1.156.3
2025-03-10 22:17:33 +00:00
adbenitez f92225528c update translations 2025-03-10 22:45:02 +01:00
adbenitez 796b723be7 update core submodule URL 2025-03-10 22:39:13 +01:00
adbenitez 544ab41aa4 update deltachat-core-rust to 'chore(release): prepare for 1.156.3' of 'v1.156.3' 2025-03-10 22:37:13 +01:00
adbenitez cca9dfb04a avoid ANR in ConversationActivity.processComposeControls 2025-03-10 22:17:47 +01:00
adb faa94acbcb Merge pull request #3666 from deltachat/adb/issue-3660
avoid ANR in ProfileSettingsFragment.onActivityResult
2025-03-10 19:46:00 +00:00
adbenitez e7517c23ad avoid ANR in ProfileSettingsFragment.onActivityResult 2025-03-10 18:20:28 +01:00
adb 370afbf2ce Merge pull request #3665 from deltachat/adb/issue-3664
call rpc.start() before it is used
2025-03-10 17:07:00 +00:00
adbenitez bcee64317d call rpc.start() before it is used 2025-03-10 17:30:59 +01:00
adbenitez 6fe4d57b48 remove IzzyOnDroid 2025-03-09 00:55:45 +01:00
B. Petersen 906db9155a bring back 'add attachment later', which was removed at #3601 2025-03-08 20:41:11 +01:00
l 9b7b35acb1 Merge pull request #3655 from deltachat/weblate
Translations update from Hosted Weblate
2025-03-07 22:56:43 +00:00
adbenitez 5d25ed7715 remove notifications from chat that was deleted from other device 2025-03-07 23:22:34 +01:00
Andrea Enzo Lattmann 5691ab9e84 Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2025-03-07 23:13:19 +01:00
adb 64aa0fb49c Merge pull request #3652 from deltachat/adb/issue-3651
avoid IllegalArgumentException in BaseConversationListFragment.handleAddToHomeScreen
2025-03-07 19:01:43 +00:00
l d3fe672ec0 Merge https://hosted.weblate.org/git/deltachat/android-metadata/ 2025-03-07 02:53:08 +00:00
link2xt 4e199c0080 Merge https://hosted.weblate.org/git/deltachat/android-metadata/ 2025-03-07 02:50:58 +00:00
adbenitez 8fd8927293 avoid IllegalArgumentException in BaseConversationListFragment.handleAddToHomeScreen 2025-03-06 20:12:55 +00:00
Hosted Weblate 320f0ba27d Merge remote-tracking branch 'origin/main' 2025-03-06 19:23:44 +01:00
l c7d903f64a Merge pull request #3649 from deltachat/link2xt/merge-weblate
Manually merge weblate
2025-03-06 18:23:39 +00:00
link2xt f394b22e45 Merge remote-tracking branch 'weblate/main'
Merging from https://hosted.weblate.org/git/deltachat/android-metadata/
into main.

Weblate stopped making PRs because there were conflicts.
2025-03-06 18:15:44 +00:00
adbenitez e7ced91670 Merge remote-tracking branch 'upstream/main' 2025-03-06 01:38:42 +01:00
adbenitez 35836ad18f update translations 2025-03-05 21:28:12 +01:00
Hosted Weblate 2e99f6ee93 Merge remote-tracking branch 'origin/main' 2025-03-05 20:58:49 +01:00
B. Petersen 5c551cb2a8 go for 'Profile Label' 2025-03-05 20:58:42 +01:00
B. Petersen 6490a641da reword 'Private Tag' to 'Profile Description' 2025-03-05 20:58:42 +01:00
adbenitez 06164d240d add back "reply" option to menu 2025-03-05 20:19:11 +01:00
Максим Горпиніч b729e93b8a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/uk/
2025-03-04 22:37:41 +01:00
Hosted Weblate d7345f75e2 Merge remote-tracking branch 'origin/main' 2025-03-03 21:10:05 +00:00
adbenitez 695e1e06dd update f-droid description 2025-03-03 22:09:58 +01:00
adbenitez ccedf31b96 update core 2025-03-03 17:16:15 +01:00
adbenitez 31f89cec02 Merge remote-tracking branch 'upstream/main' 2025-03-03 15:49:30 +01:00
Hosted Weblate 42561266ba Merge remote-tracking branch 'origin/main' 2025-03-03 15:31:12 +01:00
adb 17a182625d Merge pull request #3644 from deltachat/prep-1.54.3
prepare 1.54.3
2025-03-03 15:31:06 +01:00
adbenitez 625d0ed66c update changelog and version number 2025-03-03 13:58:33 +01:00
Hosted Weblate f7f1f29531 Merge remote-tracking branch 'origin/main' 2025-03-03 13:57:24 +01:00
adb 134fbc7188 Merge pull request #3643 from deltachat/update-core-and-stuff-3/3/25
Update core to 1.156.2
2025-03-03 13:57:14 +01:00
adbenitez 5d26387aa3 update translations 2025-03-03 13:36:33 +01:00
adbenitez 4a3070bb54 update deltachat-core-rust to 'chore(release): prepare for 1.156.2' of 'v1.156.2' 2025-03-03 13:35:14 +01:00
Hosted Weblate 8377f23c58 Merge remote-tracking branch 'origin/main' 2025-03-02 23:03:31 +01:00
B. Petersen ec4c96dd92 clarify chat deletion impact 2025-03-02 23:03:24 +01:00
adbenitez f0fb8e62f8 show trash/delete icon when selecting a message 2025-03-02 02:09:32 +01:00
adbenitez 823e6b6e1f update build.gradle 2025-03-02 01:58:59 +01:00
adbenitez 49a59fbebe allow to access map 2025-03-02 01:58:13 +01:00
adbenitez 3424d60ea4 Merge remote-tracking branch 'upstream/main' 2025-03-02 01:49:54 +01:00
adbenitez 1ead71c87a update core 2025-03-02 01:49:27 +01:00
Hosted Weblate 7a44182c3f Merge remote-tracking branch 'origin/main' 2025-02-28 20:25:07 +01:00
adb 75c111cb0b Merge pull request #3641 from deltachat/adb/tweak-release-instructions
update amazon instructions
2025-02-28 20:25:04 +01:00
adbenitez 1c9b51f5dc update amazon instructions 2025-02-28 20:01:45 +01:00
Hosted Weblate 5e88059283 Merge remote-tracking branch 'origin/main' 2025-02-28 16:43:31 +01:00
B. Petersen 76307706f1 update translations 2025-02-28 16:43:22 +01:00
adbenitez 4db770b1f8 Merge remote-tracking branch 'upstream/main' 2025-02-28 15:38:30 +01:00
Hosted Weblate 96e635f0bd Merge remote-tracking branch 'origin/main' 2025-02-28 14:37:01 +00:00
adb 7dd3176a06 Merge pull request #3637 from deltachat/prep-1.54.2
prepare 1.54.2
2025-02-28 15:36:55 +01:00
adbenitez 16037e7693 update version number and changelog 2025-02-28 14:35:59 +01:00
adbenitez 6f5756c331 Merge remote-tracking branch 'upstream/main' 2025-02-28 14:12:59 +01:00
Hosted Weblate 8aa7dfabe6 Merge remote-tracking branch 'origin/main' 2025-02-28 14:00:55 +01:00
adb 13c45f37e7 Merge pull request #3636 from deltachat/update-core-28/2/25
update core to  1.156.1
2025-02-28 14:00:49 +01:00
adbenitez c45b5fe9e4 update deltachat-core-rust to 'chore(release): prepare for 1.156.1' of 'v1.156.1' 2025-02-28 13:54:03 +01:00
adbenitez 0a9d042747 fix colors 2025-02-28 02:32:10 +01:00
adbenitez 6cbbb9608e Merge remote-tracking branch 'upstream/adb/allow-to-edit-and-delete-for-all' 2025-02-28 00:10:20 +01:00
adbenitez f8766820db Merge remote-tracking branch 'upstream/main' 2025-02-27 23:46:10 +01:00
adbenitez a2847ea45e allow to edit messages 2025-02-27 23:10:16 +01:00
adbenitez 841e5ee30a show "delete for everyone" in MediaPreviewActivity 2025-02-27 22:55:44 +01:00
adbenitez 624f797888 allow to "delete for everyone" outgoing messages 2025-02-27 22:30:31 +01:00
adbenitez a640c81c73 add bindings for new "delete for everyone" API 2025-02-27 22:29:58 +01:00
Hosted Weblate cd344daf5a Merge remote-tracking branch 'origin/main' 2025-02-27 22:29:28 +01:00
adb 247ddfcf1a Merge pull request #3635 from deltachat/adb/update-some-strings-usage
avoid using some deprecated strings
2025-02-27 22:29:25 +01:00
adbenitez d09ad5748d deprecate cannot_delete_contacts_in_use 2025-02-27 22:28:48 +01:00
Hosted Weblate 4658adc2cd Merge remote-tracking branch 'origin/main' 2025-02-27 22:24:57 +01:00
B. Petersen 30ddf2b03e clarify deletion impact 2025-02-27 22:24:54 +01:00
adbenitez edb2c963c6 avoid using some deprecated strings 2025-02-27 22:24:23 +01:00
adbenitez cf2f6bd2ec Merge remote-tracking branch 'upstream/main' 2025-02-27 20:51:22 +01:00
Hosted Weblate 62ad0e942f Merge remote-tracking branch 'origin/main' 2025-02-27 19:31:25 +00:00
adb 8cc8ee404d Merge pull request #3632 from deltachat/prep-1.54.1
prepare 1.54.1
2025-02-27 20:31:20 +01:00
adbenitez 180b278a95 bump version 2025-02-27 19:29:26 +01:00
adbenitez e91671b958 update changelog 2025-02-27 19:28:32 +01:00
Hosted Weblate 7e0fc59687 Merge remote-tracking branch 'origin/main' 2025-02-27 17:54:48 +00:00
adb 255a96d393 Merge pull request #3631 from deltachat/adb/issue-3627
don't allow editing for now
2025-02-27 18:54:43 +01:00
adbenitez dfed8aec00 Merge remote-tracking branch 'upstream/main' 2025-02-27 18:53:58 +01:00
adbenitez a498d58c2a don't allow editing for now 2025-02-27 18:48:09 +01:00
Hosted Weblate 4ec02a59de Merge remote-tracking branch 'origin/main' 2025-02-27 17:38:52 +00:00
B. Petersen 276c0785fa update local help 2025-02-27 18:38:45 +01:00
B. Petersen 6a4efb3358 update translations 2025-02-27 18:38:45 +01:00
Hosted Weblate bcad4a7302 Merge remote-tracking branch 'origin/main' 2025-02-27 18:30:11 +01:00
B. Petersen 120007d87a add a warning when scanning a backup QR code from a too new delta chat version 2025-02-27 18:30:05 +01:00
Hosted Weblate 55eab9dd0b Merge remote-tracking branch 'origin/main' 2025-02-27 18:26:49 +01:00
adb ea99f0cd48 Merge pull request #3621 from deltachat/adb/cleanup-ContactSelectionListAdapter
cleanup ContactSelectionListAdapter
2025-02-27 18:26:43 +01:00
Hosted Weblate 6f6cd80516 Merge remote-tracking branch 'origin/main' 2025-02-27 18:25:30 +01:00
adb 2bb63878b1 Merge pull request #3601 from deltachat/adb/allow-to-edit-msg
allow to edit message
2025-02-27 18:25:27 +01:00
adbenitez c5d7ec0946 don't allow to edit html messages 2025-02-27 17:41:53 +01:00
adbenitez da7a3fc50a tweak menu 2025-02-27 17:41:53 +01:00
adbenitez 9c36749619 remove unnecessary icon for reply menu item 2025-02-27 17:41:53 +01:00
adbenitez cb3fd74af9 move delete-messages to the end and make it red 2025-02-27 17:41:53 +01:00
adbenitez 7b11c5dd79 re-organize menu and add pencil icon 2025-02-27 17:41:53 +01:00
adbenitez e3c108c773 use new strings 2025-02-27 17:41:53 +01:00
adbenitez 6621046d6d cancel editing when user swipe-to-reply a message 2025-02-27 17:41:53 +01:00
adbenitez ed23c93526 fix: don't discard draft if not in editing mode 2025-02-27 17:41:53 +01:00
adbenitez 19cd640dc8 tweak code style 2025-02-27 17:41:53 +01:00
adbenitez f1fe3e0807 allow to edit any normal message with text, not only "text viewtype" 2025-02-27 17:41:53 +01:00
adbenitez fce62453d1 show "Edit Message" instead of "Me" in edition mode 2025-02-27 17:41:53 +01:00
adbenitez 441f943190 add "edited" label 2025-02-27 17:41:53 +01:00
adbenitez fb759e12f0 fix bindings 2025-02-27 17:41:53 +01:00
adbenitez d1737cb69f allow to edit outgoing text messages 2025-02-27 17:41:51 +01:00
adbenitez c94f9371fe add C bindings 2025-02-27 17:32:56 +01:00
Hosted Weblate c88a1b53b0 Merge remote-tracking branch 'origin/main' 2025-02-27 16:25:35 +00:00
B. Petersen 2e2aeed127 update deltachat-core-rust to 'chore(release): prepare for 1.156.0' of 'v1.156.0' 2025-02-27 17:25:10 +01:00
adbenitez 6e764a6f2f Merge remote-tracking branch 'upstream/main' 2025-02-27 00:10:57 +01:00
Hosted Weblate 669d8f4cba Merge remote-tracking branch 'origin/main' 2025-02-27 00:04:13 +01:00
adb d8cdc21880 Merge pull request #3624 from deltachat/adb/cleanup-AdvancedPreferenceFragment
cleanup AdvancedPreferenceFragment
2025-02-27 00:04:07 +01:00
Hosted Weblate c083195acf Merge remote-tracking branch 'origin/main' 2025-02-27 00:03:02 +01:00
adb 139dafab7a Merge pull request #3625 from deltachat/adb/cleanup-ChatsPreferenceFragment
cleanup ChatsPreferenceFragment
2025-02-27 00:02:56 +01:00
adbenitez ef8ac7ae04 Merge remote-tracking branch 'upstream/main' 2025-02-27 00:02:20 +01:00
Hosted Weblate 7c6d47bfae Merge remote-tracking branch 'origin/main' 2025-02-26 23:14:09 +01:00
adb 185fd5d730 Merge pull request #3623 from deltachat/adb/code-cleanup3
fix some more linter warnings
2025-02-26 23:14:04 +01:00
Hosted Weblate ef4f79b4a3 Merge remote-tracking branch 'origin/main' 2025-02-26 23:13:22 +01:00
adb c09be6c35b Merge pull request #3626 from deltachat/adb/cleanup-NotificationsPreferenceFragment
cleanup NotificationsPreferenceFragment
2025-02-26 23:13:13 +01:00
adbenitez 2a385c6768 cleanup NotificationsPreferenceFragment 2025-02-26 22:27:25 +01:00
adbenitez 93a114cff4 cleanup ChatsPreferenceFragment 2025-02-26 22:26:02 +01:00
adbenitez 49dab181aa cleanup AdvancedPreferenceFragment 2025-02-26 22:24:14 +01:00
adbenitez 3ad9ffd94f fix some linter warnings 2025-02-26 22:21:27 +01:00
adbenitez 53f1c73e52 cleanup ContactSelectionListAdapter 2025-02-26 20:17:10 +01:00
adbenitez 641c3da629 Merge remote-tracking branch 'upstream/main' 2025-02-26 19:57:23 +01:00
Hosted Weblate 491bbfade0 Merge remote-tracking branch 'origin/main' 2025-02-26 18:55:00 +00:00
adb f8dc6bb3db Merge pull request #3618 from deltachat/adb/code-cleanup-26/2/25
fix some linter warnings
2025-02-26 19:54:55 +01:00
adbenitez b0d842b3c4 Merge remote-tracking branch 'upstream/main' 2025-02-26 19:54:43 +01:00
adbenitez 9cc4422f9e Merge remote-tracking branch 'upstream/main' 2025-02-26 19:54:22 +01:00
Hosted Weblate dce7d56fb2 Merge remote-tracking branch 'origin/main' 2025-02-26 19:37:48 +01:00
adb 9b9a546e69 Merge pull request #3619 from deltachat/adb/remove-RepeatableImageKey
remove unused class RepeatableImageKey
2025-02-26 19:37:43 +01:00
Hosted Weblate 1787d8665c Merge remote-tracking branch 'origin/main' 2025-02-26 18:37:27 +00:00
adb f29f8bf5f9 Merge pull request #3617 from deltachat/adb/cleanup-ImageDivet
cleanup ImageDivet
2025-02-26 19:37:21 +01:00
adbenitez 3b7fd24fcb delete ImageDivet 2025-02-26 17:12:57 +01:00
adbenitez acdbba6351 cleanup ImageDivet 2025-02-26 17:12:57 +01:00
Hosted Weblate 2134f97956 Merge remote-tracking branch 'origin/main' 2025-02-26 16:57:08 +01:00
B. Petersen f45fd60ccd update translations 2025-02-26 16:57:01 +01:00
adbenitez dabe68fbf8 remove unused class RepeatableImageKey 2025-02-26 16:54:19 +01:00
adbenitez 7193b4d64e fix some linter warnings 2025-02-26 16:53:46 +01:00
Hosted Weblate bf138aa2e7 Merge remote-tracking branch 'origin/main' 2025-02-26 16:49:08 +01:00
B. Petersen b5000e2fb9 add second device: warn about 3rd parties
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 ...'" :)
2025-02-26 16:49:04 +01:00
Hosted Weblate cbd4e2b520 Merge remote-tracking branch 'origin/main' 2025-02-26 12:00:18 +00:00
B. Petersen bf4087792d add strings 'delete for me/everyone' 2025-02-26 13:00:12 +01:00
B. Petersen 25164af440 tweak wording 2025-02-26 13:00:12 +01:00
B. Petersen 9579bd5bc8 reword message deletion string 2025-02-26 13:00:12 +01:00
Hosted Weblate 713623c11d Merge remote-tracking branch 'origin/main' 2025-02-25 23:48:31 +01:00
adb f2ee08a7f1 Merge pull request #3616 from deltachat/adb/cleanup-AvatarImageView
cleanup AvatarImageView
2025-02-25 23:48:25 +01:00
Hosted Weblate 66339d77bf Merge remote-tracking branch 'origin/main' 2025-02-25 22:48:14 +00:00
adb 1da80e9264 Merge pull request #3615 from deltachat/adb/fix-warnings-AccountSelectionListFragment
fix linter warnings in AccountSelectionListFragment
2025-02-25 23:48:07 +01:00
adbenitez f501c41d16 cleanup AvatarImageView 2025-02-25 23:18:17 +01:00
adbenitez ec7e3fc91a remove unused import 2025-02-25 22:22:04 +01:00
adbenitez 5e91902a26 fix linter warnings in AccountSelectionListFragment 2025-02-25 22:19:20 +01:00
Hosted Weblate 8b5b2d2f95 Merge remote-tracking branch 'origin/main' 2025-02-25 21:01:43 +01:00
adb 523b62cfeb Merge pull request #3614 from deltachat/adb/update-gson
update gson lib that was pinned for android4 compat
2025-02-25 21:01:37 +01:00
Hosted Weblate 19c158d1c4 Merge remote-tracking branch 'origin/main' 2025-02-25 20:54:49 +01:00
adb af1cbd09ce Merge pull request #3613 from deltachat/adb/optimize-imports
optimize imports
2025-02-25 20:54:45 +01:00
adbenitez 9b3dc7d434 update gson lib that was pinned for android4 compat 2025-02-25 18:57:48 +01:00
adbenitez 4547f771f5 optimize imports 2025-02-25 18:43:23 +01:00
Hosted Weblate be6f30da24 Merge remote-tracking branch 'origin/main' 2025-02-25 17:22:15 +00:00
adb bb0ae0772e Merge pull request #3612 from deltachat/adb/non-final-resource-ids
fix warning about non-final resource IDs
2025-02-25 18:22:09 +01:00
Hosted Weblate c38c5a5d36 Merge remote-tracking branch 'origin/main' 2025-02-25 16:55:01 +00:00
adb bd3ab20981 Merge pull request #3611 from deltachat/adb/cleanup-AccountSelectionListAdapter
cleanup AccountSelectionListAdapter
2025-02-25 17:54:53 +01:00
adbenitez 3dc216ca7f fix warning about non-final resource IDs 2025-02-25 17:46:09 +01:00
Hosted Weblate 9d9630041e Merge remote-tracking branch 'origin/main' 2025-02-25 17:40:14 +01:00
adb 5095892847 Merge pull request #3610 from deltachat/adb/remove-android4-deps
remove some android4 depenedencies
2025-02-25 17:40:05 +01:00
adbenitez 25d0f4d017 cleanup AccountSelectionListAdapter 2025-02-25 17:10:08 +01:00
adbenitez 3306c3e8d1 remove some android4 depenedencies 2025-02-25 16:53:49 +01:00
adbenitez fa0c59d01c add force encryption toggle 2025-02-24 23:07:50 +01:00
adbenitez 94291bd0ab Merge remote-tracking branch 'upstream/main' 2025-02-24 17:24:36 +01:00
Hosted Weblate ff0e004e20 Merge remote-tracking branch 'origin/main' 2025-02-22 20:07:55 +01:00
B. Petersen 415785b59d update translations 2025-02-22 20:07:52 +01:00
Hosted Weblate a8f17d618b Merge remote-tracking branch 'origin/main' 2025-02-22 20:00:56 +01:00
B. Petersen c0e45abd3d remove 'server' part from asking about message deletion 2025-02-22 20:00:52 +01:00
Hosted Weblate ca8767e0b0 Merge remote-tracking branch 'origin/main' 2025-02-20 23:47:10 +01:00
adb de96a4dc6e Merge pull request #3603 from deltachat/adb/update-forward-icon
update forward icon
2025-02-20 23:47:06 +01:00
Hosted Weblate 04d8437b89 Merge remote-tracking branch 'origin/main' 2025-02-20 23:28:49 +01:00
B. Petersen 38ed95003f removed unused setFile()
the corresponding cffi function will be removed soon,
see https://github.com/deltachat/deltachat-core-rust/pull/6558
2025-02-20 23:28:43 +01:00
adbenitez ca174e82a2 update forward icon 2025-02-20 22:05:32 +01:00
XblateX f08d5a64b0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/uk/
2025-02-20 17:59:36 +01:00
Hosted Weblate d467285036 Merge remote-tracking branch 'origin/main' 2025-02-20 14:17:01 +00:00
B. Petersen 7b833b43d7 remove deprecated strings 2025-02-20 12:05:42 +01:00
B. Petersen f8cee59e28 use new 'edit message' strings 2025-02-20 12:05:42 +01:00
B. Petersen 2f85654567 update translations 2025-02-20 12:05:42 +01:00
Hosted Weblate 205a7fd10e Merge remote-tracking branch 'origin/main' 2025-02-19 16:50:19 +00:00
adb b0ab464ef8 Merge pull request #3600 from deltachat/adb/use-rpc-for-add-account
use JSON-RPC for addAccount
2025-02-19 17:50:11 +01:00
adbenitez c1a49332d0 use JSON-RPC for addAccount 2025-02-19 16:33:31 +01:00
adbenitez a69ff20ac4 point to Lemmy community for changelogs 2025-02-17 15:49:37 +01:00
Hosted Weblate ddd4cacd1d Merge remote-tracking branch 'origin/main' 2025-02-17 05:30:42 +01:00
adbenitez 836e11ca27 update build.gradle 2025-02-17 00:04:35 +01:00
adbenitez 4fc53a4632 Merge remote-tracking branch 'upstream/adb/issue-3591' 2025-02-16 22:42:13 +01:00
adbenitez 1391a902b0 update core 2025-02-16 22:36:45 +01:00
adbenitez 876bdcacf1 remove apklis store 2025-02-16 22:26:22 +01:00
adbenitez 37e6bbc53c Merge remote-tracking branch 'upstream/main' 2025-02-16 22:22:59 +01:00
adb ab05222c32 Merge pull request #3596 from deltachat/adb/cleanup-ApplicationPreferencesActivity
cleanup ApplicationPreferencesActivity
2025-02-16 22:19:04 +01:00
adbenitez e87a3de296 add "Donate" to settings 2025-02-16 22:18:36 +01:00
adbenitez 9d96d7311c revert removal of comments 2025-02-16 21:47:25 +01:00
adbenitez 52b7f10c1b cleanup ApplicationPreferencesActivity 2025-02-16 21:25:19 +01:00
adbenitez 3ae4bf238e Merge remote-tracking branch 'upstream/main' 2025-02-16 21:03:25 +01:00
adbenitez a630fad9b0 disable broadcast lists for chatmail 2025-02-14 01:50:23 +01:00
adbenitez 6543ad0893 update metadata 2025-02-13 23:54:11 +01:00
Hosted Weblate 4ca4d81345 Merge remote-tracking branch 'origin/main' 2025-02-12 20:32:50 +01:00
adb 3b8a3e10ad Merge pull request #3595 from deltachat/adb/allow-to-add-chat-to-home-screen
allow to add any chat to the home screen
2025-02-12 20:32:44 +01:00
adbenitez 814f892e98 allow to add any chat to the home screen 2025-02-12 18:05:22 +01:00
adbenitez 8a2149b67d hide the Encryption category completed for chatmail accounts 2025-02-11 21:54:50 +01:00
adbenitez ebfd9ca122 Merge remote-tracking branch 'upstream/main' 2025-02-11 15:33:30 +01:00
Hosted Weblate ba34971d2b Merge remote-tracking branch 'origin/main' 2025-02-11 13:08:53 +00:00
adb 91f8e88db3 Merge pull request #3592 from deltachat/prep-1.54.0
Prep 1.54.0
2025-02-11 14:08:47 +01:00
adb a93b12909d Update CHANGELOG.md
Co-authored-by: bjoern <r10s@b44t.com>
2025-02-11 14:07:59 +01:00
adbenitez 8403abc5b9 update version number 2025-02-11 11:49:17 +01:00
adbenitez c49599f9c8 update changelog 2025-02-11 11:48:55 +01:00
Hosted Weblate deed7a569c Merge remote-tracking branch 'origin/main' 2025-02-11 10:31:37 +00:00
adb ec590613d0 Merge pull request #3590 from deltachat/update-core-and-stuff-10/2/25
Update core and stuff 10/2/25
2025-02-11 11:31:31 +01:00
Hosted Weblate 24d1ca9015 Merge remote-tracking branch 'origin/main' 2025-02-11 11:31:01 +01:00
adb 0c914b3771 Merge pull request #3589 from deltachat/adb/fix-2957
direcly use awebp lib instead of broad glide plugin
2025-02-11 11:30:56 +01:00
adbenitez 24e363e130 update internal help and translations 2025-02-11 00:27:10 +01:00
adbenitez 85b9444f86 update deltachat-core-rust to 'chore(release): prepare for 1.155.4' of 'v1.155.4' 2025-02-10 23:43:01 +01:00
adbenitez 19f6bd3b5c use WebPDecoderResource instead of SimpleResource 2025-02-10 17:23:04 +01:00
adbenitez 1999bab9a0 direcly use awebp lib instead of broad glide plugin 2025-02-10 17:13:06 +01:00
Hosted Weblate e6325578ca Merge remote-tracking branch 'origin/main' 2025-02-08 20:25:30 +01:00
B. Petersen 44eb9b32fd fix: hide 'clone chat' if there is no chat
before, 'clone chat' was hidden for contacts having a one-to-one-chats,
but not for contacts _without_ a one-to-one-chat
2025-02-08 20:25:25 +01:00
adbenitez c5cf11d36a update core 2025-02-07 19:08:49 +01:00
adbenitez fc36c6793e Merge remote-tracking branch 'upstream/main' 2025-02-07 19:08:10 +01:00
Hosted Weblate 669a1a769d Merge remote-tracking branch 'origin/main' 2025-02-07 18:43:47 +01:00
adb 257e200c9c Merge pull request #3073 from deltachat/r10s/improve-saved-messages
improve saved messages
2025-02-07 18:43:41 +01:00
adb 2c2bd2bf48 Merge branch 'main' into r10s/improve-saved-messages 2025-02-07 18:15:37 +01:00
adbenitez 95fbe25b0a rename variables to "bookmark" instead "stared" 2025-02-07 18:14:21 +01:00
Hosted Weblate ab7b2f4b1b Merge remote-tracking branch 'origin/main' 2025-02-07 15:51:32 +01:00
link2xt 97552bc751 Add "Past Members" string 2025-02-07 15:51:26 +01:00
adb a81cdb79ad Merge pull request #3586 from deltachat/adb/improve-saved-messages
improve improved saved messages
2025-02-07 15:22:55 +01:00
adbenitez 1b8de09c41 replace star with bookmark icon 2025-02-07 13:58:31 +01:00
adbenitez db427a036e use drawable for the stared footer mark 2025-02-07 13:02:53 +01:00
adbenitez ab2151b974 fix indentation 2025-02-07 12:40:55 +01:00
adbenitez 0fa59fa22d remove save/unsave action 2025-02-07 12:39:55 +01:00
adbenitez ec7807e662 use save API for msgs forwarded to "saved messages" 2025-02-07 12:26:16 +01:00
adbenitez d47196d899 add "jump to original" button to stared messages 2025-02-06 23:43:43 +01:00
adbenitez b692abc235 don't allow to star video-call messages 2025-02-06 20:44:09 +01:00
Hosted Weblate 07b55b739e Merge remote-tracking branch 'origin/main' 2025-02-06 12:46:26 +00:00
Hocuri e3809cf1f8 fix: Opening files in external apps always works now (#3585)
The problem was that we returned `null` from `getType()`.

fix #3517
2025-02-06 13:46:19 +01:00
adbenitez 564c0fe27d don't show staring option in saved messages chat 2025-02-05 22:38:16 +01:00
adbenitez 705e283cf5 Merge remote-tracking branch 'upstream/main' 2025-02-05 21:56:21 +01:00
adbenitez 40b5e10999 remove unused code 2025-02-05 21:54:18 +01:00
B. Petersen d1f77d9de5 add 'save' option to chat's action bar 2025-02-05 16:34:43 +01:00
B. Petersen 0704f7f1e7 render saved messages accordingly 2025-02-05 16:34:43 +01:00
adbenitez 78b3c3883d change offline color 2025-02-05 16:20:29 +01:00
adbenitez e28e6b9b73 don't display dot when connected 2025-02-05 16:20:29 +01:00
adbenitez 4ed51b6b56 show profiles connectivity state 2025-02-05 16:20:29 +01:00
Hosted Weblate 084707eb67 Merge remote-tracking branch 'origin/main' 2025-02-05 15:55:23 +01:00
adb 0eb02b59a3 Merge pull request #3582 from deltachat/adb/remove-deprecated-half-camera-dep
remove deprecated half-camera dependency
2025-02-05 15:55:19 +01:00
Hosted Weblate 00d411dd5a Merge remote-tracking branch 'origin/main' 2025-02-05 12:36:19 +01:00
bjoern 770861d6db update translations (#3584)
* remove deprecated strings, usage was checked with ./scripts/grep-string.sh

* add new 'Chat with...', needed currently only for iOS

* update translations
2025-02-05 12:36:14 +01:00
adb 17986e9d86 Merge branch 'main' into adb/remove-deprecated-half-camera-dep 2025-02-04 18:45:49 +01:00
adbenitez 5ce1f415ce remove deprecated half-camera dependency 2025-02-04 18:40:02 +01:00
adbenitez e1c92712a0 Merge remote-tracking branch 'upstream/main' 2025-02-04 16:18:00 +01:00
Hosted Weblate 1816a50dee Merge remote-tracking branch 'origin/main' 2025-02-03 23:41:19 +01:00
adb 6ec0f1bfce Merge pull request #3580 from deltachat/adb/issue-3566
align avatar to message bubble instead of parent bottom
2025-02-03 23:41:12 +01:00
adbenitez db410d8b44 align avatar to message bubble instead of parent bottom 2025-02-03 23:08:32 +01:00
Hosted Weblate 6c6c04ba53 Merge remote-tracking branch 'origin/main' 2025-02-03 10:58:11 +00:00
B. Petersen cd07f3de96 update translations 2025-02-03 11:58:06 +01:00
Hosted Weblate 145432a57d Merge remote-tracking branch 'origin/main' 2025-02-03 11:52:01 +01:00
B. Petersen 12072a0342 'exiting' may be misleading as others can create new groups with blocked contacts. try to clarify that aspect 2025-02-03 11:51:58 +01:00
B. Petersen c6f3761bb9 simplify unblock wording, it is somehow clear it is the opposite, other apps do not even clarify one way 2025-02-03 11:51:58 +01:00
B. Petersen 673f0e78b1 be more clear about the impact of blocked contacts 2025-02-03 11:51:58 +01:00
Hosted Weblate 20acd38ab4 Merge remote-tracking branch 'origin/main' 2025-02-03 11:45:23 +01:00
B. Petersen 65c8960ec8 update translations 2025-02-03 11:45:19 +01:00
Hosted Weblate bf7095d0ee Merge remote-tracking branch 'origin/main' 2025-02-03 00:49:08 +01:00
adb 089ecc67d1 Merge pull request #3576 from deltachat/r10s/empty-apps-wording
tweak wording in empty "all apps" and "all files" views
2025-02-03 00:49:01 +01:00
B. Petersen 0f84af5b32 adapt empty-hint also for 'files' 2025-02-02 18:52:31 +01:00
B. Petersen 710ed6dd56 in 'All Apps' tap, do not say 'Media will be shared here', but 'Apps will be shown here' 2025-02-02 18:37:49 +01:00
Hosted Weblate a6b168f4eb Merge remote-tracking branch 'origin/main' 2025-02-01 00:24:51 +01:00
adb 335aabd4ff Merge pull request #3570 from deltachat/adb/update-changelog-31/1/25
update changelog header for v1.52.1
2025-02-01 00:24:47 +01:00
adbenitez 98c97a8aed update changelog header for v1.52.1 2025-01-31 22:24:44 +01:00
adbenitez 23d18d2ac5 Merge remote-tracking branch 'upstream/main' 2025-01-31 21:28:47 +01:00
adbenitez a136b8b1e5 update version 2025-01-31 21:28:08 +01:00
adbenitez 7f8b71cf28 tweak attachment selector layout temporarily 2025-01-31 21:27:19 +01:00
adbenitez 9e5f2b18b9 update .github/FUNDING.yml 2025-01-31 19:50:37 +01:00
adbenitez bdfeddecd5 add "get it on google play" 2025-01-31 14:19:32 +01:00
Hosted Weblate 883536a3a5 Merge remote-tracking branch 'origin/main' 2025-01-31 12:38:01 +01:00
B. Petersen 23cbe63cd4 update translations 2025-01-31 12:37:57 +01:00
Hosted Weblate 3013af2a7a Merge remote-tracking branch 'origin/main' 2025-01-31 11:26:16 +00:00
B. Petersen f0f53455a5 do not deprecate string for smoother adaption of other OS 2025-01-31 12:26:09 +01:00
B. Petersen d8b49f57a9 always colorize 'Reset' as destructive-red 2025-01-31 12:26:09 +01:00
B. Petersen 7eaaf3bbb4 refine QR reset wording 2025-01-31 12:26:09 +01:00
adbenitez d4f83cd38b Merge remote-tracking branch 'upstream/main' 2025-01-30 02:03:47 +01:00
adbenitez 9eca5f518e disable location streaming for now 2025-01-30 02:02:42 +01:00
Hosted Weblate 7b52bb6c85 Merge remote-tracking branch 'origin/main' 2025-01-29 13:47:12 +00:00
B. Petersen d17bed02e6 update translations 2025-01-29 14:47:03 +01:00
B. Petersen b4b194a59b add app-picker-strings needed for iOS 2025-01-29 14:47:03 +01:00
Hosted Weblate 1439bc0a86 Merge remote-tracking branch 'origin/main' 2025-01-28 17:24:30 +01:00
adb c6f62a2b81 Merge pull request #3565 from deltachat/prep-1.52.1
Prep 1.52.1
2025-01-28 17:24:22 +01:00
adbenitez e3a9f42a56 update changelog 2025-01-28 17:23:56 +01:00
adb 323bcef1fe Update CHANGELOG.md
Co-authored-by: Hocuri <hocuri@gmx.de>
2025-01-28 17:13:54 +01:00
adbenitez 095b92b498 bump version number 2025-01-28 16:50:46 +01:00
adbenitez 18c2ccd66c update changelog 2025-01-28 16:36:39 +01:00
Hosted Weblate 9a5415eb66 Merge remote-tracking branch 'origin/main' 2025-01-28 15:31:22 +00:00
adb 28fdeac01c Merge pull request #3564 from deltachat/update-core-and-stuff-28/1/25
Update translations and core to 1.155.1
2025-01-28 16:31:11 +01:00
adbenitez a7e4267b9b update translations 2025-01-28 16:28:24 +01:00
adbenitez d6837aa121 update deltachat-core-rust to 'chore(release): prepare for 1.155.1' of 'v1.155.1' 2025-01-28 16:25:23 +01:00
adbenitez 5a2913b36f delete unused file 2025-01-28 02:37:25 +01:00
adbenitez 20180fa89c Merge remote-tracking branch 'upstream/main' 2025-01-27 22:06:04 +01:00
Hosted Weblate 5da3748a6a Merge remote-tracking branch 'origin/main' 2025-01-27 17:40:51 +00:00
Hocuri c6b89055d8 File deduplication, Android part (#3513) 2025-01-27 18:40:44 +01:00
Hosted Weblate 2308feea8c Merge remote-tracking branch 'origin/main' 2025-01-27 18:13:08 +01:00
adb bfda7ab2c3 Merge pull request #3562 from deltachat/adb/remove-android-crop-dep
remove unused com.soundcloud.android:android-crop dependency
2025-01-27 18:13:04 +01:00
adb 953ce32bea Merge branch 'main' into adb/remove-android-crop-dep 2025-01-27 17:40:34 +01:00
adbenitez 961fa5ffe6 remove unused com.soundcloud.android:android-crop dependency 2025-01-27 17:37:14 +01:00
adbenitez b1b2959bcb add .github/FUNDING.yml 2025-01-26 05:23:27 +01:00
Hosted Weblate a3b0ee1ef9 Merge remote-tracking branch 'origin/main' 2025-01-25 13:48:46 +00:00
link2xt 70ef715dc6 build(nix): update build tools from 33.0.1 to 34.0.0 2025-01-25 13:48:41 +00:00
adbenitez ffa58aae34 update bots index 2025-01-24 22:09:54 +01:00
adbenitez 24f5209c03 always create protected groups 2025-01-24 20:34:49 +01:00
adbenitez 7fd96732d6 Merge remote-tracking branch 'upstream/main' 2025-01-24 20:27:40 +01:00
Hosted Weblate 4fa5f1f5c6 Merge remote-tracking branch 'origin/main' 2025-01-23 23:37:05 +01:00
adb 6e0759f719 Merge pull request #3560 from deltachat/prep-1.52.0
prepare 1.52.0
2025-01-23 23:37:01 +01:00
adbenitez 63434e1e2f prepare 1.52.0 2025-01-23 20:03:59 +01:00
Hosted Weblate f4701b92e2 Merge remote-tracking branch 'origin/main' 2025-01-23 19:28:06 +01:00
adb 9c17bc412a Merge pull request #3559 from deltachat/update-core-and-stuff-23/1/25
Update core and stuff 23/1/25
2025-01-23 19:21:15 +01:00
adb d40144d50c Merge branch 'main' into update-core-and-stuff-23/1/25 2025-01-23 19:19:43 +01:00
adbenitez 131c0f5a37 update strings 2025-01-23 19:17:18 +01:00
adbenitez 7086314d8b update deltachat-core-rust to 'chore(release): prepare for 1.155.0' of 'v1.155.0' 2025-01-23 19:11:11 +01:00
Hosted Weblate 6649165b56 Merge remote-tracking branch 'origin/main' 2025-01-23 13:23:08 +01:00
adb d75b2c2bb7 Merge pull request #3558 from deltachat/adb/issue-3557
pass account ID in chat shortcuts and properly switch to account
2025-01-23 13:23:00 +01:00
adbenitez c46d174869 update strings 2025-01-23 05:37:55 +01:00
adbenitez 17e03f2903 update buid.gradle 2025-01-23 04:38:58 +01:00
adbenitez 2c12a34051 improve instant onboarding 2025-01-23 04:33:23 +01:00
adbenitez 2d3dde2101 pass account ID in chat shortcuts and properly switch to account 2025-01-23 03:45:57 +01:00
adbenitez d539f5ecf2 Merge remote-tracking branch 'upstream/main' 2025-01-23 02:45:56 +01:00
adbenitez b17d6be4fc update build.gradle 2025-01-23 00:52:48 +01:00
Hosted Weblate 1c9b5977a8 Merge remote-tracking branch 'origin/main' 2025-01-23 00:51:15 +01:00
B. Petersen 3c737f2360 streamline help menu
- 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
2025-01-23 00:51:06 +01:00
Hosted Weblate 49471999b9 Merge remote-tracking branch 'origin/main' 2025-01-22 13:40:13 +01:00
adb 9ac5e714b8 Merge pull request #3555 from deltachat/adb/update-deps-22/1/25
update some dependencies
2025-01-22 13:40:08 +01:00
adbenitez 94defa3091 update some dependencies 2025-01-22 01:43:21 +01:00
adbenitez 052ada221e update some deps 2025-01-22 01:42:21 +01:00
adbenitez 1d5e4cf2a9 update README 2025-01-22 00:54:00 +01:00
adbenitez c46aef3ea0 Merge remote-tracking branch 'upstream/main' 2025-01-22 00:52:57 +01:00
Hosted Weblate 86a8fbf463 Merge remote-tracking branch 'origin/main' 2025-01-21 20:09:55 +01:00
adb d30e141693 Merge pull request #3554 from deltachat/adb/issue-3542
avoid crash in MediaPreviewActivity.onPageUnselected
2025-01-21 20:09:51 +01:00
adb 305940396e Merge branch 'main' into adb/issue-3542 2025-01-21 19:39:33 +01:00
adbenitez 2ab567a9d3 use Log instead of stack trace 2025-01-21 19:38:43 +01:00
Hosted Weblate 238ec5b299 Merge remote-tracking branch 'origin/main' 2025-01-21 19:01:25 +01:00
adb a9c488ff03 Merge pull request #3365 from deltachat/adb/issue-3361
revert #3177
2025-01-21 19:01:18 +01:00
adbenitez 8817b50c95 avoid crash in MediaPreviewActivity.onPageUnselected 2025-01-21 18:56:59 +01:00
Hosted Weblate 4c810c2b50 Merge remote-tracking branch 'origin/main' 2025-01-21 18:51:22 +01:00
adb 84c3710a35 Merge pull request #3553 from deltachat/adb/issue-3550
avoid ANR in ConversationFragment.manageMessageSeenState()
2025-01-21 18:51:00 +01:00
adbenitez be7be9bba4 avoid ANR in ConversationFragment.manageMessageSeenState() 2025-01-21 18:13:54 +01:00
Hosted Weblate f4d5547da7 Merge remote-tracking branch 'origin/main' 2025-01-21 16:47:35 +00:00
adb b50ae284fb Merge pull request #3551 from deltachat/adb/issue-3549
fix: make animated webp animated again
2025-01-21 17:38:52 +01:00
adbenitez 97716d5c26 fix: make animated webp animated again 2025-01-21 16:57:03 +01:00
Hosted Weblate 52850c25b0 Merge remote-tracking branch 'origin/main' 2025-01-20 15:15:02 +01:00
bjoern e77253c843 update translations (#3548)
* add string 'Unsave'

* pull translations
2025-01-20 15:14:54 +01:00
adbenitez 6aed8d003f deprecate string 2025-01-18 20:53:56 +01:00
adbenitez 0083e60c49 revert #3177 2025-01-18 20:53:56 +01:00
adbenitez 0fc79fd845 Merge remote-tracking branch 'upstream/main' 2025-01-18 20:39:03 +01:00
Hosted Weblate 5117e103bb Merge remote-tracking branch 'origin/main' 2025-01-17 16:40:42 +00:00
B. Petersen a7c3bc7ac5 add missing desktop strings 2025-01-17 17:40:35 +01:00
Hosted Weblate 056f9bd4fb Merge remote-tracking branch 'origin/main' 2025-01-17 09:39:28 +00:00
B. Petersen 83b16e5f4b do not force ppl to create blank issues
see https://github.com/deltachat/deltachat-ios/pull/2525
for screenshots and reasoning
2025-01-17 10:39:10 +01:00
adbenitez ee17c6d75e Merge remote-tracking branch 'upstream/main' 2025-01-16 21:10:25 +01:00
Hosted Weblate 877989b5c1 Merge remote-tracking branch 'origin/main' 2025-01-16 20:42:46 +01:00
adb c0525ac69c Merge pull request #3544 from deltachat/adb/issue-3543
avoid null in attachment filename
2025-01-16 20:42:41 +01:00
adbenitez e9d2a39098 avoid null in attachment filename 2025-01-16 20:03:43 +01:00
Hosted Weblate eef8609a66 Merge remote-tracking branch 'origin/main' 2025-01-16 14:55:13 +01:00
adb 4d6fd16767 Merge pull request #3541 from deltachat/adb/issue-3540
avoid race condition in onPlayerStateChanged inside AudioSlidePlayer.requestDuration
2025-01-16 14:55:07 +01:00
Andrea Enzo Lattmann b43685bcdf Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/it/
2025-01-16 06:58:09 +01:00
Hosted Weblate 794062b9ed Merge remote-tracking branch 'origin/main' 2025-01-15 21:02:08 +01:00
adb b398870823 Merge pull request #3535 from deltachat/adb/issue-3534
fix IntentUtils.showBrowserIntent() and use it everywhere
2025-01-15 21:02:01 +01:00
adbenitez e68c50d614 avoid race condition in onPlayerStateChanged inside AudioSlidePlayer.requestDuration 2025-01-15 20:56:32 +01:00
adbenitez f6a27718a2 rename showBrowserIntent to showInBrowser 2025-01-15 20:33:16 +01:00
Hosted Weblate 876721fae5 Merge remote-tracking branch 'origin/main' 2025-01-15 16:18:50 +00:00
Hocuri f136fa3e3a Update the core submodule so that we can have nightlies again (#3539)
* Remove jsonrpc feature

* Update submodule to latest main
2025-01-15 16:18:43 +00:00
Hosted Weblate 0fdac57c68 Merge remote-tracking branch 'origin/main' 2025-01-15 16:40:55 +01:00
Hocuri 8e55a3dbf3 fix: Use getFilename() instead of the actual filename on disk (#3521)
* 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
2025-01-15 16:40:23 +01:00
Hosted Weblate b3375f4f19 Merge remote-tracking branch 'origin/main' 2025-01-14 11:49:13 +01:00
B. Petersen 923227a0e8 update translations 2025-01-14 11:49:07 +01:00
adbenitez 14ecafe0e2 fix IntentUtils.showBrowserIntent() and use it everywhere 2025-01-11 19:45:37 +01:00
Hosted Weblate b607ca21ff Merge remote-tracking branch 'origin/main' 2025-01-10 18:37:43 +00:00
adb b93f8323ab Merge pull request #3532 from deltachat/prep-1.50.5
prepare 1.50.5 release
2025-01-10 19:37:38 +01:00
adbenitez 77f43cde9a prepare 1.50.5 release 2025-01-10 18:48:53 +01:00
Hosted Weblate d6efa3c7e5 Merge remote-tracking branch 'origin/main' 2025-01-10 18:45:16 +01:00
adb e4d018393d Merge pull request #3531 from deltachat/adb/update-translations-10/01/25
update translations
2025-01-10 18:44:58 +01:00
adbenitez 9a816090de Merge remote-tracking branch 'upstream/main' 2025-01-10 18:44:47 +01:00
adbenitez 4b04aa65be update translations 2025-01-10 18:42:31 +01:00
Hosted Weblate e461e2f7f1 Merge remote-tracking branch 'origin/main' 2025-01-10 17:26:19 +01:00
B. Petersen 489bb55788 detach Android and iOS releases 2025-01-10 17:26:16 +01:00
Hosted Weblate 684f8834fa Merge remote-tracking branch 'origin/main' 2025-01-10 15:06:19 +00:00
adb 9d244611bc Merge pull request #3526 from deltachat/adb/issue-3525
use synchronized block to avoid IllegalMonitorStateException
2025-01-10 16:06:13 +01:00
Hocuri 3533916149 Put the synchronized around the whole while loop 2025-01-10 11:05:44 +01:00
adbenitez 46bc3e7f72 Merge remote-tracking branch 'upstream/main' 2025-01-10 01:36:50 +01:00
adbenitez ed0f0107e3 update to new gplay app id and key 2025-01-10 01:31:42 +01:00
adbenitez a855d7043a fix FetchForegroundService 2025-01-10 00:49:30 +01:00
adbenitez 66fd795763 try to fix CI 2025-01-09 19:06:15 +01:00
Hosted Weblate b440a31820 Merge remote-tracking branch 'origin/main' 2025-01-09 19:03:24 +01:00
B. Petersen 05da43484f remove deprecated strings 2025-01-09 19:03:21 +01:00
adbenitez a58de2278b use synchronized block to avoid IllegalMonitorStateException 2025-01-09 18:36:12 +01:00
adbenitez 6743df23e9 update google-services.json 2025-01-09 18:01:16 +01:00
Hosted Weblate 568a3f383f Merge remote-tracking branch 'origin/main' 2025-01-09 15:08:25 +00:00
bjoern 35ec0d05e2 update translations (#3524)
* add new iOS notification strings

* update translations
2025-01-09 16:08:18 +01:00
Hosted Weblate 6c212a5d3d Merge remote-tracking branch 'origin/main' 2025-01-09 15:26:46 +01:00
bjoern 6ead7207ec update translations (#3522)
* update translations

* add new iOS widget strings

* add hints for terms 'Shortcut' and 'Widget'

* update translations
2025-01-09 15:26:42 +01:00
adbenitez 0d5223036d Merge remote-tracking branch 'upstream/main' 2025-01-07 16:36:45 +01:00
adbenitez 640fc433b8 add gdpr.md 2025-01-07 16:29:03 +01:00
adbenitez 35d814c3f6 update build.gradle 2025-01-06 21:26:22 +01:00
adbenitez f8b9d2b0d9 update core 2025-01-06 20:50:30 +01:00
Hosted Weblate b6e43a6994 Merge remote-tracking branch 'origin/main' 2025-01-06 14:40:59 +00:00
adb 3390b865e0 Merge pull request #3519 from deltachat/prep-1.50.4
Prep 1.50.4
2025-01-06 15:40:55 +01:00
adbenitez 883486da9c tweak changelog 2025-01-06 15:26:49 +01:00
adbenitez d048203f45 update version number 2025-01-06 15:19:17 +01:00
adbenitez f9d70d1196 update changelog 2025-01-06 15:18:54 +01:00
Hosted Weblate d1f85e6dc4 Merge remote-tracking branch 'origin/main' 2025-01-06 14:58:18 +01:00
adb 4413b7b4fb Merge pull request #3518 from deltachat/update-core-and-stuff-6/1/25
Update translations and core to v1.153.0
2025-01-06 14:58:14 +01:00
adbenitez 7a4f263a62 update translations 2025-01-06 14:55:55 +01:00
adbenitez 1a360d5282 update deltachat-core-rust to 'chore(release): prepare for 1.153.0' of 'v1.153.0' 2025-01-06 14:16:09 +01:00
Hosted Weblate 74ef8dc1c6 Merge remote-tracking branch 'origin/main' 2025-01-04 18:13:50 +00:00
Hocuri dc785fc116 fix: Remove long stacktrace that flooded the logcat (#3512)
Everytime I attached an image, I got a super long stacktrace in the
logcat. I found it to be [this problem](https://stackoverflow.com/questions/71746801/getting-failed-to-inflate-colorstatelist-leaving-it-to-the-framework-when-usi)
and applied the fix described there.
2025-01-04 19:13:45 +01:00
adbenitez 009593f7cc remove dead code 2025-01-04 16:06:40 +01:00
Hosted Weblate 1da2d35af4 Merge remote-tracking branch 'origin/main' 2025-01-04 16:02:53 +01:00
adb 884be3a93e Merge pull request #3516 from deltachat/adb/avoid-npe-in-reactions
avoid NullPointerException when using result of Rpc.getMsgReactions
2025-01-04 16:02:49 +01:00
adbenitez 9a25328787 avoid NullPointerException when using result of Rpc.getMsgReactions 2025-01-04 12:50:25 +01:00
adbenitez 2d8ec490b1 Merge remote-tracking branch 'upstream/main' 2025-01-04 12:21:28 +01:00
Hosted Weblate bb3f4a2e06 Merge remote-tracking branch 'origin/main' 2025-01-03 19:58:58 +01:00
B. Petersen 3b19ca99e1 simpler copyright, it is anyways questionable by law, it is just a hint, that there is 'sth', this will do also without year 2025-01-03 19:58:55 +01:00
Hosted Weblate 8e4c5d6b63 Merge remote-tracking branch 'origin/main' 2025-01-03 16:48:55 +01:00
B. Petersen f751a48568 update local help 2025-01-03 16:48:52 +01:00
B. Petersen 4549989a63 update translations 2025-01-03 16:48:52 +01:00
Hosted Weblate 1b46edaddf Merge remote-tracking branch 'origin/main' 2025-01-03 14:04:14 +00:00
B. Petersen 19e2c4e051 add info string that is shown by iOS system when asking for accessing Face ID 2025-01-03 15:03:54 +01:00
தமிழ்நேரம் aa0c72356f Translated using Weblate (Tamil)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/ta/
2024-12-21 09:00:22 +01:00
adbenitez 6f5e90be53 update build.gradle 2024-12-21 03:11:47 +01:00
adbenitez 34fa0620ab update full_description 2024-12-21 03:04:53 +01:00
adbenitez fe37af1a3f allow to jump to POI 2024-12-21 02:54:54 +01:00
adbenitez 3459802d67 update core 2024-12-20 19:52:40 +01:00
adbenitez b8bf847941 fix contact selection list 2024-12-20 19:51:59 +01:00
adbenitez 5b6024584a force sending sticker 2024-12-20 17:47:45 +01:00
Hosted Weblate ee8fd429f4 Merge remote-tracking branch 'origin/main' 2024-12-20 11:41:04 +00:00
adb 4833a44542 Merge pull request #3509 from deltachat/adb/issue-3488
try to avoid FILL500 getting stuck in some devices
2024-12-20 12:40:59 +01:00
adbenitez eb93e2bb7e add comment 2024-12-19 16:39:52 +01:00
adbenitez 291700dfc7 update lastOpenTime in onDestroy() 2024-12-19 16:30:58 +01:00
adbenitez 7a4913b394 tweak code 2024-12-19 15:52:16 +01:00
adbenitez 0dae71f4b7 try to avoid FILL500 getting stuck in some devices 2024-12-19 15:48:57 +01:00
Hosted Weblate bc022f5196 Merge remote-tracking branch 'origin/main' 2024-12-19 13:30:30 +01:00
Hocuri 08e4229533 Make the attachment background the same as the input bar background (#3477)
* 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
2024-12-19 13:30:24 +01:00
adbenitez 101a31628d lowercase Bot string for English and Spanish 2024-12-18 19:34:29 +01:00
adbenitez 2a2ce883b4 Merge remote-tracking branch 'upstream/main' 2024-12-18 19:33:04 +01:00
adbenitez 5a0e26bdb5 show last-seen status in contact list 2024-12-18 19:20:34 +01:00
Hosted Weblate d4dcdcf3bd Merge remote-tracking branch 'origin/main' 2024-12-18 17:31:48 +00:00
B. Petersen 0c9277dfd0 remove email-address unconditionally from title
the email-address was removed for guaranteed-e2ee chats quite a while ago
(https://github.com/deltachat/deltachat-android/pull/2916) reason was, among others,
that these addresses are often chatmail and therefore random.
(despite expecting otherwise, that was fine for most users).

this PR removes the email-adress unconditionally:

- having the email-address sometimes shown and sometimes not is confusing,
  and easily looks like a bug.
  this has become worse with the added vcard-support
  (before, there were rare non-guaranteed chats in chatmail) -
  resulting in more random addresses being shown

- _always_ protect against over-the-shoulder attacks

- better privacy in screenshots sent around without thinking much before
  (cmp. https://github.com/deltachat/deltachat-ios/pull/2329)

- wrt impersonation attacks:
  the pure email address in the subtitle did never protect against impersonation,
  one could always get sth. trustworthy looking there,
  it is better to check the profile with additional information (eg. other chats) if in doubt

- general cleaner, uncluttered layout

- pave the way of the upcoming multi-addresses

drawback is that sometimes one more tap is needed to access the email-address -
however, as it is _always_ one tap away now,
this can also go easily to the finger memory.
2024-12-18 18:31:43 +01:00
Hosted Weblate 74b2369ca9 Merge remote-tracking branch 'origin/main' 2024-12-18 17:19:37 +01:00
adb 37886cf296 Merge pull request #3506 from deltachat/adb/issue-3502
run SendRelayedMessageUtil.sendMultipleMsgs() in background
2024-12-18 17:19:34 +01:00
adbenitez df5ba2eced call SendRelayedMessageUtil.sendMultipleMsgs() in background 2024-12-18 17:17:46 +01:00
adbenitez 3c2ddb96b3 update full_description 2024-12-18 16:04:30 +01:00
Hosted Weblate 9eafdbd817 Merge remote-tracking branch 'origin/main' 2024-12-18 15:41:48 +01:00
Hocuri e2a825dfb2 fix(ANR): Mark messages as seen asynchronously (#3505)
Mark messages as seen in a background thread instead of on the UI
thread in order to fix #3504.
2024-12-18 15:41:44 +01:00
Hosted Weblate 0a21d1d1b4 Merge remote-tracking branch 'origin/main' 2024-12-18 13:19:55 +01:00
Hocuri 8d49c7e595 fix: Fetch synchronously in the background if no foreground service is allowed (#3501)
Fix #3500.
2024-12-18 13:19:47 +01:00
Hosted Weblate b0cb6c73ba Merge remote-tracking branch 'origin/main' 2024-12-17 17:43:26 +01:00
B. Petersen 966d5dac24 do not lowercase string 'Bot'
it is regarded as a bug
and esp. weird in translations.

it was regarded to be a bit 'nerdy' that time to write it lowercase,
but it seems we have to get more serious now.
2024-12-17 17:43:21 +01:00
Максим Горпиніч b6367416e5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/uk/
2024-12-17 17:21:37 +01:00
Hosted Weblate 0b582dd287 Merge remote-tracking branch 'origin/main' 2024-12-17 17:07:06 +01:00
adb 7f684f4d2e Merge pull request #3499 from deltachat/adb/issue-3498
avoid IllegalArgumentException dismissing dialog
2024-12-17 17:07:03 +01:00
Hosted Weblate d5cf919bcb Merge remote-tracking branch 'origin/main' 2024-12-17 16:32:48 +01:00
adb 1510f7f3a8 Merge pull request #3497 from deltachat/adb/issue-3496
avoid NPE in ConversationListActivity.onNewIntent()
2024-12-17 16:32:45 +01:00
adbenitez 6916becf7f avoid IllegalArgumentException dismissing dialog 2024-12-17 16:13:37 +01:00
adbenitez ad5b496f5c avoid NPE in ConversationListActivity.onNewIntent() 2024-12-17 15:00:25 +01:00
Hosted Weblate 490f1efe36 Merge remote-tracking branch 'origin/main' 2024-12-17 14:47:49 +01:00
adb e647401db4 Merge pull request #3491 from deltachat/adb/issue-3490
improve emoji pickers
2024-12-17 14:47:43 +01:00
adbenitez 3113f9c3ab optimize onConfigurationChanged() 2024-12-16 17:19:34 +01:00
adbenitez a1e47865c5 improve emoji pickers 2024-12-16 15:27:13 +01:00
adbenitez 3a5f9b3fed update app name to avoid confusion in f-droid 2024-12-13 22:48:31 +01:00
adbenitez 5ffbc19d03 Merge remote-tracking branch 'upstream/main' 2024-12-13 22:42:20 +01:00
Hosted Weblate c125d4fa24 Merge remote-tracking branch 'origin/main' 2024-12-13 20:12:12 +01:00
adb d9db4b818a Merge pull request #3487 from deltachat/prep-1.50.3
Prepare 1.50.3
2024-12-13 20:12:04 +01:00
adbenitez 693efdbd0f add back device message 2024-12-13 20:10:45 +01:00
adbenitez 399b783437 update changelog 2024-12-13 19:30:34 +01:00
adbenitez 4bc574dfbe change version name 2024-12-13 19:29:47 +01:00
adbenitez 294af0981d disable previous version's device message 2024-12-13 18:28:25 +01:00
adbenitez e8c7014993 update changelog 2024-12-13 18:27:25 +01:00
adbenitez 0edc8303c1 update version number 2024-12-13 14:21:20 +01:00
Hosted Weblate 389098699a Merge remote-tracking branch 'origin/main' 2024-12-13 13:12:47 +00:00
adb 8c89c3e225 Merge pull request #3484 from deltachat/adb/issue-3479
download .xdc files in background
2024-12-13 14:12:42 +01:00
Hosted Weblate df696e5fab Merge remote-tracking branch 'origin/main' 2024-12-13 14:00:16 +01:00
adb a93c8ab055 Merge pull request #3485 from deltachat/adb/issue-3481
add missing webxdc api
2024-12-13 14:00:12 +01:00
adbenitez c5cb79d116 add missing webxdc api 2024-12-13 13:42:39 +01:00
adbenitez b3c50b9571 download .xdc files in background 2024-12-13 13:18:40 +01:00
Hosted Weblate e8801d1b64 Merge remote-tracking branch 'origin/main' 2024-12-13 12:51:00 +01:00
adb 41579de502 Merge pull request #3483 from deltachat/update-core-and-stuff-13/12/24
Update core to 1.152.0
2024-12-13 12:50:54 +01:00
adbenitez e6f735b8bc update scripts/update-core.sh 2024-12-13 12:50:24 +01:00
adbenitez 70b6f2cdfa update strings 2024-12-13 12:36:09 +01:00
adbenitez c1e716d6a3 update deltachat-core-rust to 'chore(release): prepare for 1.152.0' of 'v1.152.0' 2024-12-13 12:36:09 +01:00
Hosted Weblate 8bfc44c8ca Merge remote-tracking branch 'origin/main' 2024-12-13 11:33:57 +00:00
adb dde59b4673 Merge pull request #3482 from deltachat/link2xt/update-rust-1.83
Update Rust to 1.83.0
2024-12-13 12:33:51 +01:00
김인수 36e963e717 Translated using Weblate (Korean)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/ko/
2024-12-13 05:00:33 +01:00
link2xt 9d77920adf build: update Rust to 1.83.0 2024-12-12 13:28:33 +00:00
link2xt 6f50ee0cfb build(nix): remove ndk-bundle 2024-12-12 13:28:33 +00:00
link2xt 4c86d6d49e chore: nix flake update 2024-12-12 12:47:08 +00:00
Eryk Michalak 9e8fcf8ed7 Translated using Weblate (Polish)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pl/
2024-12-11 23:00:32 +00:00
Hosted Weblate 6412d25420 Merge remote-tracking branch 'origin/main' 2024-12-11 12:53:42 +00:00
Hocuri 963327dd64 Remove prepareMsg (and OUT_PREPARING message state) (#3468)
This PR removes prepareMsg, which put messages into the OUT_PREPARING state and was used while videos were recoded. It also removes the now-unused method isIncreation().
- It was buggy because when you forwarded a message while it was InPreparation, or when the app was killed while a message is InPreparation, the message would stay InPreparation forever.
- Android is the only UI using this InPreparation (according to @r10s, I didn't check this myself), so we can simplify some things in core, which will also make it easier to deduplicate blob files.
2024-12-11 13:53:36 +01:00
adbenitez 5cba1ccd98 remove duplicate realtime preference 2024-12-09 11:57:51 +01:00
adbenitez de8e6b6852 remove store from main menu 2024-12-07 17:37:01 +01:00
adbenitez 811089f3b3 Merge remote-tracking branch 'upstream/main' 2024-12-07 17:11:55 +01:00
adbenitez e045a09d36 Merge remote-tracking branch 'upstream/main' 2024-12-07 17:10:18 +01:00
Hosted Weblate a470366f03 Merge remote-tracking branch 'origin/main' 2024-12-07 16:59:38 +01:00
B. Petersen a3a6919b08 center attachment icons
this PR centers the icons in the attachment selector,
the right-aligned ones looks esp. odd when no experiments are enabled.

the default now looks good,
and when all experiments are enabled, things are perfect as well.
but even if only one experiment is enabled, things are better imo
(but we anyway should optimize for default and not for experimental options)
2024-12-07 16:59:33 +01:00
adbenitez cbee839a43 Merge remote-tracking branch 'upstream/main' 2024-12-07 14:29:12 +01:00
Hosted Weblate 1434ce6f57 Merge remote-tracking branch 'origin/main' 2024-12-07 14:19:34 +01:00
adb efdd92b6a1 Merge pull request #3463 from deltachat/adb/webxdc-picker
add webxdc picker
2024-12-07 14:19:27 +01:00
Hosted Weblate 654ba5b460 Merge remote-tracking branch 'origin/main' 2024-12-06 15:33:58 +01:00
adb 75296e189a Merge pull request #3456 from deltachat/adb/improve-notifications
notify webxdc events, replies and reactions to own messages even if chat is muted
2024-12-06 15:33:51 +01:00
Hosted Weblate e3835f70f7 Merge remote-tracking branch 'origin/main' 2024-12-06 09:57:59 +00:00
adb 708a68119e Merge pull request #3476 from deltachat/adb/fix-upload-relese-script
fix scripts/upload-release.sh
2024-12-06 10:57:55 +01:00
adbenitez 1d5ab98892 fix scripts/upload-release.sh 2024-12-06 07:59:49 +01:00
Hosted Weblate bbb803f91c Merge remote-tracking branch 'origin/main' 2024-12-06 07:47:14 +01:00
adb 07753e211d Merge pull request #3475 from deltachat/prep-1.50.2
prepare 1.50.2
2024-12-06 07:47:10 +01:00
adbenitez 8135d96300 update build.gradle 2024-12-06 07:44:00 +01:00
adbenitez d151e825da update changelog 2024-12-06 07:42:34 +01:00
Hosted Weblate 6a4c73c821 Merge remote-tracking branch 'origin/main' 2024-12-06 06:40:34 +00:00
adb d5289cc3df Merge pull request #3474 from deltachat/adb/update-translations-6/12/24
update translations
2024-12-06 07:40:29 +01:00
adbenitez af40a8b57e update translations 2024-12-06 07:39:00 +01:00
Hosted Weblate 853ce3c7a3 Merge remote-tracking branch 'origin/main' 2024-12-06 00:19:50 +00:00
B. Petersen 529139099e fix starting of webxdc
the issue is that unset `EXTRA_HREF` is passed around as an empty string,
however `Bundle.getString(href, "index.html")` returns `index.html` only when `href` is `NULL`,
which is mostly never the case.

this results in webxdc never started with index.html,
and then not started at all
2024-12-06 01:19:44 +01:00
Hosted Weblate d2ab4817b1 Merge remote-tracking branch 'origin/main' 2024-12-05 20:40:44 +00:00
B. Petersen b4aa18abae amend 1.50 changelog 2024-12-05 21:40:28 +01:00
Hosted Weblate 9ff1cafd5e Merge remote-tracking branch 'origin/main' 2024-12-05 17:47:38 +01:00
adb a7cee63d1c Merge pull request #3469 from deltachat/update-core-and-stuff-5.12.25
Update core to 1.151.5
2024-12-05 17:47:34 +01:00
adbenitez eda735925a update local help and translations 2024-12-05 17:46:03 +01:00
adbenitez 46650c8cc3 update deltachat-core-rust to 'chore(release): prepare for 1.151.5' of 'v1.151.5' 2024-12-05 16:34:26 +01:00
adbenitez fbab156d22 tweak apps icon 2024-12-05 15:50:14 +01:00
adbenitez 40a79fbad5 add "After 90 days" option to disappearing messages 2024-12-04 17:46:00 +01:00
Hosted Weblate bf6b678e2b Merge remote-tracking branch 'origin/main' 2024-12-04 15:54:42 +00:00
adb 539cb670f1 Merge pull request #3465 from deltachat/adb/force-base-url-in-webxdc-href
always prefix href with baseURL
2024-12-04 16:54:32 +01:00
adb 2a6aba110b Update src/main/java/org/thoughtcrime/securesms/WebxdcStoreActivity.java
Co-authored-by: Hocuri <hocuri@gmx.de>
2024-12-04 16:40:02 +01:00
adb 0351a1e974 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-12-04 16:06:32 +01:00
adbenitez d48ab128a0 open clicked non-xdc URLs in external browsers instead of internally 2024-12-04 16:01:49 +01:00
adbenitez ef67585529 remove label 2024-12-04 14:59:10 +01:00
adbenitez 953e7c6da0 don't export WebxdcStoreActivity 2024-12-04 14:57:12 +01:00
adbenitez ab5a9c9d60 rename config name and meaning 2024-12-04 13:55:02 +01:00
adb af91cf7413 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-12-04 12:59:18 +01:00
adbenitez 6a618986d0 rename to ui.notify_mentions_if_muted and improve code 2024-12-04 12:59:18 +01:00
adbenitez 9eefcacbc1 add option to disable notifying "mentions" in muted chats 2024-12-04 12:59:18 +01:00
adbenitez e245e29058 notify webxdc events, replies and reactions to own messages even if chat is muted 2024-12-04 12:59:18 +01:00
adbenitez 7d879f8d1f always prefix href with baseURL 2024-12-04 11:24:13 +01:00
adbenitez f7963a56e9 add App Picker URL setting 2024-12-03 19:32:36 +01:00
adbenitez 0a73877c25 add app picker to attachments menu 2024-12-03 18:52:15 +01:00
Hosted Weblate 6c1f787a38 Merge remote-tracking branch 'origin/main' 2024-12-03 14:08:04 +01:00
adb 1b57880be3 Merge pull request #3464 from deltachat/adb/fix-strings
fix strings.xml
2024-12-03 14:07:59 +01:00
adbenitez f54144e7e8 fix strings.xml 2024-12-03 13:41:09 +01:00
Hosted Weblate b059741161 Merge remote-tracking branch 'origin/main' 2024-12-03 13:22:33 +01:00
adb b735759bd0 Merge pull request #3462 from deltachat/prep-1.50.0
prepare 1.50.0
2024-12-03 13:22:29 +01:00
adb a7199ecedf Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-12-03 13:22:10 +01:00
adbenitez 2cb529be32 update ndk-make.sh 2024-12-03 12:05:30 +01:00
adbenitez 235038027b Merge remote-tracking branch 'upstream/main' 2024-12-03 11:54:39 +01:00
adbenitez e8eb036594 prepare 1.50.0 2024-12-03 11:36:26 +01:00
Hosted Weblate fdd5cc5d4b Merge remote-tracking branch 'origin/main' 2024-12-03 11:02:52 +01:00
adb d531eb8b47 Merge pull request #3461 from deltachat/update-core-and-stuff-3.12.24
update core to 1.151.3
2024-12-03 11:02:46 +01:00
adbenitez a88a619099 update deltachat-core-rust to 'chore(release): prepare for 1.151.3' of 'v1.151.3' 2024-12-03 10:56:47 +01:00
Hosted Weblate 77465b5802 Merge remote-tracking branch 'origin/main' 2024-12-02 18:40:35 +01:00
adb 00bc429f20 Merge pull request #3460 from deltachat/adb/dont-notify-open-webxdc
do not notify if the webxdc is open
2024-12-02 18:40:31 +01:00
adbenitez 3f25d002e4 do not notify if the webxdc is open 2024-12-02 18:01:50 +01:00
Hosted Weblate d17567029d Merge remote-tracking branch 'origin/main' 2024-12-02 14:41:08 +01:00
adb 74c6f20c3e Merge pull request #3457 from deltachat/adb/fix-callJavascriptFunction
fix WebxdcActivity.callJavaScriptFunction()
2024-12-02 14:41:05 +01:00
Hosted Weblate 4610a64732 Merge remote-tracking branch 'origin/main' 2024-12-02 13:30:44 +01:00
B. Petersen 8728a0a39b remove dead code
these RPC calls are probably a relict of first tries,
they are not exhaustive in their area are nor were ever used,
maybe not even working.
if we decide to go that way at some point anyways much more is needed :)
2024-12-02 13:30:38 +01:00
adbenitez dcf5cf7f54 translate mention pref to Spanish 2024-11-30 18:21:35 +01:00
adbenitez 7f89ecea5c Merge remote-tracking branch 'upstream/adb/improve-notifications' 2024-11-30 13:17:01 +01:00
adbenitez 30a63dd13b allow to toggle direct mentions notifications in muted chats 2024-11-30 13:16:05 +01:00
adbenitez a5d2642c37 do not notify mentions in muted 1:1 chats 2024-11-30 13:13:50 +01:00
adbenitez 79e5eedab0 Merge remote-tracking branch 'upstream/adb/improve-notifications' 2024-11-30 12:21:20 +01:00
adbenitez 27da217eb7 Merge remote-tracking branch 'upstream/adb/fix-callJavascriptFunction' 2024-11-30 12:20:07 +01:00
adbenitez a0c71a5387 fix WebxdcActivity.callJavaScriptFunction()
now even if internet access is enabled, the index.html is wrapped in
an iframe
2024-11-30 12:03:44 +01:00
adbenitez 4d19a59cb6 improve notifications handling 2024-11-29 20:10:49 +01:00
adbenitez 819a9f415a Merge remote-tracking branch 'upstream/main' 2024-11-29 19:38:43 +01:00
adbenitez dff1ef3778 update CI 2024-11-29 16:49:15 +01:00
Hosted Weblate 0358e8ffcb Merge remote-tracking branch 'origin/main' 2024-11-27 20:36:50 +01:00
B. Petersen 7131f5774e adapt to changed deltachat-pages output folder 2024-11-27 20:36:46 +01:00
Hosted Weblate 406c263d82 Merge remote-tracking branch 'origin/main' 2024-11-27 20:36:33 +01:00
adb aa572508dc prepare 1.49.0 (#3453)
* update changelog

* update build.gradle

* update changelog

* update scripts/upload-beta.sh
2024-11-27 20:36:30 +01:00
Hosted Weblate 6ed070e437 Merge remote-tracking branch 'origin/main' 2024-11-27 18:15:46 +00:00
adb 1f880efb3f Merge pull request #3454 from deltachat/adb/update-link-generation
remove Util.QrDataToInviteURL()
2024-11-27 19:15:41 +01:00
adbenitez 72ace5c156 remove Util.QrDataToInviteURL() 2024-11-27 19:01:49 +01:00
Hosted Weblate 1e4cfa124e Merge remote-tracking branch 'origin/main' 2024-11-27 18:02:12 +01:00
B. Petersen 2f34a6ffa4 do not quote a dedicated message; current android shows them grouped and you do not really know what the message refers to 2024-11-27 18:02:07 +01:00
Hosted Weblate c42ba0f599 Merge remote-tracking branch 'origin/main' 2024-11-27 14:37:32 +01:00
adbenitez afdfe7bbaa update strings 2024-11-27 14:37:29 +01:00
adbenitez 14f43f2a79 update deltachat-core-rust to 'chore(release): prepare for 1.151.2 (#6267)' of 'v1.151.2' 2024-11-27 14:37:29 +01:00
Hosted Weblate 8798275170 Merge remote-tracking branch 'origin/main' 2024-11-27 14:36:54 +01:00
B. Petersen f3353cf6e9 update local help 2024-11-27 14:36:33 +01:00
Hosted Weblate ac6495ff20 Merge remote-tracking branch 'origin/main' 2024-11-26 15:23:14 +00:00
adb 722f2cad1e Merge pull request #3449 from deltachat/adb/update-deeplink-api-impl
update to new deep-link API specs
2024-11-26 16:23:09 +01:00
adbenitez b135093628 update to new deep-link API specs 2024-11-26 13:24:35 +01:00
Hosted Weblate 8ae47e97cf Merge remote-tracking branch 'origin/main' 2024-11-26 11:35:27 +00:00
adb be44789b01 Merge pull request #3447 from deltachat/adb/issue-3444
add "show in chat" to webxdc menu
2024-11-26 12:35:22 +01:00
Hosted Weblate 6a1ff0bace Merge remote-tracking branch 'origin/main' 2024-11-25 20:42:51 +01:00
B. Petersen 233197095b remove dead code 2024-11-25 20:42:46 +01:00
adb 494cb728c3 Update src/main/res/menu/webxdc.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-11-25 19:59:51 +01:00
Hosted Weblate 047cd9a121 Merge remote-tracking branch 'origin/main' 2024-11-25 14:44:35 +01:00
Hocuri 60e9a9101a Don't always show the sender in notifications (#3441), Always show "~" before overridden sender names (#3442)
* Don't always show the sender in notifications

In 1:1 chats, don't prepend the sender name to every line. The exception is when the display name is not equal to the chat name (i.e. there is an OverwriteSenderDisplayname), in this case we still prepend it.

* Always show the "~" before the sender name if it's overridden

When we introduced this, I assume that we weren't sure whether we should
do it and only showed it in some places. But I think it's nicer to
show the same sender name everywhere, i.e. always add the "~".
2024-11-25 14:44:31 +01:00
adbenitez c23dac6f99 add "show in chat" to webxdc menu 2024-11-25 00:57:45 +01:00
Hosted Weblate 555547b6cc Merge remote-tracking branch 'origin/main' 2024-11-25 00:56:20 +01:00
adb 3965319ef4 Merge pull request #3446 from deltachat/adb/deprecate-desc-param-of-sendUpdate
remove 'description' parameter from webxdc's sendUpdate()
2024-11-25 00:56:16 +01:00
Hosted Weblate 5fe355fe90 Merge remote-tracking branch 'origin/main' 2024-11-24 20:37:20 +00:00
adb c4db7c515f Merge pull request #3443 from deltachat/adb/issue-3439
notify DC_EVENT_INCOMING_WEBXDC_NOTIFY
2024-11-24 21:37:15 +01:00
adbenitez fbf88e102b remove 'description' parameter from webxdc's sendUpdate()
the 'description' parameter is about to be deprecated,
see https://github.com/deltachat/deltachat-core-rust/issues/6245
2024-11-24 21:34:22 +01:00
Hosted Weblate 6af3b0d985 Merge remote-tracking branch 'origin/main' 2024-11-24 21:20:39 +01:00
adb d5ea043893 Merge pull request #3440 from deltachat/hoc/reverse-notification-inbox
Reverse order of the tiny inbox in notifications
2024-11-24 21:20:34 +01:00
adbenitez f70c79ba4a fix notifyWebxdc 2024-11-24 03:46:50 +01:00
Hosted Weblate 92d6147644 Merge remote-tracking branch 'origin/main' 2024-11-23 23:34:05 +00:00
adb 0b2a26e2f1 Merge pull request #3438 from deltachat/adb/webxdc-deeplink
allow to open deep-link to webxdc
2024-11-24 00:33:59 +01:00
adbenitez b968ba67b3 avoid NullPointerException 2024-11-24 00:33:22 +01:00
adbenitez e234cc864b don't play in-chat sound 2024-11-23 23:11:34 +01:00
adbenitez b47e75eed6 use new selfAddr 2024-11-23 23:11:34 +01:00
adbenitez 6b684bf030 notify DC_EVENT_INCOMING_WEBXDC_NOTIFY 2024-11-23 23:11:34 +01:00
adbenitez ea89d37461 open webxdc when clicking info-message, pass deeplink/href 2024-11-23 23:09:01 +01:00
adbenitez 814af177d1 fix: make getWebxdcHref public 2024-11-23 23:09:01 +01:00
adbenitez 1ccbb7177f add DcMsg.getWebxdcHref() 2024-11-23 23:09:01 +01:00
adbenitez 3118dbd32b allow to open deep-link to webxdc 2024-11-23 23:09:01 +01:00
Hosted Weblate 72fb9992a1 Merge remote-tracking branch 'origin/main' 2024-11-23 23:05:09 +01:00
adb 1a5e062dac Merge pull request #3445 from deltachat/update-core-to-1.151.0
update core to 1.151.0
2024-11-23 23:04:44 +01:00
B. Petersen 0bcaea6f01 update deltachat-core-rust to 'chore(release): prepare for 1.151.0' of 'v1.151.0' 2024-11-23 23:01:56 +01:00
Hocuri 8283a6c4ad Reverse order of the tiny inbox in notifications 2024-11-23 20:01:46 +01:00
Hosted Weblate e8413019ff Merge remote-tracking branch 'origin/main' 2024-11-23 18:22:54 +01:00
adb cd159bac6c Merge pull request #3377 from deltachat/r10s/notify-reactions
notify reactions added
2024-11-23 18:22:49 +01:00
Hosted Weblate 289118e671 Merge remote-tracking branch 'origin/main' 2024-11-22 22:07:18 +00:00
adb 21f917004f Merge pull request #3436 from deltachat/adb/remove-android-4-code
remove android 4 dead code (SDK<21)
2024-11-22 23:07:12 +01:00
Hosted Weblate 286a84b1d4 Merge remote-tracking branch 'origin/main' 2024-11-21 00:31:16 +00:00
adb 0abf2ff00c Merge pull request #3435 from deltachat/adb/allow-to-open-http-link
allow to open in browser http links that look like proxies
2024-11-21 01:31:11 +01:00
adbenitez 0ca92ec6b5 remove android 4 compatibility code 2024-11-21 01:16:20 +01:00
adbenitez e66fa53537 allow to open in browser http links that look like proxies 2024-11-20 19:36:18 +01:00
Hosted Weblate 8c8c003f2b Merge remote-tracking branch 'origin/main' 2024-11-20 12:59:55 +00:00
Hocuri a51013cc00 fix: Show composite emojis enlarged, too (#3427)
fix: Show composite emojis enlarged, too

There are a lot of composite emojis like the flags and the family emojis.
Here, the grapheme starts with an emoji, but then come some other
characters that modify the first emoji (e.g. all flags start with the
flag emoji).

This PR shows those as big, too, by checking whether a grapheme _starts_
with an emoji to determine whether it's an emoji.


---------

Co-authored-by: adb <adb@merlinux.eu>
2024-11-20 13:59:50 +01:00
Hosted Weblate a06e36993d Merge remote-tracking branch 'origin/main' 2024-11-19 13:24:13 +01:00
Hocuri 171500a97d fix: Don't change display name when starting to create a new account and going back (#3434) 2024-11-19 13:24:10 +01:00
Hosted Weblate ce054d93a8 Merge remote-tracking branch 'origin/main' 2024-11-19 10:38:14 +00:00
link2xt 9a4851961e fix: check draft.isOk() instead of comparing to null
dcContext.getDraft() never returns null.
2024-11-19 10:38:08 +00:00
hsfg6 cabc159cd8 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/zh_Hant/
2024-11-18 23:00:26 +01:00
adbenitez e5ddbacb2e update build.gradle 2024-11-15 22:45:17 +01:00
adbenitez 03c7d78e2b Merge remote-tracking branch 'upstream/main' 2024-11-15 22:45:10 +01:00
Hosted Weblate c78cbbe145 Merge remote-tracking branch 'origin/main' 2024-11-15 22:01:58 +01:00
adb 00498b02b3 Merge pull request #3424 from deltachat/adb/issue-3423
remove internal font scaling preference
2024-11-15 22:01:51 +01:00
adbenitez ad6e2d1a9f fix typo 2024-11-15 21:20:40 +01:00
adbenitez 5cfa71cd72 add some protection against theoretical 0 value from ViewUtil.pxToSp() 2024-11-15 20:57:33 +01:00
adbenitez 0551044ef9 remove internal font size setting 2024-11-15 18:02:42 +01:00
Hosted Weblate a297c71a90 Merge remote-tracking branch 'origin/main' 2024-11-15 04:27:38 +01:00
adb 5126b3eeb2 Merge pull request #3422 from deltachat/adb/issue-3421
change proxy protocol label position
2024-11-15 04:27:31 +01:00
B. Petersen 8d7078f96f fix playing inChatSounds 2024-11-14 14:10:17 +01:00
B. Petersen c446440537 save one database call 2024-11-14 14:10:17 +01:00
B. Petersen 333e4c9eca notify reactions 2024-11-14 14:10:17 +01:00
B. Petersen fb1f5df234 fix ticker line 2024-11-14 14:10:17 +01:00
Hosted Weblate 247de63362 Merge remote-tracking branch 'origin/main' 2024-11-13 20:08:39 +01:00
Hocuri cc419a9f62 perf: Return early in getTextScale() if text is empty or starts with letter (#3426)
Not sure why, but `setText()` seems to be called with an empty string
very often - for this case it's nice if getTextScale() returns early.

If the text starts with a letter, we can also return early.
2024-11-13 20:08:31 +01:00
adbenitez 2469b6efef update originalFontSize on setTextSize() 2024-11-13 17:20:14 +01:00
adbenitez b7446c9a93 update build.gradle 2024-11-13 04:29:58 +01:00
adbenitez 0c9b5bbaf4 Merge remote-tracking branch 'upstream/main' 2024-11-13 04:29:08 +01:00
adbenitez 3126544f00 fix "show full message" button 2024-11-13 04:28:13 +01:00
adbenitez ccdad0469d Merge remote-tracking branch 'upstream/main' 2024-11-13 01:45:40 +01:00
Hosted Weblate 20f7c7c616 Merge remote-tracking branch 'origin/main' 2024-11-13 00:16:57 +01:00
B. Petersen 9f3eeb3d0d calculate account size in background
calculation may take a moment,
do this in background.

it is totally fine to just display nothing before,
that avoids flickering (WHAT was this? i cannot look so fast!) -
and in most cases, it is close to instant.
2024-11-13 00:16:52 +01:00
adbenitez 92bc53b672 change proxy protocol label position 2024-11-12 23:12:37 +01:00
Hosted Weblate 6364903a28 Merge remote-tracking branch 'origin/main' 2024-11-12 20:35:03 +01:00
adb 1355303360 Merge pull request #3411 from deltachat/adb/issue-3399
remove old emojis
2024-11-12 20:34:59 +01:00
adbenitez 7227f513a5 don't use unnecessary "" in build.gradle 2024-11-12 20:33:41 +01:00
adb 4933d66000 Update src/main/res/layout/reactions_pill.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-11-12 20:23:55 +01:00
adbenitez 977b21618c increase accepted lenght for scalling to 21
also avoid unnecessary iteration over graphemes if limit is exceeded already
2024-11-12 19:45:33 +01:00
adb 5cecd5bec3 Update src/main/java/org/thoughtcrime/securesms/components/InputPanel.java
Co-authored-by: Hocuri <hocuri@gmx.de>
2024-11-12 19:29:38 +01:00
adbenitez d8db39f9c7 add comment on regex 2024-11-12 19:28:25 +01:00
adbenitez 736fc44870 fix onEmojiPicked() 2024-11-12 19:23:49 +01:00
Hosted Weblate 48bb77cfae Merge remote-tracking branch 'origin/main' 2024-11-12 15:29:21 +01:00
adb 537127ec4e Merge pull request #3419 from deltachat/adb/issue-3291
don't increase reaction selector's font size according to system
2024-11-12 15:29:17 +01:00
Hosted Weblate 53bfe52797 Merge remote-tracking branch 'origin/main' 2024-11-12 09:02:21 +00:00
B. Petersen a5167f3739 log a warning if index gets out of bounds 2024-11-12 10:02:15 +01:00
B. Petersen d481541ad8 crash precaution by checking Spinner bounds
Spinner is very picky about bad selections,
this is an accident waiting to happen -
eg. if new values are introduces
or someone thinks, the "deprecated" case can be removed.

better do not trust incoming data.
2024-11-12 10:02:15 +01:00
adbenitez 7ab19fb8af scale emojis 2024-11-12 05:41:54 +01:00
adbenitez 715a2c0653 don't increase reaction selector's font size according to system 2024-11-12 03:33:36 +01:00
Hosted Weblate a8bc01e6c1 Merge remote-tracking branch 'origin/main' 2024-11-11 17:23:02 +01:00
link2xt 350cd0539c build: update NDK to r27
If we are dropping Android 4 support anyway,
can as well upgrade to the current LTS NDK
which requires API level 21 (Android 5.0).
2024-11-11 16:22:55 +00:00
Hosted Weblate 3fbccf3408 Merge remote-tracking branch 'origin/main' 2024-11-11 16:11:47 +01:00
adb 9f8fe08c75 Merge pull request #3400 from deltachat/adb/issue-3395
improve msg_action_button
2024-11-11 16:11:44 +01:00
Hosted Weblate 86656f1155 Merge remote-tracking branch 'origin/main' 2024-11-11 15:09:03 +00:00
Hocuri 5048239563 Rename "Back up Chats to External Storage" to "Export Backup" (#3416) 2024-11-11 16:08:59 +01:00
Hosted Weblate 89473b8067 Merge remote-tracking branch 'origin/main' 2024-11-11 15:05:12 +00:00
link2xt 6e135e06a9 Opt out of webview metrics collection 2024-11-11 15:05:06 +00:00
Hosted Weblate 887f5881f0 Merge remote-tracking branch 'origin/main' 2024-11-09 17:33:23 +01:00
B. Petersen d52647b288 tweak phased rollout instructions 2024-11-09 17:32:46 +01:00
Hosted Weblate aee757e71c Merge remote-tracking branch 'origin/main' 2024-11-08 11:54:31 +00:00
B. Petersen c0a729978c update huawei instructions 2024-11-08 12:54:26 +01:00
adbenitez 041c95c6d2 remove jemoji, it adds +13MB 2024-11-06 16:39:17 +01:00
adbenitez 8de0fed18e update build.gradle 2024-11-05 23:33:09 +01:00
adbenitez dd75a8e858 enlarge font size when text is only a few emojis 2024-11-05 23:04:25 +01:00
adbenitez 2e77db23d5 remove more unused code 2024-11-05 22:24:29 +01:00
adbenitez 04a4a02235 remove transparency from emoji in pills and reactions details 2024-11-05 19:36:42 +01:00
adbenitez 2910730bc1 remove unused emoji attrs and layouts 2024-11-05 19:18:32 +01:00
Hosted Weblate 30d5eeeb45 Merge remote-tracking branch 'origin/main' 2024-11-05 15:32:37 +01:00
Hocuri 23458a6c64 Don't show "0%" at the beginning when being added as second device (#3409) 2024-11-05 15:32:34 +01:00
Hosted Weblate d2c2f2cf07 Merge remote-tracking branch 'origin/main' 2024-11-05 15:28:53 +01:00
Hocuri 9679b22072 fix: Accept the deprecated 3 as an alias for 2 (#3410) 2024-11-05 15:28:50 +01:00
adbenitez 3fae301ec2 remove old emojis components 2024-11-05 02:00:42 +01:00
adbenitez d08069f7b0 remove old emojis 2024-11-04 23:29:28 +01:00
bittin1ddc447d824349b2 f83d5a0dbb Translated using Weblate (Swedish)
Currently translated at 66.6% (2 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/sv/
2024-11-03 13:00:36 +01:00
B. Petersen 56a0607a5e update RELEASE.md to changed store ui 2024-11-01 14:43:56 +01:00
B. Petersen 9c08617f7d bump version to 1.48.3 2024-10-31 21:35:26 +01:00
B. Petersen 812dc8d738 update CHANGELOG for 1.48.3 2024-10-31 21:35:26 +01:00
B. Petersen d8b278a1f5 update translations 2024-10-31 21:06:00 +01:00
bjoern 4368a4f63e update translations (#3402) 2024-10-31 18:07:55 +01:00
adb 72ae90ae93 change realtime preference position (#3398)
* change realtime preference position

* tweak realtime explaination

* Update src/main/res/values/strings.xml

Co-authored-by: bjoern <r10s@b44t.com>

* tweak realtime strings

* show warning if realtime is disabled and apps need it

* update realtime warning message

* 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 strings.xml

* update strings.xml

* revert dialog

---------

Co-authored-by: bjoern <r10s@b44t.com>
Co-authored-by: Hocuri <hocuri@gmx.de>
2024-10-31 18:00:20 +01:00
B. Petersen c36ce7a8ab update deltachat-core-rust to 'chore(release): prepare for 1.148.6' of 'v1.148.6' 2024-10-31 17:53:33 +01:00
adbenitez 404097fe30 keep old style for "show full message" 2024-10-30 18:22:21 +01:00
adbenitez 07d5c719d4 improve mst_action_button 2024-10-29 20:47:33 +01:00
adb 13a43473cc improve logging: always log events for accId=0 (#3391)
improve logging: always log events for all accounts including previously ignored accId=0
2024-10-29 17:45:33 +01:00
B. Petersen 5a84198829 bump version to 1.48.2 2024-10-29 00:43:48 +01:00
B. Petersen 1f443cd87c update CHANGELOG for 1.48.2 2024-10-29 00:43:48 +01:00
B. Petersen 4901b92ee2 update local help 2024-10-28 23:41:18 +01:00
B. Petersen cd48e15071 update translations 2024-10-28 23:41:18 +01:00
B. Petersen 2d4b570f48 update deltachat-core-rust to 'chore(release): prepare for 1.148.5' of 'v1.148.5' 2024-10-28 23:41:18 +01:00
B. Petersen 3f0b36bd4b 'message info' just shows the file name
from the view of the user, this is just the 'file name'.
calling it 'original file name' there is maybe correct internally,
as we add a random number for $reasons.
however, some users were alarmed about what the heck is transferred here.
2024-10-27 15:28:11 +01:00
B. Petersen b342fb9c30 update translations 2024-10-27 11:51:00 +01:00
adbenitez 0974655366 update build.gradle 2024-10-27 06:58:30 +01:00
adbenitez 9675c419ac add some margin at the bottom of the new "show full message" buttons 2024-10-27 06:57:25 +01:00
adbenitez de4e95d495 Merge remote-tracking branch 'upstream/main' 2024-10-27 03:45:37 +01:00
adbenitez 7a738abba8 Merge remote-tracking branch 'upstream/main' 2024-10-27 02:49:16 +01:00
B. Petersen 512f8104e2 fix typos 2024-10-25 13:18:10 +02:00
B. Petersen 0cd445f4e7 refine CHANGLOG HOWTO 2024-10-25 12:28:29 +02:00
B. Petersen dbfbb9060b bump version to 1.48.1 2024-10-24 23:53:26 +02:00
B. Petersen f2f910fe23 update changelog for 1.48.1 2024-10-24 23:53:26 +02:00
B. Petersen 7dde6ad61a update deltachat-core-rust to 'chore(release): prepare for 1.148.4' of 'v1.148.4' 2024-10-24 23:12:47 +02:00
adb ca947aeef2 Use tag or display name for notifications instead address (#3380)
Use tag or display name for notifications instead address
2024-10-24 20:42:39 +02:00
bjoern 1680d14835 prepare 1.48.0 (#3354)
* update CHANGELOG for 1.48.0, android part

* update CHANGELOG for 1.48.0, core part

* bump version to 1.48.0

* update CHANGELOG for 1.147.1

* update CHANGELOG

* update CHANGELOG for core 1.148.2

* update CHANGELOG, recent android changes
2024-10-24 20:16:02 +02:00
adb b5a2280776 fix typo in changelog (#3386)
* fix typo

* Update CHANGELOG.md

Co-authored-by: Hocuri <hocuri@gmx.de>

---------

Co-authored-by: Hocuri <hocuri@gmx.de>
2024-10-24 19:57:50 +02:00
B. Petersen ab61246240 do not start foreground service in foreground
the foreground service was introduced unconditionally in #3312,
however turns out to be annoying and flickering
if the app is actually in foreground.

the service _might_ be needed in this case only
if the app is about going to background during fetch,
but in this case, we assume,
that we have some 10 seconds time still.

in any case,
this is still an improvement to the released apps,
that _never_ show a foreground service.
2024-10-24 18:53:44 +02:00
B. Petersen 957a5f75dc update translations 2024-10-24 15:19:09 +02:00
B. Petersen dad490074b the 'def' parameter is long gone. any comment will lie over time :) 2024-10-24 12:29:45 +02:00
B. Petersen 09640c88ac update deltachat-core-rust to 'chore(release): prepare for 1.148.2' of 'v1.148.2' 2024-10-23 21:10:09 +02:00
adb 021a98c135 allow to set tags on profiles (#3373)
allow to set tags on profiles

---------

Co-authored-by: bjoern <r10s@b44t.com>
2024-10-23 18:05:14 +02:00
B. Petersen deacf8efef update local help 2024-10-23 16:53:56 +02:00
adb 6c482af28a Merge pull request #3374 from deltachat/adb/use-createQrSvg
Allow to share proxy via QR
2024-10-23 15:44:31 +02:00
adbenitez cfd9371739 tweak proxy_invalid string 2024-10-23 15:04:13 +02:00
adbenitez c58a77dc26 tweak padding in dialog_share_proxy 2024-10-23 15:04:13 +02:00
adbenitez e45d722ba1 tweak dialog_share_proxy 2024-10-23 15:04:13 +02:00
adbenitez 83213d14ad remove tabs 2024-10-23 15:04:13 +02:00
adbenitez 931476a196 remove scrollView in dialog_share_proxy 2024-10-23 15:04:13 +02:00
adbenitez 4ce3869744 tweak dc_wrapper.c 2024-10-23 15:04:13 +02:00
adbenitez 5dee44605d allow to share proxy as QR 2024-10-23 15:04:13 +02:00
adbenitez 249d57897e fix dc_wrapper.c 2024-10-23 15:04:13 +02:00
adbenitez 3c9cecbc39 add DcContext.createQrSvg() 2024-10-23 15:04:12 +02:00
B. Petersen 5a2c28b91d update translations 2024-10-23 13:24:40 +02:00
B. Petersen 7758f6d991 update deltachat-core-rust to 'chore(release): prepare for 1.148.1' of 'v1.148.1' 2024-10-23 13:24:40 +02:00
adb 285f59e46a Merge pull request #3367 from deltachat/adb/issue-3385
improve "show QR" screen
2024-10-22 14:40:05 +02:00
adbenitez 91f8ce7cda Merge remote-tracking branch 'upstream/main' 2024-10-22 02:16:26 +02:00
adbenitez 12ad3daa28 Merge remote-tracking branch 'upstream/main' 2024-10-22 02:13:13 +02:00
adb eaa6981523 Merge pull request #3372 from deltachat/adb/issues-3369
allow to paste from clipboard in RegistrationQrActivity
2024-10-22 00:20:15 +02:00
adb cd8f799f14 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-10-22 00:07:53 +02:00
adb 69fb68a873 Update src/main/res/values/strings.xml
Co-authored-by: bjoern <r10s@b44t.com>
2024-10-22 00:07:28 +02:00
adbenitez 5954b13440 allow to paste from clipboard in RegistrationQrActivity 2024-10-21 21:31:06 +02:00
B. Petersen a7647e18e2 update translations 2024-10-21 02:16:14 +02:00
B. Petersen e025da4e91 add string 'N reactions', need for iOS notifications at least to differ from 'N messages' 2024-10-21 02:16:14 +02:00
B. Petersen 8ba93f8b82 support DC_QR_BACKUP2 in chatlist-qr-code scanner
this was forgotten by the move to BACKUP2 in #3173
2024-10-20 16:44:33 +02:00
adb 849c6798c0 Merge pull request #3368 from deltachat/adb/issue-3364
reflect status of the proxy (enable/disabled) in the proxy icon
2024-10-17 23:41:52 +02:00
adbenitez 7a85cf9db5 tweak message 2024-10-17 23:03:53 +02:00
adbenitez aa45476028 remove duplicated options from menu 2024-10-17 23:03:21 +02:00
adbenitez c12ed8060c add "invite link dialog" 2024-10-17 22:48:44 +02:00
Hocuri 90c8650aaf Visual feedback when tapping the action button on messages, attempt 2 (#3366) 2024-10-17 15:37:27 +02:00
adbenitez 6f530215af update full_description.txt 2024-10-17 01:21:13 +02:00
adbenitez e8c4d0e606 reflect status of the proxy (enable/disabled) in the proxy icon 2024-10-17 00:59:05 +02:00
adbenitez 7feb4bc93f implement "scan" button 2024-10-15 23:30:49 +02:00
adbenitez e4b1d52d1a improve "show QR" screen 2024-10-15 23:04:02 +02:00
adb efc09f142a Merge pull request #3363 from deltachat/adb/issue-3357
Do not remember "New Contact" screen's tab state
2024-10-14 19:40:03 +02:00
adb e5b8e488a4 Merge pull request #3362 from deltachat/adb/issue-3355
auto-focus group name field
2024-10-14 18:11:14 +02:00
adbenitez d397ccaf7e Do not remember "New Contact" screen's tab state 2024-10-14 17:46:25 +02:00
adbenitez f7bd609f91 auto-focus group name field 2024-10-14 17:11:09 +02:00
B. Petersen a118c33f89 update translations 2024-10-14 16:04:35 +02:00
B. Petersen 86a9da5062 better confirmation message 2024-10-14 15:58:23 +02:00
B. Petersen d3328df6f2 rename the function to what it does: sending multiple messages 2024-10-14 15:58:23 +02:00
B. Petersen 169a706e36 comment about fallback name 2024-10-14 15:58:23 +02:00
B. Petersen bf2fd62154 get filename of URI that are not PersistenBlobProvider 2024-10-14 15:58:23 +02:00
B. Petersen e74795851a use constant to access URI filename 2024-10-14 15:58:23 +02:00
B. Petersen 139b7f84f4 basic handling of multiple selected files 2024-10-14 15:58:23 +02:00
B. Petersen 3d55ea931c move asking-for-sending to a separate function 2024-10-14 15:58:23 +02:00
B. Petersen 73ada05e99 start intent allowing selecting multiple images/videos 2024-10-14 15:58:23 +02:00
B. Petersen 7ecba725a0 update translations and local help 2024-10-14 11:46:31 +02:00
B. Petersen 6cad73a00b update deltachat-core-rust to 'chore(release): prepare for 1.147.1' of 'v1.147.1' 2024-10-14 11:46:31 +02:00
B. Petersen c5e675a72e update local help 2024-10-11 16:08:08 +02:00
B. Petersen 75f779e47b update translations 2024-10-11 16:08:08 +02:00
holger krekel 2b1bb6e434 Merge pull request #3352 from deltachat/hpk42-patch-1
refine credits wrt signal messenger
2024-10-11 11:40:53 +02:00
holger krekel ca8dcfc599 refine credits wrt signal messenger 2024-10-11 09:11:31 +02:00
B. Petersen a26764355e move 'add profile' to end of list
having 'add profile' at the end of the list is more natural,
and more consisten with desktop/iOS -
as well as internally, eg. proxy also has 'add' at its end.

also, this paves the way to have a consistent layout when it comes
to profile-switching from forward/share dialogs,
where one probably does not want to have a 'add' button
(so, the first lines are not different :)

the profile list is usually not super-large,
and even if - when ppl have managed to add 10+ profiles,
they'll know how to do this, even with scrolling :)
also, adding is a rare function, in contrast to switching,
so even then it makes sense as there is room for one more item without scrolling.

in contrast,
for 'create chat' we show 'add' at the beginning,
as these lists can contain several hundrets of entries _and_
add is often used.
2024-10-10 23:14:57 +02:00
adbenitez d92265cd63 Merge remote-tracking branch 'upstream/main' 2024-10-10 21:09:08 +02:00
adbenitez 1787dc4c8b Merge remote-tracking branch 'upstream/main' 2024-10-10 20:40:06 +02:00
B. Petersen 1293d419f5 update translations 2024-10-10 17:16:18 +02:00
B. Petersen 421db5b403 fix typo 2024-10-10 17:16:18 +02:00
B. Petersen 5f77f791d0 fix the warning when attaching multiple files: images are recoded, only videos are not 2024-10-10 16:47:02 +02:00
B. Petersen aa78c607ce update deltachat-core-rust to 'chore(release): prepare for 1.147.0' of 'v1.147.0' 2024-10-10 14:50:22 +02:00
B. Petersen 7bb855e32a update local help 2024-10-10 14:30:10 +02:00
B. Petersen eaa24e89f8 update translations 2024-10-10 14:30:10 +02:00
B. Petersen fc5a3e5c75 cleanup account switcher
do not show 'Add Profile' in bold.

this looks less cluttered
and makes the "bold" of the selected account more outstanding:

before, there were two types of "boldness",
the add profile button (using bold only)
and the selected profile (using bold and a background),
this results in a bit cluttered, unsteady look,
esp. when there are few accounts and more bold than normal is shown.

also, this makes "bold" more outstanding,
as this attribute is given to one line only.
there is no need for the "add profile" to be that outstanding
(in contrast to eg. the "add chat" dialog)

it is a minor, sure :)
2024-10-09 21:09:23 +02:00
B. Petersen 6fe5ed32cb update chatlist title on profile deletion; this is needed to show 'Delta Chat' in case only one profile is left 2024-10-09 21:08:52 +02:00
B. Petersen 304942e98b update translations 2024-10-09 13:09:34 +02:00
B. Petersen 44df03ad52 mark deprecated strings as such 2024-10-09 13:09:34 +02:00
B. Petersen c485aa9f6a explain the 'Unread' string 2024-10-08 20:08:45 +02:00
B. Petersen cb416e6959 search: add menu allowing toggling is:unread 2024-10-08 20:08:45 +02:00
adb ee6c464a5b Merge pull request #3338 from deltachat/adb/issue-3335
register app for opening ss:// and socks5:// proxy URLs
2024-10-08 17:20:12 +02:00
adbenitez 8790b26123 show "done" toast 2024-10-08 17:02:41 +02:00
adb 04d2eb99aa Merge pull request #3340 from deltachat/adb/improve-proxy-ui
improve proxy settings UI
2024-10-08 16:27:55 +02:00
adbenitez 5627f5f123 update build.gradle 2024-10-06 23:25:23 +02:00
adbenitez 7a66085107 Merge remote-tracking branch 'upstream/adb/improve-proxy-ui' 2024-10-06 22:40:06 +02:00
adbenitez aa45a9082e Merge remote-tracking branch 'upstream/adb/issue-3335' 2024-10-06 22:39:43 +02:00
adbenitez 3955f4d505 fix secondary button color 2024-10-06 22:35:47 +02:00
adbenitez 74dd4c0d9a update permanent notification icon 2024-10-06 20:41:33 +02:00
adbenitez 23eb418591 update core 2024-10-06 19:37:13 +02:00
adbenitez edcfa80d92 don't enable IO with proxy settings if account is disabled 2024-10-06 19:36:32 +02:00
adbenitez 5ff1f3d915 Merge remote-tracking branch 'upstream/main' 2024-10-06 19:34:24 +02:00
adbenitez b0ae2da439 improve proxy settings UI 2024-10-06 13:29:46 +02:00
adbenitez 8487c286e6 register app for opening ss:// and socks5:// proxy URLs
also linkify proxy URLs in text messages
2024-10-05 20:15:40 +02:00
Hocuri ffa9177094 Don't show "0%" when exporting backups (#3337)
With https://github.com/deltachat/deltachat-core-rust/pull/6027, when
exporting a backup, the counter stays at 0% while running housekeeping
and vacuuming the database, which takes 10 seconds on my device.

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

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

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

* move proxy settings in 'Advanced' down

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

* add proxy settings icon to main screen

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

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

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

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

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

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

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

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

Currently translated at 16.6% (3 of 18 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (18 of 18 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (19 of 19 strings)

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

* Translated using Weblate (Portuguese (Portugal))

Currently translated at 10.5% (2 of 19 strings)

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

* Translated using Weblate (German)

Currently translated at 100.0% (3 of 3 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (3 of 3 strings)

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

* Translated using Weblate (Italian)

Currently translated at 100.0% (3 of 3 strings)

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

---------

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

This PR changes it to be the whole title bar.
2024-08-24 21:47:11 +02:00
Hosted Weblate 5a5ea83fa0 Merge remote-tracking branch 'origin/main' 2024-08-16 10:36:47 +02:00
Priit Jõerüüt c30ddf9c77 Translated using Weblate (Estonian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://translate.codeberg.org/projects/delta-chat/android-metadata/et/
2024-08-16 08:36:46 +00:00
Outbreak2096 e14b878aef Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (3 of 3 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://translate.codeberg.org/projects/delta-chat/android-metadata/zh_Hans/
2024-08-16 08:36:46 +00:00
NicholasV 9e3ebda12a Translated using Weblate (Portuguese (Brazil))
Currently translated at 16.6% (3 of 18 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://translate.codeberg.org/projects/delta-chat/android-metadata/pt_BR/
2024-08-16 08:36:46 +00:00
gitcookie-1 4bb42b9995 Translated using Weblate (German)
Currently translated at 58.8% (10 of 17 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://translate.codeberg.org/projects/delta-chat/android-metadata/de/
2024-08-16 08:36:46 +00:00
German 59b158fe09 Translated using Weblate (German)
Currently translated at 17.6% (3 of 17 strings)

Translation: Delta Chat/Android metadata
Translate-URL: https://translate.codeberg.org/projects/delta-chat/android-metadata/de/
2024-08-16 08:36:46 +00:00
Hosted Weblate 3033000e4e Merge remote-tracking branch 'origin/main' 2024-08-15 22:06:59 +02:00
Hosted Weblate 9f8da69b25 Merge remote-tracking branch 'origin/main' 2024-08-15 16:37:05 +02:00
Hosted Weblate aa52f8172d Merge remote-tracking branch 'origin/main' 2024-08-15 13:16:11 +00:00
Hosted Weblate 82ddcd0839 Merge remote-tracking branch 'origin/main' 2024-08-14 17:16:07 +00:00
Hosted Weblate 8d99b36347 Merge remote-tracking branch 'origin/main' 2024-08-14 18:47:56 +02:00
Hosted Weblate 589fa8e3dd Merge remote-tracking branch 'origin/main' 2024-08-14 11:26:01 +00:00
Hosted Weblate 434b40e51e Merge remote-tracking branch 'origin/main' 2024-08-14 13:13:21 +02:00
Hosted Weblate 755c346d82 Merge remote-tracking branch 'origin/main' 2024-08-14 12:24:49 +02:00
Hosted Weblate b13defdf9c Merge remote-tracking branch 'origin/main' 2024-08-13 10:30:02 +02:00
Hosted Weblate fbe533c701 Merge remote-tracking branch 'origin/main' 2024-08-13 01:21:09 +02:00
Hosted Weblate 13ebad4942 Merge remote-tracking branch 'origin/main' 2024-08-12 13:41:56 +02:00
Andrea Enzo Lattmann f9539c160e Translated using Weblate (Italian)
Currently translated at 100.0% (3 of 3 strings)

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

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

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

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

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

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

Translation: Delta Chat/Android metadata
Translate-URL: https://hosted.weblate.org/projects/deltachat/android-metadata/pt/
2024-07-05 03:09:19 +02:00
720 changed files with 28538 additions and 26639 deletions
+3
View File
@@ -0,0 +1,3 @@
ko_fi: adbenitez
liberapay: adbenitez
custom: "https://arcanechat.me/#contribute"
+1 -1
View File
@@ -1 +1 @@
blank_issues_enabled: true
blank_issues_enabled: false
+22
View File
@@ -0,0 +1,22 @@
version: 2
mergeable:
- when: pull_request.*
name: "Changelog check"
validate:
- do: or
validate:
- do: description
must_include:
regex: '#skip-changelog'
- do: and
validate:
- do: dependent
changed:
file: '**/*.java'
required: ['CHANGELOG.md']
fail:
- do: checks
status: 'action_required'
payload:
title: CHANGELOG.md might need an update
summary: "Please update CHANGELOG.md or add #skip-changelog to the description"
+1 -1
View File
@@ -7,7 +7,7 @@ on:
jobs:
artifacts-url-comments:
name: add artifact links to pull request
runs-on: windows-2019
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- name: add artifact links to pull request
+12 -12
View File
@@ -2,16 +2,16 @@ name: Upload Preview APK
on: pull_request
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
jobs:
build:
name: Upload Preview APK
runs-on: ubuntu-latest
steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@0.9.1
with:
access_token: ${{ github.token }}
- uses: actions/checkout@v3
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Validate Fastlane Metadata
@@ -19,12 +19,12 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
working-directory: jni/deltachat-core-rust
- uses: actions/setup-java@v3
- uses: actions/setup-java@v5
with:
java-version: 17
distribution: 'temurin'
- uses: android-actions/setup-android@v3
- uses: actions/cache@v3
- uses: actions/cache@v4
with:
path: |
~/.gradle/caches
@@ -35,7 +35,10 @@ jobs:
- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r23c
ndk-version: r27
- name: Validate Gradle Wrapper
uses: gradle/actions/wrapper-validation@v4
- name: Compile core
env:
@@ -44,14 +47,11 @@ jobs:
export PATH="${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/"
scripts/install-toolchains.sh && scripts/ndk-make.sh armeabi-v7a
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
- name: Build APK
run: ./gradlew --no-daemon -PABI_FILTER=armeabi-v7a assembleFossDebug
- name: Upload APK
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: app-preview.apk
path: 'build/outputs/apk/foss/debug/*.apk'
+8 -7
View File
@@ -37,7 +37,7 @@ jobs:
- uses: nttld/setup-ndk@v1
id: setup-ndk
with:
ndk-version: r23c
ndk-version: r27
- name: Compile core
env:
@@ -49,11 +49,12 @@ jobs:
- name: Build APK
run: |
mkdir -p ~/.gradle
echo -n ${{ secrets.SIGNING_KEY }} | base64 -d >> ~/app.keystore
echo "DC_RELEASE_STORE_FILE=$HOME/app.keystore" >> ~/.gradle/gradle.properties
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
echo -n ${{ secrets.KEYSTORE_FILE }} | base64 -d >> ~/keystore.jks
echo "DC_RELEASE_STORE_FILE=$HOME/keystore.jks" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_STORE_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_KEY_ALIAS_FDROID=${{ secrets.ALIAS_FDROID }}" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_KEY_ALIAS_GPLAY=${{ secrets.ALIAS_GPLAY }}" >> ~/.gradle/gradle.properties
echo "DC_RELEASE_KEY_PASSWORD=${{ secrets.KEYSTORE_PASSWORD }}" >> ~/.gradle/gradle.properties
./gradlew assembleFossRelease
rm build/outputs/apk/foss/release/*universal*
./gradlew assembleGplayRelease
@@ -63,7 +64,7 @@ jobs:
uses: softprops/action-gh-release@v1
with:
token: "${{ secrets.GITHUB_TOKEN }}"
body: "Auto-generated release"
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)'
prerelease: ${{ contains(github.event.ref, '-beta') }}
fail_on_unmatched_files: true
files: build/outputs/apk/foss/release/*.apk
+361 -1
View File
@@ -1,5 +1,365 @@
# Delta Chat Android Changelog
## Unreleased
* 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.20.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
* several bug fixes and updated translations
* update to core 1.153.0
## v1.50.3
2024-12
* Add in-chat apps picker to attachments options
* Notify replies and reactions to your messages in muted chats (can be disabled in settings)
* Cache HTTP GET requests (ex. when loading images from HTML messages)
* update to core 1.152.0
## v1.50.2
2024-12
* Encrypt notification tokens
* update to core 1.151.5
## v1.50.0
2024-12
* New emoji picker with support for more emojis
* Webxdc apps can now trigger notifications
* Webxdc apps can now deep-link to internal sections when you click their info-messages in chat
* Add "Show in Chat" to the menu of opened Webxdc apps
* Reverse order of messages in the notification group
* Notify reactions to own messages
* Improve the button to start Webxdc apps
* Make account deletion confirmation dialog faster
* Rename "Back up Chats to External Storage" to "Export Backup"
* Improve compatibility with classic email clients in the outgoing messages
* Removed internal font scaling setting in favor of the better system settings
* Use privacy-preserving webxdc addresses
* Use Rustls for connections with strict TLS
* QR codes for adding contacts and joining groups provide help when opened in a normal browser
* Mark Saved Messages chat as protected
* Allow the user to replace maps integration
* fix: Trim whitespace from scanned QR codes
* fix quotes: Line-before-quote may be up to 120 character long instead of 80
* fix: Prevent accidental wrong-password-notifications
* fix: Remove footers from "Show Full Message..."
* fix: Only add "member added/removed" messages if they actually do that
* fix: Update state of message when fully downloading it
* fix: send message: Do not fail if the message does not exist anymore
* fix: Do not percent-encode dot when passing to autoconfig server (so, fix handling of some servers)
* fix displaynames not being updated when intially scanned by a QR code
* several bug fixes
* update to core 1.151.3
## v1.48.3
2024-10
* new Proxy settings screen available at "Advanced / Proxy"
* manage a list of HTTP(S), SOCKS5 or Shadowsocks Proxies
* Proxies icon shown on the chatlist if proxies are used
* share Proxies by showing a QR code
* scan Proxies' QR code and use them
* make Proxy URLs inside Delta Chat tappable
* open Delta Chat when tapping Proxy URLs in other apps
* support for realtime webxdc apps moved out of experimental and enabled by default
* realtime webxdc apps can be disabled at "Settings / Advanced"
* "New Contact / Link" button to view, share or copy the invite line
* "New Contact / Scan" button to easier access the scanner functionality
* open "New Contact" scan/show activities directly, do not try to be too smart and open the last active tab
* allow to attach multiple images in one step
* to easier differ between multiple profiles, set a "Private Tag" (long tap profile switcher)
* "Private Tag" is shown in notifications
* improve profile deletion dialog: show name, size and avatar of the profile being deleted
* show profile name in title bar when the user has multiple profiles
* improve profile switcher layout
* improve notification: allow to "Mark Read" from the notification
* search for unread chats in the search's three-dot-menu
* allow pasting QR codes from "Add As Second Device" screen
* save traffic by supporting "IMAP COMPRESS"
* automatic reconfiguration, e.g. switching to implicit TLS if STARTTLS port stops working
* parallelize IMAP and SMTP connection attempts
* improve DNS caching
* always use preloaded DNS results
* prioritize cached results if DNS resolver returns many results
* always move auto-generated messages to DeltaChat folder
* ignore invalid securejoin messages silently
* delete messages from a chatmail server immediately by default
* make resending pending messages possible
* don't SMTP-send messages to self-chat if BccSelf is disabled
* HTTP(S) tunneling
* don't put displayname into From/To/Sender if it equals to address
* hide sync messages from INBOX (use IMAP APPEND command to upload sync messages)
* more verbose SMTP connection establishment errors
* add "Learn More" button to "Manage keys"
* visual feedback when tapping the action button of a message
* log unexpected message state when resending fails
* smoother backup and "Add Second Device" progress bars
* assign messages to ad-hoc group with matching name and members
* use stricter TLS checks for HTTPS downloads (images in HTML mails, Autoconfig)
* improve logging for failed QR code scans, AEAP, Autocrypt, notification permissions and sending errors
* improve logging of multi account setup (log account ID)
* show more context for the "Cannot establish guaranteed..." info message
* show file name in "Message Info"
* show root SMTP connection failure in connectivity view
* fix: Sort received outgoing message down if it's fresher than all non fresh messages
* fix: avoid app being killed when processing a PUSH notification
* fix crash when refreshing avatar
* fix crash in gallery
* fix: shorten message text in locally sent messages too
* fix: Set http I/O timeout to 1 minute rather than whole request timeout
* fix: don't sync QR code token before populating the group
* fix: do not get stuck if the message to download does not exist anymore
* fix: do not attempt to reference info messages
* fix: do not get stuck if there is an error transferring backup
* fix: make it possible to cancel ongoing backup transfer
* fix: reset quota when entering a new address
* fix: better detection of file extensions
* fix: "database locked" errors
* fix: never initialize realtime channels if realtime is disabled
* fix reception of realtime channels
* fix: normalize proxy URLs
* fix connections getting stuck in "Updating..." sometimes
* fix scanning "add second device" QR code from scanner above chatlist
* fix warning about wrong password
* fix app getting stale when receiving a PUSH notifications takes longer
* fix app getting stale on network changes
* fix: skip IDLE if we got unsolicited FETCH
* update translations and local help
* update to core 1.148.6
## v1.46.14
2024-09
* add monochrome/themed launcher icon support
* allow to remove the selected profile in "Switch Profile" dialog
* improve display of selected profile in "Switch Profile" dialog
* improve the hit/tap area to open "Switch Profile" dialog in the main screen's toolbar
* add support for system per-app language and remove in-app language selector
* remove the experimental "encrypt database" checkbox in classic registration screen
* fix various bugs
* update to core 1.142.12
## v1.46.13
2024-08
@@ -689,7 +1049,7 @@
* fix sending status updates of private apps
* show full messages: do not load remote content for requests automatically
* using to core107.1
* using core107.1
## v1.34.12
+3 -3
View File
@@ -34,10 +34,10 @@ ENV PATH ${PATH}:${ANDROID_SDK_ROOT}/cmdline-tools/bin
# Install NDK manually. Other SDK parts are installed automatically by gradle.
#
# If you change the NDK version here, also change it in `flake.nix`.
# NDK version r23c LTS aka 23.2.8568313
RUN sdkmanager --sdk_root=${ANDROID_SDK_ROOT} 'ndk;23.2.8568313'
# NDK version r27 LTS aka 27.0.11902837
RUN sdkmanager --sdk_root=${ANDROID_SDK_ROOT} 'ndk;27.0.11902837'
ENV ANDROID_NDK_ROOT ${ANDROID_SDK_ROOT}/ndk/23.2.8568313
ENV ANDROID_NDK_ROOT ${ANDROID_SDK_ROOT}/ndk/27.0.11902837
ENV PATH ${PATH}:${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64/bin/
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none
+5 -12
View File
@@ -1,16 +1,10 @@
## ArcaneChat Android Client
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-IzzyOnDroid.png"
alt="Get it on IzzyOnDroid"
height="48">](https://apt.izzysoft.de/fdroid/index/apk/chat.delta.lite)
[<img src="store/get-it-on-apklis.png"
alt="Disponible en Apklis"
height="48">](https://www.apklis.cu/application/chat.delta.lite)
[<img src="store/get-it-on-github.png"
alt="Get it on GitHub"
height="48">](https://github.com/ArcaneChat/android/releases/latest)
[<img src="store/get-it-on-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)
<img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/1.png" width="298" /> <img alt="Screenshot" src="fastlane/metadata/android/en-US/images/phoneScreenshots/2.png" width="298" />
@@ -21,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:
@@ -37,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).
+27 -19
View File
@@ -13,25 +13,28 @@ on the command-line, in a PR called "update-core-and-stuff-DATE":
./scripts/ndk-make.sh
```
a) Update `CHANGELOG.md`
from <https://github.com/chatmail/core/blob/main/CHANGELOG.md>,
do not just copy and avoid technical terms.
The changelog is for the end user and shall show impacts form that angle.
Add used core version to end of changelog entry
as `update to core 1.2.3` or `using core 1.2.3`
2. update translations and local help:
```
./scripts/tx-pull-translations.sh
./scripts/create-local-help.sh # requires deltachat-pages checked out at ../deltachat-pages
```
the "update-core-and-stuff-DATE" PR can be merged without review
(as everything was already reviewed in their repos).
the following steps are done in a PR called `prep-VERSION` (no leading "v"):
3. update `CHANGELOG.md`
from <https://github.com/deltachat/deltachat-core-rust/blob/main/CHANGELOG.md>
and <https://github.com/deltachat/deltachat-android/pulls?q=is%3Apr+is%3Aclosed+sort%3Aupdated-desc>.
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.
3. Update `CHANGELOG.md`:
Rename header with version number and add date as `YYYY-MM`
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
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
@@ -44,7 +47,8 @@ the following steps are done in a PR called `prep-VERSION` (no leading "v"):
6. build APKs:
a) generate debug APK at "Build / Build Bundle(s)/APK / Build APK(s)"
b) generate release APK at "Build / Generate Signed Bundle or APK",
select "APK", add keys, flavor `gplayRelease`
select "APK", add keys, flavor `gplayRelease`.
this APK will go to the stores and is located at `gplay/release`
## Push Test Releases
@@ -75,16 +79,21 @@ only afterwards, push the APK to stores. **consider a blog post.**
on <https://play.google.com/apps/publish/>:
9. a) open "Delta Chat/Release/Production"
then "Create new release" and upload APK from above
9. a) open "Delta Chat / Test and release / Production"
then "Create new release" and upload APK from above
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 "Save"
c) click "Next", set "Rollout Percentage" to 50%, click "Save"
d) Go to "Publishing Overview", "Managed publishing" is usually off;
click "Send change for review", confirm
2 days later, change "Rollout Percentage" to 99%. Two more days later to 100%.
Rollout is anyways slower in practise, however,
only as long as we do not enter 100%, we can retract the version
(Once we reach 100%, we have to submit a new version for approval.
During these up to 4 days, sometimes longer, we cannot do anything on existing rollout)
## Tag for F-Droid and create Github release
@@ -104,12 +113,11 @@ This may take some days.
on <https://developer.amazon.com/dashboard>:
12. a) for "Delta Chat", select "Add upcoming version" on the left
12. a) click "App List", for "Delta Chat", select "Add upcoming version" on the left
b) at "Step 1 / Existing file(s)" hit "Replace", upload the APK from above
c) on the "Step 1" page, add "Release notes" from CHANGELOG.md, hit "Next"
d) on "Step 2" page: "Does your app collect or transfer user data to third parties?" -> No, then "Next"
e) on "Step 3" page: "Next"
f) on "Step 4" page: "Submit app"
d) on "Step 2" and "Step 3" pages, hit "Next"
e) on "Step 4" page: "Submit app"
## Release on Huawei AppGallery
@@ -122,7 +130,7 @@ on <https://developer.huawei.com/consumer/en/appgallery>:
d) Hit "Submit"; on the next page, confirm version and language
## Releases on Apklis, Passkoocheh
## Releases on other stores (ex. Passkoocheh)
These stores are not under our control.
On important updates **ping store maintainers** and ask to update.
+65 -54
View File
@@ -1,5 +1,5 @@
plugins {
id 'com.android.application' version '8.1.4'
id 'com.android.application' version '8.11.1'
id 'com.google.gms.google-services' version '4.4.1'
}
@@ -21,7 +21,7 @@ android {
}
namespace "org.thoughtcrime.securesms"
flavorDimensions "none"
compileSdk 34
compileSdk 35
// Set NDK version to strip native libraries.
// Even though we compile our libraries outside Gradle with `scripts/ndk-make.sh`,
@@ -29,18 +29,18 @@ android {
// > Task :stripFatDebugDebugSymbols
// Unable to strip the following libraries, packaging them as they are: libanimation-decoder-gif.so, libnative-utils.so.
// See <https://issuetracker.google.com/issues/237187538> for details.
ndkVersion "23.2.8568313"
ndkVersion "27.0.12077973"
useLibrary 'org.apache.http.legacy'
defaultConfig {
versionCode 30000689
versionName "1.46.17"
versionCode 30000729
versionName "2.20.0"
applicationId "chat.delta.lite"
multiDexEnabled true
minSdkVersion 21
targetSdkVersion 34
targetSdkVersion 35
vectorDrawables.useSupportLibrary = true
@@ -87,15 +87,45 @@ android {
storeFile file(DC_DEBUG_STORE_FILE )
}
}
release {
releaseFdroid {
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
storeFile file(DC_RELEASE_STORE_FILE)
storePassword DC_RELEASE_STORE_PASSWORD
keyAlias DC_RELEASE_KEY_ALIAS
keyAlias DC_RELEASE_KEY_ALIAS_FDROID
keyPassword DC_RELEASE_KEY_PASSWORD
}
}
releaseApk {
// can be defined at `~/.gradle/gradle.properties` or at "Build/Generate signed APK"
if(project.hasProperty("DC_RELEASE_STORE_FILE")) {
storeFile file(DC_RELEASE_STORE_FILE)
storePassword DC_RELEASE_STORE_PASSWORD
keyAlias DC_RELEASE_KEY_ALIAS_GPLAY
keyPassword DC_RELEASE_KEY_PASSWORD
}
}
releaseBundle {
if(project.hasProperty("DC_BUNDLE_STORE_FILE")) {
storeFile file(DC_BUNDLE_STORE_FILE)
storePassword DC_BUNDLE_STORE_PASSWORD
keyAlias DC_BUNDLE_KEY_ALIAS
keyPassword DC_BUNDLE_STORE_PASSWORD
}
}
}
productFlavors {
foss {
dimension "none"
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
}
gplay {
dimension "none"
apply plugin: "com.google.gms.google-services"
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
applicationId "com.github.arcanechat"
}
}
buildTypes {
@@ -114,23 +144,12 @@ android {
// nb: it is highly recommended to use the same settings in debug+release -
// otherwise problems might be noticed delayed only
minifyEnabled true
signingConfig signingConfigs.release
productFlavors.foss.signingConfig signingConfigs.releaseFdroid
productFlavors.gplay.signingConfig signingConfigs.releaseApk
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
productFlavors {
foss {
dimension "none"
buildConfigField "boolean", "USE_PLAY_SERVICES", "false"
}
gplay {
dimension "none"
apply plugin: "com.google.gms.google-services"
buildConfigField "boolean", "USE_PLAY_SERVICES", "true"
}
}
if(!project.hasProperty("ABI_FILTER")) {
splits {
abi {
@@ -190,9 +209,9 @@ dependencies {
implementation 'com.airbnb.android:lottie:4.2.2' // Lottie animations support.
implementation 'androidx.sharetarget:sharetarget:1.2.0'
implementation 'androidx.webkit:webkit:1.11.0'
implementation 'androidx.webkit:webkit:1.14.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.appcompat:appcompat:1.7.0'
implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation ('androidx.preference:preference:1.2.1') {
@@ -200,68 +219,60 @@ dependencies {
exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx'
}
implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.3.7'
implementation 'androidx.exifinterface:exifinterface:1.4.1'
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.9.1'
implementation 'androidx.emoji2:emoji2-emojipicker:1.4.0'
implementation 'androidx.emoji2:emoji2-emojipicker:1.5.0'
implementation 'com.google.guava:guava:31.1-android'
implementation 'com.google.android.exoplayer:exoplayer-core:2.19.1' // plays video and audio
implementation 'com.google.android.exoplayer:exoplayer-ui:2.19.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
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.github.penfeizhou.android.animation:glide-plugin:2.25.0' // APNG & animated webp support.
implementation 'com.github.Baseflow:PhotoView:2.3.0' // 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.8.2'
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.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
annotationProcessor 'androidx.annotation:annotation:1.9.1'
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
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.getkeepsafe.relinker:relinker:1.4.4' // needed to avoid safe-content-resolver-v14 trying to fetch older non-existing version
// Replacement for ContentResolver
// that protects against the Surreptitious Sharing attack.
// <https://github.com/cketti/SafeContentResolver>
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v14:1.0.0'
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0'
gplayImplementation('com.google.firebase:firebase-messaging:24.0.0') { // for PUSH notifications
gplayImplementation('com.google.firebase:firebase-messaging:24.1.2') { // for PUSH notifications, don't upgrade: v25.0.0 requires minSdk>=23
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.2'
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'
testImplementation 'org.assertj:assertj-core:3.27.3'
testImplementation 'org.mockito:mockito-core:5.18.0'
testImplementation 'org.powermock:powermock-api-mockito:1.7.4'
testImplementation 'org.powermock:powermock-module-junit4:2.0.9'
testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.9'
testImplementation 'org.powermock:powermock-classloading-xstream:2.0.9'
androidTestImplementation 'androidx.test:runner:1.6.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.6.1'
androidTestImplementation 'androidx.test:rules:1.6.1'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test:runner:1.7.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.7.0'
androidTestImplementation 'androidx.test:rules:1.7.0'
androidTestImplementation 'androidx.test.ext:junit:1.3.0'
androidTestImplementation 'com.android.support:support-annotations:28.0.0'
androidTestImplementation ('org.assertj:assertj-core:1.7.1') {
androidTestImplementation ('org.assertj:assertj-core:3.27.3') {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
}
@@ -1,40 +1,39 @@
ArcaneChat is a decentralized and secure messenger app that is
completely 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 dont 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.
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.
<b>Main differences with official Delta Chat client:</b>
<ul>
<li>Basic markdown support (bold, italic, strike, etc.)</li>
<li>Support for some markdown styles in text messages (bold, italic, strike, etc.)</li>
<li>Support for displaying Telegram's animated stickers (.tgs files)</li>
<li>Support for SVG images previews</li>
<li>Multiple color themes/skins</li>
<li>It is possible to enable/disable accounts</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>Replies to your messages in muted groups trigger notifications</li>
<li>Location streaming feature enabled by default and have 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>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>Account's display name is shown in the app's title bar instead of the name of the app</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 differences in the WebXDC API, check https://github.com/ArcaneChat/android/#webxdc</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>
</ul>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Generated
+26 -94
View File
@@ -3,15 +3,15 @@
"android": {
"inputs": {
"devshell": "devshell",
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1710633978,
"narHash": "sha256-yemnwSvW7cdWtXGpivFA5jDO35rGPs6fqxlQ4l6ODXs=",
"lastModified": 1756239746,
"narHash": "sha256-0ibN685tT+u/Nbmbrrq9G3mRUzct2Votyv/a7Wwv26s=",
"owner": "tadfisher",
"repo": "android-nixpkgs",
"rev": "e91fb3d8517538e5ad9b422c9a4f604b56008a9e",
"rev": "256631d162ec883b2341ee59621516e1f65f0f6b",
"type": "github"
},
"original": {
@@ -22,18 +22,17 @@
},
"devshell": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"android",
"nixpkgs"
]
},
"locked": {
"lastModified": 1708939976,
"narHash": "sha256-O5+nFozxz2Vubpdl1YZtPrilcIXPcRAjqNdNE8oCRoA=",
"lastModified": 1741473158,
"narHash": "sha256-kWNaq6wQUbUMlPgw8Y+9/9wP0F8SHkjy24/mN3UAppg=",
"owner": "numtide",
"repo": "devshell",
"rev": "5ddecd67edbd568ebe0a55905273e56cc82aabe3",
"rev": "7c9e793ebe66bcba8292989a68c0419b737a22a0",
"type": "github"
},
"original": {
@@ -47,11 +46,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@@ -65,47 +64,11 @@
"systems": "systems_2"
},
"locked": {
"lastModified": 1709126324,
"narHash": "sha256-q6EQdSeUZOG26WelxqkmR7kArjgWCdw5sfJVHPH/7j8=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "d465f4819400de7c8d874d50b982301f28a84605",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"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": 1705309234,
"narHash": "sha256-uNRRNRKmJyCRC/8y1RqBkqWBLM034y4qN7EprSdmgyA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "1ef2e671c3b0c19053962c07dbda38332dcebf26",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@@ -116,11 +79,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1709237383,
"narHash": "sha256-cy6ArO4k5qTx+l5o+0mL9f5fa86tYUX3ozE1S+Txlds=",
"lastModified": 1756125398,
"narHash": "sha256-XexyKZpf46cMiO5Vbj+dWSAXOnr285GHsMch8FBoHbc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1536926ef5621b09bba54035ae2bb6d806d72ac8",
"rev": "3b9f00d7a7bf68acd4c4abb9d43695afb04e03a5",
"type": "github"
},
"original": {
@@ -132,11 +95,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1710889954,
"narHash": "sha256-Pr6F5Pmd7JnNEMHHmspZ0qVqIBVxyZ13ik1pJtm2QXk=",
"lastModified": 1756159630,
"narHash": "sha256-ohMvsjtSVdT/bruXf5ClBh8ZYXRmD4krmjKrXhEvwMg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7872526e9c5332274ea5932a0c3270d6e4724f3b",
"rev": "84c256e42600cb0fdf25763b48d28df2f25a0c8b",
"type": "github"
},
"original": {
@@ -148,11 +111,11 @@
},
"nixpkgs_3": {
"locked": {
"lastModified": 1706487304,
"narHash": "sha256-LE8lVX28MV2jWJsidW13D2qrHU/RUUONendL2Q/WlJg=",
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "90f456026d284c22b3e3497be980b2e47d0b28ac",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
@@ -165,22 +128,21 @@
"root": {
"inputs": {
"android": "android",
"flake-utils": "flake-utils_3",
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_2",
"rust-overlay": "rust-overlay"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1711073443,
"narHash": "sha256-PpNb4xq7U5Q/DdX40qe7CijUsqhVVM3VZrhN0+c6Lcw=",
"lastModified": 1756197489,
"narHash": "sha256-S16rPaBH1TnMbDyL5NlGSJcYd7wPlOEWTStdBDL7BHw=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "eec55ba9fcde6be4c63942827247e42afef7fafe",
"rev": "8ec04f46f1edeeed3f870da62191745b93975da7",
"type": "github"
},
"original": {
@@ -218,36 +180,6 @@
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
+8 -6
View File
@@ -15,20 +15,22 @@
pkgs = import nixpkgs { inherit system overlays; };
android-sdk = android.sdk.${system} (sdkPkgs:
with sdkPkgs; [
build-tools-33-0-1
build-tools-35-0-0
cmdline-tools-latest
ndk-bundle
platform-tools
platforms-android-34
ndk-23-2-8568313
platforms-android-35
ndk-27-2-12479018
]);
rust-version = pkgs.lib.removeSuffix "\n"
(builtins.readFile ./scripts/rust-toolchain);
in {
in
{
formatter = pkgs.nixpkgs-fmt;
devShells.default = pkgs.mkShell {
ANDROID_SDK_ROOT = "${android-sdk}/share/android-sdk";
ANDROID_NDK_ROOT =
"${android-sdk}/share/android-sdk/ndk/23.2.8568313";
"${android-sdk}/share/android-sdk/ndk/27.2.12479018";
buildInputs = [
android-sdk
pkgs.openjdk17
+4 -4
View File
@@ -28,7 +28,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:6f54e2c4e49405673e2bb9",
"android_client_info": {
"package_name": "chat.delta.lite.beta"
"package_name": "com.github.arcanechat.beta"
}
},
"oauth_client": [],
@@ -47,7 +47,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:aff82fbc40c8172e3e2bb9",
"android_client_info": {
"package_name": "chat.delta.lite"
"package_name": "com.github.arcanechat"
}
},
"oauth_client": [],
@@ -66,7 +66,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:92b4cf12669cc2083e2bb9",
"android_client_info": {
"package_name": "com.github.arcanechat"
"package_name": "chat.delta.lite"
}
},
"oauth_client": [],
@@ -85,7 +85,7 @@
"client_info": {
"mobilesdk_app_id": "1:922391085500:android:228a205b8aa2bacc3e2bb9",
"android_client_info": {
"package_name": "com.github.arcanechat.beta"
"package_name": "chat.delta.lite.beta"
}
},
"oauth_client": [],
-1
View File
@@ -1,6 +1,5 @@
android.defaults.buildfeatures.buildconfig=true
android.enableJetifier=true
android.nonFinalResIds=false
android.nonTransitiveRClass=false
android.useAndroidX=true
org.gradle.jvmargs=-Xmx4608m
+2 -2
View File
@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip
distributionSha256Sum=20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
+100 -139
View File
@@ -7,57 +7,6 @@
#include "deltachat-core-rust/deltachat-ffi/deltachat.h"
#if __ANDROID_API__ == 16
unsigned long getauxval(unsigned long type) {
return 0;
}
#include <sys/socket.h>
#include <unistd.h>
int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
int flags)
{
if (flags != 0) {
// Not supported by the fallback.
return -1;
}
if (vlen == 0) {
return 0;
}
ssize_t n = sendmsg(sockfd, &msgvec->msg_hdr, flags);
if (n == -1) {
return -1;
}
(*msgvec).msg_len = n;
return 1;
}
int recvmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen,
int flags, struct timespec *timeout)
{
if (flags != 0) {
// Not supported by the fallback.
return -1;
}
if (vlen == 0) {
return 0;
}
int n = recvmsg(sockfd, &msgvec->msg_hdr, flags);
if (n == -1) {
return -1;
}
(*msgvec).msg_len = n;
return 1;
}
#endif
static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj);
@@ -276,9 +225,9 @@ JNIEXPORT void Java_com_b44t_messenger_DcAccounts_setPushDeviceToken(JNIEnv *env
}
JNIEXPORT jint Java_com_b44t_messenger_DcAccounts_addAccount(JNIEnv *env, jobject obj)
JNIEXPORT jboolean Java_com_b44t_messenger_DcAccounts_backgroundFetch(JNIEnv *env, jobject obj, jint timeout_seconds)
{
return dc_accounts_add_account(get_dc_accounts(env, obj));
return dc_accounts_background_fetch(get_dc_accounts(env, obj), timeout_seconds) != 0;
}
@@ -704,6 +653,14 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jobj
}
JNIEXPORT void Java_com_b44t_messenger_DcContext_sendEditRequest(JNIEnv *env, jobject obj, jint msg_id, jstring text)
{
CHAR_REF(text);
dc_send_edit_request(get_dc_context(env, obj), msg_id, textPtr);
CHAR_UNREF(text);
}
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgHtml(JNIEnv *env, jobject obj, jint msg_id)
{
char* temp = dc_get_msg_html(get_dc_context(env, obj), msg_id);
@@ -728,6 +685,15 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jobject
}
JNIEXPORT void Java_com_b44t_messenger_DcContext_sendDeleteRequest(JNIEnv *env, jobject obj, jintArray msg_ids)
{
int msg_ids_cnt = 0;
uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
dc_send_delete_request(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr);
}
JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobject obj, jintArray msg_ids, jint chat_id)
{
int msg_ids_cnt = 0;
@@ -736,6 +702,13 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobjec
free(msg_ids_ptr);
}
JNIEXPORT void Java_com_b44t_messenger_DcContext_saveMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
{
int msg_ids_cnt = 0;
uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
dc_save_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr);
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_resendMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
{
@@ -747,12 +720,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_resendMsgs(JNIEnv *env, job
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_prepareMsg(JNIEnv *env, jobject obj, jint chat_id, jobject msg)
{
return dc_prepare_msg(get_dc_context(env, obj), chat_id, get_dc_msg(env, msg));
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMsg(JNIEnv *env, jobject obj, jint chat_id, jobject msg)
{
return dc_send_msg(get_dc_context(env, obj), chat_id, get_dc_msg(env, msg));
@@ -768,18 +735,10 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jobjec
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendVideochatInvitation(JNIEnv *env, jobject obj, jint chat_id)
{
return (jint)dc_send_videochat_invitation(get_dc_context(env, obj), chat_id);
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_sendWebxdcStatusUpdate(JNIEnv *env, jobject obj, jint msg_id, jstring payload, jstring descr)
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_sendWebxdcStatusUpdate(JNIEnv *env, jobject obj, jint msg_id, jstring payload)
{
CHAR_REF(payload);
CHAR_REF(descr);
jboolean ret = dc_send_webxdc_status_update(get_dc_context(env, obj), msg_id, payloadPtr, descrPtr) != 0;
CHAR_UNREF(descr);
jboolean ret = dc_send_webxdc_status_update(get_dc_context(env, obj), msg_id, payloadPtr, NULL) != 0;
CHAR_UNREF(payload);
return ret;
}
@@ -848,7 +807,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jobje
}
dc_str_unref(temp);
CHAR_UNREF(key);
return ret; /* returns NULL only if key is unset and "def" is NULL */
return ret;
}
@@ -878,6 +837,16 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQrSvg(JNIEnv *e
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_createQrSvg(JNIEnv *env, jobject obj, jstring payload)
{
CHAR_REF(payload);
char* temp = dc_create_qr_svg(payloadPtr);
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
CHAR_UNREF(payload);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jobject obj, jstring qr)
{
CHAR_REF(qr);
@@ -947,15 +916,6 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jobject obj, jint msg_id, jstring setupCode)
{
CHAR_REF(setupCode);
jboolean ret = dc_continue_key_transfer(get_dc_context(env, obj), msg_id, setupCodePtr);
CHAR_UNREF(setupCode);
return ret;
}
JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jobject obj, jint what, jstring dir)
{
CHAR_REF(dir);
@@ -1271,6 +1231,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcChat_getColor(JNIEnv *env, jobject obj)
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isEncrypted(JNIEnv *env, jobject obj)
{
return dc_chat_is_encrypted(get_dc_chat(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj)
{
return dc_chat_is_unpromoted(get_dc_chat(env, obj))!=0;
@@ -1300,11 +1266,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isProtected(JNIEnv *env, jobje
return dc_chat_is_protected(get_dc_chat(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isProtectionBroken(JNIEnv *env, jobject obj)
{
return dc_chat_is_protection_broken(get_dc_chat(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSendingLocations(JNIEnv *env, jobject obj)
{
@@ -1325,12 +1286,6 @@ JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env,
}
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir, jint type1, jint type2, jint type3)
{
return dc_get_next_media(get_dc_context(env, obj), msg_id, dir, type1, type2, type3);
}
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jobject obj, jint chat_id, jint flags, jint marker1before)
{
dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, obj), chat_id, flags, marker1before);
@@ -1413,17 +1368,6 @@ JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getId(JNIEnv *env, jobject obj)
return dc_msg_get_id(get_dc_msg(env, obj));
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isOutgoing(JNIEnv *env, jobject obj)
{
return (jboolean)(dc_msg_is_outgoing(get_dc_msg(env, obj))!=0);
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSenderColor(JNIEnv *env, jobject obj)
{
return dc_msg_get_sender_color(get_dc_msg(env, obj));
}
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getText(JNIEnv *env, jobject obj)
{
char* temp = dc_msg_get_text(get_dc_msg(env, obj));
@@ -1478,6 +1422,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getInfoType(JNIEnv *env, jobject ob
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getInfoContactId(JNIEnv *env, jobject obj)
{
return dc_msg_get_info_contact_id(get_dc_msg(env, obj));
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getState(JNIEnv *env, jobject obj)
{
return dc_msg_get_state(get_dc_msg(env, obj));
@@ -1616,30 +1566,27 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getWebxdcInfoJson(JNIEnv *env, j
}
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getWebxdcHref(JNIEnv *env, jobject obj)
{
char* temp = dc_msg_get_webxdc_href(get_dc_msg(env, obj));
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
return ret;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isForwarded(JNIEnv *env, jobject obj)
{
return dc_msg_is_forwarded(get_dc_msg(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isIncreation(JNIEnv *env, jobject obj)
{
return dc_msg_is_increation(get_dc_msg(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isInfo(JNIEnv *env, jobject obj)
{
return dc_msg_is_info(get_dc_msg(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isSetupMessage(JNIEnv *env, jobject obj)
{
return dc_msg_is_setupmessage(get_dc_msg(env, obj));
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_hasHtml(JNIEnv *env, jobject obj)
{
return dc_msg_has_html(get_dc_msg(env, obj))!=0;
@@ -1655,21 +1602,6 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getSetupCodeBegin(JNIEnv *env, j
}
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getVideochatUrl(JNIEnv *env, jobject obj)
{
char* temp = dc_msg_get_videochat_url(get_dc_msg(env, obj));
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
return ret;
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getVideochatType(JNIEnv *env, jobject obj)
{
return (jint)dc_msg_get_videochat_type(get_dc_msg(env, obj));
}
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setSubject(JNIEnv *env, jobject obj, jstring text)
{
CHAR_REF(text);
@@ -1694,12 +1626,35 @@ JNIEXPORT void Java_com_b44t_messenger_DcMsg_setHtml(JNIEnv *env, jobject obj, j
}
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFile(JNIEnv *env, jobject obj, jstring file, jstring filemime)
JNIEXPORT void Java_com_b44t_messenger_DcMsg_forceSticker(JNIEnv *env, jobject obj)
{
dc_msg_force_sticker(get_dc_msg(env, obj));
}
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getPOILocation(JNIEnv *env, jobject obj)
{
char* temp = dc_msg_get_poi_location(get_dc_msg(env, obj));
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
return ret;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isEdited(JNIEnv *env, jobject obj)
{
return dc_msg_is_edited(get_dc_msg(env, obj));
}
JNIEXPORT void Java_com_b44t_messenger_DcMsg_setFileAndDeduplicate(JNIEnv *env, jobject obj, jstring file, jstring name, jstring filemime)
{
CHAR_REF(file);
CHAR_REF(name);
CHAR_REF(filemime);
dc_msg_set_file(get_dc_msg(env, obj), filePtr, filemimePtr);
dc_msg_set_file_and_deduplicate(get_dc_msg(env, obj), filePtr, namePtr, filemimePtr);
CHAR_UNREF(filemime);
CHAR_UNREF(name);
CHAR_UNREF(file);
}
@@ -1748,6 +1703,15 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getParentCPtr(JNIEnv *env, jobject
return (jlong)dc_msg_get_parent(get_dc_msg(env, obj));
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getOriginalMsgId(JNIEnv *env, jobject obj)
{
return (jint)dc_msg_get_original_msg_id(get_dc_msg(env, obj));
}
JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getSavedMsgId(JNIEnv *env, jobject obj)
{
return (jint)dc_msg_get_saved_msg_id(get_dc_msg(env, obj));
}
JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getError(JNIEnv *env, jobject obj)
{
@@ -1825,15 +1789,6 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getAddr(JNIEnv *env, jobject
}
JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getNameNAddr(JNIEnv *env, jobject obj)
{
char* temp = dc_contact_get_name_n_addr(get_dc_contact(env, obj));
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
return ret;
}
JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getProfileImage(JNIEnv *env, jobject obj)
{
char* temp = dc_contact_get_profile_image(get_dc_contact(env, obj));
@@ -1881,6 +1836,12 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isVerified(JNIEnv *env, job
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isKeyContact(JNIEnv *env, jobject obj)
{
return dc_contact_is_key_contact(get_dc_contact(env, obj))==1;
}
JNIEXPORT jint Java_com_b44t_messenger_DcContact_getVerifierId(JNIEnv *env, jobject obj)
{
return dc_contact_get_verifier_id(get_dc_contact(env, obj));
+5 -9
View File
@@ -1,15 +1,11 @@
# native methods
-keep class com.b44t.messenger.** { * ; }
# Gson uses generic type information stored in a class file when working with
# fields. Proguard removes such information by default, keep it.
-keepattributes Signature
# This is also needed for R8 in compat mode since multiple
# optimizations will remove the generic signature such as class
# merging and argument removal. See:
# https://r8.googlesource.com/r8/+/refs/heads/main/compatibility-faq.md#troubleshooting-gson-gson
-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
# Keep metadata needed by the JSON parser
-keep class chat.delta.rpc.** { * ; }
-keepattributes *Annotation*,EnclosingMethod,Signature
-keepnames class com.fasterxml.jackson.** { *; }
#-dontwarn com.fasterxml.jackson.databind.**
# bug with video recoder
-keep class com.coremedia.iso.** { *; }
+1 -1
View File
@@ -1 +1 @@
../deltachat-pages/tools/create-local-help.py ../deltachat-pages/_site src/main/assets/help
../deltachat-pages/tools/create-local-help.py ../deltachat-pages/result src/main/assets/help
+2 -2
View File
@@ -11,13 +11,13 @@ echo "==================== ANDROID USAGE ===================="
grep --exclude={*.apk,*.a,*.o,*.so,strings.xml,*symbols.zip} --exclude-dir={.git,.gradle,obj,release,.idea,build,deltachat-core-rust} -ri $TEXT .
echo "==================== IOS USAGE ===================="
grep --exclude=*.strings --exclude-dir={.git,libraries,Pods,deltachat-ios.xcodeproj,deltachat-ios.xcworkspace} -ri $TEXT ../deltachat-ios/
grep --exclude=*.strings* --exclude-dir={.git,libraries,Pods,deltachat-ios.xcodeproj,deltachat-ios.xcworkspace} -ri $TEXT ../deltachat-ios/
echo "==================== DESKTOP USAGE ===================="
grep --exclude-dir={.cache,.git,html-dist,node_modules,_locales} -ri $TEXT ../deltachat-desktop/
echo "==================== JSONRPC USAGE ===================="
grep --exclude-dir={.git} -ri $TEXT ../deltachat-core-rust/deltachat-jsonrpc
grep --exclude-dir={.git} -ri $TEXT ../chatmail/core/deltachat-jsonrpc
echo "==================== UBUNTU TOUCH USAGE ===================="
grep --exclude-dir={.git} -ri $TEXT ../deltatouch/
+25 -19
View File
@@ -53,7 +53,6 @@ fi
# for reproducible build:
export RUSTFLAGS="-C link-args=-Wl,--build-id=none --remap-path-prefix=$HOME/.cargo= --remap-path-prefix=$(realpath $(dirname $(dirname "$0")))="
export SOURCE_DATE_EPOCH=1
export CARGO_TARGET_DIR=/tmp/arcanechat-build
# always use the same path to NDK:
rm -f /tmp/android-ndk-root
ln -s "$ANDROID_NDK_ROOT" /tmp/android-ndk-root
@@ -74,10 +73,14 @@ if test -z "$NDK_HOST_TAG"; then
NDK_HOST_TAG="$KERNEL-$ARCH"
fi
if test -z "$CARGO_TARGET_DIR"; then
export CARGO_TARGET_DIR=/tmp/arcanechat-build
fi
TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG"
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi16-clang"
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang"
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang"
export CARGO_TARGET_I686_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/i686-linux-android16-clang"
export CARGO_TARGET_I686_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/i686-linux-android21-clang"
export CARGO_TARGET_X86_64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/x86_64-linux-android21-clang"
export RUSTUP_TOOLCHAIN=$(cat "$(dirname "$0")/rust-toolchain")
@@ -123,11 +126,11 @@ unset CPATH
if test -z $1 || test $1 = armeabi-v7a; then
echo "-- cross compiling to armv7-linux-androideabi (arm) --"
TARGET_CC="$TOOLCHAIN/bin/armv7a-linux-androideabi16-clang" \
TARGET_CC="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang" \
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi --features jsonrpc
cp $CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a $jnidir/armeabi-v7a
cargo build $RELEASEFLAG --target armv7-linux-androideabi -p deltachat_ffi
cp "$CARGO_TARGET_DIR/armv7-linux-androideabi/$RELEASE/libdeltachat.a" "$jnidir/armeabi-v7a"
fi
if test -z $1 || test $1 = arm64-v8a; then
@@ -135,27 +138,27 @@ if test -z $1 || test $1 = arm64-v8a; then
TARGET_CC="$TOOLCHAIN/bin/aarch64-linux-android21-clang" \
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi --features jsonrpc
cp $CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a $jnidir/arm64-v8a
cargo build $RELEASEFLAG --target aarch64-linux-android -p deltachat_ffi
cp "$CARGO_TARGET_DIR/aarch64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/arm64-v8a"
fi
if test -z $1 || test $1 = x86; then
echo "-- cross compiling to i686-linux-android (x86) --"
TARGET_CC="$TOOLCHAIN/bin/i686-linux-android16-clang" \
TARGET_CC="$TOOLCHAIN/bin/i686-linux-android21-clang" \
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi --features jsonrpc
cp $CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a $jnidir/x86
cargo build $RELEASEFLAG --target i686-linux-android -p deltachat_ffi
cp "$CARGO_TARGET_DIR/i686-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86"
fi
if test -z $1 || test $1 = x86_64; then
echo "-- cross compiling to x86_64-linux-android (x86_64) --"
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi --features jsonrpc
cp $CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a $jnidir/x86_64
fi
if test -z $1 || test $1 = x86_64; then
echo "-- cross compiling to x86_64-linux-android (x86_64) --"
TARGET_CC="$TOOLCHAIN/bin/x86_64-linux-android21-clang" \
TARGET_AR="$TOOLCHAIN/bin/llvm-ar" \
TARGET_RANLIB="$TOOLCHAIN/bin/llvm-ranlib" \
cargo build $RELEASEFLAG --target x86_64-linux-android -p deltachat_ffi
cp "$CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86_64"
fi
echo -- ndk-build --
@@ -174,4 +177,7 @@ else
rm -f ndkArch # Remove ndkArch, ignore if it doesn't exist
fi
"$(dirname "$0")/rebrand.sh"
echo "ending time: `date`"
+8
View File
@@ -0,0 +1,8 @@
#!/bin/sh
find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/get.delta.chat/github.com\/ArcaneChat/g'
find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/Delta Chat/ArcaneChat/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/get.delta.chat/github.com\/ArcaneChat/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/delta.chat\/donate/arcanechat.me\/#contribute/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/Delta Chat/ArcaneChat/g'
+1 -1
View File
@@ -1 +1 @@
1.77.0
1.86.0
+11
View File
@@ -0,0 +1,11 @@
#!/bin/sh
find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/github.com\/ArcaneChat/get.delta.chat/g'
find ./src/main/assets/help/ -type f -name '*.html' | xargs sed -i 's/ArcaneChat/Delta Chat/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/github.com\/ArcaneChat/get.delta.chat/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/arcanechat.me\/#contribute/delta.chat\/donate/g'
find ./src/ -type f -name 'strings.xml' | xargs sed -i 's/ArcaneChat/Delta Chat/g'
# don't revert the app name
sed -i 's/>Delta Chat</>ArcaneChat</g' ./src/main/res/values/strings.xml
+2
View File
@@ -1,3 +1,5 @@
#!/usr/bin/env bash
set -e # stop on all errors
git submodule update --init --recursive
+1 -1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
VERSION=$1
@@ -29,7 +30,6 @@ 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 (google play candidate, overwrites existing installs, should keep data)"
echo "- 🍉 https://download.delta.chat/android/beta/deltachat-foss-debug-$VERSION.apk (f-droid candidate, can be installed beside google play)"
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"
+1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env bash
VERSION=$1
@@ -1,5 +1,11 @@
package com.b44t.messenger;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
@@ -23,12 +29,6 @@ import org.thoughtcrime.securesms.util.AccessibilityUtil;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.Util;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
public class TestUtils {
private static int createdAccountId = 0;
private static boolean resetEnterSends = false;
@@ -1,5 +1,14 @@
package com.b44t.messenger.uibenchmarks;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.Espresso.pressBack;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import android.util.Log;
import androidx.test.espresso.contrib.RecyclerViewActions;
@@ -17,15 +26,6 @@ import org.junit.runner.RunWith;
import org.thoughtcrime.securesms.ConversationListActivity;
import org.thoughtcrime.securesms.R;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.Espresso.pressBack;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
@Ignore("This is not a test, but a benchmark. Remove the @Ignore to run it.")
@RunWith(AndroidJUnit4.class)
@LargeTest
@@ -1,5 +1,16 @@
package com.b44t.messenger.uitests.offline;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.Espresso.pressBack;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
import android.content.ComponentName;
import android.content.Intent;
import android.net.Uri;
@@ -25,17 +36,6 @@ import org.thoughtcrime.securesms.connect.DcHelper;
import java.io.File;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.Espresso.pressBack;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.hasDescendant;
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;
@RunWith(AndroidJUnit4.class)
@LargeTest
@@ -93,7 +93,7 @@ public class SharingTest {
}
}
Uri uri = Uri.parse("content://" + BuildConfig.APPLICATION_ID + ".attachments/" + Uri.encode(pngImage));
DcHelper.sharedFiles.put("/" + pngImage, 1);
DcHelper.sharedFiles.put(pngImage, "image/png");
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("image/png");
@@ -1,6 +1,15 @@
package com.b44t.messenger.uitests.online;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import android.text.TextUtils;
import androidx.test.ext.junit.rules.ActivityScenarioRule;
@@ -17,15 +26,6 @@ import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.WelcomeActivity;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.replaceText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isClickable;
import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription;
import static androidx.test.espresso.matcher.ViewMatchers.withHint;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
@RunWith(AndroidJUnit4.class)
@LargeTest
public class OnboardingTest {
@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms.notifications;
import android.content.Context;
import androidx.annotation.Nullable;
/*
@@ -17,7 +17,7 @@ import com.google.firebase.messaging.RemoteMessage;
import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.service.FetchForegroundService;
import org.thoughtcrime.securesms.util.Util;
public class FcmReceiveService extends FirebaseMessagingService {
@@ -28,11 +28,6 @@ public class FcmReceiveService extends FirebaseMessagingService {
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");
@@ -92,18 +87,17 @@ public class FcmReceiveService extends FirebaseMessagingService {
return prefixedToken;
}
@WorkerThread
@Override
public void onMessageReceived(@NonNull RemoteMessage remoteMessage) {
Log.i(TAG, "FCM push notification received");
// the app is running (again) now and fetching and notifications should be processed as usual.
// to support accounts that do not send PUSH notifications and for simplicity,
// we just let the app run as long as possible.
FetchForegroundService.start(this);
}
@Override
public void onDeletedMessages() {
Log.i(TAG, "FCM push notifications dropped");
// nothing special to do as we're running now and notifications should be processed as usual.
FetchForegroundService.start(this);
}
@Override
+55 -16
View File
@@ -20,7 +20,6 @@
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="29" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
@@ -66,6 +65,10 @@
android:resource="@xml/automotive_app_desc" />
-->
<!-- Opt out of metrics collection: https://developer.android.com/develop/ui/views/layout/webapps/managing-webview#metrics -->
<meta-data android:name="android.webkit.WebView.MetricsOptOut"
android:value="true" />
<activity android:name=".ShareActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:excludeFromRecents="true"
@@ -75,17 +78,6 @@
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.GET_CONTENT"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="content"/>
<data android:scheme="file"/>
<data android:mimeType="*/*" />
<data android:mimeType="application/octet-stream" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT"/>
@@ -221,8 +213,6 @@
<intent-filter>
<data android:scheme="mailto"/>
<data android:scheme="http"/>
<data android:scheme="https"/>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
@@ -262,6 +252,26 @@
</intent-filter>
</activity>
<activity android:name=".proxy.ProxySettingsActivity"
android:label="@string/proxy_settings"
android:windowSoftInputMode="stateHidden"
android:exported="true"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<!-- Android's scheme matcher is case-sensitive, so include most likely variations -->
<data android:scheme="ss" />
<data android:scheme="socks5" />
<data android:scheme="SOCKS5" tools:ignore="AppLinkUrlError" />
<data android:scheme="SS" tools:ignore="AppLinkUrlError" />
</intent-filter>
</activity>
<activity android:name=".LogViewActivity"
android:label="@string/pref_log_header"
android:windowSoftInputMode="stateHidden"
@@ -277,6 +287,10 @@
android:theme="@style/TextSecure.LightNoActionBar"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".AllMediaActivity"
android:theme="@style/TextSecure.LightNoActionBar"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".DummyActivity"
android:theme="@android:style/Theme.NoDisplay"
android:enabled="true"
@@ -305,8 +319,6 @@
android:theme="@style/TextSecure.ScribbleTheme"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name="com.soundcloud.android.crop.CropImageActivity" />
<activity android:name=".InstantOnboardingActivity"
android:theme="@style/TextSecure.LightTheme"
android:windowSoftInputMode="stateHidden|adjustResize"
@@ -358,6 +370,13 @@
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
</activity>
<activity android:name=".calls.CallActivity"
android:label=""
android:theme="@style/TextSecure.LightTheme"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode"
android:exported="true">
</activity>
<activity android:name=".WebxdcActivity"
android:label=""
android:theme="@style/TextSecure.LightTheme"
@@ -365,6 +384,11 @@
android:exported="true">
</activity>
<activity android:name=".WebxdcStoreActivity"
android:theme="@style/TextSecure.LightTheme"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize|uiMode">
</activity>
<activity android:name=".FullMsgActivity"
android:theme="@style/TextSecure.LightTheme"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize">
@@ -388,6 +412,10 @@
android:name=".service.GenericForegroundService"
android:foregroundServiceType="dataSync" />
<service
android:name=".service.FetchForegroundService"
android:foregroundServiceType="dataSync" />
<service
android:name=".service.IPCAddAccountsService"
android:foregroundServiceType="dataSync"
@@ -408,6 +436,14 @@
</intent-filter>
</receiver>
<receiver android:name=".notifications.DeclineCallReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="org.thoughtcrime.securesms.notifications.DECLINE_CALL_NOTICED"/>
</intent-filter>
</receiver>
<receiver android:name=".notifications.RemoteReplyReceiver"
android:enabled="true"
android:exported="false">
@@ -481,5 +517,8 @@
<intent>
<action android:name="android.media.action.IMAGE_CAPTURE" />
</intent>
<intent>
<action android:name="android.intent.action.TTS_SERVICE" />
</intent>
</queries>
</manifest>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 324 B

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.
@@ -0,0 +1,124 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc;
import chat.delta.util.SettableFuture;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutionException;
/* Basic RPC Transport implementation */
public abstract class BaseTransport implements Rpc.Transport {
private final Map<Integer, SettableFuture<JsonNode>> requestFutures = new ConcurrentHashMap<>();
private int requestId = 0;
private final ObjectMapper mapper = new ObjectMapper();
private Thread worker;
/* Send a Request as raw JSON String to the RPC server */
protected abstract void sendRequest(String jsonRequest);
/* Get next Response as raw JSON String from the RPC server */
protected abstract String getResponse();
public ObjectMapper getObjectMapper() {
return mapper;
}
public void call(String method, JsonNode... params) throws RpcException {
innerCall(method, params);
}
public <T> T callForResult(TypeReference<T> resultType, String method, JsonNode... params) throws RpcException {
try {
JsonNode node = innerCall(method, params);
if (node.isNull()) return null;
return mapper.readValue(node.traverse(), resultType);
} catch (IOException e) {
throw new RpcException(e.getMessage());
}
}
private JsonNode innerCall(String method, JsonNode... params) throws RpcException {
int id;
synchronized (this) {
id = ++requestId;
ensureWorkerThread();
}
try {
String jsonRequest = mapper.writeValueAsString(new Request(method, params, id));
SettableFuture<JsonNode> future = new SettableFuture<>();
requestFutures.put(id, future);
sendRequest(jsonRequest);
return future.get();
} catch (ExecutionException e) {
throw (RpcException)e.getCause();
} catch (InterruptedException e) {
throw new RpcException(e.getMessage());
} catch (JsonProcessingException e) {
throw new RpcException(e.getMessage());
}
}
private void ensureWorkerThread() {
if (worker != null) return;
worker = new Thread(() -> {
while (true) {
try {
processResponse();
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}, "jsonrpcThread");
worker.start();
}
private void processResponse() throws JsonProcessingException {
String jsonResponse = getResponse();
Response response = mapper.readValue(jsonResponse, Response.class);
if (response.id == 0) { // Got JSON-RPC notification/event, ignore
return;
}
SettableFuture<JsonNode> future = requestFutures.remove(response.id);
if (future == null) { // Got a response with unknown ID, ignore
return;
}
if (response.error != null) {
future.setException(new RpcException(response.error.toString()));
} else if (response.result != null) {
future.set(response.result);
} else {
future.setException(new RpcException("Got JSON-RPC response without result or error: " + jsonResponse));
}
}
private static class Request {
private final String jsonrpc = "2.0";
public final String method;
public final JsonNode[] params;
public final int id;
public Request(String method, JsonNode[] params, int id) {
this.method = method;
this.params = params;
this.id = id;
}
}
private static class Response {
public String jsonrpc;
public int id;
public JsonNode result;
public JsonNode error;
}
}
+249
View File
@@ -0,0 +1,249 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import chat.delta.rpc.types.*;
public class Rpc {
public interface Transport {
void call(String method, JsonNode... params) throws RpcException;
<T> T callForResult(TypeReference<T> resultType, String method, JsonNode... params) throws RpcException;
ObjectMapper getObjectMapper();
}
public final Transport transport;
private final ObjectMapper mapper;
public Rpc(Transport transport) {
this.transport = transport;
this.mapper = transport.getObjectMapper();
}
public Integer addAccount() throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "add_account");
}
/**
* Set the order of accounts.
* The provided list should contain all account IDs in the desired order.
* If an account ID is missing from the list, it will be appended at the end.
* If the list contains non-existent account IDs, they will be ignored.
*/
public void setAccountsOrder(java.util.List<Integer> order) throws RpcException {
transport.call("set_accounts_order", mapper.valueToTree(order));
}
/* Get the combined filesize of an account in bytes */
public Integer getAccountFileSize(Integer accountId) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "get_account_file_size", mapper.valueToTree(accountId));
}
/**
* If there was an error while the account was opened
* and migrated to the current version,
* then this function returns it.
* <p>
* This function is useful because the key-contacts migration could fail due to bugs
* and then the account will not work properly.
* <p>
* After opening an account, the UI should call this function
* and show the error string if one is returned.
*/
public String getMigrationError(Integer accountId) throws RpcException {
return transport.callForResult(new TypeReference<String>(){}, "get_migration_error", mapper.valueToTree(accountId));
}
public Integer draftSelfReport(Integer accountId) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "draft_self_report", mapper.valueToTree(accountId));
}
/* Returns configuration value for the given key. */
public String getConfig(Integer accountId, String key) throws RpcException {
return transport.callForResult(new TypeReference<String>(){}, "get_config", mapper.valueToTree(accountId), mapper.valueToTree(key));
}
/**
* Configures a new email account using the provided parameters
* and adds it as a transport.
* <p>
* If the email address is the same as an existing transport,
* then this existing account will be reconfigured instead of a new one being added.
* <p>
* This function stops and starts IO as needed.
* <p>
* Usually it will be enough to only set `addr` and `password`,
* and all the other settings will be autoconfigured.
* <p>
* During configuration, ConfigureProgress events are emitted;
* they indicate a successful configuration as well as errors
* and may be used to create a progress bar.
* This function will return after configuration is finished.
* <p>
* If configuration is successful,
* the working server parameters will be saved
* and used for connecting to the server.
* The parameters entered by the user will be saved separately
* so that they can be prefilled when the user opens the server-configuration screen again.
* <p>
* See also:
* - [Self::is_configured()] to check whether there is
* at least one working transport.
* - [Self::add_transport_from_qr()] to add a transport
* from a server encoded in a QR code.
* - [Self::list_transports()] to get a list of all configured transports.
* - [Self::delete_transport()] to remove a transport.
*/
public void addOrUpdateTransport(Integer accountId, EnteredLoginParam param) throws RpcException {
transport.call("add_or_update_transport", mapper.valueToTree(accountId), mapper.valueToTree(param));
}
/**
* Adds a new email account as a transport
* using the server encoded in the QR code.
* See [Self::add_or_update_transport].
*/
public void addTransportFromQr(Integer accountId, String qr) throws RpcException {
transport.call("add_transport_from_qr", mapper.valueToTree(accountId), mapper.valueToTree(qr));
}
/**
* Create a new unencrypted group chat.
* <p>
* Same as [`Self::create_group_chat`], but the chat is unencrypted and can only have
* address-contacts.
*/
public Integer createGroupChatUnencrypted(Integer accountId, String name) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "create_group_chat_unencrypted", mapper.valueToTree(accountId), mapper.valueToTree(name));
}
/**
* Create a new **broadcast channel**
* (called "Channel" in the UI).
* <p>
* Broadcast channels are similar to groups on the sending device,
* however, recipients get the messages in a read-only chat
* and will not see who the other members are.
* <p>
* Called `broadcast` here rather than `channel`,
* because the word "channel" already appears a lot in the code,
* which would make it hard to grep for it.
* <p>
* After creation, the chat contains no recipients and is in _unpromoted_ state;
* see [`CommandApi::create_group_chat`] for more information on the unpromoted state.
* <p>
* Returns the created chat's id.
*/
public Integer createBroadcast(Integer accountId, String chatName) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "create_broadcast", mapper.valueToTree(accountId), mapper.valueToTree(chatName));
}
/* Returns contact id of the created or existing DM chat with that contact */
public Integer createChatByContactId(Integer accountId, Integer contactId) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "create_chat_by_contact_id", mapper.valueToTree(accountId), mapper.valueToTree(contactId));
}
/* Sets display name for existing contact. */
public void changeContactName(Integer accountId, Integer contactId, String name) throws RpcException {
transport.call("change_contact_name", mapper.valueToTree(accountId), mapper.valueToTree(contactId), mapper.valueToTree(name));
}
/* Parses a vCard file located at the given path. Returns contacts in their original order. */
public java.util.List<VcardContact> parseVcard(String path) throws RpcException {
return transport.callForResult(new TypeReference<java.util.List<VcardContact>>(){}, "parse_vcard", mapper.valueToTree(path));
}
/**
* Imports contacts from a vCard file located at the given path.
* <p>
* Returns the ids of created/modified contacts in the order they appear in the vCard.
*/
public java.util.List<Integer> importVcard(Integer accountId, String path) throws RpcException {
return transport.callForResult(new TypeReference<java.util.List<Integer>>(){}, "import_vcard", mapper.valueToTree(accountId), mapper.valueToTree(path));
}
/* Returns a vCard containing contacts with the given ids. */
public String makeVcard(Integer accountId, java.util.List<Integer> contacts) throws RpcException {
return transport.callForResult(new TypeReference<String>(){}, "make_vcard", mapper.valueToTree(accountId), mapper.valueToTree(contacts));
}
public void sendWebxdcRealtimeData(Integer accountId, Integer instanceMsgId, java.util.List<Integer> data) throws RpcException {
transport.call("send_webxdc_realtime_data", mapper.valueToTree(accountId), mapper.valueToTree(instanceMsgId), mapper.valueToTree(data));
}
public void sendWebxdcRealtimeAdvertisement(Integer accountId, Integer instanceMsgId) throws RpcException {
transport.call("send_webxdc_realtime_advertisement", mapper.valueToTree(accountId), mapper.valueToTree(instanceMsgId));
}
/**
* Leaves the gossip of the webxdc with the given message id.
* <p>
* NB: When this is called before closing a webxdc app in UIs, it must be guaranteed that
* `send_webxdc_realtime_*()` functions aren't called for the given `instance_message_id`
* anymore until the app is open again.
*/
public void leaveWebxdcRealtime(Integer accountId, Integer instanceMessageId) throws RpcException {
transport.call("leave_webxdc_realtime", mapper.valueToTree(accountId), mapper.valueToTree(instanceMessageId));
}
/* Starts an outgoing call. */
public Integer placeOutgoingCall(Integer accountId, Integer chatId, String placeCallInfo) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "place_outgoing_call", mapper.valueToTree(accountId), mapper.valueToTree(chatId), mapper.valueToTree(placeCallInfo));
}
/* Accepts an incoming call. */
public void acceptIncomingCall(Integer accountId, Integer msgId, String acceptCallInfo) throws RpcException {
transport.call("accept_incoming_call", mapper.valueToTree(accountId), mapper.valueToTree(msgId), mapper.valueToTree(acceptCallInfo));
}
/* Ends incoming or outgoing call. */
public void endCall(Integer accountId, Integer msgId) throws RpcException {
transport.call("end_call", mapper.valueToTree(accountId), mapper.valueToTree(msgId));
}
/* Returns information about the call. */
public CallInfo callInfo(Integer accountId, Integer msgId) throws RpcException {
return transport.callForResult(new TypeReference<CallInfo>(){}, "call_info", mapper.valueToTree(accountId), mapper.valueToTree(msgId));
}
/* Returns JSON with ICE servers, to be used for WebRTC video calls. */
public String iceServers(Integer accountId) throws RpcException {
return transport.callForResult(new TypeReference<String>(){}, "ice_servers", mapper.valueToTree(accountId));
}
/**
* Makes an HTTP GET request and returns a response.
* <p>
* `url` is the HTTP or HTTPS URL.
*/
public HttpResponse getHttpResponse(Integer accountId, String url) throws RpcException {
return transport.callForResult(new TypeReference<HttpResponse>(){}, "get_http_response", mapper.valueToTree(accountId), mapper.valueToTree(url));
}
/**
* Send a reaction to message.
* <p>
* Reaction is a string of emojis separated by spaces. Reaction to a
* single message can be sent multiple times. The last reaction
* received overrides all previously received reactions. It is
* possible to remove all reactions by sending an empty string.
*/
public Integer sendReaction(Integer accountId, Integer messageId, java.util.List<String> reaction) throws RpcException {
return transport.callForResult(new TypeReference<Integer>(){}, "send_reaction", mapper.valueToTree(accountId), mapper.valueToTree(messageId), mapper.valueToTree(reaction));
}
/* Returns reactions to the message. */
public Reactions getMessageReactions(Integer accountId, Integer messageId) throws RpcException {
return transport.callForResult(new TypeReference<Reactions>(){}, "get_message_reactions", mapper.valueToTree(accountId), mapper.valueToTree(messageId));
}
/* Checks if messages can be sent to a given chat. */
public Boolean canSend(Integer accountId, Integer chatId) throws RpcException {
return transport.callForResult(new TypeReference<Boolean>(){}, "can_send", mapper.valueToTree(accountId), mapper.valueToTree(chatId));
}
}
@@ -0,0 +1,8 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc;
public class RpcException extends Exception {
public RpcException(String message) { super(message); }
}
@@ -0,0 +1,19 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
public class CallInfo {
/* True if SDP offer has a video. */
public Boolean hasVideo;
/**
* SDP offer.
* <p>
* Can be used to manually answer the call even if incoming call event was missed.
*/
public String sdpOffer;
/**
* Call state.
* <p>
* For example, if the call is accepted, active, canceled, declined etc.
*/
public CallState state;
}
@@ -0,0 +1,48 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonSubTypes.Type;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
@JsonTypeInfo(use=Id.NAME, include=As.PROPERTY, property="kind")
@JsonSubTypes({@Type(value = CallState.Alerting.class, name="Alerting"), @Type(value = CallState.Active.class, name="Active"), @Type(value = CallState.Completed.class, name="Completed"), @Type(value = CallState.Missed.class, name="Missed"), @Type(value = CallState.Declined.class, name="Declined"), @Type(value = CallState.Canceled.class, name="Canceled")})
public abstract class CallState {
/**
* Fresh incoming or outgoing call that is still ringing.
* <p>
* There is no separate state for outgoing call that has been dialled but not ringing on the other side yet as we don't know whether the other side received our call.
*/
public static class Alerting extends CallState {
}
/* Active call. */
public static class Active extends CallState {
}
/* Completed call that was once active and then was terminated for any reason. */
public static class Completed extends CallState {
/* Call duration in seconds. */
public Integer duration;
}
/* Incoming call that was not picked up within a timeout or was explicitly ended by the caller before we picked up. */
public static class Missed extends CallState {
}
/* Incoming call that was explicitly ended on our side before picking up or outgoing call that was declined before the timeout. */
public static class Declined extends CallState {
}
/**
* Outgoing call that has been canceled on our side before receiving a response.
* <p>
* Incoming calls cannot be canceled, on the receiver side canceled calls usually result in missed calls.
*/
public static class Canceled extends CallState {
}
}
@@ -0,0 +1,13 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
public enum EnteredCertificateChecks {
/* `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. */
acceptInvalidCertificates,
}
@@ -0,0 +1,51 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
/**
* Login parameters entered by the user.
* <p>
* Usually it will be enough to only set `addr` and `password`, and all the other settings will be autoconfigured.
*/
public class EnteredLoginParam {
/* Email address. */
public String addr;
/* TLS options: whether to allow invalid certificates and/or invalid hostnames. Default: Automatic */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public EnteredCertificateChecks certificateChecks;
/* Imap server port. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Integer imapPort;
/* Imap socket security. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Socket imapSecurity;
/* Imap server hostname or IP address. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String imapServer;
/* Imap username. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String imapUser;
/* If true, login via OAUTH2 (not recommended anymore). Default: false */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Boolean oauth2;
/* Password. */
public String password;
/**
* SMTP Password.
* <p>
* Only needs to be specified if different than IMAP password.
*/
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String smtpPassword;
/* SMTP server port. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Integer smtpPort;
/* SMTP socket security. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Socket smtpSecurity;
/* SMTP server hostname or IP address. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String smtpServer;
/* SMTP username. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String smtpUser;
}
@@ -0,0 +1,13 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
public class HttpResponse {
/* base64-encoded response body. */
public String blob;
/* Encoding, e.g. "utf-8". */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String encoding;
/* MIME type, e.g. "text/plain" or "text/html". */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String mimetype;
}
@@ -0,0 +1,12 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
/* A single reaction emoji. */
public class Reaction {
/* Emoji frequency. */
public Integer count;
/* Emoji. */
public String emoji;
/* True if we reacted with this emoji. */
public Boolean isFromSelf;
}
@@ -0,0 +1,10 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
/* Structure representing all reactions to a particular message. */
public class Reactions {
/* Unique reactions and their count, sorted in descending order. */
public java.util.List<Reaction> reactions;
/* Map from a contact to it's reaction to message. */
public java.util.Map<String, java.util.List<String>> reactionsByContact;
}
@@ -0,0 +1,16 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
public enum Socket {
/* Unspecified socket security, select automatically. */
automatic,
/* TLS connection. */
ssl,
/* STARTTLS connection. */
starttls,
/* No TLS, plaintext connection. */
plain,
}
@@ -0,0 +1,20 @@
/* Autogenerated file, do not edit manually */
package chat.delta.rpc.types;
public class VcardContact {
/* Email address. */
public String addr;
/* Contact color as hex string. */
public String color;
/* The contact's name, or the email address if no name was given. */
public String displayName;
/* Public PGP key in Base64. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String key;
/* Profile image in Base64. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public String profileImage;
/* Last update timestamp. */
@com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET)
public Integer timestamp;
}
@@ -0,0 +1,14 @@
/* Autogenerated file, do not edit manually */
package chat.delta.util;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
public interface ListenableFuture<T> extends Future<T> {
void addListener(Listener<T> listener);
public interface Listener<T> {
public void onSuccess(T result);
public void onFailure(ExecutionException e);
}
}
@@ -0,0 +1,137 @@
/* Autogenerated file, do not edit manually */
package chat.delta.util;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class SettableFuture<T> implements ListenableFuture<T> {
private final List<Listener<T>> listeners = new LinkedList<>();
private boolean completed;
private boolean canceled;
private volatile T result;
private volatile Throwable exception;
public SettableFuture() { }
public SettableFuture(T value) {
this.result = value;
this.completed = true;
}
@Override
public synchronized boolean cancel(boolean mayInterruptIfRunning) {
if (!completed && !canceled) {
canceled = true;
return true;
}
return false;
}
@Override
public synchronized boolean isCancelled() {
return canceled;
}
@Override
public synchronized boolean isDone() {
return completed;
}
public boolean set(T result) {
synchronized (this) {
if (completed || canceled) return false;
this.result = result;
this.completed = true;
notifyAll();
}
notifyAllListeners();
return true;
}
public boolean setException(Throwable throwable) {
synchronized (this) {
if (completed || canceled) return false;
this.exception = throwable;
this.completed = true;
notifyAll();
}
notifyAllListeners();
return true;
}
public void deferTo(ListenableFuture<T> other) {
other.addListener(new Listener<T>() {
@Override
public void onSuccess(T result) {
SettableFuture.this.set(result);
}
@Override
public void onFailure(ExecutionException e) {
SettableFuture.this.setException(e.getCause());
}
});
}
@Override
public synchronized T get() throws InterruptedException, ExecutionException {
while (!completed) wait();
if (exception != null) throw new ExecutionException(exception);
else return result;
}
@Override
public synchronized T get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException
{
long startTime = System.currentTimeMillis();
while (!completed && System.currentTimeMillis() - startTime > unit.toMillis(timeout)) {
wait(unit.toMillis(timeout));
}
if (!completed) throw new TimeoutException();
else return get();
}
@Override
public void addListener(Listener<T> listener) {
synchronized (this) {
listeners.add(listener);
if (!completed) return;
}
notifyListener(listener);
}
private void notifyAllListeners() {
List<Listener<T>> localListeners;
synchronized (this) {
localListeners = new LinkedList<>(listeners);
}
for (Listener<T> listener : localListeners) {
notifyListener(listener);
}
}
private void notifyListener(Listener<T> listener) {
if (exception != null) listener.onFailure(new ExecutionException(exception));
else listener.onSuccess(result);
}
}
@@ -33,8 +33,8 @@ public class DcAccounts {
public native void stopIo ();
public native void maybeNetwork ();
public native void setPushDeviceToken (String token);
public native boolean backgroundFetch (int timeoutSeconds);
public native int addAccount ();
public native int migrateAccount (String dbfile);
public native boolean removeAccount (int accountId);
public native int[] getAll ();
@@ -50,4 +50,14 @@ public class DcAccounts {
private native long getJsonrpcInstanceCPtr ();
private native long getAccountCPtr (int accountId);
private native long getSelectedAccountCPtr ();
public boolean isAllChatmail() {
for (int accountId : getAll()) {
DcContext dcContext = getAccount(accountId);
if (!dcContext.isChatmail()) {
return false;
}
}
return true;
}
}
+8 -8
View File
@@ -6,7 +6,8 @@ public class DcChat {
public static final int DC_CHAT_TYPE_SINGLE = 100;
public static final int DC_CHAT_TYPE_GROUP = 120;
public static final int DC_CHAT_TYPE_MAILINGLIST = 140;
public static final int DC_CHAT_TYPE_BROADCAST = 160;
public static final int DC_CHAT_TYPE_OUT_BROADCAST = 160;
public static final int DC_CHAT_TYPE_IN_BROADCAST = 165;
public static final int DC_CHAT_NO_CHAT = 0;
public final static int DC_CHAT_ID_ARCHIVED_LINK = 6;
@@ -38,12 +39,12 @@ public class DcChat {
public native String getMailinglistAddr();
public native String getProfileImage ();
public native int getColor ();
public native boolean isEncrypted ();
public native boolean isUnpromoted ();
public native boolean isSelfTalk ();
public native boolean isDeviceTalk ();
public native boolean canSend ();
public native boolean isProtected ();
public native boolean isProtectionBroken();
public native boolean isSendingLocations();
public native boolean isMuted ();
public native boolean isContactRequest ();
@@ -53,19 +54,18 @@ public class DcChat {
public boolean isMultiUser() {
int type = getType();
return type == DC_CHAT_TYPE_GROUP || type == DC_CHAT_TYPE_MAILINGLIST || type == DC_CHAT_TYPE_BROADCAST;
return type != DC_CHAT_TYPE_SINGLE;
}
public boolean isMailingList() {
return getType() == DC_CHAT_TYPE_MAILINGLIST;
}
public boolean isBroadcast() {
return getType() == DC_CHAT_TYPE_BROADCAST;
public boolean isInBroadcast() {
return getType() == DC_CHAT_TYPE_IN_BROADCAST;
}
public boolean isHalfBlocked() {
return isProtectionBroken() || isContactRequest();
public boolean isOutBroadcast() {
return getType() == DC_CHAT_TYPE_OUT_BROADCAST;
}
// working with raw c-data
@@ -10,8 +10,9 @@ public class DcContact {
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; // - " -
public final static int DC_CONTACT_ID_NEW_BROADCAST_LIST = -5; // - " -
public final static int DC_CONTACT_ID_NEW_BROADCAST = -5; // - " -
public final static int DC_CONTACT_ID_ADD_ACCOUNT = -6; // - " -
public final static int DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP = -7; // - " -
public DcContact(long contactCPtr) {
this.contactCPtr = contactCPtr;
@@ -50,7 +51,6 @@ public class DcContact {
public native String getAuthName ();
public native String getDisplayName ();
public native String getAddr ();
public native String getNameNAddr ();
public native String getProfileImage();
public native int getColor ();
public native String getStatus ();
@@ -58,6 +58,7 @@ public class DcContact {
public native boolean wasSeenRecently();
public native boolean isBlocked ();
public native boolean isVerified ();
public native boolean isKeyContact ();
public native int getVerifierId ();
public native boolean isBot ();
+38 -63
View File
@@ -2,16 +2,14 @@ package com.b44t.messenger;
public class DcContext {
public final static int DC_PREF_DEFAULT_MDNS_ENABLED = 1;
public final static int DC_PREF_DEFAULT_TRIM_ENABLED = 0;
public final static int DC_PREF_DEFAULT_TRIM_LENGTH = 500;
public final static int DC_EVENT_INFO = 100;
public final static int DC_EVENT_WARNING = 300;
public final static int DC_EVENT_ERROR = 400;
public final static int DC_EVENT_ERROR_SELF_NOT_IN_GROUP = 410;
public final static int DC_EVENT_MSGS_CHANGED = 2000;
public final static int DC_EVENT_REACTIONS_CHANGED = 2001;
public final static int DC_EVENT_INCOMING_REACTION = 2002;
public final static int DC_EVENT_INCOMING_WEBXDC_NOTIFY = 2003;
public final static int DC_EVENT_INCOMING_MSG = 2005;
public final static int DC_EVENT_MSGS_NOTICED = 2008;
public final static int DC_EVENT_MSG_DELIVERED = 2010;
@@ -19,6 +17,7 @@ public class DcContext {
public final static int DC_EVENT_MSG_READ = 2015;
public final static int DC_EVENT_CHAT_MODIFIED = 2020;
public final static int DC_EVENT_CHAT_EPHEMERAL_TIMER_MODIFIED = 2021;
public final static int DC_EVENT_CHAT_DELETED = 2023;
public final static int DC_EVENT_CONTACTS_CHANGED = 2030;
public final static int DC_EVENT_LOCATION_CHANGED = 2035;
public final static int DC_EVENT_CONFIGURE_PROGRESS = 2041;
@@ -31,6 +30,11 @@ public class DcContext {
public final static int DC_EVENT_WEBXDC_STATUS_UPDATE = 2120;
public final static int DC_EVENT_WEBXDC_INSTANCE_DELETED = 2121;
public final static int DC_EVENT_WEBXDC_REALTIME_DATA = 2150;
public final static int DC_EVENT_ACCOUNTS_BACKGROUND_FETCH_DONE = 2200;
public final static int DC_EVENT_INCOMING_CALL = 2550;
public final static int DC_EVENT_INCOMING_CALL_ACCEPTED = 2560;
public final static int DC_EVENT_OUTGOING_CALL_ACCEPTED = 2570;
public final static int DC_EVENT_CALL_ENDED = 2580;
public final static int DC_IMEX_EXPORT_SELF_KEYS = 1;
public final static int DC_IMEX_IMPORT_SELF_KEYS = 2;
@@ -39,6 +43,7 @@ public class DcContext {
public final static int DC_GCL_VERIFIED_ONLY = 1;
public final static int DC_GCL_ADD_SELF = 2;
public final static int DC_GCL_ADDRESS = 0x04;
public final static int DC_GCL_ARCHIVED_ONLY = 0x01;
public final static int DC_GCL_NO_SPECIALS = 0x02;
public final static int DC_GCL_ADD_ALLDONE_HINT = 0x04;
@@ -52,9 +57,10 @@ public class DcContext {
public final static int DC_QR_FPR_MISMATCH = 220;
public final static int DC_QR_FPR_WITHOUT_ADDR = 230;
public final static int DC_QR_ACCOUNT = 250;
public final static int DC_QR_BACKUP = 251;
public final static int DC_QR_BACKUP2 = 252;
public final static int DC_QR_BACKUP_TOO_NEW = 255;
public final static int DC_QR_WEBRTC = 260;
public final static int DC_QR_PROXY = 271;
public final static int DC_QR_ADDR = 320;
public final static int DC_QR_TEXT = 330;
public final static int DC_QR_URL = 332;
@@ -80,18 +86,15 @@ public class DcContext {
public final static int DC_MEDIA_QUALITY_BALANCED = 0;
public final static int DC_MEDIA_QUALITY_WORSE = 1;
public final static int DC_DECISION_START_CHAT = 0;
public final static int DC_DECISION_BLOCK = 1;
public final static int DC_DECISION_NOT_NOW = 2;
public final static int DC_CONNECTIVITY_NOT_CONNECTED = 1000;
public final static int DC_CONNECTIVITY_CONNECTING = 2000;
public final static int DC_CONNECTIVITY_WORKING = 3000;
public final static int DC_CONNECTIVITY_CONNECTED = 4000;
private static final String CONFIG_ACCOUNT_ENABLED = "ui.enabled";
private static final String CONFIG_MUTE_MENTIONS_IF_MUTED = "ui.mute_mentions_if_muted";
// when using DcAccounts, use DcAccounts.addAccount() instead
// when using DcAccounts, use Rpc.addAccount() instead
public DcContext(String osName, String dbfile) {
contextCPtr = createContextCPtr(osName, dbfile);
}
@@ -121,7 +124,6 @@ public class DcContext {
public native void setStockTranslation (int stockId, String translation);
public native String getBlobdir ();
public native String getLastError ();
public native void configure ();
public native void stopOngoingProcess ();
public native int isConfigured ();
public native boolean open (String passphrase);
@@ -140,13 +142,13 @@ public class DcContext {
public void setConfigInt (String key, int value) { setConfig(key, Integer.toString(value)); }
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; }
public int getConfigInt (String key) { return getConfigInt(key, 0); }
public int getConfigInt (String key, int defValue) { try{return Integer.parseInt(getConfig(key));} catch(Exception e) {} return defValue; }
public native String getInfo ();
public native int getConnectivity ();
public native String getConnectivityHtml ();
public native String getOauth2Url (String addr, String redirectUrl);
public native String initiateKeyTransfer ();
public native boolean continueKeyTransfer (int msg_id, String setup_code);
public native void imex (int what, String dir);
public native String imexHasBackup (String dir);
public DcBackupProvider newBackupProvider () { return new DcBackupProvider(newBackupProviderCPtr()); }
@@ -182,7 +184,6 @@ public class DcContext {
public native int[] searchMsgs (int chat_id, String query);
public native int[] getFreshMsgs ();
public native int[] getChatMedia (int chat_id, int type1, int type2, int type3);
public native int getNextMedia (int msg_id, int dir, int type1, int type2, int type3);
public native int[] getChatContacts (int chat_id);
public native int getChatEphemeralTimer (int chat_id);
public native boolean setChatEphemeralTimer (int chat_id, int timer);
@@ -191,19 +192,20 @@ public class DcContext {
public native void blockChat (int chat_id);
public native void acceptChat (int chat_id);
public DcMsg getMsg (int msg_id) { return new DcMsg(getMsgCPtr(msg_id)); }
public native void sendEditRequest (int msg_id, String text);
public native String getMsgInfo (int id);
public native String getMsgHtml (int msg_id);
public native void downloadFullMsg (int msg_id);
public native int getFreshMsgCount (int chat_id);
public native int estimateDeletionCount(boolean from_server, long seconds);
public native void deleteMsgs (int msg_ids[]);
public native void sendDeleteRequest (int msg_ids[]);
public native void forwardMsgs (int msg_ids[], int chat_id);
public native void saveMsgs (int msg_ids[]);
public native boolean resendMsgs (int msg_ids[]);
public native int prepareMsg (int chat_id, DcMsg msg);
public native int sendMsg (int chat_id, DcMsg msg);
public native int sendTextMsg (int chat_id, String text);
public native int sendVideochatInvitation(int chat_id);
public native boolean sendWebxdcStatusUpdate(int msg_id, String payload, String descr);
public native boolean sendWebxdcStatusUpdate(int msg_id, String payload);
public native String getWebxdcStatusUpdates(int msg_id, int last_known_serial);
public native void setWebxdcIntegration (String file);
public native int initWebxdcIntegration(int chat_id);
@@ -212,6 +214,7 @@ public class DcContext {
public DcLot checkQr (String qr) { return new DcLot(checkQrCPtr(qr)); }
public native String getSecurejoinQr (int chat_id);
public native String getSecurejoinQrSvg (int chat_id);
public native String createQrSvg (String payload);
public native int joinSecurejoin (String qr);
public native void sendLocationsToChat (int chat_id, int seconds);
public native boolean isSendingLocationsToChat(int chat_id);
@@ -230,39 +233,20 @@ public class DcContext {
}
}
public String getNameNAddr() {
public boolean isMentionsEnabled() {
return getConfigInt(CONFIG_MUTE_MENTIONS_IF_MUTED) != 1;
}
public void setMentionsEnabled(boolean enabled) {
setConfigInt(CONFIG_MUTE_MENTIONS_IF_MUTED, enabled? 0 : 1);
}
public String getName() {
String displayname = getConfig("displayname");
String addr = getConfig("addr");
String ret = "";
if (!displayname.isEmpty() && !addr.isEmpty()) {
ret = String.format("%s (%s)", displayname, addr);
} else if (!addr.isEmpty()) {
ret = addr;
if (displayname.isEmpty()) {
displayname = getContact(DcContact.DC_CONTACT_ID_SELF).getAddr();
}
if (ret.isEmpty() || isConfigured() == 0) {
ret += " (not configured)";
}
return ret.trim();
}
public boolean isCommunity() {
return getConfigInt("is_community") == 1;
}
public void setCommunityMode(boolean enable) {
setConfig("is_community", enable? "1" : null);
}
public String getCommunityUser() {
String name = getConfig("ui.community.selfname");
return name == null? "" : name;
}
public void setCommunityUser(String name) {
setConfig("ui.community.selfname", name);
return displayname;
}
public boolean isChatmail() {
@@ -277,21 +261,6 @@ public class DcContext {
setConfigInt("is_muted", muted? 1 : 0);
}
// Called for new profiles on chatmail servers that are "single device" initially;
// to save server disk space, we make use of that delete all messages immediately after download.
public void assumeSingleDevice() {
if (isChatmail()) {
setConfigInt("delete_server_after", 1 /*at once*/);
}
}
// Called when we get a hint that another device may be set up.
public void assumeMultiDevice() {
if (isChatmail() && getConfigInt("delete_server_after") == 1 /*at once*/) {
setConfigInt("delete_server_after", 0 /*never/automatic*/);
}
}
public boolean isGmailOauth2Addr(String addr) {
final String oauth2url = getOauth2Url(addr, "chat.delta:/foo");
return isGmailOauth2Url(oauth2url);
@@ -301,6 +270,12 @@ public class DcContext {
return oauth2url.startsWith("https://accounts.google.com/");
}
public void restartIo() {
if (!isEnabled()) return;
stopIo();
startIo();
}
/**
* @return true if at least one chat has location streaming enabled
*/
+25 -13
View File
@@ -18,7 +18,7 @@ public class DcMsg {
public final static int DC_MSG_VOICE = 41;
public final static int DC_MSG_VIDEO = 50;
public final static int DC_MSG_FILE = 60;
public final static int DC_MSG_VIDEOCHAT_INVITATION = 70;
public final static int DC_MSG_CALL = 71;
public final static int DC_MSG_WEBXDC = 80;
public final static int DC_MSG_VCARD = 90;
@@ -33,9 +33,9 @@ public class DcMsg {
public final static int DC_INFO_LOCATION_ONLY = 9;
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_INFO_CHAT_E2EE = 50;
public final static int DC_STATE_UNDEFINED = 0;
public final static int DC_STATE_IN_FRESH = 10;
@@ -123,6 +123,7 @@ public class DcMsg {
private native int getViewType ();
public int getType () { return getDownloadState()==DC_DOWNLOAD_DONE? getViewType() : DC_MSG_TEXT; }
public native int getInfoType ();
public native int getInfoContactId ();
public native int getState ();
public native int getDownloadState ();
public native int getChatId ();
@@ -142,38 +143,37 @@ public class DcMsg {
public native byte[] getWebxdcBlob (String filename);
public JSONObject getWebxdcInfo () {
try {
return new JSONObject(getWebxdcInfoJson());
String json = getWebxdcInfoJson();
if (json != null && !json.isEmpty()) return new JSONObject(json);
} catch(Exception e) {
e.printStackTrace();
return new JSONObject();
}
return new JSONObject();
}
public native String getWebxdcHref ();
public native boolean isForwarded ();
public native boolean isInfo ();
public native boolean isSetupMessage ();
public native boolean hasHtml ();
public native String getSetupCodeBegin ();
public native String getVideochatUrl ();
public native int getVideochatType ();
public native boolean isIncreation ();
public native void setText (String text);
public native void setSubject (String text);
public native void setHtml (String text);
public native void setFile (String file, String filemime);
public native void forceSticker ();
public native void setFileAndDeduplicate(String file, String name, String filemime);
public native void setDimension (int width, int height);
public native void setDuration (int duration);
public native void setLocation (float latitude, float longitude);
public native String getPOILocation ();
public void setQuote (DcMsg quote) { setQuoteCPtr(quote.msgCPtr); }
public native String getQuotedText ();
public native String getError ();
public native String getOverrideSenderName();
public native boolean isOutgoing();
public native int getSenderColor();
public native boolean isEdited ();
public String getSenderName(DcContact dcContact, boolean markOverride) {
public String getSenderName(DcContact dcContact) {
String overrideName = getOverrideSenderName();
if (overrideName != null) {
return (markOverride ? "~" : "") + overrideName;
return "~" + overrideName;
} else {
return dcContact.getDisplayName();
}
@@ -189,6 +189,14 @@ public class DcMsg {
return cPtr != 0 ? new DcMsg(cPtr) : null;
}
public native int getOriginalMsgId ();
public native int getSavedMsgId ();
public boolean canSave() {
// saving info-messages out of context results in confusion, see https://github.com/deltachat/deltachat-ios/issues/2567
return !isInfo();
}
public File getFileAsFile() {
if(getFile()==null)
throw new AssertionError("expected a file to be present.");
@@ -208,6 +216,10 @@ public class DcMsg {
return ids;
}
public boolean isOutgoing() {
return getFromId() == DcContact.DC_CONTACT_ID_SELF;
}
public String getDisplayBody() {
return getText();
}
@@ -0,0 +1,22 @@
package com.b44t.messenger;
import chat.delta.rpc.BaseTransport;
/* RPC transport over C FFI */
public class FFITransport extends BaseTransport {
private final DcJsonrpcInstance dcJsonrpcInstance;
public FFITransport(DcJsonrpcInstance dcJsonrpcInstance) {
this.dcJsonrpcInstance = dcJsonrpcInstance;
}
@Override
protected void sendRequest(String jsonRequest) {
dcJsonrpcInstance.request(jsonRequest);
}
@Override
protected String getResponse() {
return dcJsonrpcInstance.getNextResponse();
}
}
@@ -1,33 +0,0 @@
package com.b44t.messenger.rpc;
import android.util.Base64;
public class HttpResponse {
// base64-encoded response body.
private final String blob;
// MIME type, e.g. "text/plain" or "text/html".
private final String mimetype;
// Encoding, e.g. "utf-8".
private final String encoding;
public HttpResponse(String blob, String mimetype, String encoding) {
this.blob = blob;
this.mimetype = mimetype;
this.encoding = encoding;
}
public byte[] getBlob() {
if (blob == null) {
return null;
}
return Base64.decode(blob, Base64.NO_WRAP | Base64.NO_PADDING);
}
public String getMimetype() {
return mimetype;
}
public String getEncoding() {
return encoding;
}
}
@@ -1,39 +0,0 @@
package com.b44t.messenger.rpc;
import androidx.annotation.Nullable;
public class Reaction {
// The reaction emoji string.
private final String emoji;
// The count of users that have reacted with this reaction.
private final int count;
// true if self-account reacted with this reaction, false otherwise.
private final boolean isFromSelf;
public Reaction(String emoji, int count, boolean isFromSelf) {
this.emoji = emoji;
this.count = count;
this.isFromSelf = isFromSelf;
}
public String getEmoji() {
return emoji;
}
public int getCount() {
return count;
}
public boolean isFromSelf() {
return isFromSelf;
}
@Override
public boolean equals(@Nullable Object obj) {
if (obj instanceof Reaction) {
Reaction reaction = (Reaction) obj;
return emoji.equals(reaction.getEmoji()) && count == reaction.getCount() && isFromSelf == reaction.isFromSelf();
}
return false;
}
}
@@ -1,26 +0,0 @@
package com.b44t.messenger.rpc;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Reactions {
// Map from a contact to it's reaction to message.
private final HashMap<Integer, String[]> reactionsByContact;
// Unique reactions, sorted in descending order.
private final ArrayList<Reaction> reactions;
public Reactions(HashMap<Integer, String[]> reactionsByContact, ArrayList<Reaction> reactions) {
this.reactionsByContact = reactionsByContact;
this.reactions = reactions;
}
public Map<Integer, String[]> getReactionsByContact() {
return reactionsByContact;
}
public List<Reaction> getReactions() {
return reactions;
}
}
@@ -1,165 +0,0 @@
package com.b44t.messenger.rpc;
import com.b44t.messenger.DcJsonrpcInstance;
import com.b44t.messenger.util.concurrent.SettableFuture;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
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;
public class Rpc {
private final Map<Integer, SettableFuture<JsonElement>> requestFutures = new ConcurrentHashMap<>();
private final DcJsonrpcInstance dcJsonrpcInstance;
private int requestId = 0;
private final Gson gson = new GsonBuilder().serializeNulls().create();
public Rpc(DcJsonrpcInstance dcJsonrpcInstance) {
this.dcJsonrpcInstance = dcJsonrpcInstance;
}
private void processResponse() throws JsonSyntaxException {
String jsonResponse = dcJsonrpcInstance.getNextResponse();
Response response = gson.fromJson(jsonResponse, Response.class);
if (response.id == 0) { // Got JSON-RPC notification/event, ignore
return;
}
SettableFuture<JsonElement> future = requestFutures.remove(response.id);
if (future == null) { // Got a response with unknown ID, ignore
return;
}
if (response.error != null) {
future.setException(new RpcException(response.error.toString()));
} else if (response.result != null) {
future.set(response.result);
} else {
future.setException(new RpcException("Got JSON-RPC response without result or error: " + jsonResponse));
}
}
public void start() {
new Thread(() -> {
while (true) {
try {
processResponse();
} catch (JsonSyntaxException e) {
e.printStackTrace();
}
}
}, "jsonrpcThread").start();
}
public SettableFuture<JsonElement> call(String method, Object... params) {
int id;
synchronized (this) {
id = ++requestId;
}
String jsonRequest = gson.toJson(new Request(method, params, id));
SettableFuture<JsonElement> future = new SettableFuture<>();
requestFutures.put(id, future);
dcJsonrpcInstance.request(jsonRequest);
return future;
}
public JsonElement getResult(String method, Object... params) throws RpcException {
try {
return call(method, params).get();
} catch (ExecutionException e) {
throw (RpcException)e.getCause();
} catch (InterruptedException e) {
throw new RpcException(e.getMessage());
}
}
public int addAccount() throws RpcException {
return gson.fromJson(getResult("add_account"), int.class);
}
public void startIO() throws RpcException {
getResult("start_io_for_all_accounts");
}
public void stopIO() throws RpcException {
getResult("stop_io_for_all_accounts");
}
public Map<String, String> getSystemInfo() throws RpcException {
TypeToken<Map<String, String>> mapType = new TypeToken<Map<String, String>>(){};
return gson.fromJson(getResult("get_system_info"), mapType.getType());
}
public List<VcardContact> parseVcard(String path) throws RpcException {
TypeToken<List<VcardContact>> listType = new TypeToken<List<VcardContact>>(){};
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<Integer> importVcard(int accountId, String path) throws RpcException {
TypeToken<List<Integer>> listType = new TypeToken<List<Integer>>(){};
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);
}
public Reactions getMsgReactions(int accountId, int msgId) throws RpcException {
return gson.fromJson(getResult("get_message_reactions", accountId, msgId), Reactions.class);
}
public int sendReaction(int accountId, int msgId, String... reaction) throws RpcException {
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<Integer> 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;
public final Object[] params;
public final int id;
public Request(String method, Object[] params, int id) {
this.method = method;
this.params = params;
this.id = id;
}
}
private static class Response {
public final int id;
public final JsonElement result;
public final JsonElement error;
public Response(int id, JsonElement result, JsonElement error) {
this.id = id;
this.result = result;
this.error = error;
}
}
}
@@ -1,11 +0,0 @@
package com.b44t.messenger.rpc;
/**
* An exception occurred while processing a request in ArcaneChat core.
**/
public class RpcException extends Exception {
public RpcException(String message) {
super(message);
}
}
@@ -1,60 +0,0 @@
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;
}
}
@@ -0,0 +1,196 @@
package org.thoughtcrime.securesms;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.DcMsg;
import com.google.android.material.tabs.TabLayout;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.ArrayList;
public class AllMediaActivity extends PassphraseRequiredActionBarActivity
implements DcEventCenter.DcEventDelegate
{
public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id";
public static final String FORCE_GALLERY = "force_gallery";
static class TabData {
final int title;
final int type1;
final int type2;
final int type3;
TabData(int title, int type1, int type2, int type3) {
this.title = title;
this.type1 = type1;
this.type2 = type2;
this.type3 = type3;
}
};
private DcContext dcContext;
private int chatId;
private int contactId;
private final ArrayList<TabData> tabs = new ArrayList<>();
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onPreCreate() {
dynamicTheme = new DynamicNoActionBarTheme();
super.onPreCreate();
dcContext = DcHelper.getContext(this);
}
@Override
protected void onCreate(Bundle bundle, boolean ready) {
tabs.add(new TabData(R.string.webxdc_apps, DcMsg.DC_MSG_WEBXDC, 0, 0));
tabs.add(new TabData(R.string.tab_gallery, DcMsg.DC_MSG_IMAGE, DcMsg.DC_MSG_GIF, DcMsg.DC_MSG_VIDEO));
tabs.add(new TabData(R.string.files, DcMsg.DC_MSG_FILE, 0, 0));
tabs.add(new TabData(R.string.audio, DcMsg.DC_MSG_AUDIO, DcMsg.DC_MSG_VOICE, 0));
setContentView(R.layout.all_media_activity);
initializeResources();
setSupportActionBar(this.toolbar);
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setTitle(isGlobalGallery() ? R.string.menu_all_media : R.string.apps_and_media);
}
this.tabLayout.setupWithViewPager(viewPager);
this.viewPager.setAdapter(new AllMediaPagerAdapter(getSupportFragmentManager()));
if (getIntent().getBooleanExtra(FORCE_GALLERY, false)) {
this.viewPager.setCurrentItem(1, false);
}
DcEventCenter eventCenter = DcHelper.getEventCenter(this);
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
}
@Override
public void onDestroy() {
DcHelper.getEventCenter(this).removeObservers(this);
super.onDestroy();
}
@Override
public void handleEvent(@NonNull DcEvent event) {
}
private void initializeResources() {
chatId = getIntent().getIntExtra(CHAT_ID_EXTRA, 0);
contactId = getIntent().getIntExtra(CONTACT_ID_EXTRA, 0);
if (contactId!=0) {
chatId = dcContext.getChatIdByContactId(contactId);
}
if(chatId!=0) {
DcChat dcChat = dcContext.getChat(chatId);
if(!dcChat.isMultiUser()) {
final int[] members = dcContext.getChatContacts(chatId);
contactId = members.length>=1? members[0] : 0;
}
}
this.viewPager = ViewUtil.findById(this, R.id.pager);
this.toolbar = ViewUtil.findById(this, R.id.toolbar);
this.tabLayout = ViewUtil.findById(this, R.id.tab_layout);
}
private boolean isGlobalGallery() {
return contactId==0 && chatId==0;
}
private class AllMediaPagerAdapter extends FragmentStatePagerAdapter {
private Object currentFragment = null;
AllMediaPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
if (currentFragment != null && currentFragment != object) {
ActionMode action = null;
if (currentFragment instanceof MessageSelectorFragment) {
action = ((MessageSelectorFragment) currentFragment).getActionMode();
}
if (action != null) {
action.finish();
}
}
currentFragment = object;
}
@NonNull
@Override
public Fragment getItem(int position) {
TabData data = tabs.get(position);
Fragment fragment;
Bundle args = new Bundle();
if (data.type1 == DcMsg.DC_MSG_IMAGE) {
fragment = new AllMediaGalleryFragment();
args.putInt(AllMediaGalleryFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalGallery())? -1 : chatId);
} else {
fragment = new AllMediaDocumentsFragment();
args.putInt(AllMediaDocumentsFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalGallery())? -1 : chatId);
args.putInt(AllMediaDocumentsFragment.VIEWTYPE1, data.type1);
args.putInt(AllMediaDocumentsFragment.VIEWTYPE2, data.type2);
}
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
return getString(tabs.get(position).title);
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
int itemId = item.getItemId();
if (itemId == android.R.id.home) {
finish();
return true;
}
return false;
}
}
@@ -1,12 +1,13 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import androidx.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.b44t.messenger.DcMsg;
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
@@ -24,7 +25,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
class ProfileDocumentsAdapter extends StickyHeaderGridAdapter {
class AllMediaDocumentsAdapter extends StickyHeaderGridAdapter {
private final Context context;
private final ItemClickListener itemClickListener;
@@ -56,9 +57,9 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter {
}
}
ProfileDocumentsAdapter(@NonNull Context context,
BucketedThreadMedia media,
ItemClickListener clickListener)
AllMediaDocumentsAdapter(@NonNull Context context,
BucketedThreadMedia media,
ItemClickListener clickListener)
{
this.context = context;
this.media = media;
@@ -101,16 +102,18 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter {
viewHolder.audioView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; });
viewHolder.audioView.disablePlayer(!selected.isEmpty());
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg));
viewHolder.date.setVisibility(View.VISIBLE);
}
else if (slide != null && slide.isWebxdcDocument()) {
viewHolder.audioView.setVisibility(View.GONE);
viewHolder.documentView.setVisibility(View.GONE);
viewHolder.webxdcView.setVisibility(View.VISIBLE);
viewHolder.webxdcView.setWebxdc(dcMsg, context.getString(R.string.webxdc_app));
viewHolder.webxdcView.setWebxdc(dcMsg, "");
viewHolder.webxdcView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg));
viewHolder.webxdcView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; });
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg));
viewHolder.date.setVisibility(View.GONE);
}
else if (slide != null && slide.hasDocument()) {
viewHolder.audioView.setVisibility(View.GONE);
@@ -121,11 +124,13 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter {
viewHolder.documentView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg));
viewHolder.documentView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; });
viewHolder.itemView.setOnClickListener(view -> itemClickListener.onMediaClicked(dcMsg));
viewHolder.date.setVisibility(View.VISIBLE);
}
else {
viewHolder.documentView.setVisibility(View.GONE);
viewHolder.audioView.setVisibility(View.GONE);
viewHolder.webxdcView.setVisibility(View.GONE);
viewHolder.date.setVisibility(View.GONE);
}
viewHolder.itemView.setOnLongClickListener(view -> { itemClickListener.onMediaLongClicked(dcMsg); return true; });
@@ -5,14 +5,12 @@ import static com.b44t.messenger.DcChat.DC_CHAT_NO_CHAT;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import androidx.annotation.NonNull;
@@ -34,21 +32,21 @@ import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Set;
public class ProfileDocumentsFragment
public class AllMediaDocumentsFragment
extends MessageSelectorFragment
implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>,
ProfileDocumentsAdapter.ItemClickListener
AllMediaDocumentsAdapter.ItemClickListener
{
public static final String CHAT_ID_EXTRA = "chat_id";
public static final String SHOW_AUDIO_EXTRA = "show_audio";
public static final String SHOW_WEBXDC_EXTRA = "show_webxdc";
public static final String VIEWTYPE1 = "viewtype1";
public static final String VIEWTYPE2 = "viewtype2";
protected TextView noMedia;
protected RecyclerView recyclerView;
private StickyHeaderGridLayoutManager gridManager;
private final ActionModeCallback actionModeCallback = new ActionModeCallback();
private boolean showAudio;
private boolean showWebxdc;
private int viewtype1;
private int viewtype2;
protected int chatId;
@@ -58,8 +56,8 @@ public class ProfileDocumentsFragment
dcContext = DcHelper.getContext(getContext());
chatId = getArguments().getInt(CHAT_ID_EXTRA, -1);
showAudio = getArguments().getBoolean(SHOW_AUDIO_EXTRA, false);
showWebxdc = getArguments().getBoolean(SHOW_WEBXDC_EXTRA, false);
viewtype1 = getArguments().getInt(VIEWTYPE1, 0);
viewtype2 = getArguments().getInt(VIEWTYPE2, 0);
getLoaderManager().initLoader(0, null, this);
}
@@ -72,7 +70,7 @@ public class ProfileDocumentsFragment
this.noMedia = ViewUtil.findById(view, R.id.no_documents);
this.gridManager = new StickyHeaderGridLayoutManager(1);
this.recyclerView.setAdapter(new ProfileDocumentsAdapter(getContext(),
this.recyclerView.setAdapter(new AllMediaDocumentsAdapter(getContext(),
new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()),
this));
this.recyclerView.setLayoutManager(gridManager);
@@ -106,26 +104,26 @@ public class ProfileDocumentsFragment
@Override
public Loader<BucketedThreadMediaLoader.BucketedThreadMedia> onCreateLoader(int i, Bundle bundle) {
if (showAudio) {
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_AUDIO, DcMsg.DC_MSG_VOICE, 0);
} else if (showWebxdc) {
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_WEBXDC, 0, 0);
} else {
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_FILE, 0, 0);
}
return new BucketedThreadMediaLoader(getContext(), chatId, viewtype1, viewtype2, 0);
}
@Override
public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((ProfileDocumentsAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
((AllMediaDocumentsAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((AllMediaDocumentsAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
if (chatId == DC_CHAT_NO_CHAT) {
noMedia.setText(R.string.tab_all_media_empty_hint);
} else if (showAudio) {
if (viewtype1 == DcMsg.DC_MSG_WEBXDC) {
noMedia.setText(R.string.all_apps_empty_hint);
} else if (viewtype1 == DcMsg.DC_MSG_FILE){
noMedia.setText(R.string.all_files_empty_hint);
} else {
noMedia.setText(R.string.tab_all_media_empty_hint);
}
} else if (viewtype1 == DcMsg.DC_MSG_AUDIO) {
noMedia.setText(R.string.tab_audio_empty_hint);
} else if (showWebxdc) {
} else if (viewtype1 == DcMsg.DC_MSG_WEBXDC) {
noMedia.setText(R.string.tab_webxdc_empty_hint);
}
getActivity().invalidateOptionsMenu();
@@ -133,7 +131,7 @@ public class ProfileDocumentsFragment
@Override
public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
((AllMediaDocumentsAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
}
@Override
@@ -151,7 +149,7 @@ public class ProfileDocumentsFragment
}
private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) {
ProfileDocumentsAdapter adapter = getListAdapter();
AllMediaDocumentsAdapter adapter = getListAdapter();
adapter.toggleSelection(mediaRecord);
if (adapter.getSelectedMediaCount() == 0) {
@@ -174,7 +172,7 @@ public class ProfileDocumentsFragment
}
if (dcMsg.getType() == DcMsg.DC_MSG_WEBXDC) {
DcHelper.openWebxdc(context, dcMsg);
WebxdcActivity.openWebxdcActivity(context, dcMsg);
} else {
DcHelper.openForViewOrShare(getActivity(), dcMsg.getId(), Intent.ACTION_VIEW);
}
@@ -183,7 +181,7 @@ public class ProfileDocumentsFragment
@Override
public void onMediaLongClicked(DcMsg mediaRecord) {
if (actionMode == null) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
((AllMediaDocumentsAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback);
}
@@ -216,24 +214,17 @@ public class ProfileDocumentsFragment
menu.findItem(R.id.menu_add_to_home_screen).setVisible(webxdcApp);
}
private ProfileDocumentsAdapter getListAdapter() {
return (ProfileDocumentsAdapter) recyclerView.getAdapter();
private AllMediaDocumentsAdapter getListAdapter() {
return (AllMediaDocumentsAdapter) recyclerView.getAdapter();
}
private class ActionModeCallback implements ActionMode.Callback {
private int originalStatusBarColor;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.profile_context, menu);
mode.setTitle("1");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getActivity().getWindow();
originalStatusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
}
setCorrectMenuVisibility(menu);
return true;
}
@@ -245,35 +236,35 @@ public class ProfileDocumentsFragment
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.details:
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
mode.finish();
return true;
case R.id.delete:
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
mode.finish();
return true;
case R.id.share:
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
case R.id.menu_add_to_home_screen:
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedMedia()).getId());
mode.finish();
return true;
case R.id.show_in_chat:
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
case R.id.save:
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
case R.id.menu_resend:
handleResendMessage(getListAdapter().getSelectedMedia());
return true;
case R.id.menu_select_all:
getListAdapter().selectAll();
updateActionModeBar();
return true;
int itemId = menuItem.getItemId();
if (itemId == R.id.details) {
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
mode.finish();
return true;
} else if (itemId == R.id.delete) {
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
mode.finish();
return true;
} else if (itemId == R.id.share) {
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
} else if (itemId == R.id.menu_add_to_home_screen) {
WebxdcActivity.addToHomeScreen(getActivity(), getSelectedMessageRecord(getListAdapter().getSelectedMedia()).getId());
mode.finish();
return true;
} else if (itemId == R.id.show_in_chat) {
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
} else if (itemId == R.id.save) {
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
} else if (itemId == R.id.menu_resend) {
handleResendMessage(getListAdapter().getSelectedMedia());
return true;
} else if (itemId == R.id.menu_select_all) {
getListAdapter().selectAll();
updateActionModeBar();
return true;
}
return false;
}
@@ -282,10 +273,6 @@ public class ProfileDocumentsFragment
public void onDestroyActionMode(ActionMode mode) {
actionMode = null;
getListAdapter().clearSelection();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getActivity().getWindow().setStatusBarColor(originalStatusBarColor);
}
}
}
}
@@ -1,12 +1,13 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import androidx.annotation.NonNull;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import com.b44t.messenger.DcMsg;
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
@@ -20,7 +21,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
class ProfileGalleryAdapter extends StickyHeaderGridAdapter {
class AllMediaGalleryAdapter extends StickyHeaderGridAdapter {
private final Context context;
private final GlideRequests glideRequests;
@@ -49,10 +50,10 @@ class ProfileGalleryAdapter extends StickyHeaderGridAdapter {
}
}
ProfileGalleryAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests,
BucketedThreadMedia media,
ItemClickListener clickListener)
AllMediaGalleryAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests,
BucketedThreadMedia media,
ItemClickListener clickListener)
{
this.context = context;
this.glideRequests = glideRequests;
@@ -5,22 +5,21 @@ import static com.b44t.messenger.DcChat.DC_CHAT_NO_CHAT;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.view.ActionMode;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
import androidx.recyclerview.widget.RecyclerView;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.DcMsg;
@@ -35,10 +34,10 @@ import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Set;
public class ProfileGalleryFragment
public class AllMediaGalleryFragment
extends MessageSelectorFragment
implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>,
ProfileGalleryAdapter.ItemClickListener
AllMediaGalleryAdapter.ItemClickListener
{
public static final String CHAT_ID_EXTRA = "chat_id";
@@ -67,7 +66,7 @@ public class ProfileGalleryFragment
this.noMedia = ViewUtil.findById(view, R.id.no_images);
this.gridManager = new StickyHeaderGridLayoutManager(getCols());
this.recyclerView.setAdapter(new ProfileGalleryAdapter(getContext(),
this.recyclerView.setAdapter(new AllMediaGalleryAdapter(getContext(),
GlideApp.with(this),
new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()),
this));
@@ -112,8 +111,8 @@ public class ProfileGalleryFragment
@Override
public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((ProfileGalleryAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
((AllMediaGalleryAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((AllMediaGalleryAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
if (chatId == DC_CHAT_NO_CHAT) {
@@ -124,7 +123,7 @@ public class ProfileGalleryFragment
@Override
public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
((AllMediaGalleryAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
}
@Override
@@ -142,7 +141,7 @@ public class ProfileGalleryFragment
}
private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) {
ProfileGalleryAdapter adapter = getListAdapter();
AllMediaGalleryAdapter adapter = getListAdapter();
adapter.toggleSelection(mediaRecord);
if (adapter.getSelectedMediaCount() == 0) {
@@ -175,7 +174,7 @@ public class ProfileGalleryFragment
@Override
public void onMediaLongClicked(DcMsg mediaRecord) {
if (actionMode == null) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
((AllMediaGalleryAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
recyclerView.getAdapter().notifyDataSetChanged();
actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback);
@@ -206,24 +205,17 @@ public class ProfileGalleryFragment
menu.findItem(R.id.menu_resend).setVisible(canResend);
}
private ProfileGalleryAdapter getListAdapter() {
return (ProfileGalleryAdapter) recyclerView.getAdapter();
private AllMediaGalleryAdapter getListAdapter() {
return (AllMediaGalleryAdapter) recyclerView.getAdapter();
}
private class ActionModeCallback implements ActionMode.Callback {
private int originalStatusBarColor;
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.profile_context, menu);
mode.setTitle("1");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getActivity().getWindow();
originalStatusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
}
setCorrectMenuVisibility(menu);
return true;
}
@@ -235,31 +227,31 @@ public class ProfileGalleryFragment
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.details:
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
mode.finish();
return true;
case R.id.delete:
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
mode.finish();
return true;
case R.id.share:
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
case R.id.show_in_chat:
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
case R.id.save:
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
case R.id.menu_resend:
handleResendMessage(getListAdapter().getSelectedMedia());
return true;
case R.id.menu_select_all:
getListAdapter().selectAll();
updateActionModeBar();
return true;
int itemId = menuItem.getItemId();
if (itemId == R.id.details) {
handleDisplayDetails(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
mode.finish();
return true;
} else if (itemId == R.id.delete) {
handleDeleteMessages(chatId, getListAdapter().getSelectedMedia());
mode.finish();
return true;
} else if (itemId == R.id.share) {
handleShare(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
} else if (itemId == R.id.show_in_chat) {
handleShowInChat(getSelectedMessageRecord(getListAdapter().getSelectedMedia()));
return true;
} else if (itemId == R.id.save) {
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
} else if (itemId == R.id.menu_resend) {
handleResendMessage(getListAdapter().getSelectedMedia());
return true;
} else if (itemId == R.id.menu_select_all) {
getListAdapter().selectAll();
updateActionModeBar();
return true;
}
return false;
}
@@ -268,10 +260,6 @@ public class ProfileGalleryFragment
public void onDestroyActionMode(ActionMode mode) {
actionMode = null;
getListAdapter().clearSelection();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getActivity().getWindow().setStatusBarColor(originalStatusBarColor);
}
}
}
}
@@ -25,9 +25,8 @@ import com.b44t.messenger.DcAccounts;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.DcEventEmitter;
import com.b44t.messenger.rpc.Rpc;
import com.b44t.messenger.FFITransport;
import org.thoughtcrime.securesms.components.emoji.EmojiProvider;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
@@ -37,7 +36,6 @@ import org.thoughtcrime.securesms.connect.KeepAliveService;
import org.thoughtcrime.securesms.connect.NetworkStateReceiver;
import org.thoughtcrime.securesms.crypto.DatabaseSecret;
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;
@@ -54,6 +52,9 @@ import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.concurrent.TimeUnit;
import chat.delta.rpc.Rpc;
import chat.delta.rpc.RpcException;
public class ApplicationContext extends MultiDexApplication {
private static final String TAG = ApplicationContext.class.getSimpleName();
@@ -107,15 +108,10 @@ public class ApplicationContext extends MultiDexApplication {
Log.i("DeltaChat", "++++++++++++++++++ ApplicationContext.onCreate() ++++++++++++++++++");
// The first call to `getInstance` takes about 100ms-300ms, so, do it on a background thread
Thread t = new Thread(() -> EmojiProvider.getInstance(this), "InitEmojiProviderThread");
t.setPriority(Thread.MIN_PRIORITY);
t.start();
System.loadLibrary("native-utils");
dcAccounts = new DcAccounts(new File(getFilesDir(), "accounts").getAbsolutePath());
rpc = new Rpc(dcAccounts.getJsonrpcInstance());
rpc = new Rpc(new FFITransport(dcAccounts.getJsonrpcInstance()));
AccountManager.getInstance().migrateToDcAccounts(this);
int[] allAccounts = dcAccounts.getAll();
for (int accountId : allAccounts) {
@@ -131,12 +127,13 @@ public class ApplicationContext extends MultiDexApplication {
e.printStackTrace();
}
}
if ("deltafans@nine.testrun.org".equals(ac.getConfig("configured_addr")) && !ac.isCommunity()) {
ac.setCommunityMode(true);
}
}
if (allAccounts.length == 0) {
dcAccounts.addAccount();
try {
rpc.addAccount();
} catch (RpcException e) {
e.printStackTrace();
}
}
dcContext = dcAccounts.getSelectedAccount();
notificationCenter = new NotificationCenter(this);
@@ -153,8 +150,6 @@ public class ApplicationContext extends MultiDexApplication {
Log.i("DeltaChat", "shutting down event handler");
}, "eventThread").start();
rpc.start();
// migrating global notifications pref. to per-account config, added 10/July/24
final String NOTIFICATION_PREF = "pref_key_enable_notifications";
boolean isMuted = !Prefs.getBooleanPreference(this, NOTIFICATION_PREF, true);
@@ -209,7 +204,6 @@ public class ApplicationContext extends MultiDexApplication {
KeepAliveService.maybeStartSelf(this);
initializeRandomNumberFix();
initializeLogging();
initializeJobManager();
InChatSounds.getInstance(this);
@@ -226,31 +220,30 @@ public class ApplicationContext extends MultiDexApplication {
}
}, filter);
// MAYBE TODO: i think the ApplicationContext is also created
// when the app is stated by FetchWorker timeouts.
// in this case, the normal threads shall not be started.
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest fetchWorkRequest = new PeriodicWorkRequest.Builder(
FetchWorker.class,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, // usually 15 minutes
TimeUnit.MILLISECONDS,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, // the start may be preferred by up to 5 minutes, so we run every 10-15 minutes
TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.build();
try {
// in Android 4 this throws exception due to R8/shrinking
WorkManager.getInstance(this)
.enqueueUniquePeriodicWork("FetchWorker", ExistingPeriodicWorkPolicy.KEEP, fetchWorkRequest);
} catch (Throwable e) {}
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
if (Prefs.isPushEnabled(this)) {
FcmReceiveService.register(this);
} else {
Log.i(TAG, "FCM disabled at build time");
// MAYBE TODO: i think the ApplicationContext is also created
// when the app is stated by FetchWorker timeouts.
// in this case, the normal threads shall not be started.
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest fetchWorkRequest = new PeriodicWorkRequest.Builder(
FetchWorker.class,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, // usually 15 minutes
TimeUnit.MILLISECONDS,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, // the start may be preferred by up to 5 minutes, so we run every 10-15 minutes
TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"FetchWorker",
ExistingPeriodicWorkPolicy.KEEP,
fetchWorkRequest);
}
}
@@ -258,10 +251,6 @@ public class ApplicationContext extends MultiDexApplication {
return jobManager;
}
private void initializeRandomNumberFix() {
PRNGFixes.apply();
}
private void initializeLogging() {
SignalProtocolLoggerProvider.setProvider(new AndroidSignalProtocolLogger());
}
@@ -17,22 +17,15 @@
*/
package org.thoughtcrime.securesms;
import android.annotation.TargetApi;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.NotificationManagerCompat;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
@@ -51,9 +44,10 @@ import org.thoughtcrime.securesms.preferences.PrivacyPreferenceFragment;
import org.thoughtcrime.securesms.preferences.CorrectedPreferenceFragment;
import org.thoughtcrime.securesms.preferences.NotificationsPreferenceFragment;
import org.thoughtcrime.securesms.preferences.widgets.ProfilePreference;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.qr.BackupTransferActivity;
import org.thoughtcrime.securesms.util.DynamicTheme;
import org.thoughtcrime.securesms.util.IntentUtils;
import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.ScreenLockUtil;
/**
@@ -74,17 +68,21 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
private static final String PREFERENCE_CATEGORY_MULTIDEVICE = "preference_category_multidevice";
private static final String PREFERENCE_CATEGORY_ADVANCED = "preference_category_advanced";
private static final String PREFERENCE_CATEGORY_CONNECTIVITY = "preference_category_connectivity";
private static final String PREFERENCE_CATEGORY_DONATE = "preference_category_donate";
private static final String PREFERENCE_CATEGORY_HELP = "preference_category_help";
public static final int REQUEST_CODE_SET_BACKGROUND = 11;
@Override
protected void onCreate(Bundle icicle, boolean ready) {
setContentView(R.layout.activity_application_preferences);
//noinspection ConstantConditions
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
if (icicle == null) {
initFragment(android.R.id.content, new ApplicationPreferenceFragment());
initFragment(R.id.fragment, new ApplicationPreferenceFragment());
}
}
@@ -96,7 +94,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
showBackupProvider();
return;
}
Fragment fragment = getSupportFragmentManager().findFragmentById(android.R.id.content);
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment);
fragment.onActivityResult(requestCode, resultCode, data);
}
@@ -153,13 +151,12 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
this.findPreference(PREFERENCE_CATEGORY_ADVANCED)
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_ADVANCED));
this.findPreference(PREFERENCE_CATEGORY_DONATE)
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_DONATE));
this.findPreference(PREFERENCE_CATEGORY_HELP)
.setOnPreferenceClickListener(new CategoryClickListener(PREFERENCE_CATEGORY_HELP));
if (VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
tintIcons(getActivity());
}
DcHelper.getEventCenter(getActivity()).addObserver(DcContext.DC_EVENT_CONNECTIVITY_CHANGED, this);
}
@@ -186,7 +183,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
public void handleEvent(@NonNull DcEvent event) {
if (event.getId() == DcContext.DC_EVENT_CONNECTIVITY_CHANGED) {
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY)
.setSummary(DcHelper.getConnectivitySummary(getActivity(), R.string.connectivity_connected));
.setSummary(DcHelper.getConnectivitySummary(getActivity(), getString(R.string.connectivity_connected)));
}
}
@@ -202,43 +199,11 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
this.findPreference(PREFERENCE_CATEGORY_PRIVACY)
.setSummary(PrivacyPreferenceFragment.getSummary(getActivity()));
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY)
.setSummary(DcHelper.getConnectivitySummary(getActivity(), R.string.connectivity_connected));
.setSummary(DcHelper.getConnectivitySummary(getActivity(), getString(R.string.connectivity_connected)));
this.findPreference(PREFERENCE_CATEGORY_HELP)
.setSummary(AdvancedPreferenceFragment.getVersion(getActivity()));
}
@TargetApi(11)
private void tintIcons(Context context) {
Drawable notifications = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_notifications_white_24dp));
Drawable swap = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_swap_vert_white_24dp));
Drawable appearance = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_brightness_6_white_24dp));
Drawable chats = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_forum_white_24dp));
Drawable privacy = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_lock_white_24dp));
Drawable advanced = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_advanced_white_24dp));
Drawable help = DrawableCompat.wrap(ContextCompat.getDrawable(context, R.drawable.ic_help_white_24dp));
int[] tintAttr = new int[]{R.attr.pref_icon_tint};
TypedArray typedArray = context.obtainStyledAttributes(tintAttr);
int color = typedArray.getColor(0, 0x0);
typedArray.recycle();
DrawableCompat.setTint(notifications, color);
DrawableCompat.setTint(swap, color);
DrawableCompat.setTint(appearance, color);
DrawableCompat.setTint(chats, color);
DrawableCompat.setTint(privacy, color);
DrawableCompat.setTint(advanced, color);
DrawableCompat.setTint(help, color);
this.findPreference(PREFERENCE_CATEGORY_NOTIFICATIONS).setIcon(notifications);
this.findPreference(PREFERENCE_CATEGORY_CONNECTIVITY).setIcon(swap);
this.findPreference(PREFERENCE_CATEGORY_APPEARANCE).setIcon(appearance);
this.findPreference(PREFERENCE_CATEGORY_CHATS).setIcon(chats);
this.findPreference(PREFERENCE_CATEGORY_PRIVACY).setIcon(privacy);
this.findPreference(PREFERENCE_CATEGORY_ADVANCED).setIcon(advanced);
this.findPreference(PREFERENCE_CATEGORY_HELP).setIcon(help);
}
private class CategoryClickListener implements Preference.OnPreferenceClickListener {
private final String category;
@@ -293,6 +258,9 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
case PREFERENCE_CATEGORY_ADVANCED:
fragment = new AdvancedPreferenceFragment();
break;
case PREFERENCE_CATEGORY_DONATE:
IntentUtils.showInBrowser(requireActivity(), "https://arcanechat.me/#contribute");
break;
case PREFERENCE_CATEGORY_HELP:
startActivity(new Intent(getActivity(), LocalHelpActivity.class));
break;
@@ -306,7 +274,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(android.R.id.content, fragment);
fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
@@ -9,9 +9,8 @@ public class AttachContactActivity extends ContactSelectionActivity {
public static final String CONTACT_ID_EXTRA = "contact_id_extra";
@Override
public void onContactSelected(int specialId, String addr) {
public void onContactSelected(int contactId) {
Intent intent = new Intent();
int contactId = DcHelper.getContext(this).lookupContactIdByAddr(addr);
intent.putExtra(CONTACT_ID_EXTRA, contactId);
setResult(RESULT_OK, intent);
finish();
@@ -1,18 +1,18 @@
package org.thoughtcrime.securesms;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewConfiguration;
import android.view.WindowManager;
import androidx.activity.EdgeToEdge;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowCompat;
import androidx.fragment.app.Fragment;
import org.thoughtcrime.securesms.util.DynamicTheme;
@@ -33,10 +33,9 @@ public abstract class BaseActionBarActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
onPreCreate();
if (BaseActivity.isMenuWorkaroundRequired()) {
forceOverflowMenu();
}
EdgeToEdge.enable(this); // docs says to use: WindowCompat.enableEdgeToEdge(getWindow()); but it is not available
super.onCreate(savedInstanceState);
WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView()).setAppearanceLightStatusBars(false); // force white text in status bar
}
@Override
@@ -46,20 +45,6 @@ public abstract class BaseActionBarActivity extends AppCompatActivity {
dynamicTheme.onResume(this);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return (keyCode == KeyEvent.KEYCODE_MENU && BaseActivity.isMenuWorkaroundRequired()) || super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && BaseActivity.isMenuWorkaroundRequired()) {
openOptionsMenu();
return true;
}
return super.onKeyUp(keyCode, event);
}
private void initializeScreenshotSecurity() {
if (Prefs.isScreenSecurityEnabled(this)) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
@@ -1,28 +0,0 @@
package org.thoughtcrime.securesms;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import android.view.KeyEvent;
public abstract class BaseActivity extends FragmentActivity {
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return (keyCode == KeyEvent.KEYCODE_MENU && isMenuWorkaroundRequired()) || super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && isMenuWorkaroundRequired()) {
openOptionsMenu();
return true;
}
return super.onKeyUp(keyCode, event);
}
public static boolean isMenuWorkaroundRequired() {
return VERSION.SDK_INT < VERSION_CODES.KITKAT && ("LGE".equalsIgnoreCase(Build.MANUFACTURER) || "E6710".equalsIgnoreCase(Build.DEVICE));
}
}
@@ -14,17 +14,17 @@ import androidx.appcompat.app.AlertDialog;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcMsg;
import com.b44t.messenger.rpc.Rpc;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ViewUtil;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.HashSet;
import java.util.Set;
import chat.delta.rpc.Rpc;
public abstract class BaseConversationItem extends LinearLayout
implements BindableConversationItem
{
@@ -93,7 +93,7 @@ public abstract class BaseConversationItem extends LinearLayout
protected boolean shouldInterceptClicks(DcMsg messageRecord) {
return batchSelected.isEmpty()
&& (messageRecord.isFailed()
|| messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_DISABLED
|| messageRecord.getInfoType() == DcMsg.DC_INFO_CHAT_E2EE
|| messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED
|| messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL);
}
@@ -141,9 +141,7 @@ public abstract class BaseConversationItem extends LinearLayout
.setPositiveButton(R.string.ok, null)
.create();
d.show();
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_DISABLED) {
DcHelper.showVerificationBrokenDialog(context, conversationRecipient.getName());
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED) {
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_CHAT_E2EE || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED) {
DcHelper.showProtectionEnabledDialog(context);
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL) {
DcHelper.showInvalidUnencryptedDialog(context);
@@ -10,20 +10,22 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Bitmap;
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 android.widget.Toast;
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.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.drawable.IconCompat;
import androidx.fragment.app.Fragment;
import com.b44t.messenger.DcChat;
@@ -33,6 +35,7 @@ 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.recipients.Recipient;
import org.thoughtcrime.securesms.util.RelayUtil;
import org.thoughtcrime.securesms.util.SendRelayedMessageUtil;
import org.thoughtcrime.securesms.util.Util;
@@ -93,12 +96,16 @@ public abstract class BaseConversationListFragment extends Fragment implements A
if (isForwarding(getActivity())) {
message = String.format(Util.getLocale(), getString(R.string.ask_forward_multiple), selectedChats.size());
} else if (!uris.isEmpty()) {
message = String.format(Util.getLocale(), getString(R.string.share_multiple_attachments_multiple_chats), uris.size(), selectedChats.size());
message = String.format(Util.getLocale(), getString(R.string.ask_send_files_to_selected_chats), uris.size(), selectedChats.size());
} else {
message = String.format(Util.getLocale(), getString(R.string.share_text_multiple_chats), selectedChats.size(), getSharedText(getActivity()));
}
Context context = getContext();
if (context != null) {
if (SendRelayedMessageUtil.containsVideoType(context, uris)) {
message += "\n\n" + getString(R.string.videos_sent_without_recoding);
}
new AlertDialog.Builder(context)
.setMessage(message)
.setCancelable(false)
@@ -312,9 +319,41 @@ public abstract class BaseConversationListFragment extends Fragment implements A
updateActionModeItems(actionMode.getMenu());
}
private void handleAddToHomeScreen() {
final Activity activity = requireActivity();
final DcContext dcContext = DcHelper.getContext(activity);
final Set<Long> selectedChats = getListAdapter().getBatchSelections();
final DcChat chat = dcContext.getChat(selectedChats.iterator().next().intValue());
Intent intent = new Intent(activity, ShareActivity.class);
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(ShareActivity.EXTRA_ACC_ID, dcContext.getAccountId());
intent.putExtra(ShareActivity.EXTRA_CHAT_ID, chat.getId());
Recipient recipient = new Recipient(activity, chat);
Util.runOnAnyBackgroundThread(() -> {
Bitmap avatar = DirectShareUtil.getIconForShortcut(activity, recipient);
ShortcutInfoCompat shortcutInfoCompat = new ShortcutInfoCompat.Builder(activity, "chat-" + dcContext.getAccountId() + "-" + chat.getId())
.setShortLabel(chat.getName())
.setIcon(IconCompat.createWithAdaptiveBitmap(avatar))
.setIntent(intent)
.build();
Util.runOnMain(() -> {
if (!ShortcutManagerCompat.requestPinShortcut(activity, shortcutInfoCompat, null)) {
Toast.makeText(activity, "ErrAddToHomescreen: requestPinShortcut() failed", Toast.LENGTH_LONG).show();
} else if (actionMode != null) {
actionMode.finish();
actionMode = null;
}
});
});
}
private void updateActionModeItems(Menu menu) {
// We do not show action mode icons when relaying (= sharing or forwarding).
if (!isRelayingMessageContent(requireActivity())) {
final int selectedCount = getListAdapter().getBatchSelections().size();
menu.findItem(R.id.menu_add_to_home_screen).setVisible(selectedCount == 1);
MenuItem archiveItem = menu.findItem(R.id.menu_archive_selected);
if (offerToArchive()) {
archiveItem.setIcon(R.drawable.ic_archive_white_24dp);
@@ -360,10 +399,6 @@ public abstract class BaseConversationListFragment extends Fragment implements A
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;
}
@@ -374,13 +409,28 @@ public abstract class BaseConversationListFragment extends Fragment implements A
@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;
int itemId = item.getItemId();
if (itemId == R.id.menu_select_all) {
handleSelectAllThreads();
return true;
} else if (itemId == R.id.menu_delete_selected) {
handleDeleteAllSelected();
return true;
} else if (itemId == R.id.menu_pin_selected) {
handlePinAllSelected();
return true;
} else if (itemId == R.id.menu_archive_selected) {
handleArchiveAllSelected();
return true;
} else if (itemId == R.id.menu_mute_selected) {
handleMuteAllSelected();
return true;
} else if (itemId == R.id.menu_marknoticed_selected) {
handleMarknoticedSelected();
return true;
} else if (itemId == R.id.menu_add_to_home_screen) {
handleAddToHomeScreen();
return true;
}
return false;
@@ -391,12 +441,6 @@ public abstract class BaseConversationListFragment extends Fragment implements A
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));
@@ -25,6 +25,7 @@ public interface BindableConversationItem extends Unbindable {
interface EventListener {
void onQuoteClicked(DcMsg messageRecord);
void onJumpToOriginalClicked(DcMsg messageRecord);
void onShowFullClicked(DcMsg messageRecord);
void onDownloadClicked(DcMsg messageRecord);
void onReactionClicked(DcMsg messageRecord);

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