1
0
mirror of https://github.com/vector-im/riotX-android synced 2025-10-06 00:02:48 +02:00

Compare commits

...

244 Commits

Author SHA1 Message Date
Benoit Marty
cabdec166f Merge branch 'release/1.3.5' into main 2021-10-25 12:39:11 +02:00
Benoit Marty
f877965550 Fastlane files 2021-10-25 12:38:53 +02:00
Benoit Marty
201d558925 Update previous Changelog (the file was not in the correct folder) 2021-10-25 12:37:41 +02:00
Benoit Marty
b892331e42 Towncrier 2021-10-25 12:35:11 +02:00
Benoit Marty
8b6e0187d6 Merge pull request #4320 from vector-im/feature/adm/malformed-group-link
Fixing grouped notification causing malformed url
2021-10-25 12:20:04 +02:00
Adam Brown
55c00a0975 adding changelog entry 2021-10-25 10:56:15 +01:00
Adam Brown
325e78106e fixing strange ide extract 2021-10-25 10:51:40 +01:00
Adam Brown
06b3cc3f4b filters the unique notification uris from the link handling
- fixes malformed url errors appearing for uri we only create to force uniqueness in the notifications
2021-10-22 18:29:53 +01:00
Benoit Marty
09fbd5fcf5 Merge pull request #4316 from vector-im/feature/fga/fix_4313
Fix unread marker not showing
2021-10-22 15:42:22 +02:00
ganfra
a82a5c9b32 Fix unread marker not showing #4313 2021-10-22 15:19:39 +02:00
Benoit Marty
0d1382ab01 Merge pull request #4309 from RiotTranslateBot/weblate-element-android-element-app
Translations update from Weblate
2021-10-22 11:06:42 +02:00
Weblate
f75de0b2b7 Merge branch 'origin/develop' into Weblate. 2021-10-22 08:00:00 +00:00
Glandos
7aa860b1fa Translated using Weblate (French)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/fr/
2021-10-22 07:59:55 +00:00
Jeff Huang
dcda43fc93 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/
2021-10-22 07:59:54 +00:00
sr093906
de320e671e Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hans/
2021-10-22 07:59:54 +00:00
LinAGKar
5a3d1fb7ec Translated using Weblate (Swedish)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-22 07:59:54 +00:00
lvre
2ddedf49d4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/pt_BR/
2021-10-22 07:59:54 +00:00
Linerly
df5c05fc1f Translated using Weblate (Indonesian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/id/
2021-10-22 07:59:53 +00:00
Szimszon
2b0933139a Translated using Weblate (Hungarian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/hu/
2021-10-22 07:59:53 +00:00
Glandos
3993a45825 Translated using Weblate (French)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/fr/
2021-10-22 07:59:53 +00:00
Priit Jõerüüt
b83566c1c0 Translated using Weblate (Estonian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/et/
2021-10-22 07:59:53 +00:00
waclaw66
bc137af0e2 Translated using Weblate (Czech)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/cs/
2021-10-22 07:59:52 +00:00
Benoit Marty
c212c2ec50 Merge pull request #4306 from vector-im/feature/aris/improve_edittext_pr_4281
feature/aris/improve_edittext_pr_4281
2021-10-21 20:20:37 +02:00
ariskotsomitopoulos
9d5f84b86a Linter fixes 2021-10-21 20:02:21 +03:00
ariskotsomitopoulos
d6d46d1c21 Avoid using setRawInputType 2021-10-21 19:41:35 +03:00
Benoit Marty
a7d5c6a437 Merge pull request #4281 from vector-im/feature/aris/broken_edittext_4276
Fix Broken EditText when using FromEditTextItem
2021-10-21 17:28:41 +02:00
Benoit Marty
eb54eef595 Merge pull request #4296 from vector-im/feature/fga/fix_jsonviewer
Fix crash when clicking on ViewEvent source actions
2021-10-21 17:24:21 +02:00
ariskotsomitopoulos
beab9ab8f1 Refactored for clarity 2021-10-21 17:43:01 +03:00
ganfra
d41ff50097 Fix crash when clicking on ViewEvent source actions #4279 2021-10-21 16:34:20 +02:00
ariskotsomitopoulos
dc230f1c30 Refactor to handle more cases 2021-10-21 14:31:50 +03:00
Benoit Marty
486e769287 Merge pull request #4284 from vector-im/feature/fga/fix_mic_button_visibility
Fix  voice message record button wrong visibility
2021-10-21 12:39:50 +02:00
ganfra
d33daaf799 Fix voice message record button wrong visibility #4283 2021-10-21 11:35:08 +02:00
ariskotsomitopoulos
3ea7b37df3 Improve imeOptions 2021-10-21 01:54:45 +03:00
ariskotsomitopoulos
b3f6b5e142 Fix Broken EditText when using FromEditTextItem 2021-10-21 01:46:05 +03:00
Benoit Marty
7c9c4ecf5f Version++ 2021-10-20 10:49:40 +02:00
Benoit Marty
7f96bf623f Merge branch 'release/1.3.4' into main 2021-10-20 10:44:44 +02:00
Benoit Marty
86d4d13d50 Merge branch 'release/1.3.4' into develop 2021-10-20 10:44:41 +02:00
Benoit Marty
d5f2a6179d Fastlane change 2021-10-20 10:44:20 +02:00
Benoit Marty
e536e1c785 Run towncrier 2021-10-20 10:42:12 +02:00
Benoit Marty
367795ee24 Fix crash reported by the PlayStore, for release 1.3.4
I did not find a way to reproduce, but this change should add some safety
2021-10-20 09:29:15 +02:00
Benoit Marty
628ccdc328 Add English - GB to the list of languages 2021-10-20 09:16:56 +02:00
Benoit Marty
8954b1bb22 Merge pull request #4272 from RiotTranslateBot/weblate-element-android-element-app
Translations update from Weblate
2021-10-20 09:04:44 +02:00
Weblate
cf5fca082d Merge branch 'origin/develop' into Weblate. 2021-10-20 06:28:17 +00:00
Kiel
c7fa40fd46 Translated using Weblate (English (United Kingdom))
Currently translated at 0.7% (21 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/en_GB/
2021-10-20 06:28:08 +00:00
DUCKCHI
d764bb659f Translated using Weblate (Korean)
Currently translated at 48.3% (1292 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ko/
2021-10-20 06:28:06 +00:00
Benoit Marty
ac44cd4401 Merge pull request #4270 from vector-im/feature/bma/small_cleanup
small cleanup
2021-10-19 21:08:09 +02:00
Benoit Marty
85983562fa No need to add explicit dependencies on stdlib, this is added by the gradle plugin since 1.4
https://kotlinlang.org/docs/whatsnew14.html#dependency-on-the-standard-library-added-by-default
2021-10-19 19:06:27 +02:00
Benoit Marty
97464969ea Small formatting 2021-10-19 19:04:32 +02:00
Benoit Marty
89e8e5ca31 Merge pull request #4269 from vector-im/feature/bma/required_signature
Make MegolmBackupAuthData.signatures optional for robustness
2021-10-19 18:47:35 +02:00
Benoit Marty
097694f6ef Make MegolmBackupAuthData.signatures optional for robustness 2021-10-19 17:31:51 +02:00
waclaw66
c056dc27ca Translated using Weblate (Czech)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/cs/
2021-10-19 15:25:42 +00:00
Jeff Huang
1d831b3a1b Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/zh_Hant/
2021-10-19 15:25:41 +00:00
random
16a8cf6d51 Translated using Weblate (Italian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/it/
2021-10-19 15:25:40 +00:00
Jeff Huang
497d053c5d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/
2021-10-19 15:25:39 +00:00
LinAGKar
803d145892 Translated using Weblate (Swedish)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-19 15:25:39 +00:00
Viacheslav Raskulin
bda95fcc5e Translated using Weblate (Russian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/
2021-10-19 15:25:39 +00:00
random
5cb55cb0d3 Translated using Weblate (Italian)
Currently translated at 99.8% (2669 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/it/
2021-10-19 15:25:38 +00:00
Linerly
61c64a872d Translated using Weblate (Indonesian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/id/
2021-10-19 15:25:38 +00:00
Benoit Marty
86b7fe67ac Merge pull request #4268 from vector-im/feature/bma/improve_part
A few changes on the slash command
2021-10-19 17:01:25 +02:00
Benoit Marty
ab0e707ea6 Merge pull request #4229 from vector-im/feature/adm/decrypt-event-dummy-keys-fallback-crash
Catching EnsureOlmSessionsForDevicesAction errors
2021-10-19 16:13:34 +02:00
Benoit Marty
4626199761 Slash commands: popDraft() only in case of success, and display a loading dialog during processing 2021-10-19 13:56:38 +02:00
Benoit Marty
364654b685 Fix crash on slash commands Exceptions 2021-10-19 12:33:47 +02:00
Benoit Marty
fe2ba28441 Implement /part command, with or without parameter 2021-10-19 11:55:09 +02:00
Benoit Marty
f5eaf2f05f Align wording with Element Web 2021-10-19 11:35:49 +02:00
Aris Kotsomitopoulos
aea22201c3 Feature/aris/issue 465 scrub exif data (#4248)
Implement ImageExifTagRemover to scrub user sensitive data while sending original size photos
- Return a not scrubbed file when there is an exception while scrubbing the jpeg file
- Improve error handling on image compression
2021-10-18 21:20:03 +00:00
Benoit Marty
2a47acc68a Merge pull request #4236 from vector-im/feature/adm/fixing-home-menu-options
Fixing developer sync options always displaying
2021-10-18 18:19:20 +02:00
Adam Brown
c8a8d2e0bf applying a retry when attempting to fetch one time keys, tries to catch flaky network conditions 2021-10-18 16:15:07 +01:00
Adam Brown
ca79e87e00 applying a retry when attempting to send dummy payload to device 2021-10-18 16:13:22 +01:00
Besnik Bleta
1c119c2c5d Translated using Weblate (Albanian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/sq/
2021-10-18 01:25:54 +00:00
Linerly
6cb254e743 Translated using Weblate (Indonesian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/id/
2021-10-18 01:25:53 +00:00
Danial Behzadi
87bd145e8e Translated using Weblate (Persian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/fa/
2021-10-18 01:25:52 +00:00
Priit Jõerüüt
4a1f1a9fa5 Translated using Weblate (Estonian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/et/
2021-10-18 01:25:51 +00:00
sr093906
022452cd45 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/zh_Hans/
2021-10-18 01:25:50 +00:00
Ihor Hordiichuk
f8850f5eb8 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/uk/
2021-10-18 01:25:49 +00:00
LinAGKar
5a82981944 Translated using Weblate (Swedish)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/sv/
2021-10-18 01:25:48 +00:00
Nikita Epifanov
28ccfbdc0d Translated using Weblate (Russian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/ru/
2021-10-18 01:25:47 +00:00
lvre
99bb0f994f Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/pt_BR/
2021-10-18 01:25:46 +00:00
Szimszon
964937db98 Translated using Weblate (Hungarian)
Currently translated at 100.0% (34 of 34 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/hu/
2021-10-18 01:25:45 +00:00
sr093906
be874d9927 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hans/
2021-10-18 01:25:44 +00:00
LinAGKar
68591f3ddd Translated using Weblate (Swedish)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-18 01:25:43 +00:00
joshua
b83a96e1c1 Translated using Weblate (Swedish)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-18 01:25:43 +00:00
Besnik Bleta
41167cdc23 Translated using Weblate (Albanian)
Currently translated at 99.3% (2655 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sq/
2021-10-18 01:25:41 +00:00
Nikita Epifanov
9b1b35084c Translated using Weblate (Russian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/
2021-10-18 01:25:41 +00:00
lvre
e425532953 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/pt_BR/
2021-10-18 01:25:40 +00:00
Linerly
1787a8a358 Translated using Weblate (Indonesian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/id/
2021-10-18 01:25:40 +00:00
Szimszon
ab5b907b7d Translated using Weblate (Hungarian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/hu/
2021-10-18 01:25:40 +00:00
Danial Behzadi
0c80f6b8a5 Translated using Weblate (Persian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/fa/
2021-10-18 01:25:39 +00:00
Priit Jõerüüt
ee301bc355 Translated using Weblate (Estonian)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/et/
2021-10-18 01:25:39 +00:00
zeritti
8425358634 Translated using Weblate (Czech)
Currently translated at 100.0% (2672 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/cs/
2021-10-18 01:25:38 +00:00
Zet
bdbe1dd606 Translated using Weblate (Arabic)
Currently translated at 38.9% (1040 of 2672 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ar/
2021-10-18 01:25:38 +00:00
Benoit Marty
293b255f58 Merge pull request #4256 from RiotTranslateBot/weblate-element-android-element-app
Translations update from Weblate
2021-10-15 17:39:07 +02:00
Benoit Marty
8da2ea8315 Merge pull request #4252 from thomcatdotrocks/patch-1
Re-enable Android Auto
2021-10-15 17:07:57 +02:00
Weblate
d23bd411b3 Merge branch 'origin/develop' into Weblate. 2021-10-15 15:01:09 +00:00
Glandos
4ccdf65308 Translated using Weblate (French)
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/fr/
2021-10-15 15:00:59 +00:00
LinAGKar
ec81920e0a Translated using Weblate (Swedish)
Currently translated at 99.2% (2648 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-15 15:00:58 +00:00
Michael Mihai
3d63140f48 Translated using Weblate (Romanian)
Currently translated at 12.6% (337 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-15 15:00:57 +00:00
tanmatsu
dcc3d9846b Translated using Weblate (Romanian)
Currently translated at 12.6% (337 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-15 15:00:53 +00:00
Viorel-Cătălin Răpițeanu
745d34c722 Translated using Weblate (Romanian)
Currently translated at 12.6% (337 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-15 15:00:53 +00:00
Glandos
d1b9710fa5 Translated using Weblate (French)
Currently translated at 100.0% (2669 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/fr/
2021-10-15 15:00:52 +00:00
Benoit Marty
ac63369a59 Merge pull request #4251 from kittykat/issue-board
Add issue triage automation
2021-10-15 10:29:43 +02:00
Benoit Marty
91d2ef456e Update location of sign off documentation 2021-10-15 10:27:22 +02:00
Ekaterina Gerasimova
59a3b84c1d Add issue triage automation
Fixes #4250

Move new issues into incoming column and move X-Needs-Info into Need info column on the vector-im/element-android/projects/4 board

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-10-15 09:20:31 +01:00
thomcatdotrocks
1b0a127af3 Add changelog file 2021-10-14 10:53:32 -05:00
thomcatdotrocks
32658f6651 Re-enable Android Auto
Commit to complete #4247 after #4222 has been merged.
2021-10-14 10:45:59 -05:00
Benoit Marty
1f74bc986d Merge pull request #4249 from vector-im/feature/adm/constant-notification-sounds
Constant triggering of notification sounds
2021-10-14 17:06:53 +02:00
Benoit Marty
a208732499 Merge pull request #4238 from vector-im/feature/adm/delayed-sync-duplicated-notification
Reappearing notifications on slow homeservers
2021-10-14 17:01:20 +02:00
Adam Brown
fc793c442b reverting back to using an array for the circular cache, makes preloading and setting the value simpler
- adds unit tests to show it working
2021-10-14 14:02:23 +01:00
Adam Brown
0f07629547 moving comment position to be above the if and cleaning up log copy 2021-10-14 14:02:16 +01:00
Adam Brown
eb70a81afd moving builder call to avoid misaligning the comment 2021-10-14 13:14:36 +01:00
Adam Brown
00beb27b56 updating class doc to mention its not thread safe 2021-10-14 12:25:13 +01:00
Adam Brown
84b44f6093 using generic list for the circular cache instead of a fixed string array 2021-10-14 12:24:06 +01:00
Adam Brown
2f0affa27e using correct issue number in change log entry 2021-10-14 11:56:48 +01:00
Benoit Marty
7ec0872b78 Merge pull request #4222 from abaker/fix_outgoing_conversation_notifications
Dont set person on sent message notification
2021-10-14 10:45:26 +02:00
Benoit Marty
62f66cd478 Merge pull request #4242 from vector-im/dependabot/gradle/androidx.media-media-1.4.3
Bump media from 1.4.2 to 1.4.3
2021-10-14 09:47:50 +02:00
dependabot[bot]
0a9c6673af Bump media from 1.4.2 to 1.4.3
Bumps media from 1.4.2 to 1.4.3.

---
updated-dependencies:
- dependency-name: androidx.media:media
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-13 23:05:53 +00:00
LinAGKar
49262a19fe Translated using Weblate (Swedish)
Currently translated at 99.1% (2645 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/sv/
2021-10-13 21:26:21 +00:00
Jeff Huang
4d9e348aba Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/zh_Hant/
2021-10-13 21:26:18 +00:00
Leonidas Shear
ebf8c51207 Translated using Weblate (Russian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/ru/
2021-10-13 21:26:17 +00:00
Ihor Hordiichuk
b06e400291 Translated using Weblate (Ukrainian)
Currently translated at 91.3% (2438 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/uk/
2021-10-13 21:26:16 +00:00
waclaw66
17ddcdd250 Translated using Weblate (Czech)
Currently translated at 100.0% (2669 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/cs/
2021-10-13 21:26:16 +00:00
Jiri Grönroos
58447e9966 Translated using Weblate (Finnish)
Currently translated at 85.1% (2272 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/fi/
2021-10-13 21:26:15 +00:00
random
d75e523935 Translated using Weblate (Italian)
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/it/
2021-10-13 21:25:45 +00:00
Jeff Huang
af1f1e379f Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2669 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hant/
2021-10-13 21:25:44 +00:00
tanmatsu
256f90ae17 Translated using Weblate (Romanian)
Currently translated at 10.9% (293 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-13 21:25:43 +00:00
Viorel-Cătălin Răpițeanu
e0c059fcba Translated using Weblate (Romanian)
Currently translated at 10.9% (293 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-13 21:25:42 +00:00
Michael Mihai
961124e7f0 Translated using Weblate (Romanian)
Currently translated at 10.9% (293 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ro/
2021-10-13 21:25:42 +00:00
random
9d90a897fc Translated using Weblate (Italian)
Currently translated at 99.8% (2666 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/it/
2021-10-13 21:25:40 +00:00
LinAGKar
a9abec8d0a Translated using Weblate (Swedish)
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/sv/
2021-10-13 21:25:39 +00:00
waclaw66
53b2f0c5e7 Translated using Weblate (Czech)
Currently translated at 100.0% (33 of 33 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.element.io/projects/element-android/element-store/cs/
2021-10-13 21:25:38 +00:00
Leonidas Shear
8dcc65dc0a Translated using Weblate (Russian)
Currently translated at 100.0% (2669 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/
2021-10-13 21:25:37 +00:00
Didek
450c8e629e Translated using Weblate (Polish)
Currently translated at 77.5% (2070 of 2669 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.element.io/projects/element-android/element-app/pl/
2021-10-13 21:25:35 +00:00
Adam Brown
64c532e54b allowing the first notification for each child of the group to vibrate/make a sound
- by having the group and child notifications alert once we can safetly always update the group and get consistent alertOnce behaviour
2021-10-13 18:42:02 +01:00
Adam Brown
99de9d4a4f adding changelog entry 2021-10-13 18:01:49 +01:00
Adam Brown
b041876fa6 matching the other notifications and only alerting the group notifiation once
- fixes notification sounds coming through for every message despite only vibrating for the first
2021-10-13 18:00:35 +01:00
Adam Brown
10b753ad61 adding changelog entry 2021-10-13 15:42:59 +01:00
Adam Brown
f2da047720 keeping an inmemory cache of the seen ids, fixes delayed sync responses causing already dismissed notifications from being shown again
- uses a simple circular buffer to limit the memory usage
2021-10-13 15:40:42 +01:00
Adam Brown
c6aac34c39 adding changelog entry 2021-10-13 13:44:24 +01:00
Adam Brown
64dce0638f only updating the visibility of the menu option the home details fragment adds instead of changing all the parent options
- fixes the debug sync options being forced to visible
2021-10-13 13:39:57 +01:00
Benoit Marty
4f51dbdcf9 Merge pull request #3313 from AquaWolf/feature/conversations
Feature/conversations
2021-10-13 11:24:04 +02:00
Benoit Marty
9661fa0a20 Merge pull request #4231 from vector-im/feature/bma/store_desc
Add a paragraph about Open source
2021-10-13 11:12:16 +02:00
Benoit Marty
085da6c99a Merge pull request #4090 from vector-im/feature/aris/presence
Feature/aris/presence
2021-10-13 09:58:22 +02:00
Benoit Marty
4dff7f19e9 Merge pull request #4232 from vector-im/dependabot/gradle/com.googlecode.libphonenumber-libphonenumber-8.12.35
Bump libphonenumber from 8.12.34 to 8.12.35
2021-10-13 09:04:47 +02:00
dependabot[bot]
7be7d50575 Bump libphonenumber from 8.12.34 to 8.12.35
Bumps [libphonenumber](https://github.com/google/libphonenumber) from 8.12.34 to 8.12.35.
- [Release notes](https://github.com/google/libphonenumber/releases)
- [Changelog](https://github.com/google/libphonenumber/blob/master/making-metadata-changes.md)
- [Commits](https://github.com/google/libphonenumber/compare/v8.12.34...v8.12.35)

---
updated-dependencies:
- dependency-name: com.googlecode.libphonenumber:libphonenumber
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-12 23:10:59 +00:00
Benoit Marty
d4f62902a6 Add a paragraph about Open source 2021-10-12 21:15:45 +02:00
Adam Brown
db4c4520ea adding changelog entry 2021-10-12 17:37:11 +01:00
Benoit Marty
37dbaadbcc Merge pull request #4201 from koh6uawi/scroll_select_font_size
Make the font size selection dialog scrollable
2021-10-12 18:33:11 +02:00
Benoit Marty
13ec4db8a2 Merge pull request #4215 from vector-im/feature/ons/fix_voice_message_resend
Voice message - Do not delete file to be able to resend
2021-10-12 18:30:03 +02:00
Benoit Marty
ffa5e1a1ba Add changelog file 2021-10-12 17:48:59 +02:00
Adam Brown
256cb7093d catching ensureOlmSessionsForDevicesAction errors during the event decryption flow
- we currently can't do much but log here as we've asynchronously start the fallback flow, catching the error at least stops a hard crash
2021-10-12 16:37:40 +01:00
Onuray Sahin
39d92d8559 To be able to resend, stop all voice actions without deleting. 2021-10-12 17:53:56 +03:00
Benoit Marty
6c915ea4d1 Cleanup the PR about presence 2021-10-12 16:45:41 +02:00
Benoit Marty
923bc00dcd Merge branch 'develop' into feature/aris/presence 2021-10-12 15:22:40 +02:00
Benoit Marty
7338982030 Merge pull request #4193 from vector-im/feature/bma/fix_logout_crash
Try to fix #4007
2021-10-12 15:19:20 +02:00
koh6uawi
c9f69b3fc5 Move XML namespaces to root element 2021-10-12 15:12:26 +02:00
koh6uawi
da28ddfabd Use "wrap_content" instead of "match_parent"
Fix a linter error
2021-10-12 15:10:33 +02:00
Benoit Marty
efc1e9b87c Merge pull request #4217 from vector-im/sync-emojis
Sync Emojis
2021-10-12 14:54:36 +02:00
Benoit Marty
0292afb537 Merge pull request #4216 from vector-im/feature/aris/issue_3902_add_scripts_to_ci
Feature/aris/issue_3902_add_scripts_to_ci
2021-10-12 14:53:23 +02:00
ariskotsomitopoulos
2b2f5be83e Fix typo in filename 2021-10-12 15:51:27 +03:00
Benoit Marty
36d2f8e46b Merge pull request #4228 from vector-im/feature/adm/suspending_add_pusher
Improved /settings/notifications push toggle error handling
2021-10-12 14:50:01 +02:00
Benoit Marty
b6c483fff0 Merge pull request #4225 from vector-im/feature/adm/delaying-first-sync-until-foreground
Fixing unexpected sync occurring in background
2021-10-12 14:31:57 +02:00
Benoit Marty
8c2f6b1d4c Merge pull request #4227 from kittykat/issue-template
Update defect issue template to improve wording
2021-10-12 14:23:08 +02:00
Benoit Marty
a7ec76bae3 Also call monarchyWriteAsyncExecutor.awaitTermination 2021-10-12 14:20:20 +02:00
Benoit Marty
e3034e5d11 Merge pull request #4190 from vector-im/feature/fga/mavericks_2
Feature/fga/mavericks 2
2021-10-12 14:11:00 +02:00
Benoit Marty
d11f4e5e31 Add changelog 2021-10-12 14:06:24 +02:00
Adam Brown
b79b7f5740 adding changelog entry 2021-10-12 12:59:26 +01:00
Adam Brown
786dec5dc0 observing both the email pushers and email pids so that displayed email pushers are always in sync 2021-10-12 12:49:39 +01:00
ganfra
a24a9b43fa Mavericks 2: make the UT happy. Let SDK exposes MatrixCoroutineDispatchers. 2021-10-12 13:47:32 +02:00
Adam Brown
bd51eae741 refreshing the threePids when entering the preference screen, afterwards we're monitoring for changes 2021-10-12 11:44:30 +01:00
Adam Brown
1c1424eafc using verb prefix for http pusher creation function 2021-10-12 11:39:14 +01:00
Adam Brown
bdec6a3580 removing mention of email in the http pusher model, we have dedicated emails functions on the service instead 2021-10-12 11:39:14 +01:00
Adam Brown
13f8494072 grouping with other test deps and commenting the reason for rxKotlin dependency 2021-10-12 11:39:14 +01:00
Adam Brown
69bb554e20 lifting the request executor to its own file in the network package
- also creates a dedicated RequestModule instead of providing the executor via the pushers module
2021-10-12 11:39:14 +01:00
Adam Brown
aff787bb29 extracting the test fakes to their own package 2021-10-12 11:39:14 +01:00
Adam Brown
8e84aea434 removing unused import 2021-10-12 11:39:14 +01:00
Adam Brown
b7c911feee adding test cases for when adding a pusher fails and when it already exists 2021-10-12 11:39:14 +01:00
Adam Brown
21479b2b28 inverting if to favour positive ordering 2021-10-12 11:39:14 +01:00
Adam Brown
48d9dfb82d adding test for the add pusher task happy flow
- introduces the concepts of Fakes for handling the dependencies, unforuntately realm/monarchy aren't very testable in their current state so we'll need to use mocks
2021-10-12 11:39:14 +01:00
Adam Brown
ced85964da including rx java dependency for the sdk tests because real (monarchy) tranisitive depends on rx but doesn't propagate it as an API dependency
- without an explicit declaration we can't mock the realm instance
2021-10-12 11:39:14 +01:00
Adam Brown
0a2d7d709b creating an injectable request executor to enable unit tests network request (without hitting the network) 2021-10-12 11:39:14 +01:00
Adam Brown
6672ab3966 removing comment which doesn't add additional context/information 2021-10-12 11:39:14 +01:00
Adam Brown
46c338934e running lint 2021-10-12 11:39:14 +01:00
Adam Brown
e24329e139 reusing the transactional logic for the current session notifications toggle
- uses the synchronous token registering which also means we get error handling
2021-10-12 11:39:14 +01:00
Adam Brown
6c9fcc0d93 extracting the add pusher logic for the worker and delegating to the task from the worker 2021-10-12 11:39:14 +01:00
Benoit Marty
2d97640372 Ensure no async transaction will occurs if the store is closed 2021-10-12 12:08:14 +02:00
Benoit Marty
4a7e0a5d95 CleanupSession: start by releasing the session, then empty the databases 2021-10-12 11:57:07 +02:00
Benoit Marty
73c08e2eeb Avoid code duplication 2021-10-12 11:38:16 +02:00
Ekaterina Gerasimova
8cea340100 Update defect issue template to improve wording
Improve wording around rageshakes based on feedback.

Signed-off-by: Ekaterina Gerasimova <ekaterinag@element.io>
2021-10-12 10:26:10 +01:00
Aris Kotsomitopoulos
fc753fe11e Update 4216.misc 2021-10-12 11:52:52 +03:00
Adam Brown
d1d66c3406 adding changelog entry 2021-10-12 09:49:23 +01:00
Adam Brown
b7a54ead68 delaying the first sync until the first process onStart event
- fixes push notifications starting the polling sync thread when the application is created due to push
2021-10-12 09:47:17 +01:00
Aris Kotsomitopoulos
d26340993f Update release.yml
Removed ./tools/import_emojis.py and ./tools/import_sas_strings.py from the release template while now there is an automated cron job in GitHub Action to run the scripts
2021-10-12 11:45:34 +03:00
Benoit Marty
0d85299c57 Try to fix #4007
Wait for Realm instance to be effectively closed before deleting Realm files
2021-10-12 10:40:46 +02:00
ariskotsomitopoulos
dcf98d93e6 Remove BeautifulSoup4 dependency 2021-10-12 11:37:00 +03:00
Benoit Marty
7088e5cf54 Merge pull request #4223 from vector-im/dependabot/gradle/com.android.tools.build-gradle-7.0.3
Bump gradle from 7.0.2 to 7.0.3
2021-10-12 09:48:14 +02:00
dependabot[bot]
3265c604cf Bump gradle from 7.0.2 to 7.0.3
Bumps gradle from 7.0.2 to 7.0.3.

---
updated-dependencies:
- dependency-name: com.android.tools.build:gradle
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-11 23:05:08 +00:00
Alex Baker
42cbdf0a6c Dont set person on sent message notification
Signed-off-by: Alex Baker <alex@beeper.com>
2021-10-11 14:42:22 -05:00
ganfra
a26e43e90c Mavericks 2: clean after PR review 2021-10-11 17:31:27 +02:00
ariskotsomitopoulos
6cee8871f3 Create a new cron Github Action workflow for syncing emojis & sas strings. It will run every Monday at 00:00. It will open two PRs and will be able to optimal update/delete them according to changes with the base branch 2021-10-11 17:51:52 +03:00
ariskotsomitopoulos
ccc4a43737 Sync Emojis 2021-10-11 14:13:18 +00:00
Onuray Sahin
13aee7d162 Do not delete voice message file to be able to resend. 2021-10-11 16:49:15 +03:00
Benoit Marty
117fa71f53 Merge pull request #4135 from vector-im/feature/bma/designInput
Add documentation about Figma -- very first draft
2021-10-11 15:48:55 +02:00
Benoit Marty
bde129ddce Remove not compiling sample tests 2021-10-11 14:42:06 +02:00
Benoit Marty
6520729343 ktlint 2021-10-11 14:41:40 +02:00
Benoit Marty
caf2c2c487 Use same values for all modules 2021-10-11 14:29:58 +02:00
Benoit Marty
f89a32da1f Add opt-in for kotlinx.coroutines annotations 2021-10-11 14:27:55 +02:00
Benoit Marty
6721669d1d Fixes false positive "This is an internal Mavericks API. It is not intended for external use."
of MvRx `by viewModel()` calls. Maybe due to the inlining of code... This is a temporary fix...
2021-10-11 14:27:45 +02:00
Benoit Marty
6dd0de6123 Mavericks 2.4.0 2021-10-11 13:29:29 +02:00
koh6uawi
fadaaa5b18 Add a changelog entry 2021-10-11 13:07:28 +02:00
Benoit Marty
737a290841 Merge pull request #4210 from vector-im/feature/aris/issue_908_user_completion_picket
Feature/aris/issue 908 user completion picket
2021-10-11 12:31:30 +02:00
Benoit Marty
343783f807 Version++ 2021-10-11 12:06:51 +02:00
Benoit Marty
7bfc771117 Merge branch 'release/1.3.3' into develop 2021-10-11 12:04:52 +02:00
ariskotsomitopoulos
a2c790b4a1 Update to support the whole typing name 2021-10-11 12:29:00 +03:00
ariskotsomitopoulos
3a6259fd29 Add changelog file 2021-10-11 11:53:43 +03:00
ariskotsomitopoulos
506dfe5fea Adding trailing space " " or ": " if the user started a sentence by mentioning someone, 2021-10-11 11:46:37 +03:00
koh6uawi
1069e990e5 Merge branch 'vector-im:develop' into scroll_select_font_size 2021-10-11 00:19:46 +02:00
ganfra
2a29243298 Mavericks 2: clean code, but have warnings 2021-10-08 16:45:29 +02:00
ganfra
c66d6aab5c Timeline: dispatch update on a background thread 2021-10-08 12:55:37 +02:00
ganfra
3bdf264a53 Merge develop into feature/fga/mavericks_2 2021-10-08 10:49:43 +02:00
koh6uawi
56b0b28d5e Make "Select text size" dialog scrollable
Wrap the LinearLayout inside a ScrollView.
2021-10-08 01:59:13 +02:00
ganfra
79ec0591d2 Mavericks 2: continue removing rx 2021-10-07 15:32:57 +02:00
ganfra
578358d839 Mavericks 2: introduce startWith (like startWithCallable from matrix-android-sdk-rx) 2021-10-07 12:24:53 +02:00
ganfra
acf3b84781 Mavericks 2: migrate UserListViewModel 2021-10-07 12:24:08 +02:00
ganfra
362ebcbe42 Revert "Mavericks 2: remove matrix-sdk-android-flow as it will be easier when entirely migrating to flow"
This reverts commit d9b02a20d8.
2021-10-07 11:11:44 +02:00
ariskotsomitopoulos
9aeba10b7e ktlintFormat fixes 2021-10-06 20:19:21 +03:00
ariskotsomitopoulos
e4c3457f37 Add public room indicator to RoomDetailFragment & RoomProfileFragment 2021-10-06 19:08:27 +03:00
ariskotsomitopoulos
9ab59a543d * Implement Presence Service:
- Get Presence Status
     - Set Presence Status
* Integrate presence in room details screen
* Integrate presence in room people's view
* Update UI to support presence
* Fix bug when insertOrUpdate was called on RoomMemberEventHandler and override the correct presence value in RoomMemberSummaryEntity
* Improve performance on updateUserPresence in RoomMemberSummaryEntity entity
* Remarks & linter fixes
* Disable presence when there is no m.presence events. In some servers like matrix.org is disabled atm.
* Enhance UI Presence on DM room lists to support dark/light theme
* Restore missing lines in gradle.properties to speed up debugging
2021-10-06 18:00:02 +03:00
ganfra
d9b02a20d8 Mavericks 2: remove matrix-sdk-android-flow as it will be easier when entirely migrating to flow 2021-10-05 18:57:34 +02:00
Philipp Neumann
2223e95f33 fixed ordering and url linting error 2021-10-05 14:59:54 +02:00
Philipp Neumann
95247f8b10 remove also LongLivedShortcuts 2021-10-05 14:59:54 +02:00
Philipp Neumann
214deaa474 added dynamic shortcut for priority conversations for Android 11+ 2021-10-05 14:59:54 +02:00
ganfra
fadbb60f90 Mavericks 2: continue replacing Rx 2021-10-04 17:50:45 +02:00
ganfra
f72a34ed08 Mavericks 2: continue replacing Rx 2021-10-04 14:09:21 +02:00
Benoit Marty
724bd7dd1a Update docs/design.md 2021-10-04 10:12:03 +02:00
ganfra
0e01c64f69 Mavericks: continue removing reference to old MvRx API 2021-10-01 18:27:36 +02:00
ganfra
43c75bdae7 Mavericks 2: replace asyncSubscribe by onAsync 2021-10-01 18:11:41 +02:00
ganfra
96b5d1c96b Mavericks 2: initialize with debug instead of context 2021-10-01 18:11:14 +02:00
ganfra
2ef4cd276b Mavericks 2: replace selectSubscribe by onEach 2021-10-01 18:04:06 +02:00
ganfra
606cddc826 Mavericks 2: replace MvRxViewModelFactory by MavericksViewModelFactory 2021-10-01 17:11:53 +02:00
ganfra
d63e1ecfea Mavericks 2: replacing rx by flow 2021-10-01 17:08:09 +02:00
ganfra
bbce37e694 Mavericks 2: start replacing rx by flow 2021-10-01 16:34:47 +02:00
Benoit Marty
19ae298707 Add documentation about Figma -- very first draft 2021-10-01 15:57:41 +02:00
ganfra
9337e0e76d Mavericks 2: create sdk flow module 2021-10-01 15:19:48 +02:00
ganfra
f6b81b36d0 Mavericks 2: switch from MvRxState to MavericksState 2021-10-01 10:08:06 +02:00
ganfra
2324bf5d05 Mavericks 2: include the libs and make it compile 2021-09-30 19:52:37 +02:00
458 changed files with 6688 additions and 2929 deletions

View File

@@ -64,9 +64,9 @@ body:
- type: dropdown
id: rageshake
attributes:
label: Have you submitted a rageshake?
label: Will you send logs?
description: |
Did you know that you can shake your phone to submit logs for this issue? Trigger the defect, then shake your phone and you will see a popup asking if you would like to open the bug report screen. Click YES, and describe the issue, mentioning that you have also filed a bug. Submit the report to send anonymous logs to the developers.
Did you know that you can shake your phone to submit logs for this issue? Trigger the defect, then shake your phone and you will see a popup asking if you would like to open the bug report screen. Click YES, and describe the issue, mentioning that you have also filed a bug (it's helpful if you can include a link to the bug). Send the report to submit anonymous logs to the developers.
options:
- 'Yes'
- 'No'

View File

@@ -23,8 +23,6 @@ body:
### Do the release
- [ ] Create release with gitflow, branch name `release/1.1.10`
- [ ] Run `./tools/import_emojis.py` and commit the change if any.
- [ ] Run `./tools/import_sas_strings.py` and commit the change if any. If there is no change since a while, ping Travis
- [ ] Check the crashes from the PlayStore
- [ ] Check the rageshake with the current dev version: https://github.com/matrix-org/element-android-rageshakes/labels/1.1.10-dev
- [ ] Run the integration test, and especially `UiAllScreensSanityTest.allScreensTest()`

View File

@@ -11,6 +11,6 @@
- [ ] Pull request is based on the develop branch
- [ ] Pull request includes a new file under ./changelog.d. See https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md#changelog
- [ ] Pull request includes screenshots or videos if containing UI changes
- [ ] Pull request includes a [sign off](https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md#sign-off)
- [ ] Pull request includes a [sign off](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#sign-off)
- [ ] You've made a self review of your PR
- [ ] If you have modified the screen flow, or added new screens to the application, you have updated the test [UiAllScreensSanityTest.allScreensTest()](https://github.com/vector-im/element-android/blob/main/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt#L73)
- [ ] If you have modified the screen flow, or added new screens to the application, you have updated the test [UiAllScreensSanityTest.allScreensTest()](https://github.com/vector-im/element-android/blob/main/vector/src/androidTest/java/im/vector/app/ui/UiAllScreensSanityTest.kt#L73)

View File

@@ -0,0 +1,69 @@
name: Sync Data From External Sources
on:
schedule:
# At 00:00 on every Monday UTC
- cron: '0 0 * * 1'
jobs:
sync-emojis:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Cache pip
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install Prerequisite dependencies
run: |
pip install BeautifulSoup4
pip install requests
- name: Run Emoji script
run: ./tools/import_emojis.py
- name: Create Pull Request for Emojis
uses: peter-evans/create-pull-request@v3
with:
commit-message: Sync Emojis
title: Sync Emojis
body: |
- Update Emojis from Unicode.org
branch: sync-emojis
base: develop
sync-sas-strings:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Cache pip
uses: actions/cache@v2
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip
restore-keys: |
${{ runner.os }}-pip-
${{ runner.os }}-
- name: Install Prerequisite dependencies
run: |
pip install requests
- name: Run SAS String script
run: ./tools/import_sas_strings.py
- name: Create Pull Request for SAS Strings
uses: peter-evans/create-pull-request@v3
with:
commit-message: Sync SAS Strings
title: Sync SAS Strings
body: |
- Update SAS Strings from matrix-doc.
branch: sync-sas-strings
base: develop

15
.github/workflows/triage-incoming.yml vendored Normal file
View File

@@ -0,0 +1,15 @@
name: Move new issues onto Issue triage board
on:
issues:
types: [opened]
jobs:
automate-project-columns:
runs-on: ubuntu-latest
steps:
- uses: alex-page/github-project-automation-plus@v0.8.1
with:
project: Issue triage
column: Incoming
repo-token: ${{ secrets.ELEMENT_BOT_TOKEN }}

16
.github/workflows/triage-needs-info.yml vendored Normal file
View File

@@ -0,0 +1,16 @@
name: Move X-Needs-Info into Need info column in the Issue triage board
on:
issues:
types: [labeled]
jobs:
Move_Labeled_Issue_On_Project_Board:
runs-on: ubuntu-latest
steps:
- uses: konradpabjan/move-labeled-or-milestoned-issue@v2.0
with:
action-token: ${{ secrets.GITHUB_TOKEN }}
project-url: "https://github.com/vector-im/element-android/projects/4"
column-name: "Need info"
label-name: "X-Needs-Info"

View File

@@ -1,3 +1,52 @@
Changes in Element v1.3.5 (2021-10-25)
======================================
Bugfixes 🐛
----------
- Fixing malformed link pop up when tapping on notifications ([#4267](https://github.com/vector-im/element-android/issues/4267))
- Fix Broken EditText when using FromEditTextItem ([#4276](https://github.com/vector-im/element-android/issues/4276))
- Fix crash when clicking on ViewEvent source actions ([#4279](https://github.com/vector-im/element-android/issues/4279))
- Fix voice message record button wrong visibility ([#4283](https://github.com/vector-im/element-android/issues/4283))
- Fix unread marker not showing ([#4313](https://github.com/vector-im/element-android/issues/4313))
Changes in Element v1.3.4 (2021-10-20)
======================================
Features ✨
----------
- Implement /part command, with or without parameter ([#2909](https://github.com/vector-im/element-android/issues/2909))
- Handle Presence support, for Direct Message room ([#4090](https://github.com/vector-im/element-android/issues/4090))
- Priority conversations for Android 11+ ([#3313](https://github.com/vector-im/element-android/issues/3313))
Bugfixes 🐛
----------
- Issue #908 Adding trailing space " " or ": " if the user started a sentence by mentioning someone, ([#908](https://github.com/vector-im/element-android/issues/908))
- Fixes reappearing notifications when dismissing notifications from slow homeservers or delayed /sync responses ([#3437](https://github.com/vector-im/element-android/issues/3437))
- Catching event decryption crash and logging when attempting to markOlmSessionForUnwedging fails ([#3608](https://github.com/vector-im/element-android/issues/3608))
- Fixing notification sounds being triggered for every message, now they only trigger for the first, consistent with the vibrations ([#3774](https://github.com/vector-im/element-android/issues/3774))
- Voice Message not sendable if recorded while flight mode was on ([#4006](https://github.com/vector-im/element-android/issues/4006))
- Fixes push notification emails list not refreshing the first time seeing the notifications page.
Also improves the error handling in the email notification toggling by using synchronous flows instead of the WorkManager ([#4106](https://github.com/vector-im/element-android/issues/4106))
- Make MegolmBackupAuthData.signatures optional for robustness ([#4162](https://github.com/vector-im/element-android/issues/4162))
- Fixing push notifications starting the looping background sync when the push notification causes the application to be created. ([#4167](https://github.com/vector-im/element-android/issues/4167))
- Fix random crash when user logs out just after the log in. ([#4193](https://github.com/vector-im/element-android/issues/4193))
- Make the font size selection dialog scrollable ([#4201](https://github.com/vector-im/element-android/issues/4201))
- Fix conversation notification for sent messages ([#4221](https://github.com/vector-im/element-android/issues/4221))
- Fixes the developer sync options being displayed in the home menu when developer mode is disabled ([#4234](https://github.com/vector-im/element-android/issues/4234))
- Restore support for Android Auto as sent messages are no longer read aloud ([#4247](https://github.com/vector-im/element-android/issues/4247))
- Fix crash on slash commands Exceptions ([#4261](https://github.com/vector-im/element-android/issues/4261))
Other changes
-------------
- Scrub user sensitive data like gps location from images when sending on original quality ([#465](https://github.com/vector-im/element-android/issues/465))
- Migrate to MvRx2 (Mavericks) ([#3890](https://github.com/vector-im/element-android/issues/3890))
- Implement a new github action workflow to generate two PRs for emoji and sas string sync ([#4216](https://github.com/vector-im/element-android/issues/4216))
- Improve wording around rageshakes in the defect issue template. ([#4226](https://github.com/vector-im/element-android/issues/4226))
- Add automation to move incoming issues and X-Needs-Info into the right places on the issue triage board. ([#4250](https://github.com/vector-im/element-android/issues/4250))
- Uppon sharing image compression fails, return the original image ([#4264](https://github.com/vector-im/element-android/issues/4264))
Changes in Element v1.3.3 (2021-10-11)
======================================

View File

@@ -53,7 +53,6 @@ dependencies {
implementation libs.rx.rxKotlin
implementation libs.rx.rxAndroid
implementation libs.jetbrains.kotlinStdlib
implementation libs.androidx.core
implementation libs.androidx.appCompat
implementation libs.androidx.recyclerview

View File

@@ -7,7 +7,7 @@ ext.versions = [
'targetCompat' : JavaVersion.VERSION_11,
]
def gradle = "7.0.2"
def gradle = "7.0.3"
// Ref: https://kotlinlang.org/releases.html
def kotlin = "1.5.31"
def kotlinCoroutines = "1.5.2"
@@ -19,6 +19,7 @@ def moshi = "1.12.0"
def lifecycle = "2.2.0"
def rxBinding = "3.1.0"
def epoxy = "4.6.2"
def mavericks = "2.4.0"
def glide = "4.12.0"
def bigImageViewer = "1.8.1"
def jjwt = "0.11.2"
@@ -36,8 +37,6 @@ ext.libs = [
'kotlinPlugin' : "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin"
],
jetbrains : [
'kotlinStdlibJdk7' : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin",
'kotlinStdlib' : "org.jetbrains.kotlin:kotlin-stdlib:$kotlin",
'coroutinesCore' : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinCoroutines",
'coroutinesAndroid' : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutines",
'coroutinesRx2' : "org.jetbrains.kotlinx:kotlinx-coroutines-rx2:$kotlinCoroutines"
@@ -98,7 +97,9 @@ ext.libs = [
'epoxyGlide' : "com.airbnb.android:epoxy-glide-preloading:$epoxy",
'epoxyProcessor' : "com.airbnb.android:epoxy-processor:$epoxy",
'epoxyPaging' : "com.airbnb.android:epoxy-paging:$epoxy",
'mvrx' : "com.airbnb.android:mvrx:1.5.1"
'mavericks' : "com.airbnb.android:mavericks:$mavericks",
'mavericksRx' : "com.airbnb.android:mavericks-rxjava2:$mavericks",
'mavericksTesting' : "com.airbnb.android:mavericks-testing:$mavericks"
],
mockk : [
'mockk' : "io.mockk:mockk:$mockk",
@@ -123,10 +124,13 @@ ext.libs = [
'jjwtImpl' : "io.jsonwebtoken:jjwt-impl:$jjwt",
'jjwtOrgjson' : "io.jsonwebtoken:jjwt-orgjson:$jjwt"
],
vanniktech: [
vanniktech : [
'emojiMaterial' : "com.vanniktech:emoji-material:$vanniktechEmoji",
'emojiGoogle' : "com.vanniktech:emoji-google:$vanniktechEmoji"
],
apache : [
'commonsImaging' : "org.apache.sanselan:sanselan:0.97-incubator"
],
tests : [
'kluent' : "org.amshove.kluent:kluent-android:1.68",
'timberJunitRule' : "net.lachlanmckee:timber-junit-rule:1.0.1",

104
docs/design.md Normal file
View File

@@ -0,0 +1,104 @@
# Element Android design
## Introduction
Design at element.io is done using Figma - https://www.figma.com
## How to import from Figma to the Element Android project
Integration should be done using the Android development best practice, and should follow the existing convention in the code.
### Colors
Element Android already contains all the colors which can be used by the designer, in the module `ui-style`.
Some of them depend on the theme, so ensure to use theme attributes and not colors directly.
### Text
- click on a text on Figma
- on the right panel, information about the style and colors are displayed
- in Element Android, text style are already defined, generally you should not create new style
- apply the style and the color to the layout
### Dimension, position and margin
- click on an item on Figma
- dimensions of the item will be displayed.
- move the mouse to other items to get relative positioning, margin, etc.
### Icons
#### Export drawable from Figma
- click on the element to export
- ensure that the correct layer is selected. Sometimes the parent layer has to be selected on the left panel
- on the right panel, click on "export"
- select SVG
- you can check the preview of what will be exported
- click on "export" and save the file locally
- unzip the file if necessary
It's also possible for any icon to go to the main component by right-clicking on the icon.
#### Import in Android Studio
- right click on the drawable folder where the drawable will be created
- click on "New"/"Vector Asset"
- select the exported file
- update the filename if necessary
- click on "Next" and click on "Finish"
- open the created vector drawable
- optionally update the color(s) to "#FF0000" (red) to ensure that the drawable is correctly tinted at runtime.
## Figma links
Figma links can be included in the layout, for future reference, but it is also OK to add a paragraph below here, to centralize the information
Main entry point: https://www.figma.com/files/project/5612863/Element?fuid=779371459522484071
Note: all the Figma links are not publicly available.
### Coumpound
Coumpound contains the theme of the application, with all the components, in Light and Dark theme: palette (colors), typography, iconography, etc.
https://www.figma.com/file/X4XTH9iS2KGJ2wFKDqkyed/Compound
### Login
TBD
#### Login v2
https://www.figma.com/file/xdV4PuI3DlzA1EiBvbrggz/Login-Flow-v2
### Room list
TBD
### Timeline
https://www.figma.com/file/x1HYYLYMmbYnhfoz2c2nGD/%5BRiotX%5D-Misc?node-id=0%3A1
### Voice message
https://www.figma.com/file/uaWc62Ux2DkZC4OGtAGcNc/Voice-Messages?node-id=473%3A12
### Room settings
TBD
### VoIP
https://www.figma.com/file/V6m2z0oAtUV1l8MdyIrAep/VoIP?node-id=4254%3A25767
### Presence
https://www.figma.com/file/qmvEskET5JWva8jZJ4jX8o/Presence---User-Status?node-id=114%3A9174
(Option B is chosen)
### Spaces
https://www.figma.com/file/m7L63aGPW7iHnIYStfdxCe/Spaces?node-id=192%3A30161
### List to be continued...

View File

@@ -0,0 +1,11 @@
Useful links:
- https://airbnb.io/mavericks/#/new-2x
Mavericks 2 is replacing MvRx, by removing usage of Rx by Flow, both internally and in the API.
See the link ^ to have more intel, but basically, the changes are:
session.rx() => session.flow()
room.rx() => room.flow()
subscribe { }.disposeOnClear() => onEach { }.launchIn(viewModelScope)
Only using manually onEach requires to add launchIn,any other methods provided by Mavericks on viewModel and activity/fragment are already taking care of lifecycle.

View File

@@ -0,0 +1,2 @@
Hlavní změny v této verzi: Uspořádejte si místnosti pomocí Prostorů! Verze 1.3.1 opravuje pády, ke kterým může docházet ve verzi v1.3.0.
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
Hlavní změny v této verzi: Přidání podpory pro Android Auto. Spousta oprav chyb!
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
Hlavní změny v této verzi: Umožňuje v nastavení zviditelnit zásady serveru identit. Dočasně odstraňuje podporu pro Android Auto.
Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Zprávy, hlasové a videohovory, sdílení souborů, sdílení obrazovky a celá
<b>Navažte tam, kde jste skončili</b>
Zůstaňte v kontaktu, ať jste kdekoli, díky plně synchronizované historii zpráv ve všech zařízeních a na webu https://app.element.io
<b>Open source</b>
Element Android je projekt s otevřeným zdrojovým kódem, který je hostován na GitHubu. Nahlaste prosím chyby a přispějte k jeho vývoji na adrese https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Main changes in this version: Add Presence support, for Direct Message room (note: presence is disabled on matrix.org). Add again Android Auto support.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.4

View File

@@ -0,0 +1,2 @@
Main changes in this version: Add Presence support, for Direct Message room (note: presence is disabled on matrix.org). Add again Android Auto support.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.5

View File

@@ -36,4 +36,7 @@ Real end-to-end encryption (only those in the conversation can decrypt messages)
Messaging, voice and video calls, file sharing, screen sharing and a whole bunch of integrations, bots and widgets. Build rooms, communities, stay in touch and get things done.
<b>Pick up where you left off</b>
Stay in touch wherever you are with fully synchronised message history across all your devices and on the web at https://app.element.io
Stay in touch wherever you are with fully synchronised message history across all your devices and on the web at https://app.element.io
<b>Open source</b>
Element Android is an open source project, hosted by GitHub. Please report bugs and/or contribute to its development at https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Põhilised muutused selles versioonis: Isikutuvastusserveri kasutustingimused on leitavad seadistustest ja ajutiselt eemaldasime Android Auto toe.
Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Sõnumid, hääl- ja videokõned, failide jagamine, ekraani jagamine ja terve hu
<b>Jätka sealt, kus pooleli jäid</b>
Saad suhelda kõigis oma seadmetes ja ka veebis aadressil https://app.element.io ning sealjuures täielikult sünkroonitud sõnumite ajalooga.
<b>Avatud lähtekoodiga tarkvara</b>
Element Android on Github'is hallatud avatud lähtekoodiga tarkvaraprojekt. Palun teata vigadest ja/või osale arenduses https://github.com/vector-im/element-android lehel

View File

@@ -0,0 +1,2 @@
تغییرات اصلی در این نگارش: نمایان کردن سیاست(های) کارساز هویت در تنظیمات. برداشتن موقّتی پشتیبانی اندروید خودرو.
گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@
<b>ادامه از جایی که رها کرده‌اید</b>
هر کجا که هستید، با هم‌گام سازی کامل تاریخچهٔ پیام‌ها بین همهٔ افزاره‌هایتان و وب روی https://app.element.io در دسترس باشید
<b>نرم‌افزار آزاد</b>
المنت اندروید، یک پروژهٔ نرم‌افزار آزاد میزبانی‌شده روی گیت‌هاب است. لطفاً گزارش مشکلات و مشارکت‌ها را به توسه‌اش به این نشانی بفرستید: https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Principaux changements pour cette version : Organisez vos salons à laide des espaces ! La v1.3.1 corrige également un plantage dans la version v1.3.0
Liste de tous les changements : https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
Principaux changements pour cette version: Ajout du support pour Android Auto. Beaucoup de corrections de bogues!
Liste de tous les changements: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
Principaux changements pour cette version: Affiche le(s) politique(s) des serveurs didentité dans les réglages. Retrait temporaire du support dAndroid Auto
Liste de tous les changements: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Messagerie instantannée, appels audio et vidéo, partage de fichier, partage d
<b>Reprenez où vous vous êtes arrêté</b>
Restez en contact où que vous soyez grâce à lhistorique des messages synchronisé entre tous vos appareils et sur le web sur https://app.element.io
<b>Open source</b>
Element Adroid est un projet libre, hébergé par GitHub. Veuillez signaler tous les problèmes et / ou contribuer à son développement sur https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Fő változás ebben a verzióban: Azonosítási szerver feltételek megjelenítése a beállításoknál. Ideiglenesen az Android Auto támogatás eltávolítása.
Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -38,3 +38,6 @@ Igazi végpontok között titkosítás (csak a beszélgetésben résztvevők tud
<b>Vedd fel a fonalat</b>
Maradj kapcsolatban bárhol minden eszközödön a szinkronizált üzenetekkel és a weben a https://app.element.io oldallal
<b>Nyílt forráskód</b>
Element Android egy nyílt forráskódú projekt a GitHubon. Küldj hibajegyet és/vagy vegyél részt a fejlesztésében itt: https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Perubahan utama dalam versi ini: Membuat kebijakan server identitas terlihat di pengaturan. Menghilangkan dukungan Android Auto untuk sementara.
Changelog lanjutan: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -30,10 +30,13 @@ Element menempatkan Anda dalam kendali dengan cara yang berbeda:
Anda dapat mengobrol dengan siapa saja di jaringan Matrix, apakah mereka menggunakan Element, aplikasi Matrix lain atau bahkan jika mereka menggunakan aplikasi perpesanan yang berbeda.
<b>Sangat aman</b>
Enkripsi ujung-ke-ujung beneran (hanya mereka yang dalam percakapan dapat mendekripsi pesan), dan verifikasi perangkat yang ditanda tangani silang.
Enkripsi ujung-ke-ujung yang nyata (hanya mereka yang dalam percakapan dapat mendekripsi pesan), dan verifikasi perangkat menggunakan penandatanganan-silang.
<b>Komunikasi dan integrasi lengkap</b>
Perpesanan, panggilan suara dan video, berbagi file, berbagi layar dan banyak integrasi, bot dan widget. Buat ruangan, komunitas, tetap terhubung dan selesaikan hal-hal.
<b>Ambil di mana Anda tinggalkan</b>
Tetap terhubung di mana pun Anda berada dengan riwayat pesan yang sepenuhnya disinkronkan di semua perangkat Anda dan di web di https://app.element.io
<b>Open source</b>
Element Android adalah proyek sumber terbuka, di-host oleh GitHub. Silakan melaporkan bug dan/atau membuat kontribusi ke pengembangannya di https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Modifiche principali in questa versione: organizza le tue stanze usando gli Spazi! v1.3.1 corregge un errore della v1.3.0.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
Modifiche principali in questa versione: aggiunto supporto per Android Auto. Corretti molti errori!
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
Modifiche principali in questa versione: rese visibili le informative dei server d'identità nelle impostazioni. Rimosso temporaneamente il supporto per Android Auto.
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Messaggi, chiamate audio e video, condivisione file e schermo, un vasto numero d
<b>Riprendi da dove ti eri fermato</b>
Resta in contatto ovunque tu sia con la cronologia dei messaggi sincronizzata tra tutti i tuoi dispositivi e in rete su https://app.element.io
<b>Open source</b>
Element Android è un progetto open source, ospitato su GitHub. Segnala errori e/o contribuisci al suo sviluppo su https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Principais mudanças nesta versão: Fazer política(s) de servidor de identidade visível(is) nas configurações. Remover temporariamente suporte a Android Auto.
Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -1,4 +1,4 @@
Element é tanto um mensageiro seguro como um app de colaboração de time de produtividade que é ideal para chats de grupo enquanto se trabalha remotamente. Este app de chat usa encriptação ponta-a-ponta para prover conferência de vídeo, compartilhamento de arquivo e chamadas de voz poderasos.
Element é tanto um mensageiro seguro como um app de colaboração de time de produtividade que é ideal para chats de grupo enquanto se trabalha remotamente. Este app de chat usa encriptação ponta-a-ponta para prover conferência de vídeo, compartilhamento de arquivo e chamadas de voz poderosos.
<b>As funções de Element incluem:</b>
- Ferramentas de comunicação online avançadas
@@ -22,9 +22,9 @@ Para permitir mais controle de seus dados e conversas sensíveis, Element pode s
Você decide onde manter seus dados e mensagens. Sem o risco de data mining ou acesso de terceiros.
Element põe você em controle de diferentes maneiras:
1. Pegar uma conta grátis no servidor público matrix.org hospedado pelos desenvolvedores Matrix, ou escolha de milhares de servidores públicos hospedados por pessoas se voluntariando
2. Auto-hospedar sua conta ao rodar um servidor em sua própria infraestrutura de TI
3. Fazer signup para uma conta num servidor personalizado ao simplesmente assinar a plataforma de hospedagem Element Matrix Services
1. Pegue uma conta grátis no servidor público matrix.org hospedado pelos desenvolvedores Matrix, ou escolha de milhares de servidores públicos hospedados por pessoas se voluntariando
2. Auto-hospede sua conta ao rodar um servidor em sua própria infraestrutura de TI
3. Faça signup para uma conta num servidor personalizado ao simplesmente assinar a plataforma de hospedagem Element Matrix Services
<b>Mensageria e colaboração abertos</b>
Você pode fazer chat com qualquer pessoa na rede Matrix, caso ela esteja usando Element, um outro app de Matrix ou mesmo se ela estiver usando um app de mensageria diferente.
@@ -37,3 +37,6 @@ Messageria, chamadas de voz e vídeo, compartilhamento de arquivo, compartilhame
<b>Continue de onde você parou</b>
Fique em contato onde quer que você esteja com histórico de mensagem completamente sincronizado por todos os seus dispositivos e na web em https://app.element.io
<b>Open source</b>
Element Android é um projeto open source, hospedado por GitHub. Por favor reporte bugs e/ou contribua para seu desenvolvimento em https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Основные изменения в этой версии: Организуйте свои комнаты с помощью Пространств!
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.0

View File

@@ -0,0 +1,2 @@
Основные изменения в этой версии: Организуйте свои комнаты с помощью Пространств! В версии 1.3.1 исправлен сбой, который мог произойти в версии 1.3.0.
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
Основные изменения в этой версии: Добавлена поддержка Android Auto. Исправлено множество ошибок!
Весь список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
Основные изменения в этой версии: Правила сервера идентификации теперь видимы в настройках. Временно убрана поддержка Android Auto.
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,7 @@ Element дает вам возможность контролировать си
<b>Восстанавливайте связь с того места, где остановились</b>.
Оставайтесь на связи, где бы вы ни находились, с полностью синхронизированной историей сообщений на всех ваших устройствах и в Интернете по адресу https://app.element.io
<b>Открытый исходный код</b>
Element Android - это проект с открытым исходным кодом, размещенный на GitHub. Пожалуйста, сообщайте об ошибках и/или вносите вклад в его развитие по адресу https://github.com/vector-im/element-android.

View File

@@ -0,0 +1,2 @@
Ndryshimet kryesore në këtë version: Bërje të dukshëm e rregullit(ave) të shërbyesit të identiteteve te rregullimet. Heqje përkohësisht e mbulimit për Android Auto.
Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -1,4 +1,4 @@
Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashkëpunimi prodhimtar ekipi, i cili është ideal për fjalosje në grup, teksa punohet së largët. Ky aplikacion fjalosjeje përdor fshehtëzim skaj-më-skaj për të furnizuar konferencë video, shkëmbim kartelash dhe thirrje me zë të fuqishme.
Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashkëpunimi prodhimtar ekipi, i cili është ideal për fjalosje në grup, teksa punohet së largëti. Ky aplikacion fjalosjeje përdor fshehtëzim skaj-më-skaj për të furnizuar konferencë video, shkëmbim kartelash dhe thirrje me zë të fuqishme.
<b>Në veçoritë e Element-it përfshihen:</b>
- Mjete të thelluara komunikimi internetor
@@ -8,7 +8,7 @@ Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashk
- Fjalosje video të llojit VoIP dhe tregim ekrani
- Integrim i kollajtë me mjetet tuaja të parapëlqyera të bashkëpunimit internetor, mjete administrimi projektesh, shërbime VoIP dhe aplikacione të tjera shkëmbimi mesazhesh në ekip
Element-i është plotësisht i ndryshëm nga aplikacione të tjera shkëmbimi mesazhesh dhe bashkëpunimi. Funksionimi i tij bazohet në Matrix, një rrjet i hapët për mesazhe të siguruar dhe komunikim të decentralizuar. Lejon vetëstrehim, për tu lejuar përdoruesve pronësi dhe kontroll maksimal të të dhënave dhe mesazheve të tyre.
Element-i është plotësisht i ndryshëm nga aplikacione të tjera shkëmbimi mesazhesh dhe bashkëpunimi. Funksionimi i tij bazohet në Matrix, një rrjet i hapët për mesazhe të siguruar dhe komunikim të decentralizuar. Lejon vetëstrehim, për tu dhënë përdoruesve pronësi dhe kontroll maksimal të të dhënave dhe mesazheve të tyre.
<b>Privatësi dhe shkëmbim mesazhesh të fshehtëzuar</b>
Element-i ju mbron nga reklama të padëshiruara, shfrytëzim të dhënash dhe vatha dixhitale. Ai siguron gjithashtu krejt të dhënat tuaja, komunikime tek-për-tek me video dhe me zë, përmes fshehtëzimi skaj-më-skaj dhe verifikim “cross-signed” pajisjesh.
@@ -37,3 +37,6 @@ Shkëmbim mesazhesh, thirrje me zë dhe me video, shkëmbim kartelash, tregim ek
<b>Rifillojani atje ku e latë</b>
Jini në dijeni, kudo ku gjendeni, me historik plotësisht të njëkohësuar mesazhesh nëpër krejt pajisjet tuaja dhe në internet te https://app.element.io
<b>Me burim të hapët</b>
Element-i për Android është një projekt me burim të hapët, strehuar në GitHub. Ju lutemi, njoftoni të meta dhe/ose jepni ndihmesë në zhvillimin e tij te https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Organisera dina rum med utrymmen! v1.3.1 fixar en krasch som kan hända i v1.3.0.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Lägg till stöd för Android Auto. Massa buggfixar!
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
Huvudsakliga ändringar i den här versionen: Gör identitetsserverpolicy(er) synliga i inställningarna. Ta tillfälligt bort stöd för Android Auto.
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Meddelanden, röst- och videosamtal, fildelning, skärmdelning och massa integra
<b>Fortsätt där du lämnade</b>
Håll kontakten vart du än är med fullt synkroniserad meddelandehistorik på alla dina enheter och på webben på https://app.element.io
<b>Öppen källkod</b>
Element Android är projekt baserat på öppen källkod, som ligger på GitHub. Vänligen rapportera buggar och/eller bidra till dess utveckling på https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
Основні зміни в цій версії: додано політику ідентифікації сервера (IES) у налаштуваннях. Тимчасово вилучено автозаповнення Android.
Усі зміни: https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Element надає такі можливості на вибір:
<b>Продовжуйте, де зупинилися</b>
Залишайтеся на зв'язку, де б ви не знаходились, з повністю синхронізованою історією повідомлень на всіх своїх пристроях та в Інтернеті за адресою https://app.element.io
<b>Відкритий код</b>
Element для Android це проєкт з відкритим кодом, розміщений GitHub. Будь ласка, повідомте про помилки та/або сприяйте його розвитку на https://github.com/vector-im/element-android

View File

@@ -0,0 +1,2 @@
此版本中的主要更改:使身份服务器策略在设置中可见。 暂时移除 Android Auto 支持。
完整更新日志https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Element 透过不同的方式让你掌控一切:
<b>从上次离开的地方开始</b>
无论你身在何处,都可以透过在你所有设备与网页 https://app.element.io 间完全同步的信息历史保持联络
<b>开源</b>
Element Android 是一个开源项目,由 GitHub 托管。 请在 https://github.com/vector-im/element-android 报告错误和/或为其开发做出贡献

View File

@@ -0,0 +1,2 @@
此版本中的主要變動使用空間來整理您的聊天室v1.3.1 修復了在 v1.3.0 中遇到的當機問題。
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.1

View File

@@ -0,0 +1,2 @@
此版本中的主要變動:新增對 Android Auto 的支援。以及許多錯誤修復!
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.2

View File

@@ -0,0 +1,2 @@
此版本中的主要變動:讓身份伺服器政策在設定中可見。暫時移除 Android Auto 支援。
完整的變更紀錄https://github.com/vector-im/element-android/releases/tag/v1.3.3

View File

@@ -37,3 +37,6 @@ Element 透過不同的方式讓您掌控一切:
<b>從上次離開的地方開始</b>
無論您身在何處,都可以透過在您所有裝置與網頁 https://app.element.io 間完全同步的訊息歷史保持聯絡
<b>開放原始碼</b>
Android 版的 Element 是開放原始碼專案,託管於 GitHub 上。請在 https://github.com/vector-im/element-android 上回報臭蟲及/或貢獻其開發

View File

@@ -23,3 +23,6 @@ vector.debugPrivateData=false
# httpLogLevel values: NONE, BASIC, HEADERS, BODY
vector.httpLogLevel=BASIC
# Note: to debug, you can put and uncomment the following lines in the file ~/.gradle/gradle.properties to override the value above
#vector.debugPrivateData=true
#vector.httpLogLevel=BODY

View File

@@ -133,4 +133,8 @@
<color name="vctr_voice_message_toast_background_light">@color/palette_black_900</color>
<color name="vctr_voice_message_toast_background_dark">@color/palette_gray_400</color>
<!-- Presence Indicator colors -->
<attr name="vctr_presence_indicator_offline" format="color" />
<color name="vctr_presence_indicator_offline_light">@color/palette_gray_100</color>
<color name="vctr_presence_indicator_offline_dark">@color/palette_gray_450</color>
</resources>

View File

@@ -42,6 +42,9 @@
<item name="vctr_markdown_block_background_color">@android:color/black</item>
<item name="vctr_spoiler_background_color">#FFFFFFFF</item>
<!-- Presence Indicator colors -->
<item name="vctr_presence_indicator_offline">@color/vctr_presence_indicator_offline_dark</item>
<!-- Some alias -->
<item name="vctr_header_background">?vctr_system</item>
<item name="vctr_list_separator">?vctr_content_quinary</item>

View File

@@ -42,6 +42,9 @@
<item name="vctr_markdown_block_background_color">#FFEEEEEE</item>
<item name="vctr_spoiler_background_color">#FF000000</item>
<!-- Presence Indicator colors -->
<item name="vctr_presence_indicator_offline">@color/vctr_presence_indicator_offline_light</item>
<!-- Some alias -->
<item name="vctr_header_background">?vctr_system</item>
<item name="vctr_list_separator">?vctr_content_quinary</item>

1
matrix-sdk-android-flow/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,47 @@
plugins {
id 'com.android.library'
id 'org.jetbrains.kotlin.android'
}
android {
compileSdk versions.compileSdk
defaultConfig {
minSdk versions.minSdk
targetSdk versions.targetSdk
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility versions.sourceCompat
targetCompatibility versions.targetCompat
}
kotlinOptions {
jvmTarget = "11"
}
}
dependencies {
implementation project(":matrix-sdk-android")
implementation libs.androidx.appCompat
implementation libs.jetbrains.coroutinesCore
implementation libs.jetbrains.coroutinesAndroid
implementation libs.androidx.lifecycleLivedata
// Paging
implementation libs.androidx.pagingRuntimeKtx
// Logging
implementation libs.jakewharton.timber
}

View File

@@ -0,0 +1,21 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.matrix.android.sdk.flow">
</manifest>

View File

@@ -0,0 +1,31 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.flow
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.withContext
internal fun <T> Flow<T>.startWith(dispatcher: CoroutineDispatcher, supplier: suspend () -> T): Flow<T> {
return onStart {
val value = withContext(dispatcher) {
supplier()
}
emit(value)
}
}

View File

@@ -0,0 +1,105 @@
/*
* Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.flow
import androidx.lifecycle.asFlow
import kotlinx.coroutines.flow.Flow
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.members.RoomMemberQueryParams
import org.matrix.android.sdk.api.session.room.model.EventAnnotationsSummary
import org.matrix.android.sdk.api.session.room.model.ReadReceipt
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.room.notification.RoomNotificationState
import org.matrix.android.sdk.api.session.room.send.UserDraft
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
import org.matrix.android.sdk.api.util.Optional
import org.matrix.android.sdk.api.util.toOptional
class FlowRoom(private val room: Room) {
fun liveRoomSummary(): Flow<Optional<RoomSummary>> {
return room.getRoomSummaryLive().asFlow()
.startWith(room.coroutineDispatchers.io) {
room.roomSummary().toOptional()
}
}
fun liveRoomMembers(queryParams: RoomMemberQueryParams): Flow<List<RoomMemberSummary>> {
return room.getRoomMembersLive(queryParams).asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getRoomMembers(queryParams)
}
}
fun liveAnnotationSummary(eventId: String): Flow<Optional<EventAnnotationsSummary>> {
return room.getEventAnnotationsSummaryLive(eventId).asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getEventAnnotationsSummary(eventId).toOptional()
}
}
fun liveTimelineEvent(eventId: String): Flow<Optional<TimelineEvent>> {
return room.getTimeLineEventLive(eventId).asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getTimeLineEvent(eventId).toOptional()
}
}
fun liveStateEvent(eventType: String, stateKey: QueryStringValue): Flow<Optional<Event>> {
return room.getStateEventLive(eventType, stateKey).asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getStateEvent(eventType, stateKey).toOptional()
}
}
fun liveStateEvents(eventTypes: Set<String>): Flow<List<Event>> {
return room.getStateEventsLive(eventTypes).asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getStateEvents(eventTypes)
}
}
fun liveReadMarker(): Flow<Optional<String>> {
return room.getReadMarkerLive().asFlow()
}
fun liveReadReceipt(): Flow<Optional<String>> {
return room.getMyReadReceiptLive().asFlow()
}
fun liveEventReadReceipts(eventId: String): Flow<List<ReadReceipt>> {
return room.getEventReadReceiptsLive(eventId).asFlow()
}
fun liveDraft(): Flow<Optional<UserDraft>> {
return room.getDraftLive().asFlow()
.startWith(room.coroutineDispatchers.io) {
room.getDraft().toOptional()
}
}
fun liveNotificationState(): Flow<RoomNotificationState> {
return room.getLiveRoomNotificationState().asFlow()
}
}
fun Room.flow(): FlowRoom {
return FlowRoom(this)
}

View File

@@ -0,0 +1,180 @@
/*
* Copyright 2020 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.flow
import androidx.lifecycle.asFlow
import androidx.paging.PagedList
import kotlinx.coroutines.flow.Flow
import org.matrix.android.sdk.api.query.QueryStringValue
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataEvent
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
import org.matrix.android.sdk.api.session.group.GroupSummaryQueryParams
import org.matrix.android.sdk.api.session.group.model.GroupSummary
import org.matrix.android.sdk.api.session.identity.ThreePid
import org.matrix.android.sdk.api.session.pushers.Pusher
import org.matrix.android.sdk.api.session.room.RoomSummaryQueryParams
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataEvent
import org.matrix.android.sdk.api.session.room.members.ChangeMembershipState
import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.space.SpaceSummaryQueryParams
import org.matrix.android.sdk.api.session.sync.SyncState
import org.matrix.android.sdk.api.session.user.model.User
import org.matrix.android.sdk.api.session.widgets.model.Widget
import org.matrix.android.sdk.api.util.Optional
import org.matrix.android.sdk.api.util.toOptional
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo
import org.matrix.android.sdk.internal.crypto.store.PrivateKeysInfo
class FlowSession(private val session: Session) {
fun liveRoomSummaries(queryParams: RoomSummaryQueryParams): Flow<List<RoomSummary>> {
return session.getRoomSummariesLive(queryParams).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.getRoomSummaries(queryParams)
}
}
fun liveGroupSummaries(queryParams: GroupSummaryQueryParams): Flow<List<GroupSummary>> {
return session.getGroupSummariesLive(queryParams).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.getGroupSummaries(queryParams)
}
}
fun liveSpaceSummaries(queryParams: SpaceSummaryQueryParams): Flow<List<RoomSummary>> {
return session.spaceService().getSpaceSummariesLive(queryParams).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.spaceService().getSpaceSummaries(queryParams)
}
}
fun liveBreadcrumbs(queryParams: RoomSummaryQueryParams): Flow<List<RoomSummary>> {
return session.getBreadcrumbsLive(queryParams).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.getBreadcrumbs(queryParams)
}
}
fun liveMyDevicesInfo(): Flow<List<DeviceInfo>> {
return session.cryptoService().getLiveMyDevicesInfo().asFlow()
.startWith(session.coroutineDispatchers.io) {
session.cryptoService().getMyDevicesInfo()
}
}
fun liveSyncState(): Flow<SyncState> {
return session.getSyncStateLive().asFlow()
}
fun livePushers(): Flow<List<Pusher>> {
return session.getPushersLive().asFlow()
}
fun liveUser(userId: String): Flow<Optional<User>> {
return session.getUserLive(userId).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.getUser(userId).toOptional()
}
}
fun liveRoomMember(userId: String, roomId: String): Flow<Optional<RoomMemberSummary>> {
return session.getRoomMemberLive(userId, roomId).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.getRoomMember(userId, roomId).toOptional()
}
}
fun liveUsers(): Flow<List<User>> {
return session.getUsersLive().asFlow()
}
fun liveIgnoredUsers(): Flow<List<User>> {
return session.getIgnoredUsersLive().asFlow()
}
fun livePagedUsers(filter: String? = null, excludedUserIds: Set<String>? = null): Flow<PagedList<User>> {
return session.getPagedUsersLive(filter, excludedUserIds).asFlow()
}
fun liveThreePIds(refreshData: Boolean): Flow<List<ThreePid>> {
return session.getThreePidsLive(refreshData).asFlow()
.startWith(session.coroutineDispatchers.io) { session.getThreePids() }
}
fun livePendingThreePIds(): Flow<List<ThreePid>> {
return session.getPendingThreePidsLive().asFlow()
.startWith(session.coroutineDispatchers.io) { session.getPendingThreePids() }
}
fun liveUserCryptoDevices(userId: String): Flow<List<CryptoDeviceInfo>> {
return session.cryptoService().getLiveCryptoDeviceInfo(userId).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.cryptoService().getCryptoDeviceInfo(userId)
}
}
fun liveCrossSigningInfo(userId: String): Flow<Optional<MXCrossSigningInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningKeys(userId).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.cryptoService().crossSigningService().getUserCrossSigningKeys(userId).toOptional()
}
}
fun liveCrossSigningPrivateKeys(): Flow<Optional<PrivateKeysInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().asFlow()
.startWith(session.coroutineDispatchers.io) {
session.cryptoService().crossSigningService().getCrossSigningPrivateKeys().toOptional()
}
}
fun liveUserAccountData(types: Set<String>): Flow<List<UserAccountDataEvent>> {
return session.accountDataService().getLiveUserAccountDataEvents(types).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.accountDataService().getUserAccountDataEvents(types)
}
}
fun liveRoomAccountData(types: Set<String>): Flow<List<RoomAccountDataEvent>> {
return session.accountDataService().getLiveRoomAccountDataEvents(types).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.accountDataService().getRoomAccountDataEvents(types)
}
}
fun liveRoomWidgets(
roomId: String,
widgetId: QueryStringValue,
widgetTypes: Set<String>? = null,
excludedTypes: Set<String>? = null
): Flow<List<Widget>> {
return session.widgetService().getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes).asFlow()
.startWith(session.coroutineDispatchers.io) {
session.widgetService().getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)
}
}
fun liveRoomChangeMembershipState(): Flow<Map<String, ChangeMembershipState>> {
return session.getChangeMembershipsLive().asFlow()
}
}
fun Session.flow(): FlowSession {
return FlowSession(this)
}

View File

@@ -0,0 +1,32 @@
/*
* Copyright (c) 2021 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.flow
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
import org.matrix.android.sdk.api.util.Optional
fun <T : Any> Flow<Optional<T>>.unwrap(): Flow<T> {
return filter { it.hasValue() }.map { it.get() }
}
fun <T : Any, U : Any> Flow<Optional<T>>.mapOptional(fn: (T) -> U?): Flow<Optional<U>> {
return map {
it.map(fn)
}
}

View File

@@ -31,7 +31,7 @@ android {
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
buildConfigField "String", "SDK_VERSION", "\"1.3.3\""
buildConfigField "String", "SDK_VERSION", "\"1.3.5\""
buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
resValue "string", "git_sdk_revision", "\"${gitRevision()}\""
@@ -100,8 +100,6 @@ static def gitRevisionDate() {
}
dependencies {
implementation libs.jetbrains.kotlinStdlibJdk7
implementation libs.jetbrains.coroutinesCore
implementation libs.jetbrains.coroutinesAndroid
@@ -130,6 +128,7 @@ dependencies {
// Database
implementation 'com.github.Zhuinden:realm-monarchy:0.7.1'
kapt 'dk.ilios:realmfieldnameshelper:2.0.0'
// Work
@@ -153,8 +152,11 @@ dependencies {
// Video compression
implementation 'com.otaliastudios:transcoder:0.10.4'
// Exif data handling
implementation libs.apache.commonsImaging
// Phone number https://github.com/google/libphonenumber
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.34'
implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.35'
testImplementation libs.tests.junit
testImplementation 'org.robolectric:robolectric:4.6.1'
@@ -165,6 +167,8 @@ dependencies {
implementation libs.jetbrains.coroutinesAndroid
// Plant Timber tree for test
testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1'
// Transitively required for mocking realm as monarchy doesn't expose Rx
testImplementation libs.rx.rxKotlin
kaptAndroidTest libs.dagger.daggerCompiler
androidTestImplementation libs.androidx.testCore

View File

@@ -18,7 +18,7 @@ package org.matrix.android.sdk
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.asCoroutineDispatcher
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import java.util.concurrent.Executors
internal val testCoroutineDispatchers = MatrixCoroutineDispatchers(Main, Main, Main, Main,

View File

@@ -5,7 +5,7 @@
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,11 +14,11 @@
* limitations under the License.
*/
package org.matrix.android.sdk.internal.util
package org.matrix.android.sdk.api
import kotlinx.coroutines.CoroutineDispatcher
internal data class MatrixCoroutineDispatchers(
data class MatrixCoroutineDispatchers(
val io: CoroutineDispatcher,
val computation: CoroutineDispatcher,
val main: CoroutineDispatcher,

View File

@@ -20,6 +20,7 @@ import androidx.annotation.MainThread
import androidx.lifecycle.LiveData
import kotlinx.coroutines.flow.SharedFlow
import okhttp3.OkHttpClient
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.auth.data.SessionParams
import org.matrix.android.sdk.api.failure.GlobalError
import org.matrix.android.sdk.api.federation.FederationService
@@ -42,6 +43,7 @@ import org.matrix.android.sdk.api.session.integrationmanager.IntegrationManagerS
import org.matrix.android.sdk.api.session.media.MediaService
import org.matrix.android.sdk.api.session.openid.OpenIdService
import org.matrix.android.sdk.api.session.permalinks.PermalinkService
import org.matrix.android.sdk.api.session.presence.PresenceService
import org.matrix.android.sdk.api.session.profile.ProfileService
import org.matrix.android.sdk.api.session.pushers.PushersService
import org.matrix.android.sdk.api.session.room.RoomDirectoryService
@@ -75,6 +77,7 @@ interface Session :
TermsService,
EventService,
ProfileService,
PresenceService,
PushRuleService,
PushersService,
SyncStatusService,
@@ -82,6 +85,8 @@ interface Session :
SecureStorageService,
AccountService {
val coroutineDispatchers: MatrixCoroutineDispatchers
/**
* The params associated to the session
*/

View File

@@ -30,6 +30,7 @@ import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.crypto.algorithms.olm.OlmDecryptionResult
import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent
import org.matrix.android.sdk.internal.di.MoshiProvider
import org.matrix.android.sdk.internal.session.presence.model.PresenceContent
import timber.log.Timber
typealias Content = JsonDict
@@ -305,3 +306,7 @@ fun Event.isReply(): Boolean {
fun Event.isEdition(): Boolean {
return getRelationContent()?.takeIf { it.type == RelationType.REPLACE }?.eventId != null
}
fun Event.getPresenceContent(): PresenceContent? {
return content.toModel<PresenceContent>()
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright 2021 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.matrix.android.sdk.api.session.presence
import org.matrix.android.sdk.api.session.presence.model.PresenceEnum
import org.matrix.android.sdk.api.session.presence.model.UserPresence
/**
* This interface defines methods for handling user presence information.
*/
interface PresenceService {
/**
* Update the presence status for the current user
* @param presence the new presence state
* @param statusMsg the status message to attach to this state
*/
suspend fun setMyPresence(presence: PresenceEnum, statusMsg: String? = null)
/**
* Fetch the given user's presence state.
* @param userId the userId whose presence state to get.
*/
suspend fun fetchPresence(userId: String): UserPresence
// TODO Add live data (of Flow) of the presence of a userId
}

View File

@@ -0,0 +1,36 @@
/*
* Copyright 2021 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.api.session.presence.model
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = false)
enum class PresenceEnum(val value: String) {
@Json(name = "online")
ONLINE("online"),
@Json(name = "offline")
OFFLINE("offline"),
@Json(name = "unavailable")
UNAVAILABLE("unavailable");
companion object {
fun from(s: String): PresenceEnum? = values().find { it.value == s }
}
}

View File

@@ -0,0 +1,24 @@
/*
* Copyright 2021 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.matrix.android.sdk.api.session.presence.model
data class UserPresence(
val lastActiveAgo: Long? = null,
val statusMessage: String? = null,
val isCurrentlyActive: Boolean? = null,
val presence: PresenceEnum = PresenceEnum.OFFLINE
)

View File

@@ -29,38 +29,19 @@ interface PushersService {
* Add a new HTTP pusher.
* Ref: https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-pushers-set
*
* @param pushkey This is a unique identifier for this pusher. The value you should use for
* this is the routing or destination address information for the notification,
* for example, the APNS token for APNS or the Registration ID for GCM. If your
* notification client has no such concept, use any unique identifier. Max length, 512 chars.
* @param appId the application id
* This is a reverse-DNS style identifier for the application. It is recommended
* that this end with the platform, such that different platform versions get
* different app identifiers. Max length, 64 chars.
* @param profileTag This string determines which set of device specific rules this pusher executes.
* @param lang The preferred language for receiving notifications (e.g. "en" or "en-US").
* @param appDisplayName A human readable string that will allow the user to identify what application owns this pusher.
* @param deviceDisplayName A human readable string that will allow the user to identify what device owns this pusher.
* @param url The URL to use to send notifications to. MUST be an HTTPS URL with a path of /_matrix/push/v1/notify.
* @param append If true, the homeserver should add another pusher with the given pushkey and App ID in addition
* to any others with different user IDs. Otherwise, the homeserver must remove any other pushers
* with the same App ID and pushkey for different users.
* @param withEventIdOnly true to limit the push content to only id and not message content
* Ref: https://matrix.org/docs/spec/push_gateway/r0.1.1#homeserver-behaviour
*
* @return A work request uuid. Can be used to listen to the status
* (LiveData<WorkInfo> status = workManager.getWorkInfoByIdLiveData(<UUID>))
* @throws [InvalidParameterException] if a parameter is not correct
*/
fun addHttpPusher(pushkey: String,
appId: String,
profileTag: String,
lang: String,
appDisplayName: String,
deviceDisplayName: String,
url: String,
append: Boolean,
withEventIdOnly: Boolean): UUID
suspend fun addHttpPusher(httpPusher: HttpPusher)
/**
* Enqueues a new HTTP pusher via the WorkManager API.
* Ref: https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-pushers-set
*
* @return A work request uuid. Can be used to listen to the status
* (LiveData<WorkInfo> status = workManager.getWorkInfoByIdLiveData(<UUID>))
* @throws [InvalidParameterException] if a parameter is not correct
*/
fun enqueueAddHttpPusher(httpPusher: HttpPusher): UUID
/**
* Add a new Email pusher.
@@ -75,16 +56,14 @@ interface PushersService {
* to any others with different user IDs. Otherwise, the homeserver must remove any other pushers
* with the same App ID and pushkey for different users. Typically We always want to append for
* email pushers since we don't want to stop other accounts notifying to the same email address.
* @return A work request uuid. Can be used to listen to the status
* (LiveData<WorkInfo> status = workManager.getWorkInfoByIdLiveData(<UUID>))
* @throws [InvalidParameterException] if a parameter is not correct
*/
fun addEmailPusher(email: String,
lang: String,
emailBranding: String,
appDisplayName: String,
deviceDisplayName: String,
append: Boolean = true): UUID
suspend fun addEmailPusher(email: String,
lang: String,
emailBranding: String,
appDisplayName: String,
deviceDisplayName: String,
append: Boolean = true)
/**
* Directly ask the push gateway to send a push to this device
@@ -128,4 +107,61 @@ interface PushersService {
* Get the current pushers
*/
fun getPushers(): List<Pusher>
data class HttpPusher(
/**
* This is a unique identifier for this pusher. The value you should use for
* this is the routing or destination address information for the notification,
* for example, the APNS token for APNS or the Registration ID for GCM. If your
* notification client has no such concept, use any unique identifier. Max length, 512 chars.
*/
val pushkey: String,
/**
* The application id
* This is a reverse-DNS style identifier for the application. It is recommended
* that this end with the platform, such that different platform versions get
* different app identifiers. Max length, 64 chars.
*/
val appId: String,
/**
* This string determines which set of device specific rules this pusher executes.
*/
val profileTag: String,
/**
* The preferred language for receiving notifications (e.g. "en" or "en-US").
*/
val lang: String,
/**
* A human readable string that will allow the user to identify what application owns this pusher.
*/
val appDisplayName: String,
/**
* A human readable string that will allow the user to identify what device owns this pusher.
*/
val deviceDisplayName: String,
/**
* The URL to use to send notifications to. MUST be an HTTPS URL with a path of /_matrix/push/v1/notify.
*/
val url: String,
/**
* If true, the homeserver should add another pusher with the given pushkey and App ID in addition
* to any others with different user IDs. Otherwise, the homeserver must remove any other pushers
* with the same App ID and pushkey for different users.
*/
val append: Boolean,
/**
* true to limit the push content to only id and not message content
* Ref: https://matrix.org/docs/spec/push_gateway/r0.1.1#homeserver-behaviour
*/
val withEventIdOnly: Boolean
)
}

View File

@@ -17,6 +17,7 @@
package org.matrix.android.sdk.api.session.room
import androidx.lifecycle.LiveData
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.session.room.accountdata.RoomAccountDataService
import org.matrix.android.sdk.api.session.room.alias.AliasService
import org.matrix.android.sdk.api.session.room.call.RoomCallService
@@ -61,6 +62,8 @@ interface Room :
RoomAccountDataService,
RoomVersionService {
val coroutineDispatchers: MatrixCoroutineDispatchers
/**
* The roomId of this room
*/

View File

@@ -16,12 +16,15 @@
package org.matrix.android.sdk.api.session.room.model
import org.matrix.android.sdk.api.session.presence.model.UserPresence
/**
* Class representing a simplified version of EventType.STATE_ROOM_MEMBER state event content
*/
data class RoomMemberSummary constructor(
val membership: Membership,
val userId: String,
val userPresence: UserPresence? = null,
val displayName: String? = null,
val avatarUrl: String? = null
)

View File

@@ -17,6 +17,7 @@
package org.matrix.android.sdk.api.session.room.model
import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel
import org.matrix.android.sdk.api.session.presence.model.UserPresence
import org.matrix.android.sdk.api.session.room.model.tag.RoomTag
import org.matrix.android.sdk.api.session.room.send.UserDraft
import org.matrix.android.sdk.api.session.room.sender.SenderInfo
@@ -38,6 +39,7 @@ data class RoomSummary(
val joinRules: RoomJoinRules? = null,
val isDirect: Boolean = false,
val directUserId: String? = null,
val directUserPresence: UserPresence? = null,
val joinedMembersCount: Int? = 0,
val invitedMembersCount: Int? = 0,
val latestPreviewableEvent: TimelineEvent? = null,

View File

@@ -29,6 +29,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.NoOpMatrixCallback
import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
import org.matrix.android.sdk.api.crypto.MXCryptoConfig
@@ -93,7 +94,6 @@ import org.matrix.android.sdk.internal.task.TaskThread
import org.matrix.android.sdk.internal.task.configureWith
import org.matrix.android.sdk.internal.task.launchToCallback
import org.matrix.android.sdk.internal.util.JsonCanonicalizer
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.olm.OlmManager
import timber.log.Timber
import java.util.concurrent.atomic.AtomicBoolean

View File

@@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto
import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.MatrixPatterns
import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.internal.crypto.crosssigning.DeviceTrustLevel
@@ -29,7 +30,6 @@ import org.matrix.android.sdk.internal.crypto.tasks.DownloadKeysForUsersTask
import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.android.sdk.internal.session.sync.SyncTokenStore
import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.logLimit
import timber.log.Timber
import javax.inject.Inject

View File

@@ -20,6 +20,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType
@@ -27,16 +28,17 @@ import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction
import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.MXOlmSessionResult
import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap
import org.matrix.android.sdk.internal.crypto.model.event.OlmEventContent
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask
import org.matrix.android.sdk.internal.extensions.foldToCallback
import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import timber.log.Timber
import javax.inject.Inject
import kotlin.jvm.Throws
private const val SEND_TO_DEVICE_RETRY_COUNT = 3
@SessionScope
internal class EventDecryptor @Inject constructor(
@@ -146,29 +148,36 @@ internal class EventDecryptor @Inject constructor(
// offload this from crypto thread (?)
cryptoCoroutineScope.launch(coroutineDispatchers.computation) {
val ensured = ensureOlmSessionsForDevicesAction.handle(mapOf(senderId to listOf(deviceInfo)), force = true)
runCatching { ensureOlmSessionsForDevicesAction.handle(mapOf(senderId to listOf(deviceInfo)), force = true) }.fold(
onSuccess = { sendDummyToDevice(ensured = it, deviceInfo, senderId) },
onFailure = {
Timber.e("## CRYPTO | markOlmSessionForUnwedging() : failed to ensure device info ${senderId}${deviceInfo.deviceId}")
}
)
}
}
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : ensureOlmSessionsForDevicesAction isEmpty:${ensured.isEmpty}")
private suspend fun sendDummyToDevice(ensured: MXUsersDevicesMap<MXOlmSessionResult>, deviceInfo: CryptoDeviceInfo, senderId: String) {
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : ensureOlmSessionsForDevicesAction isEmpty:${ensured.isEmpty}")
// Now send a blank message on that session so the other side knows about it.
// (The keyshare request is sent in the clear so that won't do)
// We send this first such that, as long as the toDevice messages arrive in the
// same order we sent them, the other end will get this first, set up the new session,
// then get the keyshare request and send the key over this new session (because it
// is the session it has most recently received a message on).
val payloadJson = mapOf<String, Any>("type" to EventType.DUMMY)
// Now send a blank message on that session so the other side knows about it.
// (The keyshare request is sent in the clear so that won't do)
// We send this first such that, as long as the toDevice messages arrive in the
// same order we sent them, the other end will get this first, set up the new session,
// then get the keyshare request and send the key over this new session (because it
// is the session it has most recently received a message on).
val payloadJson = mapOf<String, Any>("type" to EventType.DUMMY)
val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
val sendToDeviceMap = MXUsersDevicesMap<Any>()
sendToDeviceMap.setObject(senderId, deviceInfo.deviceId, encodedPayload)
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : sending dummy to $senderId:${deviceInfo.deviceId}")
withContext(coroutineDispatchers.io) {
val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
try {
sendToDeviceTask.execute(sendToDeviceParams)
} catch (failure: Throwable) {
Timber.e(failure, "## CRYPTO | markOlmSessionForUnwedging() : failed to send dummy to $senderId:${deviceInfo.deviceId}")
}
val encodedPayload = messageEncrypter.encryptMessage(payloadJson, listOf(deviceInfo))
val sendToDeviceMap = MXUsersDevicesMap<Any>()
sendToDeviceMap.setObject(senderId, deviceInfo.deviceId, encodedPayload)
Timber.i("## CRYPTO | markOlmSessionForUnwedging() : sending dummy to $senderId:${deviceInfo.deviceId}")
withContext(coroutineDispatchers.io) {
val sendToDeviceParams = SendToDeviceTask.Params(EventType.ENCRYPTED, sendToDeviceMap)
try {
sendToDeviceTask.executeRetry(sendToDeviceParams, remainingRetry = SEND_TO_DEVICE_RETRY_COUNT)
} catch (failure: Throwable) {
Timber.e(failure, "## CRYPTO | markOlmSessionForUnwedging() : failed to send dummy to $senderId:${deviceInfo.deviceId}")
}
}
}

View File

@@ -19,10 +19,10 @@ package org.matrix.android.sdk.internal.crypto
import android.util.LruCache
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.internal.crypto.model.OlmInboundGroupSessionWrapper2
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import timber.log.Timber
import java.util.Timer
import java.util.TimerTask

View File

@@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.api.crypto.MXCryptoConfig
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
@@ -38,7 +39,6 @@ import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.createUniqueTxnId
import org.matrix.android.sdk.internal.di.SessionId
import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.worker.WorkerParamsFactory
import timber.log.Timber
import java.util.concurrent.Executors

View File

@@ -19,13 +19,13 @@ package org.matrix.android.sdk.internal.crypto
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.crypto.model.rest.RoomKeyRequestBody
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.createUniqueTxnId
import org.matrix.android.sdk.internal.crypto.util.RequestIdHelper
import org.matrix.android.sdk.internal.di.SessionId
import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.worker.WorkerParamsFactory
import timber.log.Timber
import javax.inject.Inject

View File

@@ -25,6 +25,8 @@ import org.matrix.android.sdk.internal.crypto.tasks.ClaimOneTimeKeysForUsersDevi
import timber.log.Timber
import javax.inject.Inject
private const val ONE_TIME_KEYS_RETRY_COUNT = 3
internal class EnsureOlmSessionsForDevicesAction @Inject constructor(
private val olmDevice: MXOlmDevice,
private val oneTimeKeysForUsersDeviceTask: ClaimOneTimeKeysForUsersDeviceTask) {
@@ -72,7 +74,7 @@ internal class EnsureOlmSessionsForDevicesAction @Inject constructor(
Timber.i("## CRYPTO | claimOneTimeKeysForUsersDevices() : $usersDevicesToClaim")
val claimParams = ClaimOneTimeKeysForUsersDeviceTask.Params(usersDevicesToClaim)
val oneTimeKeys = oneTimeKeysForUsersDeviceTask.execute(claimParams)
val oneTimeKeys = oneTimeKeysForUsersDeviceTask.executeRetry(claimParams, remainingRetry = ONE_TIME_KEYS_RETRY_COUNT)
Timber.v("## CRYPTO | claimOneTimeKeysForUsersDevices() : keysClaimResponse.oneTimeKeys: $oneTimeKeys")
for ((userId, deviceInfos) in devicesByUser) {
for (deviceInfo in deviceInfos) {

View File

@@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto.algorithms.megolm
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType
@@ -41,7 +42,6 @@ import org.matrix.android.sdk.internal.crypto.model.rest.ForwardedRoomKeyContent
import org.matrix.android.sdk.internal.crypto.model.rest.RoomKeyRequestBody
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import timber.log.Timber
internal class MXMegolmDecryption(private val userId: String,

View File

@@ -17,6 +17,7 @@
package org.matrix.android.sdk.internal.crypto.algorithms.megolm
import kotlinx.coroutines.CoroutineScope
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.crypto.DeviceListManager
import org.matrix.android.sdk.internal.crypto.MXOlmDevice
import org.matrix.android.sdk.internal.crypto.OutgoingGossipingRequestManager
@@ -25,7 +26,6 @@ import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import javax.inject.Inject
internal class MXMegolmDecryptionFactory @Inject constructor(

View File

@@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto.algorithms.megolm
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.Content
import org.matrix.android.sdk.api.session.events.model.Event
@@ -39,7 +40,6 @@ import org.matrix.android.sdk.internal.crypto.repository.WarnOnUnknownDeviceRepo
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask
import org.matrix.android.sdk.internal.util.JsonCanonicalizer
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.convertToUTF8
import timber.log.Timber

View File

@@ -17,6 +17,7 @@
package org.matrix.android.sdk.internal.crypto.algorithms.megolm
import kotlinx.coroutines.CoroutineScope
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.crypto.DeviceListManager
import org.matrix.android.sdk.internal.crypto.MXOlmDevice
import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForDevicesAction
@@ -27,7 +28,6 @@ import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.tasks.SendToDeviceTask
import org.matrix.android.sdk.internal.di.DeviceId
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import javax.inject.Inject
internal class MXMegolmEncryptionFactory @Inject constructor(

View File

@@ -16,12 +16,12 @@
package org.matrix.android.sdk.internal.crypto.algorithms.olm
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.crypto.DeviceListManager
import org.matrix.android.sdk.internal.crypto.MXOlmDevice
import org.matrix.android.sdk.internal.crypto.actions.EnsureOlmSessionsForUsersAction
import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import javax.inject.Inject
internal class MXOlmEncryptionFactory @Inject constructor(private val olmDevice: MXOlmDevice,

View File

@@ -16,13 +16,13 @@
package org.matrix.android.sdk.internal.crypto.crosssigning
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.task.Task
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import javax.inject.Inject
internal interface ComputeTrustTask : Task<ComputeTrustTask.Params, RoomEncryptionTrustLevel> {

View File

@@ -22,6 +22,7 @@ import androidx.work.ExistingWorkPolicy
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.session.crypto.crosssigning.CrossSigningService
@@ -42,7 +43,6 @@ import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.task.TaskThread
import org.matrix.android.sdk.internal.task.configureWith
import org.matrix.android.sdk.internal.util.JsonCanonicalizer
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.logLimit
import org.matrix.android.sdk.internal.worker.WorkerParamsFactory
import org.matrix.olm.OlmPkSigning

View File

@@ -26,6 +26,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.failure.MatrixError
@@ -83,7 +84,6 @@ import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.task.TaskThread
import org.matrix.android.sdk.internal.task.configureWith
import org.matrix.android.sdk.internal.util.JsonCanonicalizer
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.awaitCallback
import org.matrix.olm.OlmException
import org.matrix.olm.OlmPkDecryption
@@ -410,7 +410,7 @@ internal class DefaultKeysBackupService @Inject constructor(
val keysBackupVersionTrust = KeysBackupVersionTrust()
val authData = keysBackupVersion.getAuthDataAsMegolmBackupAuthData()
if (authData == null || authData.publicKey.isEmpty() || authData.signatures.isEmpty()) {
if (authData == null || authData.publicKey.isEmpty() || authData.signatures.isNullOrEmpty()) {
Timber.v("getKeysBackupTrust: Key backup is absent or missing required data")
return keysBackupVersionTrust
}
@@ -478,7 +478,7 @@ internal class DefaultKeysBackupService @Inject constructor(
cryptoCoroutineScope.launch(coroutineDispatchers.main) {
val updateKeysBackupVersionBody = withContext(coroutineDispatchers.crypto) {
// Get current signatures, or create an empty set
val myUserSignatures = authData.signatures[userId].orEmpty().toMutableMap()
val myUserSignatures = authData.signatures?.get(userId).orEmpty().toMutableMap()
if (trust) {
// Add current device signature
@@ -497,7 +497,7 @@ internal class DefaultKeysBackupService @Inject constructor(
// Create an updated version of KeysVersionResult
val newMegolmBackupAuthData = authData.copy()
val newSignatures = newMegolmBackupAuthData.signatures.toMutableMap()
val newSignatures = newMegolmBackupAuthData.signatures.orEmpty().toMutableMap()
newSignatures[userId] = myUserSignatures
val newMegolmBackupAuthDataWithNewSignature = newMegolmBackupAuthData.copy(

View File

@@ -51,7 +51,7 @@ data class MegolmBackupAuthData(
* userId -> (deviceSignKeyId -> signature)
*/
@Json(name = "signatures")
val signatures: Map<String, Map<String, String>>
val signatures: Map<String, Map<String, String>>? = null
) {
fun toJsonDict(): JsonDict {

View File

@@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto.secrets
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.extensions.orFalse
import org.matrix.android.sdk.api.listeners.ProgressListener
import org.matrix.android.sdk.api.session.accountdata.SessionAccountDataService
@@ -44,7 +45,6 @@ import org.matrix.android.sdk.internal.crypto.keysbackup.util.computeRecoveryKey
import org.matrix.android.sdk.internal.crypto.tools.HkdfSha256
import org.matrix.android.sdk.internal.crypto.tools.withOlmDecryption
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import org.matrix.olm.OlmPkMessage
import java.security.SecureRandom
import javax.crypto.Cipher

View File

@@ -379,7 +379,8 @@ internal interface IMXCryptoStore {
fun getOrAddOutgoingSecretShareRequest(secretName: String, recipients: Map<String, List<String>>): OutgoingSecretRequest?
fun saveGossipingEvent(event: Event)
fun saveGossipingEvent(event: Event) = saveGossipingEvents(listOf(event))
fun saveGossipingEvents(events: List<Event>)
fun updateGossipingRequestState(request: IncomingShareRequestCommon, state: GossipingRequestState) {

View File

@@ -25,6 +25,7 @@ import io.realm.Realm
import io.realm.RealmConfiguration
import io.realm.Sort
import io.realm.kotlin.where
import org.matrix.android.sdk.api.extensions.tryOrNull
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.room.send.SendState
@@ -100,6 +101,8 @@ import org.matrix.olm.OlmAccount
import org.matrix.olm.OlmException
import org.matrix.olm.OlmOutboundGroupSession
import timber.log.Timber
import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.collections.set
@@ -137,8 +140,11 @@ internal class RealmCryptoStore @Inject constructor(
newSessionListeners.remove(listener)
}
private val monarchyWriteAsyncExecutor = Executors.newSingleThreadExecutor()
private val monarchy = Monarchy.Builder()
.setRealmConfiguration(realmConfiguration)
.setWriteAsyncExecutor(monarchyWriteAsyncExecutor)
.build()
init {
@@ -199,6 +205,14 @@ internal class RealmCryptoStore @Inject constructor(
}
override fun close() {
// Ensure no async request will be run later
val tasks = monarchyWriteAsyncExecutor.shutdownNow()
Timber.w("Closing RealmCryptoStore, ${tasks.size} async task(s) cancelled")
tryOrNull("Interrupted") {
// Wait 1 minute max
monarchyWriteAsyncExecutor.awaitTermination(1, TimeUnit.MINUTES)
}
olmSessionsToRelease.forEach {
it.value.olmSession.releaseSession()
}
@@ -1163,8 +1177,8 @@ internal class RealmCryptoStore @Inject constructor(
}
override fun saveGossipingEvents(events: List<Event>) {
val now = System.currentTimeMillis()
monarchy.writeAsync { realm ->
val now = System.currentTimeMillis()
events.forEach { event ->
val ageLocalTs = event.unsignedData?.age?.let { now - it } ?: now
val entity = GossipingEventEntity(
@@ -1182,23 +1196,6 @@ internal class RealmCryptoStore @Inject constructor(
}
}
override fun saveGossipingEvent(event: Event) {
monarchy.writeAsync { realm ->
val now = System.currentTimeMillis()
val ageLocalTs = event.unsignedData?.age?.let { now - it } ?: now
val entity = GossipingEventEntity(
type = event.type,
sender = event.senderId,
ageLocalTs = ageLocalTs,
content = ContentMapper.map(event.content)
).apply {
sendState = SendState.SYNCED
decryptionResultJson = MoshiProvider.providesMoshi().adapter(OlmDecryptionResult::class.java).toJson(event.mxDecryptionResult)
decryptionErrorCode = event.mCryptoError?.name
}
realm.insertOrUpdate(entity)
}
}
// override fun getOutgoingRoomKeyRequestByState(states: Set<ShareRequestState>): OutgoingRoomKeyRequest? {
// val statesIndex = states.map { it.ordinal }.toTypedArray()
// return doRealmQueryAndCopy(realmConfiguration) { realm ->

View File

@@ -21,6 +21,7 @@ import android.os.Looper
import dagger.Lazy
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.matrix.android.sdk.api.MatrixCoroutineDispatchers
import org.matrix.android.sdk.api.session.crypto.crosssigning.CrossSigningService
import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME
import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
@@ -83,7 +84,6 @@ import org.matrix.android.sdk.internal.di.DeviceId
import org.matrix.android.sdk.internal.di.UserId
import org.matrix.android.sdk.internal.session.SessionScope
import org.matrix.android.sdk.internal.task.TaskExecutor
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import timber.log.Timber
import java.util.UUID
import javax.inject.Inject

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