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

Compare commits

...

1977 Commits

Author SHA1 Message Date
Benoit Marty
d0d4a19033 Merge branch 'release/1.0.7' 2020-09-17 09:31:36 +02:00
Benoit Marty
01af5115a2 Prepare release 1.0.7 2020-09-17 09:31:09 +02:00
Benoit Marty
7761376306 Merge pull request #2120 from vector-im/feature/post_weblate
Feature/post weblate
2020-09-16 22:28:49 +02:00
Benoit Marty
43f34f6330 Fix issue on test compilation 2020-09-16 20:40:05 +02:00
Benoit Marty
a77069297d Remove R.string.copy, use R.string.action_copy (Fix clash with androidx.preferences private resource) 2020-09-16 19:51:43 +02:00
Benoit Marty
36899af36b Strings has been replaced by a plurals 2020-09-16 19:41:24 +02:00
Benoit Marty
bfa4e00fe7 Hyphen can be replaced with dash 2020-09-16 19:38:08 +02:00
Benoit Marty
4c6bb93eaf ellipsis 2020-09-16 19:36:26 +02:00
Benoit Marty
7e62e8e2cd Fix typo 2020-09-16 19:35:39 +02:00
Benoit Marty
762fd02eb7 Format strings.xml 2020-09-16 19:35:27 +02:00
Benoit Marty
825592e443 Merge pull request #2118 from RiotTranslateBot/weblate-element-android-element-app
Update from Weblate
2020-09-16 19:28:17 +02:00
Benoit Marty
4c6234796d Merge pull request #2111 from vector-im/feature/bma_raw_service
Raw service
2020-09-16 17:55:42 +02:00
Weblate
d6dd2a02b5 Merge branch 'origin/develop' into Weblate. 2020-09-16 15:55:23 +00:00
Benoit Marty
b97aed0723 Ganfra's review 2020-09-16 17:00:14 +02:00
Benoit Marty
1614707943 Ganfra's review 2020-09-16 16:58:27 +02:00
Benoit Marty
88b806326e Merge pull request #2117 from vector-im/feature/event_type_filtering
Feature/event type filtering
2020-09-16 16:28:45 +02:00
Benoit Marty
82bf0dcae9 Create a RawService SDK side, to avoid that the SDK manage client needs 2020-09-16 16:17:10 +02:00
ganfra
0ada12e646 Merge branch 'develop' into feature/event_type_filtering 2020-09-16 15:49:16 +02:00
ganfra
a7ae66e0de Clean files and update CHANGES 2020-09-16 15:48:09 +02:00
ganfra
a1f98eb6bf Allow to filter all room member state events in timeline 2020-09-16 15:36:48 +02:00
Benoit Marty
f882986f7d Remove unused member 2020-09-16 13:43:45 +02:00
linsui
9b8bcc4464 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/zh_Hans/
2020-09-16 03:43:01 +00:00
linsui
487a90fba5 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-09-16 03:43:00 +00:00
ganfra
abb9a0839a Room summary : change displayable events types 2020-09-15 18:13:09 +02:00
Benoit Marty
7a01be9c0d Merge pull request #2109 from vector-im/feature/fragment_transaction
Feature/fragment transaction
2020-09-15 17:44:54 +02:00
Benoit Marty
23aaa58834 Merge pull request #2101 from vector-im/feature/clean_call
Feature/clean call
2020-09-15 17:43:49 +02:00
ganfra
0077091175 Update CHANGES and clean files 2020-09-15 12:56:37 +02:00
ganfra
624a8ff04c Fragment transaction: allow state loss when needed 2020-09-15 12:36:27 +02:00
Benoit Marty
94a7db26f5 Merge pull request #2104 from ginnyTheCat/develop
Only front camera is mirrored now
2020-09-15 12:33:00 +02:00
Benoit Marty
58edc83e11 Merge branch 'develop' into develop 2020-09-15 12:32:31 +02:00
Valere
653d6c6050 Merge pull request #2108 from vector-im/feature/fix_cannnot_play_video
output stream not closed
2020-09-15 10:33:56 +02:00
Valere
5e39d3c6fb output stream not closed 2020-09-15 10:03:49 +02:00
discapacidad5
ebde029cce Translated using Weblate (Spanish)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/es/
2020-09-14 23:43:30 +00:00
discapacidad5
dd4391941e Translated using Weblate (Spanish)
Currently translated at 100.0% (168 of 168 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/es/
2020-09-14 23:43:30 +00:00
discapacidad5
6e1fc4d84e Translated using Weblate (Spanish)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/es/
2020-09-14 23:43:29 +00:00
AnonymousWebHacker
86603ed1a6 Translated using Weblate (Spanish)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/es/
2020-09-14 23:43:12 +00:00
ziriSut
a246993df3 Translated using Weblate (Kabyle)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-14 23:43:11 +00:00
random
2e88275766 Translated using Weblate (Italian)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/
2020-09-14 23:43:09 +00:00
zeritti
eb2166dd4c Translated using Weblate (Czech)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/cs/
2020-09-14 23:43:08 +00:00
Safa Alfulaij
b088c23ea2 Translated using Weblate (Arabic)
Currently translated at 66.1% (111 of 168 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/ar/
2020-09-14 23:42:59 +00:00
ginnyTheCat
95eb6926d4 Removed unnecessary semicolon 2020-09-14 21:48:26 +02:00
Constantin Wartenburger
b6454b70a6 Only front camera is mirrored now 2020-09-14 21:09:52 +02:00
ziriSut
a61b9ce1e1 Translated using Weblate (Kabyle)
Currently translated at 97.8% (1826 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 22:39:55 +00:00
Slimane Selyan AMIRI
a265ff3fbe Translated using Weblate (Kabyle)
Currently translated at 97.8% (1826 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 22:39:53 +00:00
Slimane Selyan AMIRI
fc993cb724 Translated using Weblate (Kabyle)
Currently translated at 97.0% (1811 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 13:55:32 +00:00
ziriSut
808eb9a12a Translated using Weblate (Kabyle)
Currently translated at 97.0% (1811 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 13:55:32 +00:00
Kahina Messaoudi
d429800162 Translated using Weblate (Kabyle)
Currently translated at 97.0% (1811 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 11:25:20 +00:00
Kahina Messaoudi
709e9daf40 Translated using Weblate (Kabyle)
Currently translated at 97.0% (1811 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 10:50:18 +00:00
ziriSut
82a1b8b4c0 Translated using Weblate (Kabyle)
Currently translated at 97.0% (1811 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-12 10:50:17 +00:00
ziriSut
fbe6a2ac80 Translated using Weblate (Kabyle)
Currently translated at 62.5% (1167 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-11 23:50:43 +00:00
Kahina Messaoudi
89af162c5a Translated using Weblate (Kabyle)
Currently translated at 62.5% (1167 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-11 23:50:42 +00:00
Benoit Marty
1e0bc51fa2 Remove singletin instance from callback param 2020-09-11 17:09:30 +02:00
Benoit Marty
21a42e310f Show branch name in debug build 2020-09-11 16:49:11 +02:00
Benoit Marty
ba163dbf5c Split into 4 files 2020-09-11 16:27:11 +02:00
Benoit Marty
236f7f8e28 Private and typo 2020-09-11 16:25:30 +02:00
Benoit Marty
ab2a55d417 Rename member for code clarity (we also have an AudioManager) 2020-09-11 16:24:30 +02:00
Benoit Marty
2c96a79a08 Merge pull request #2090 from vector-im/feature/fix_silent_call_ringing
Always use loudspeaker while ringing and a headset is not connected
2020-09-11 16:18:02 +02:00
Benoit Marty
61b91f4015 Merge pull request #2080 from vector-im/feature/polling_work
Feature/polling work
2020-09-11 15:39:49 +02:00
yuuki-san
c274f9b23c Translated using Weblate (Slovak)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/sk/
2020-09-11 11:43:03 +00:00
yuuki-san
2148411307 Translated using Weblate (Slovak)
Currently translated at 97.6% (164 of 168 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/sk/
2020-09-11 11:43:03 +00:00
Kahina Messaoudi
0c34521791 Translated using Weblate (Kabyle)
Currently translated at 56.3% (1052 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-11 11:43:02 +00:00
Slimane Selyan AMIRI
ad969b999d Translated using Weblate (Kabyle)
Currently translated at 56.3% (1052 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-11 11:43:02 +00:00
@a2sc:matrix.org
3bb2034254 Translated using Weblate (German)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-09-11 11:42:53 +00:00
Onuray Sahin
ef16485eac Always use loudspeaker while ringing and a headset is not connected. 2020-09-11 13:30:00 +03:00
Benoit Marty
8abff412d0 Create constant for default value and so fix a bug when setting bad value for delay. 2020-09-11 11:56:25 +02:00
Benoit Marty
b26d379d20 Refresh push pref after diagnostic 2020-09-11 11:49:14 +02:00
Benoit Marty
2ed7be243b Restore TestBatteryOptimization 2020-09-11 11:31:37 +02:00
Benoit Marty
7efc58cb42 Avoid duplication of code and fix issue on OnApplicationUpgradeOrRebootReceiver: background starts even if notification are disabled 2020-09-11 11:13:30 +02:00
Benoit Marty
da09df0e42 format 2020-09-11 10:49:54 +02:00
Benoit Marty
e997610ef2 Add documentation from PR description 2020-09-11 10:47:21 +02:00
Benoit Marty
c2be97741e Restore listener after device rotation 2020-09-11 10:12:56 +02:00
Benoit Marty
db977b8109 Simplify Dialog UI and code 2020-09-11 09:43:10 +02:00
Benoit Marty
6f1875c13a Merge pull request #2089 from vector-im/feature/dendrite_test
Show M_WEAK_PASSWORD error in the password field
2020-09-10 18:10:45 +02:00
Benoit Marty
4dc28a9d62 Reorder settings 2020-09-10 18:08:35 +02:00
Benoit Marty
23f13b092f Plurals 2020-09-10 18:00:06 +02:00
Benoit Marty
f4c4e84ffe Fix false positive from code quality analysis 2020-09-10 17:13:11 +02:00
Valere
8ac3af327b Update change log 2020-09-10 17:11:13 +02:00
Valere
3ff475af7a Avoid scheduling alarm until network is back 2020-09-10 17:10:47 +02:00
Valere
43c24e55ab Restart fdroid sync on application boot 2020-09-10 17:10:47 +02:00
Valere
971b425e17 F-Droid background sync modes 2020-09-10 17:10:47 +02:00
Benoit Marty
b9e8d7187c Merge pull request #2075 from vector-im/feature/strict_mode_tracking
Feature/strict mode tracking
2020-09-10 13:46:44 +02:00
Onuray Sahin
926ff80525 Merge pull request #2086 from vector-im/feature/fix_event_read_elsewhere
Clear the notification when the event is read elsewhere
2020-09-10 13:24:57 +03:00
Onuray Sahin
0cba8f3aa1 Start background sync even if the eventId or roomId is null. 2020-09-10 12:08:05 +03:00
Benoit Marty
11fb2bcdfa ktlint... 2020-09-09 13:34:57 +02:00
Benoit Marty
94e43475e2 Merge pull request #2040 from vector-im/feature/date_formatting
Feature/date formatting
2020-09-09 12:16:18 +02:00
Benoit Marty
01a4905dc8 Changelog 2020-09-09 12:15:27 +02:00
Benoit Marty
8cb7260375 Small changes (PR review) 2020-09-09 12:10:46 +02:00
ganfra
dc04d2848d Default pref: make sure to use app context 2020-09-09 11:52:05 +02:00
ganfra
c2880a5832 Strict mode: add a build entry to enable whenever we want to check 2020-09-09 11:52:05 +02:00
ganfra
979c0832cf Use realmSessionProvider in localEchoRepository 2020-09-09 11:52:05 +02:00
ganfra
fa381cc06d Use a singleton for default shared pref 2020-09-09 11:45:47 +02:00
ganfra
f1d902b9ad Enable strict mode and remove some stuff from the main thread 2020-09-09 11:45:47 +02:00
Benoit Marty
b97d922808 ktlint 2020-09-09 11:33:22 +02:00
ganfra
18dcd6b9b1 Date format: add more comments and fix wrong format kind usage 2020-09-09 11:32:56 +02:00
ganfra
c6178e504f Clean files and update CHANGES 2020-09-09 11:32:56 +02:00
ganfra
0ff28c4f50 Date formatting: try to generalise usage of VectorDateFormatter and get proper formatting for Date + Time 2020-09-09 11:32:16 +02:00
ganfra
73ab32fd92 Start reworking date formatting 2020-09-09 11:32:16 +02:00
LinAGKar
925d4d077f Translated using Weblate (Swedish)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/sv/
2020-09-09 07:42:55 +00:00
LinAGKar
4581efa4c3 Translated using Weblate (Swedish)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-09-09 07:42:55 +00:00
Nikita Epifanov
09ccf7cdde Translated using Weblate (Russian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/ru/
2020-09-09 07:42:54 +00:00
Nikita Epifanov
d1fedcac7c Translated using Weblate (Russian)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-09-09 07:42:54 +00:00
@a2sc:matrix.org
a7ee451705 Translated using Weblate (German)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/de/
2020-09-09 07:42:53 +00:00
@a2sc:matrix.org
11fc0fed75 Translated using Weblate (German)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-09-09 07:42:53 +00:00
Priit Jõerüüt
f932100388 Translated using Weblate (Estonian)
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-09-09 07:42:52 +00:00
Jeff Huang
f0b582fef0 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1867 of 1867 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/
2020-09-09 07:42:51 +00:00
Benoit Marty
bf0b6d738a Version++ 2020-09-08 17:49:26 +02:00
Benoit Marty
0da106ba36 Merge branch 'release/1.0.6' 2020-09-08 17:47:17 +02:00
Benoit Marty
83a06b9657 Merge branch 'release/1.0.6' into develop 2020-09-08 17:47:15 +02:00
Benoit Marty
9b5bd3e226 Prepare release 1.0.6 2020-09-08 17:47:03 +02:00
Benoit Marty
135fcab558 Merge pull request #2074 from vector-im/feature/cleanup
Cleanup and documentation after #2047
2020-09-08 17:39:02 +02:00
Benoit Marty
f990600aea Cleanup and documentation after #2047 2020-09-08 12:40:21 +02:00
Benoit Marty
22cd6ae239 Merge pull request #2047 from vector-im/feature/universal_link_navigation
Handle room, user, group, email verification links by converting them to permalinks.
2020-09-08 12:21:54 +02:00
Benoit Marty
00b53ee577 Merge pull request #2053 from vector-im/feature/fix_poll_reply
Feature/fix poll reply
2020-09-08 12:19:32 +02:00
Benoit Marty
f65e96e7b4 Merge pull request #2069 from etherealvisage/develop
Support data-mx-[bg-]color attribute on <font> tags in formatted messages.
2020-09-08 10:09:25 +02:00
Benoit Marty
f98844db02 Privacy 2020-09-08 10:04:27 +02:00
Benoit Marty
c59665e017 typo 2020-09-08 09:52:51 +02:00
Valere
7fe4148384 update change log 2020-09-08 09:51:55 +02:00
Valere
a544ae264b Avoid showing debug notice format for event preview 2020-09-08 09:51:35 +02:00
Valere
c895f87e26 Prevent reply to poll local echo (relation to echo not supported yet) 2020-09-08 09:51:35 +02:00
Onuray Sahin
e65558958d Code review refactoring. 2020-09-08 10:45:00 +03:00
Valere
eb5088c699 Fix / sending poll event appears forever 2020-09-08 09:32:37 +02:00
Benoit Marty
3755d866b1 Merge pull request #2067 from vector-im/feature/contact_crash
Android 6: App crash when read Contact permission is granted (#2064)
2020-09-08 08:46:27 +02:00
ethereal
8291dfc188 Support data-mx-color attribute in <font> tags as well. 2020-09-07 14:52:30 -04:00
Onuray Sahin
c41c91b0e7 Update changelog. 2020-09-07 20:53:11 +03:00
Onuray Sahin
3367ed6765 Fix support of riot.im/develop urls. 2020-09-07 20:02:06 +03:00
Benoit Marty
4654e39417 Update after Ganfra's review 2020-09-07 17:14:09 +02:00
Onuray Sahin
6dd4d4d906 Merge branch 'develop' into feature/universal_link_navigation 2020-09-07 17:48:52 +03:00
Onuray Sahin
cf3fecd425 Changelog added.
Fixes #1795
2020-09-07 17:48:12 +03:00
Benoit Marty
be9a91e3fe Android 6: App crash when read Contact permission is granted (#2064) 2020-09-07 16:33:12 +02:00
Onuray Sahin
fc51097ed8 develop and staging subdomains are added. 2020-09-07 17:17:58 +03:00
Benoit Marty
751c870a4a Merge pull request #2049 from vector-im/feature/image_compression
Image compression
2020-09-07 15:21:26 +02:00
Benoit Marty
de8e325193 Merge branch 'develop' into feature/image_compression 2020-09-07 15:21:15 +02:00
Benoit Marty
e2feac3dde Merge pull request #2056 from vector-im/feature/small_doc_change
Feature/small doc change
2020-09-07 15:19:55 +02:00
Benoit Marty
d7b0b2f785 Merge pull request #2072 from vector-im/feature/weblate_fixes
Weblate fixes and other stuff done during locked Weblate
2020-09-07 15:00:04 +02:00
Benoit Marty
326c863148 Emoji SAS: Step 4: changelog (#1909) 2020-09-07 14:30:21 +02:00
Benoit Marty
c42920d9aa Emoji SAS: Step 3: Make the code compile (#1909) 2020-09-07 14:28:43 +02:00
Benoit Marty
fb5c1bb163 Emoji SAS: Step 2: Run import_sas_strings.py (#1909) 2020-09-07 14:21:10 +02:00
Benoit Marty
4f695a6d8f Emoji SAS: Step 1: Remove legacy strings (#1909) 2020-09-07 14:19:55 +02:00
Benoit Marty
bc389d371d Move string def to app module instead of SDK (#1994) 2020-09-07 13:38:12 +02:00
Benoit Marty
3756c3a191 Fix lint issues 2020-09-07 13:32:32 +02:00
Benoit Marty
9e3caf603d Lint: "..." -> 2020-09-07 13:25:11 +02:00
Benoit Marty
74e2ffc4c4 Format string files 2020-09-07 13:24:33 +02:00
Benoit Marty
6e019dbd44 Merge pull request #2071 from RiotTranslateBot/weblate-element-android-element-app
Update from Weblate
2020-09-07 13:13:13 +02:00
Onuray Sahin
4d7cd7319b Handle new mobile config url. 2020-09-07 12:19:34 +03:00
Weblate
edf7761d49 Merge branch 'origin/develop' into Weblate. 2020-09-07 08:57:45 +00:00
LinAGKar
a590bc96cd Translated using Weblate (Swedish)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/sv/
2020-09-07 08:57:34 +00:00
Benoit Marty
6c6bba68ff Merge pull request #2062 from vector-im/feature/fix_no_verif
Feature/fix no verif
2020-09-07 10:49:38 +02:00
ethereal
5fbcf348f5 Support data-mx-bg-color attribute on <font> tags in formatted messages.
Signed-off-by: Kestrel Williams-King <ethereal@ethv.net>
2020-09-07 01:13:32 -04:00
LinAGKar
58f5baa5f6 Added translation using Weblate (Swedish) 2020-09-06 06:49:13 +00:00
PPNplus
398dcb1036 Translated using Weblate (Thai)
Currently translated at 66.7% (2 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/th/
2020-09-05 09:42:47 +00:00
PPNplus
30e7b761ae Translated using Weblate (Thai)
Currently translated at 4.7% (87 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/th/
2020-09-05 09:42:47 +00:00
Eduardo F
4d105c278b Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-09-05 09:42:44 +00:00
Benoit Marty
f019e4a246 Merge pull request #1995 from notramo/patch-1
Mention thousands of public servers in Play Store
2020-09-04 21:35:10 +02:00
Benoit Marty
4499e34f44 Merge pull request #2030 from vector-im/feature/fix_call_proximity_sensor
Turn the screen off while using ear speaker
2020-09-04 21:25:59 +02:00
Benoit Marty
fd1bb84770 typo 2020-09-04 20:47:19 +02:00
Benoit Marty
ac4c111ad3 Refacto: let's matrixItem be part of the constructor 2020-09-04 20:42:35 +02:00
Benoit Marty
254eb26211 Verification popup won't show 2020-09-04 20:38:32 +02:00
Benoit Marty
f689871fc0 Code symmetry 2020-09-04 18:45:49 +02:00
Benoit Marty
8ead371603 Fix crash with WakeLock 2020-09-04 18:43:59 +02:00
Benoit Marty
8045d61e1f Code cleanup 2020-09-04 18:41:13 +02:00
Onuray Sahin
e790c35270 Use stringProvider. 2020-09-04 17:19:54 +02:00
Onuray Sahin
914ec895ee Use ContextCompat.getSystemService function. 2020-09-04 17:19:54 +02:00
Onuray Sahin
bd05484b2d Initialize fields in the constructor. 2020-09-04 17:19:54 +02:00
Onuray Sahin
7872838056 Changelog added. 2020-09-04 17:19:54 +02:00
Onuray Sahin
b89b3db077 Use proximity manager to turn the screen off while the ear speaker is used. 2020-09-04 17:19:18 +02:00
Onuray Sahin
8e3d83579b Remove attachBaseContext to fix the crash. 2020-09-04 17:19:18 +02:00
Onuray Sahin
96845d31db Proximity sensor implementation. 2020-09-04 17:19:18 +02:00
Benoit Marty
89fa2ece43 Fix compilation issue (I'm tired) 2020-09-04 15:46:16 +02:00
Benoit Marty
82e3adebbc Improve wording and fix typo 2020-09-04 14:23:56 +02:00
Benoit Marty
2490d4d638 Generic email-provider hots. 2020-09-04 14:18:47 +02:00
Benoit Marty
55f04906ac Correct markdown formatting 2020-09-04 14:17:15 +02:00
Onuray Sahin
f186a00515 Support legacy riot.im url. 2020-09-04 14:20:03 +03:00
Benoit Marty
0bd7e40a22 Rework: split long method, extract thumbnail management 2020-09-04 12:33:10 +02:00
Benoit Marty
ad984b26fb Move variable declaration 2020-09-04 12:22:38 +02:00
Benoit Marty
3a659a9f3b Ensure temporary files are deleted even in case of Exception 2020-09-04 12:03:20 +02:00
Benoit Marty
0217e79324 Ensure input stream is closed 2020-09-04 11:08:44 +02:00
Benoit Marty
544bff9f4f For only with Files now 2020-09-04 11:07:06 +02:00
PPNplus
a4fdf1802b Translated using Weblate (Thai)
Currently translated at 1.5% (28 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/th/
2020-09-04 08:43:08 +00:00
LinAGKar
2c4f7d38a2 Translated using Weblate (Swedish)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-09-04 08:43:07 +00:00
Peter Vágner
48a9e1ff9f Translated using Weblate (Slovak)
Currently translated at 70.0% (1294 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sk/
2020-09-04 08:43:06 +00:00
rkfg
c4b6d52657 Translated using Weblate (Russian)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-09-04 08:42:43 +00:00
call_xz
43b291d2d0 Translated using Weblate (Japanese)
Currently translated at 49.9% (923 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/
2020-09-04 08:42:43 +00:00
Benoit Marty
b31178683c typo 2020-09-04 09:37:49 +02:00
Benoit Marty
38631eb70e Format 2020-09-04 09:37:10 +02:00
Benoit Marty
6246fd98c3 Cleanup 2020-09-04 09:36:18 +02:00
Benoit Marty
71aa315f2a Cleanup 2020-09-04 09:36:18 +02:00
Benoit Marty
af6a94d08e Support for image compression on Android 10 2020-09-04 09:36:18 +02:00
Valere
f6c7f3eed1 Merge pull request #1889 from vector-im/feature/enhance_big_files
Feature/enhance big files
2020-09-03 17:09:55 +02:00
Valere
e0c5377968 Merge branch 'develop' into feature/enhance_big_files 2020-09-03 17:09:40 +02:00
Benoit Marty
8aada10f0d Show M_WEAK_PASSWORD error in the password field 2020-09-03 15:21:21 +02:00
Valere
0c39495e3f FIx / unneeded code 2020-09-03 15:03:07 +02:00
Valere
7c638798c7 Code review 2020-09-03 14:53:13 +02:00
Benoit Marty
05ec5bde93 Merge pull request #2020 from vector-im/feature/add_email
Add email and phone numbers
2020-09-03 14:33:09 +02:00
Benoit Marty
d2d372d140 Merge pull request #2043 from vector-im/feature/cleanup_after_2002
Cleanup after #2002
2020-09-03 11:15:45 +02:00
Benoit Marty
e9b3ab91a0 Merge pull request #1902 from vector-im/feature/verify_one_session
Feature/verify one session
2020-09-03 11:11:22 +02:00
Benoit Marty
633b12f66d Propose to verify the current session if the 4S contains secret, even if there is no other sessions 2020-09-03 10:00:01 +02:00
Benoit Marty
2efe5a420c Do not propose to verify the current session if there is only one session (#1901) 2020-09-03 09:54:03 +02:00
Benoit Marty
96c7f57ea0 Remove useless member 2020-09-03 09:52:57 +02:00
Benoit Marty
6af879fe2a Rename class 2020-09-03 09:52:14 +02:00
Benoit Marty
b935a6557f Move state to a dedicated file 2020-09-03 09:46:17 +02:00
Valere
8340d5e71f Fix tests 2020-09-03 09:38:40 +02:00
Valere
8103081e0e Fix / Support open and view of sending attachment 2020-09-03 09:31:53 +02:00
Benoit Marty
be3157b6f5 Do not strip new lines. Many tests are not passing, we should work more on it... 2020-09-03 09:24:44 +02:00
Benoit Marty
ae9afcc393 Add test to cover line break 2020-09-03 09:16:37 +02:00
Benoit Marty
e73480c0ef Riot -> Element 2020-09-03 09:06:12 +02:00
Benoit Marty
e02b9b7736 Changelog 2020-09-02 19:02:36 +02:00
Benoit Marty
8c801ae078 API change: encrypted files are now decrypted internally, no need to expose decryptStream() anymore 2020-09-02 19:01:26 +02:00
Onuray Sahin
a151f42495 Handle room, user, group links by converting them to permalinks. 2020-09-02 18:26:08 +03:00
Valere
40f7dc4824 Merge remote-tracking branch 'origin/feature/enhance_big_files' into feature/enhance_big_files 2020-09-02 16:42:54 +02:00
Valere
3b8c61a87e FIx / interceptors and stream closed 2020-09-02 16:06:48 +02:00
Benoit Marty
4ef1f9c4d9 Avoid copy paste of code 2020-09-02 12:47:41 +02:00
Benoit Marty
93cb6bd26e Avoid null type 2020-09-02 12:37:06 +02:00
Benoit Marty
7c33bf2742 Remove Done TODO 2020-09-02 12:31:22 +02:00
Benoit Marty
e5e67fbcbb Internal class and Copyright 2020-09-02 12:29:53 +02:00
Benoit Marty
95219c7934 typo 2020-09-02 12:29:39 +02:00
Benoit Marty
53744982f0 Update Javadoc 2020-09-02 12:29:18 +02:00
Benoit Marty
6d24aa75d0 Format file (no other change) 2020-09-02 12:25:50 +02:00
Benoit Marty
76c79f9f75 Move Base64 methods to a dedicated file 2020-09-02 12:06:21 +02:00
Benoit Marty
28081aa7d2 Cleanup: rename parameters, make some fields private, add Javadoc, fix copy paste error 2020-09-02 12:03:03 +02:00
Benoit Marty
d0532bb9a9 Revert some change from #2002 2020-09-02 09:06:34 +02:00
Benoit Marty
9389cfe7a3 Add comment for history 2020-09-02 09:04:16 +02:00
Benoit Marty
484fd61706 Make MarkdownParserTest tests pass again 2020-09-02 09:04:16 +02:00
Benoit Marty
6c943571fc Remove useless TextContentRenderer 2020-09-01 22:22:27 +02:00
Leon Schmidt
29123ac726 Bugfix/markdown parsing (#2002)
Removed replacing of newlines in already parsed HTML documents

Signed-off-by: Leon Schmidt <mail@leon.wtf>

Co-authored-by: Benoit Marty <benoitm@matrix.org>
2020-09-01 22:02:16 +02:00
Benoit Marty
44cb8cdeca Merge pull request #2042 from vector-im/feature/builkite_location_and_pipeline_location_change
Update of Buildkite configuration
2020-09-01 21:53:11 +02:00
Benoit Marty
9e20f7db1a Update of Buildkite configuration:
New pipeline location: https://github.com/matrix-org/pipelines/blob/master/element-android/pipeline.yml
New build location: https://buildkite.com/matrix-dot-org/element-android
2020-09-01 18:52:03 +02:00
Benoit Marty
971320a56c Restore setting removed by mistake 2020-09-01 18:38:38 +02:00
Benoit Marty
4290d22465 Merge pull request #2035 from vector-im/feature/fix_crashes_attachment_viewer
Crash / Attachment viewer: Cannot draw a recycled Bitmap
2020-09-01 18:33:39 +02:00
Benoit Marty
96a3b25adb Merge branch 'develop' into feature/fix_crashes_attachment_viewer 2020-09-01 18:32:55 +02:00
Valere
3dc69b60c4 Fix / Log could leak file name 2020-09-01 17:31:54 +02:00
Benoit Marty
bdde638967 Merge pull request #2028 from vector-im/feature/relax_is_discovery
Relax IS dicovery
2020-09-01 15:39:28 +02:00
Benoit Marty
8157644ff8 Merge pull request #2014 from vector-im/feature/fix_call_sound_device
Fix: Loudspeaker is always used
2020-09-01 15:33:06 +02:00
ziriSut
4008339963 Translated using Weblate (Kabyle)
Currently translated at 56.7% (1049 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-09-01 13:08:35 +00:00
Benoit Marty
c6bd6c17fc Auto review 2020-09-01 14:55:12 +02:00
Benoit Marty
1a452a6cd7 Improve error for non supported SSO flow to delete device or add MSISDN 2020-09-01 12:58:53 +02:00
Benoit Marty
35f854de5d Also request focus (keyboard is not shown on my device :/) 2020-09-01 10:45:48 +02:00
Benoit Marty
99343294c6 Rename class 2020-09-01 10:09:28 +02:00
Benoit Marty
56261bd741 Add a trick to reset EditText field when recycled. 2020-09-01 10:07:04 +02:00
Benoit Marty
1d53b48c8a Inline wrong token error 2020-08-31 23:11:58 +02:00
Benoit Marty
5594489b69 Optimisation and cleanup 2020-08-31 22:20:59 +02:00
Benoit Marty
ddb858380e Code quality 2020-08-31 21:46:55 +02:00
Benoit Marty
bf5c1e9d8f Add phone numbers to account 2020-08-31 20:53:37 +02:00
Benoit Marty
931eeac548 Add MSISDN (WIP) 2020-08-31 18:07:25 +02:00
Valere
f34c5d6674 Crash / Attachment viewer: Cannot draw a recycled Bitmap 2020-08-31 17:50:17 +02:00
Benoit Marty
9c05efa15d Fix migration issue. Also do not delete Realm file in case of migration issue when debugging. 2020-08-31 16:46:56 +02:00
Benoit Marty
bd12c89a3c Move the DB version number to the Migration class, I think it has more sense. Also increase the value. 2020-08-31 16:29:34 +02:00
Valere
bf4f869524 rebase fix 2020-08-31 16:25:40 +02:00
Valere
dd09c4a72d post rebase fix 2020-08-31 16:21:27 +02:00
Valere
55dcba6f36 Fix progress of message with attachment 2020-08-31 16:21:27 +02:00
Valere
4e7790966f Always use temp file before sending 2020-08-31 16:21:27 +02:00
Valere
bfcbb9ff4f Rebase post matrix sdk package renaming 2020-08-31 16:21:27 +02:00
Benoit Marty
cc57a73f23 Cleanup and split long lines 2020-08-31 16:20:12 +02:00
Valere
d6f96e3d64 Fix test + cleaning 2020-08-31 16:20:12 +02:00
Valere
5f76f182f6 Fix clear glide in recycler view 2020-08-31 16:20:12 +02:00
Valere
31eccf5f1c Cleaning 2020-08-31 16:20:12 +02:00
Valere
9d2ea19d7d Upgrade to worker 2.4.0 2020-08-31 16:20:12 +02:00
Valere
a888e1e80e Support cancel sending and resend event with attachments
Avoid auto retry for medium and big files
2020-08-31 16:20:12 +02:00
Valere
8b8855d2d5 FIx / Audio icon not shown after download 2020-08-31 16:20:12 +02:00
Valere
de53166193 Use file service in glide loader (avoid re-dl after send) 2020-08-31 16:20:12 +02:00
Valere
caf0ac1c9f Add event sending indicator for attachment 2020-08-31 16:20:12 +02:00
Valere
299cd9ced3 Fix / preview/edit was shown for movies and gif 2020-08-31 16:20:12 +02:00
Valere
11c8da3717 Improve upload/dl mem for big files + report ecryption progress 2020-08-31 16:20:12 +02:00
Benoit Marty
e309b30203 Implement: Adding MSISDN (WIP) 2020-08-31 16:16:18 +02:00
Benoit Marty
5a21249022 Doc: Adding MSISDN 2020-08-31 15:08:59 +02:00
Benoit Marty
3c3c51e6fd Doc: more generic to handle MSISDN 2020-08-31 14:48:48 +02:00
Benoit Marty
ee3e10a4b0 Add threePid: improve UI for phone numbers 2020-08-31 14:46:05 +02:00
Benoit Marty
e92cf38cde Add threePid: improve UX (remove dialog) 2020-08-31 14:30:47 +02:00
Benoit Marty
dbd080ca6c Merge pull request #2018 from vector-im/feature/moar_sonar_fixes
Feature/moar sonar fixes
2020-08-31 12:10:00 +02:00
Valere
aedcf3006a Relax IS dicovery
fixes #2027
2020-08-31 12:08:37 +02:00
LinAGKar
6a475ae85c Translated using Weblate (Swedish)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-30 07:42:56 +00:00
ziriSut
0ad637fa16 Translated using Weblate (Kabyle)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-30 07:42:56 +00:00
ziriSut
ee98a2da03 Translated using Weblate (Kabyle)
Currently translated at 54.1% (1001 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-30 07:42:55 +00:00
Balázs Meskó
183d928e21 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/hu/
2020-08-30 07:42:43 +00:00
Rww Folo
807c6f0cb5 Added translation using Weblate (Bengali (Bangladesh)) 2020-08-29 15:53:08 +00:00
Kahina Messaoudi
72bb140b70 Translated using Weblate (Kabyle)
Currently translated at 41.3% (763 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-29 13:46:02 +00:00
ziriSut
a5678a752b Translated using Weblate (Kabyle)
Currently translated at 41.3% (763 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-29 13:46:02 +00:00
Benoit Marty
58938a239e Format phone number 2020-08-28 19:07:41 +02:00
Benoit Marty
da4695ff2a Improve UI of threePid screen 2020-08-28 18:35:04 +02:00
Benoit Marty
9fecc1b992 Reduce button width 2020-08-28 18:05:59 +02:00
Benoit Marty
e8e1330cd5 Cleanup 2020-08-28 18:05:07 +02:00
Benoit Marty
1af45ede62 Add some guard, and allow to cancel adding 3pid 2020-08-28 17:55:38 +02:00
Benoit Marty
f6f9373aeb Cleanup 2020-08-28 17:06:17 +02:00
Benoit Marty
36a9b80040 i18n for M_THREEPID_AUTH_FAILED 2020-08-28 17:05:40 +02:00
Benoit Marty
175a5ab824 List phone numbers and emails added to the Matrix account, and add Email to account (#44) 2020-08-28 16:45:09 +02:00
Benoit Marty
46d3608ccb RiotX -> Element 2020-08-28 11:25:16 +02:00
Benoit Marty
b11eced4f1 Fix a refresh problem on the user avatar 2020-08-28 11:12:29 +02:00
Benoit Marty
66dfcbc2f8 Add documentation on the flows 2020-08-28 10:59:51 +02:00
Benoit Marty
71de2d9adc Update README.md 2020-08-28 09:23:55 +02:00
Benoit Marty
3f30636808 Matrix SDK is now exported 2020-08-28 09:23:08 +02:00
Benoit Marty
ee9c73fde1 Sonar: rename variables and parameter to follow naming convention 2020-08-28 08:58:57 +02:00
Onuray Sahin
7d76264b25 Merge branch 'develop' into feature/fix_call_sound_device 2020-08-28 02:53:46 +03:00
Marcelo Filho
22771a84f1 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-27 22:42:34 +00:00
Marcelo Filho
a107bdd849 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-27 22:42:34 +00:00
random
9fbf97f4cb Translated using Weblate (Italian)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/
2020-08-27 22:42:34 +00:00
Tirifto
812563f68b Translated using Weblate (Esperanto)
Currently translated at 25.5% (471 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/eo/
2020-08-27 22:42:33 +00:00
Benoit Marty
d3f50ee6c3 Fix a crash that would occur if it was not dead code 2020-08-27 22:46:30 +02:00
Benoit Marty
9dbe9c7286 Typo in comment 2020-08-27 22:44:55 +02:00
Benoit Marty
fbcc7aa211 Merge pull request #1993 from vector-im/feature/fix_call_in_background
Don't pause the sync thread if there is an active or pending call.
2020-08-27 22:41:46 +02:00
Benoit Marty
a0af769d7c Merge pull request #2016 from vector-im/feature/sonar_fixes
Sonar fixes
2020-08-27 21:39:56 +02:00
Benoit Marty
ef4f930ba2 Don't pause the sync thread if there is an active or pending call.
But pause the sync thread when there is no active call and the app is the background.
Authors: Onuray, I just rebased and squashed all the commit
2020-08-27 18:20:06 +02:00
Benoit Marty
8369003bdf Sonar: rename project name and project key 2020-08-27 18:16:29 +02:00
Benoit Marty
02145eaa06 Github repository has been renamed 2020-08-27 18:16:29 +02:00
Benoit Marty
a857d8e306 Fix bugs detected by sonar 2020-08-27 18:16:29 +02:00
Benoit Marty
cb64f472fe Remove commented out code and useless code 2020-08-27 18:15:53 +02:00
Benoit Marty
cd28ad4c07 Remove dead code (QrCode animation) 2020-08-27 18:15:53 +02:00
Benoit Marty
b69616117f Sonar: skip project diff-match-patch 2020-08-27 18:15:53 +02:00
Benoit Marty
59fa2e28c2 Fix sonar analysis version name issue 2020-08-27 18:15:53 +02:00
Benoit Marty
0f1e348ac4 Merge pull request #2010 from vector-im/feature/fix_send_room_v6
Feature/fix send room v6
2020-08-27 18:14:58 +02:00
Benoit Marty
67bde947f9 Merge pull request #2009 from vector-im/feature/joining_room
Feature/joining room
2020-08-27 18:11:42 +02:00
Onuray Sahin
d9009540dd Don't try to use bluetooth headset if it is not connected. 2020-08-27 16:43:11 +03:00
ganfra
28a1cf6982 Join room: clean up after benoit's remarks 2020-08-27 11:44:21 +02:00
ganfra
9c1c9f96e1 Room v6: finish cleaning up 2020-08-27 10:34:40 +02:00
aevw
7657c0f905 Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.9% (1848 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-27 00:29:21 +00:00
Marcelo Filho
d8a0142aee Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.9% (1848 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-27 00:29:20 +00:00
strix aluco
eddc681d64 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/uk/
2020-08-26 20:42:44 +00:00
vejetaryenvampir
87a97bc8ec Translated using Weblate (Turkish)
Currently translated at 64.4% (1191 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/tr/
2020-08-26 20:42:44 +00:00
LinAGKar
ae81ea2bbc Translated using Weblate (Swedish)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-26 20:42:44 +00:00
Marcelo Filho
90e580245a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-26 20:42:44 +00:00
aevw
8372c9e3ed Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (1843 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-26 20:42:43 +00:00
Marcelo Filho
1fcb8d712b Translated using Weblate (Portuguese (Brazil))
Currently translated at 99.7% (1843 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-26 20:42:42 +00:00
Imre Kristoffer Eilertsen
9761566b28 Translated using Weblate (Norwegian Bokmål)
Currently translated at 44.1% (815 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/nb_NO/
2020-08-26 20:42:41 +00:00
Kahina Messaoudi
f26c58fa22 Translated using Weblate (Kabyle)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/kab/
2020-08-26 20:42:31 +00:00
Tirifto
6d73f7b767 Translated using Weblate (Esperanto)
Currently translated at 25.1% (465 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/eo/
2020-08-26 20:42:31 +00:00
ganfra
3c0177c2dd Update CHANGES 2020-08-26 19:25:20 +02:00
ganfra
dc4135b506 Remove unnecessary code now we have an other way to keep number types 2020-08-26 19:21:41 +02:00
ganfra
cefdbe1d08 Add CheckNumberType in json to fix sending in room v6 2020-08-26 19:21:14 +02:00
Benoit Marty
95e80f0263 Merge pull request #2001 from vector-im/feature/mention_display_name
Fix mention display name
2020-08-26 17:35:23 +02:00
Benoit Marty
013f51f0c4 Merge branch 'develop' into feature/mention_display_name 2020-08-26 17:35:16 +02:00
Benoit Marty
75911ba4c0 Merge pull request #2008 from vector-im/feature/sas_emoji
Create a script to import SAS strings (#1909)
2020-08-26 17:34:43 +02:00
Benoit Marty
b3edc439cf Merge pull request #1997 from vector-im/feature/switch_language
Switch language and font size settings fixes
2020-08-26 17:34:26 +02:00
Benoit Marty
7ef08579ef Merge branch 'develop' into feature/switch_language 2020-08-26 17:34:17 +02:00
ganfra
b39a86edbd Merge branch 'develop' into feature/joining_room 2020-08-26 17:06:31 +02:00
ganfra
9c151417a8 Update CHANGES 2020-08-26 17:03:51 +02:00
ganfra
5d8d9cb19c Clean files 2020-08-26 17:02:24 +02:00
ganfra
b986bfd509 Permalink: handle via parameters 2020-08-26 16:37:48 +02:00
Benoit Marty
28ae10a4aa Merge pull request #2007 from vector-im/feature/icons
Feature/icons
2020-08-26 16:04:36 +02:00
Benoit Marty
39fa7d850a Merge branch 'develop' into feature/icons 2020-08-26 16:04:27 +02:00
Benoit Marty
25ea221d47 Create a script to import SAS strings (#1909)
It will be run at the next Weblate sync, since we have to remove previous translations
2020-08-26 16:02:58 +02:00
Benoit Marty
a4e495edd3 Merge pull request #2006 from vector-im/feature/long_click
Add long click gesture to copy userId, user display name, room name, …
2020-08-26 13:23:31 +02:00
Benoit Marty
8b009304ad Merge pull request #2004 from vector-im/feature/fix_ucrop
Increase version of uCrop library which supports Android 10.
2020-08-26 13:22:56 +02:00
Benoit Marty
249f268fb5 Fix bad color for settings icon on Android < 24 (#1786) 2020-08-26 12:55:49 +02:00
Benoit Marty
9f3f981ab0 Use cached Views 2020-08-26 12:54:01 +02:00
Benoit Marty
ef912e066b Remove unused resource 2020-08-26 12:29:46 +02:00
Benoit Marty
d014872e3b Add long click gesture to copy userId, user display name, room name, room topic and room alias (#1774) 2020-08-26 11:57:27 +02:00
Onuray Sahin
776d892d27 Increase version of uCrop library which supports Android 10. 2020-08-26 12:27:12 +03:00
ganfra
9970398cf2 Join room: add "UnknownItem" to public room list 2020-08-25 20:20:14 +02:00
Benoit Marty
a5f537f251 Merge pull request #1996 from johnjohndoe/file-extensions
Use File extension functions to make code more concise.
2020-08-25 18:09:00 +02:00
Benoit Marty
6376ba2516 Improve wording (visible in debug screen) 2020-08-25 17:48:12 +02:00
Benoit Marty
5e0fc3e17f Rename class 2020-08-25 17:34:43 +02:00
Benoit Marty
1a068ee191 Add more tests 2020-08-25 17:34:02 +02:00
Benoit Marty
8226f60fad Refactor test to avoid duplicated code 2020-08-25 17:31:51 +02:00
Benoit Marty
2e618999d9 Words containing my name should not trigger notifications (Fixes #1781)
It adds a specific behavior for rule with id RuleIds.RULE_ID_CONTAIN_USER_NAME
2020-08-25 17:26:54 +02:00
Benoit Marty
bf7a096a18 Refactor: Remove duplicated declaration for Actions 2020-08-25 17:01:55 +02:00
Benoit Marty
0d9885a1e0 Refactor: Remove duplicated declaration for RuleIds 2020-08-25 16:53:12 +02:00
Benoit Marty
aca8fd7f3d Refactor: Kotlin style 2020-08-25 16:18:44 +02:00
Benoit Marty
f5ea4fb6ac Refactor: Extract method to dedicated files 2020-08-25 16:15:42 +02:00
Benoit Marty
7b5c74f81c Refactor: Condition is now an interface 2020-08-25 16:14:14 +02:00
Benoit Marty
558e11a364 Refactor: move Kind to its own file 2020-08-25 16:01:34 +02:00
Weblate
3d5b3c65de Merge branch 'origin/develop' into Weblate. 2020-08-25 11:15:37 +00:00
LinAGKar
ed9e590498 Translated using Weblate (Swedish)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-25 11:15:37 +00:00
tctovsli
70fda1009b Translated using Weblate (Norwegian Bokmål)
Currently translated at 33.1% (612 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/nb_NO/
2020-08-25 11:15:36 +00:00
Kahina Messaoudi
ceae1f1ad8 Translated using Weblate (Kabyle)
Currently translated at 25.2% (466 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-25 11:15:33 +00:00
ganfra
8f1eff8782 Start reusing RoomPreview for joining room not joined 2020-08-25 12:35:35 +02:00
ganfra
c1c8c04567 Room detail: Fix roomId not set up when activity is restored 2020-08-25 12:31:55 +02:00
LinAGKar
31b4785a4d Translated using Weblate (Swedish)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-24 17:43:19 +00:00
Kahina Messaoudi
8e5656729b Translated using Weblate (Kabyle)
Currently translated at 33.3% (1 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/kab/
2020-08-24 17:42:31 +00:00
ziriSut
51893fff09 Translated using Weblate (Kabyle)
Currently translated at 99.1% (233 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-24 17:42:31 +00:00
Kahina Messaoudi
25d8ba2699 Translated using Weblate (Kabyle)
Currently translated at 99.1% (233 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-24 17:42:31 +00:00
Kahina Messaoudi
fd5e4b78da Translated using Weblate (Kabyle)
Currently translated at 24.6% (454 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-24 17:42:31 +00:00
@a2sc:matrix.org
f45d0122b0 Translated using Weblate (German)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-24 17:42:30 +00:00
aWeinzierl
01cfa4496c Translated using Weblate (German)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-24 17:42:30 +00:00
linsui
82c8b532c0 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-24 17:42:30 +00:00
Slavi Pantaleev
ee7f79b40c Translated using Weblate (Bulgarian)
Currently translated at 72.3% (170 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/bg/
2020-08-24 17:42:28 +00:00
Benoit Marty
cb7a1bc9c3 Fix FontSize issue (#1483, #1787) 2020-08-24 18:32:08 +02:00
Benoit Marty
52cf4d24d3 Fix switch language issue 2020-08-24 18:32:08 +02:00
Tobias Preuss
ed98613b2d Use File extension functions to make code more concise.
+ This change replaces a few usages of ByteArrayInputStream, FileInputStream,
  FileOutputStream with their equivalent Kotlin extension functions.
2020-08-24 18:01:30 +02:00
notramo
252df0f7a9 Mention thousands of public servers in Play Store 2020-08-24 14:51:10 +00:00
Benoit Marty
116e6fb3c0 Call restart() extension 2020-08-24 15:50:47 +02:00
Benoit Marty
efa3aa5cf8 Stop using internal context of VectorLocal in CallHeadsUpActionReceiver... 2020-08-24 15:08:52 +02:00
Benoit Marty
69e9a79ac1 Inject StringProvider instead of Context 2020-08-24 14:49:42 +02:00
Benoit Marty
96cf5d2105 Cleanup: propoerly inject things to PushRulesFragment and move PushRulesController to its own file 2020-08-24 14:32:43 +02:00
Benoit Marty
f745e22a52 Merge pull request #1983 from vector-im/feature/live_display_name
Make user displayName live in the setting, it should fix #1926
2020-08-24 13:43:08 +02:00
Benoit Marty
50495ef604 Improve algo 2020-08-24 11:12:19 +02:00
Benoit Marty
84854d9382 Add entry in changelog 2020-08-24 10:14:00 +02:00
Benoit Marty
328dc9ea5b Merge pull request #1979 from vector-im/feature/update_dependencies
Update some dependencies, including coroutines for working debugging
2020-08-24 10:11:57 +02:00
Kahina Messaoudi
30b92efcc6 Translated using Weblate (Kabyle)
Currently translated at 24.4% (452 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-23 17:15:04 +00:00
ziriSut
e87bd16b6b Translated using Weblate (Kabyle)
Currently translated at 24.4% (452 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-23 17:15:02 +00:00
Kahina Messaoudi
8b41b014ee Translated using Weblate (Kabyle)
Currently translated at 96.6% (227 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 15:46:17 +00:00
ziriSut
601cf10fb4 Translated using Weblate (Kabyle)
Currently translated at 96.6% (227 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 15:46:16 +00:00
Kahina Messaoudi
f02ee2af27 Translated using Weblate (Kabyle)
Currently translated at 72.3% (170 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 14:38:55 +00:00
ziriSut
c490d6bcd1 Translated using Weblate (Kabyle)
Currently translated at 72.3% (170 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 14:38:55 +00:00
ziriSut
64b6b069a4 Translated using Weblate (Kabyle)
Currently translated at 69.4% (163 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 14:32:38 +00:00
Kahina Messaoudi
edd455a772 Translated using Weblate (Kabyle)
Currently translated at 69.4% (163 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 14:32:38 +00:00
Kahina Messaoudi
a54c1af7cc Translated using Weblate (Kabyle)
Currently translated at 39.6% (93 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 12:09:01 +00:00
ziriSut
9e1fe22c19 Translated using Weblate (Kabyle)
Currently translated at 39.6% (93 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 12:09:01 +00:00
Kahina Messaoudi
bd033ed5f4 Translated using Weblate (Kabyle)
Currently translated at 7.2% (17 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 06:37:58 +00:00
Slimane Selyan AMIRI
2fd9333fb0 Translated using Weblate (Kabyle)
Currently translated at 7.2% (17 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/
2020-08-23 06:37:57 +00:00
Slimane Selyan AMIRI
6249d5a85e Translated using Weblate (Kabyle)
Currently translated at 0.3% (5 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/
2020-08-23 06:35:09 +00:00
Slimane Selyan AMIRI
385de03f40 Added translation using Weblate (Kabyle) 2020-08-22 18:05:34 +00:00
Slimane Selyan AMIRI
5bfb2c211a Added translation using Weblate (Kabyle) 2020-08-22 18:04:55 +00:00
LinAGKar
7ee4a8fc0a Translated using Weblate (Swedish)
Currently translated at 61.0% (1127 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-22 15:42:55 +00:00
AnonymousWebHacker
c73f544a01 Translated using Weblate (Spanish)
Currently translated at 81.6% (1508 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/es/
2020-08-22 15:42:38 +00:00
Nikita Epifanov
370d57cfbc Translated using Weblate (Russian)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-22 15:42:28 +00:00
Marcelo Filho
4380d34645 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/pt_BR/
2020-08-22 15:42:27 +00:00
aWeinzierl
471497e721 Translated using Weblate (German)
Currently translated at 99.7% (1843 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-22 15:42:27 +00:00
Jeff Huang
16809a53ab Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/
2020-08-22 15:42:26 +00:00
Slavi Pantaleev
6ad0098767 Translated using Weblate (Bulgarian)
Currently translated at 75.4% (1394 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/bg/
2020-08-22 15:42:25 +00:00
Priit Jõerüüt
eea17f0905 Translated using Weblate (Estonian)
Currently translated at 100.0% (1849 of 1849 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-22 11:08:31 +00:00
Benoit Marty
bd238dcbfa Make user displayName live in the setting, it should fix #1926 2020-08-21 22:24:29 +02:00
Benoit Marty
20e2b3beb8 Merge pull request #1978 from vector-im/feature/ttl
Improve #1971, especially be robust about system time change
2020-08-21 18:12:35 +02:00
ganfra
1f890324b4 Update some dependencies, including coroutines for working debugging 2020-08-21 17:17:51 +02:00
Benoit Marty
04fa7d9628 Version++ 2020-08-21 17:04:05 +02:00
Benoit Marty
19f9c94d60 Merge branch 'release/1.0.5' 2020-08-21 17:02:49 +02:00
Benoit Marty
7fd7970ec1 Merge branch 'release/1.0.5' into develop 2020-08-21 17:02:46 +02:00
Benoit Marty
81dece5516 Prepare release 1.0.5 2020-08-21 17:02:32 +02:00
Benoit Marty
52e66b09dc Merge pull request #1977 from vector-im/feature/networkonmainthread
Avoid NetworkOnMainThreadException when setting a user avatar
2020-08-21 16:48:19 +02:00
Benoit Marty
06f4b95dc0 Merge branch 'develop' into feature/networkonmainthread 2020-08-21 16:48:11 +02:00
Benoit Marty
008bc0116d Improve #1971, especially be robust about system time change 2020-08-21 16:36:45 +02:00
Benoit Marty
de728f6c36 Merge pull request #1971 from tzeitlho/turn_fix
Turn fix
2020-08-21 16:28:52 +02:00
Benoit Marty
a8c6678efc Avoid NetworkOnMainThreadException when setting a user avatar 2020-08-21 16:11:22 +02:00
Benoit Marty
35dbab2ff5 Merge pull request #1976 from vector-im/feature/post_weblate_merge
Feature/post weblate merge
2020-08-21 14:47:25 +02:00
Thomas Zeitlhofer
a732d8856b change var -> val according to review comment
Signed-off-by: Thomas Zeitlhofer <tz+github@ze-it.at>
2020-08-21 14:28:18 +02:00
Benoit Marty
80f7ffd7a6 Fix Potential Plurals - 3 2020-08-21 14:19:06 +02:00
Benoit Marty
d86536c949 Fix Potential Plurals (removing unused resource) - 2 2020-08-21 13:07:37 +02:00
Benoit Marty
f84ea0ad5b Fix Potential Plurals - 1 2020-08-21 12:55:15 +02:00
Benoit Marty
28ed6cb3b6 Fix typos reported by Lint 2020-08-21 12:47:39 +02:00
Benoit Marty
927c3e7e94 Update element web url (Fixes #1974) 2020-08-21 12:31:06 +02:00
Benoit Marty
5416f4194c Fix lint issue 2020-08-21 12:27:57 +02:00
Benoit Marty
b09c1e3cbf Format strings 2020-08-21 12:23:25 +02:00
Benoit Marty
66ac03a021 Merge pull request #1975 from RiotTranslateBot/weblate-element-android-element-app
Update from Weblate
2020-08-21 12:16:25 +02:00
Weblate
43d0a11cba Merge branch 'origin/develop' into Weblate. 2020-08-21 09:30:51 +00:00
notramo
a27b22a972 Translated using Weblate (Hungarian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/hu/
2020-08-21 09:30:37 +00:00
Priit Jõerüüt
338c569c0b Translated using Weblate (Estonian)
Currently translated at 89.8% (1649 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-21 09:30:37 +00:00
Lua
f7db14fb02 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/pt_BR/
2020-08-21 00:42:34 +00:00
Lua
cfd0e00c0c Translated using Weblate (Portuguese)
Currently translated at 44.5% (817 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt/
2020-08-21 00:42:34 +00:00
Priit Jõerüüt
7c4afd922c Translated using Weblate (Estonian)
Currently translated at 87.4% (1605 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-21 00:42:34 +00:00
Thomas Zeitlhofer
bd1a0361be Changelog entry for turnserver related fix
Signed-off-by: Thomas Zeitlhofer <tz+github@ze-it.at>
2020-08-20 19:46:20 +02:00
Thomas Zeitlhofer
a7ee7d5bad Renew turnserver credentials when ttl runs out
The previous implementation caches the turnserver response indefinitely.
This breaks VoIP calls as soon as the ttl of the received turnserver
credentials runs out. So, take care to renew the turnserver credentials
by allowing the cache to expire.

Fixes: d8cf44fdc9 ("Simple cache of turn server response")
Signed-off-by: Thomas Zeitlhofer <tz+github@ze-it.at>
2020-08-20 19:43:52 +02:00
Benoit Marty
29e4a64475 Merge pull request #1970 from vector-im/feature/highlight
Highlighted Event when opening a permalink from another room
2020-08-20 19:04:15 +02:00
Benoit Marty
f07bf43ada Merge branch 'develop' into feature/highlight 2020-08-20 19:04:03 +02:00
Onuray Sahin
80551fc0c2 Fix IllegalArgumentException: Receiver not registered: NetworkInfoReceiver (#1961)
Fix IllegalArgumentException: Receiver not registered: NetworkInfoReceiver (#1961)

Co-authored-by: Onuray Sahin <onurays@element.io>
2020-08-20 18:31:03 +02:00
Benoit Marty
2acda2c5da Merge pull request #1962 from vector-im/feature/membership_state_event
A Kick appears has "someone has made no change" (Fixes #1959)
2020-08-20 18:29:23 +02:00
Benoit Marty
9582b9c0fb Merge pull request #1965 from vector-im/feature/share
Share button in rooms gives room ID link without via parameters (#1927)
2020-08-20 18:28:30 +02:00
Benoit Marty
cbe093fe77 Highlighted Event when opening a permalink from another room (Fixes #1033) 2020-08-20 18:20:53 +02:00
Benoit Marty
112a7913d4 Improve (unused) code 2020-08-20 17:57:48 +02:00
Benoit Marty
cab447e44e Add missing copyright 2020-08-20 17:50:43 +02:00
Benoit Marty
fde2bdf304 Create a PermalinkFactory to avoid injecting the service in SDK classes 2020-08-20 17:41:01 +02:00
Benoit Marty
2c90e33ceb Move package 2020-08-20 17:33:55 +02:00
Benoit Marty
af10344b6b Share button in rooms gives room ID link without via parameters (#1927)
Following the algorithm described in #1927
Create a PermalinkService
2020-08-20 17:33:55 +02:00
Benoit Marty
187edbd32a Merge pull request #1968 from vector-im/feature/biometrics
Improve PIN code feature
2020-08-20 17:16:27 +02:00
Benoit Marty
3bce0be96e Merge pull request #1969 from vector-im/feature/dm_creation
DM creation: handled denied federation error
2020-08-20 17:15:44 +02:00
Benoit Marty
828bf44b2b Better handling DM creation when invitees cannot be inviting due to denied federation
As we do not know the created roomId, we cannot add it to the DM list though. But at least the user is informed that a room has been created and won't retry because the screen will be closed.
2020-08-20 15:44:28 +02:00
Benoit Marty
c6c8ef07a6 Fail first (before creating the room) when trying to create a DM without at least one invitee 2020-08-20 15:34:58 +02:00
Benoit Marty
a6150beed2 Stuff added by AS 4.0.1 2020-08-20 15:32:45 +02:00
Benoit Marty
b090468109 Logout after 3 wrong PIN codes 2020-08-20 14:21:24 +02:00
Benoit Marty
4cba1388f9 Add support for biometrics (not only Fingerprint) 2020-08-20 14:11:23 +02:00
Benoit Marty
61caa3474b Merge pull request #1956 from vector-im/feature/fix_package_renaming_issues
Some cleanup after the package renaming thing
2020-08-20 13:58:13 +02:00
Benoit Marty
cd08c919e9 Merge pull request #1963 from vector-im/feature/cleanup
Improve user avatar setting
2020-08-20 13:56:43 +02:00
Benoit Marty
45ca480de1 Ganfra's review 2020-08-20 13:56:23 +02:00
Benoit Marty
95d05a9c28 Make the user's Avatar live in the general settings
Also remove unused class RoomAvatarPreference
2020-08-19 18:32:06 +02:00
Benoit Marty
db9c418622 We are already in a Coroutine scope, we can directly call execute() on the task.
-> It will prevent the callback from being called twice.
2020-08-19 18:04:22 +02:00
Ege Sertçetin
e860062553 Translated using Weblate (Turkish)
Currently translated at 66.7% (2 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/tr/
2020-08-19 15:42:50 +00:00
Ege Sertçetin
80fc66e097 Translated using Weblate (Turkish)
Currently translated at 65.0% (1194 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/tr/
2020-08-19 15:42:49 +00:00
Peter Vágner
6b89dfdc8d Translated using Weblate (Slovak)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/sk/
2020-08-19 15:42:46 +00:00
Marcelo Filho
97fa087496 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-19 15:42:46 +00:00
Marcelo Filho
312a5855c6 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-19 15:42:46 +00:00
Priit Jõerüüt
c8d95f701d Translated using Weblate (Estonian)
Currently translated at 76.4% (1403 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-19 15:42:45 +00:00
Benoit Marty
9b6c45e112 A Kick appears has "someone has made no change" (Fixes #1959) 2020-08-19 15:54:46 +02:00
Benoit Marty
482a8f1fb8 Merge pull request #1955 from vector-im/feature/fix_unique_filename
Fix save media error: Failed to build unique file
2020-08-19 14:44:37 +02:00
Onuray Sahin
eb109aa755 ktlint fix. 2020-08-19 13:15:42 +03:00
aethralis
4a4a544860 Translated using Weblate (Estonian)
Currently translated at 51.6% (948 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-18 18:17:42 +00:00
Benoit Marty
72f5f8b64b Merge pull request #1945 from vector-im/feature/update_element_config_file_parsing
Feature/update element config file parsing
2020-08-18 18:31:39 +02:00
Benoit Marty
0a296908a8 Merge branch 'develop' into feature/update_element_config_file_parsing 2020-08-18 18:31:28 +02:00
Benoit Marty
08292c874b Merge pull request #1943 from vector-im/feature/design_quick_win
Feature/design quick win
2020-08-18 18:30:25 +02:00
Benoit Marty
e76c32b74e Add missing copyright mention for PFLockScreen-Android 2020-08-18 18:21:20 +02:00
Benoit Marty
7613073373 Some cleanup after the package renaming thing 2020-08-18 18:15:48 +02:00
Onuray Sahin
2b0051887a Append current time to the filename before saving. 2020-08-18 18:54:59 +03:00
Peter Vágner
413c21505c Translated using Weblate (Slovak)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/sk/
2020-08-18 09:23:31 +00:00
Benoit Marty
8581d06931 Merge pull request #1948 from tilosp/api-21-cleanup
Remove old code that was used on devices with api level <21
2020-08-18 10:11:15 +02:00
Benoit Marty
9385bd2a10 Merge branch 'develop' into api-21-cleanup 2020-08-18 10:11:02 +02:00
Benoit Marty
131f4d1757 Merge pull request #1949 from tilosp/gradle-wrapper-validation
Official Gradle Wrapper Validation Action
2020-08-18 09:56:36 +02:00
Tilo Spannagel
861b379992 Official Gradle Wrapper Validation Action
See: https://github.com/gradle/wrapper-validation-action

Signed-off-by: Tilo Spannagel <development@tilosp.de>
2020-08-18 00:49:17 +02:00
Tilo Spannagel
87bc0c6c7a Set severity of ObsoleteSdkInt to error
Signed-off-by: Tilo Spannagel <development@tilosp.de>
2020-08-18 00:46:37 +02:00
Nikita Epifanov
5f3d6a6905 Translated using Weblate (Russian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/ru/
2020-08-17 22:42:25 +00:00
Marcelo Filho
ce367f6e17 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-17 22:42:25 +00:00
Marcelo Filho
9660e147d4 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-17 22:42:25 +00:00
call_xz
5c2b4309cf Translated using Weblate (Japanese)
Currently translated at 50.4% (925 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/
2020-08-17 22:42:25 +00:00
Tuomas Hietala
788d72d6ca Translated using Weblate (Finnish)
Currently translated at 66.7% (2 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/fi/
2020-08-17 22:42:23 +00:00
Priit Jõerüüt
c982ebaca9 Translated using Weblate (Estonian)
Currently translated at 51.1% (938 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-17 22:42:23 +00:00
linsui
570f5ac375 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/zh_Hans/
2020-08-17 22:42:19 +00:00
Benoit Marty
a9ad3ac4f3 Merge pull request #1930 from yh-gao/best_localized_date_format
Fix date format for some Asian languages (#1928)
2020-08-17 23:57:40 +02:00
Tilo Spannagel
8c7956d935 Remove old code that was used on devices with api level <21
Signed-off-by: Tilo Spannagel <development@tilosp.de>
2020-08-17 21:20:39 +02:00
Benoit Marty
bde77784b9 Add internal 2020-08-17 19:46:44 +02:00
Benoit Marty
f012e23fa9 #1682: changelog 2020-08-17 19:42:21 +02:00
Benoit Marty
112f77c4e0 #1682: try to fetch config.domain.json 2020-08-17 19:39:29 +02:00
Benoit Marty
c11c28b406 #1682: parse "default_server_config" 2020-08-17 19:27:13 +02:00
Benoit Marty
189d2b2c06 Increase again font size 2020-08-17 19:08:32 +02:00
Benoit Marty
497b07b156 Fix color issue in dark and black themes (#961) 2020-08-17 18:02:23 +02:00
Benoit Marty
d74dc2053b Increase Font size on Calling screen (#1643)
And cleanup the layout
2020-08-17 16:48:40 +02:00
Benoit Marty
1b9b18851d Merge pull request #1906 from vector-im/feature/verify_developer_mode
Cleanup temporary code added during developpement
2020-08-17 16:32:28 +02:00
Benoit Marty
ac32d6bb29 Remove /verify command, it was added temporarily 2020-08-17 14:44:56 +02:00
Benoit Marty
1c48ba6b99 Remove actions that have been added only for debug purpose - step 1 2020-08-17 14:44:56 +02:00
Benoit Marty
35a5d9e454 Prevent click on Cross-Signing item when not in developer mode 2020-08-17 14:44:47 +02:00
Benoit Marty
550dcde9b8 Merge pull request #1914 from vector-im/feature/jitsi_native
Feature/jitsi native
2020-08-17 10:54:31 +02:00
Benoit Marty
7049c6e8ac Add Copyrigth notice for Jitsi library 2020-08-17 10:13:19 +02:00
Benoit Marty
9b1c01351c Adding jitsi.md documentation 2020-08-17 10:07:30 +02:00
LinAGKar
204db7b19b Translated using Weblate (Swedish)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/sv/
2020-08-16 21:42:28 +00:00
LinAGKar
93294be53e Translated using Weblate (Swedish)
Currently translated at 44.3% (814 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/
2020-08-16 21:42:28 +00:00
Marcelo Filho
b06a72f944 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-16 21:42:21 +00:00
Hubert Chathi
abd478ad3c Translated using Weblate (German)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/de/
2020-08-16 21:42:21 +00:00
dccs
f91b99ec5e Translated using Weblate (German)
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-16 21:42:21 +00:00
Priit Jõerüüt
cfee0e4797 Translated using Weblate (Estonian)
Currently translated at 46.2% (849 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-16 21:42:20 +00:00
Yihong Gao
f9faf9c4d8 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-16 21:42:18 +00:00
Yihong Gao
e3b7f167ff Fix date format of some Asian languages (#1928)
With DateFormat.getBestDateTimePattern to generate best
localized pattern.

Signed-off-by: Yihong Gao <yihong.ui@gmail.com>
2020-08-15 18:32:22 -07:00
strix aluco
553e5e7aa0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/uk/
2020-08-14 22:42:23 +00:00
strix aluco
6016e8f526 Translated using Weblate (Ukrainian)
Currently translated at 41.6% (763 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/uk/
2020-08-14 22:42:23 +00:00
rkfg
b2cd350115 Translated using Weblate (Russian)
Currently translated at 99.8% (1833 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-14 22:42:23 +00:00
Marcelo Filho
12a1828f04 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-14 22:42:23 +00:00
Rintan
133fd29a33 Translated using Weblate (Japanese)
Currently translated at 49.2% (903 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/
2020-08-14 22:42:23 +00:00
tatuya0902
9b8caf4f83 Translated using Weblate (Japanese)
Currently translated at 49.2% (903 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/
2020-08-14 22:42:22 +00:00
random
bbcd02a4c4 Translated using Weblate (Italian)
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/
2020-08-14 22:42:22 +00:00
notramo
2cdea80fef Translated using Weblate (Hungarian)
Currently translated at 94.1% (1727 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/hu/
2020-08-14 22:42:21 +00:00
aWeinzierl
023caf57d1 Translated using Weblate (German)
Currently translated at 100.0% (3 of 3 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/de/
2020-08-14 22:42:20 +00:00
Priit Jõerüüt
8ae3ffba32 Translated using Weblate (Estonian)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/et/
2020-08-14 22:42:20 +00:00
Priit Jõerüüt
8b994a1401 Translated using Weblate (Estonian)
Currently translated at 43.8% (805 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-14 22:42:19 +00:00
Jeff Huang
00615c9882 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1836 of 1836 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/
2020-08-14 22:42:15 +00:00
Benoit Marty
e90d18a86b Lint: Ignore error from dropbox-core-sdk-3.0.8 lib, which comes with Jitsi library 2020-08-14 21:33:46 +02:00
Benoit Marty
05ecbf0f86 Build Jitsi lib version android-sdk-2.9.3, commit abcbbbea12e3ef88012b14723bb8cd42dbefc988
And host it in https://github.com/vector-im/jitsi_libre_maven/tree/master/android-sdk-2.9.3
2020-08-14 21:33:25 +02:00
Benoit Marty
85734e3581 Ensure that when user accept permission the native widget is well open
Before we were asking in loop until the sync comes back with the updated account data
2020-08-14 15:48:41 +02:00
Benoit Marty
4f8fd7b994 Benoit's review
- Cleanup
- Force refresh of HomeServerCapabilities
- add some doc
- remove dead code
- remove commented code
- remove duplicated comment
- use getBestName()
- improve code formatting
- Fix isAudioOnly parameter in jitsi url
- Fix layout issue between "Active conference" banner and "Jump to first unread message banner"
- Improve "Active conference" banner
- Remove Calendar permission from Manifest
2020-08-14 15:40:02 +02:00
Benoit Marty
68d128133c Merge pull request #1913 from vector-im/feature/RtlHardcoded
Fix RtlHardcoded issues
2020-08-14 11:47:01 +02:00
Valere
157f22ac2d Update change log 2020-08-14 10:12:55 +02:00
Valere
050ef659b3 Code quality
Fix neg margin + typo in jitsi
2020-08-14 10:10:08 +02:00
Valere
8c150aa3e8 klint 2020-08-14 10:00:02 +02:00
Valere
c911d9c7ff Check native widget permissions 2020-08-14 09:54:58 +02:00
Valere
3ce1e3e5d9 Add/Remove jitsi widget via option menu 2020-08-14 09:45:33 +02:00
Valere
42a24300a1 Initial commit jitsi 2020-08-14 09:31:24 +02:00
Benoit Marty
5a3894036c Merge pull request #1907 from vector-im/feature/display_device_key
Feature/display device key
2020-08-13 20:31:15 +02:00
Benoit Marty
15c9d68175 Merge branch 'develop' into feature/display_device_key 2020-08-13 20:31:07 +02:00
Benoit Marty
4f0111f331 Remove useless layout_marginLeft and layout_marginRight attributes
RtlHardoded: other error

RtlHardoded: paddingLeft / Right

RtlHardoded: other error

Fix RtlHardcoded issues (use `Start` and `End` instead of `Left` and `Right` layout attributes)
2020-08-13 18:49:19 +02:00
Benoit Marty
81a4b5edbc Merge pull request #1905 from vector-im/feature/refresh_device_list
Live sessions list
2020-08-13 17:13:36 +02:00
Benoit Marty
87c903a0fa Merge pull request #1900 from vector-im/feature/improve_ignore_user
Ensure users do not accidentally ignore other users (#1890)
2020-08-13 17:13:14 +02:00
Benoit Marty
3103fe970a Ensure users do not accidentally ignore other users (#1890)
- Wording: use "Ignore" instead of "Block" for consistency across the app and with other Element app
2020-08-13 16:44:32 +02:00
Benoit Marty
5fa22fedbb Cleanup dead code 2020-08-13 16:37:19 +02:00
Benoit Marty
e6f89b0b22 Display device information (name, id and key) in Cryptography setting screen (#1784) 2020-08-13 16:37:19 +02:00
Benoit Marty
d1b6cff663 Revert change (Valere's review) 2020-08-13 16:34:08 +02:00
Benoit Marty
3c8a4b80d2 Add missing Copyright 2020-08-13 16:31:46 +02:00
Benoit Marty
7a2454d816 Fix refreshing of sessions list when another session is logged out
Rx: use distinctUntilChanged() instead of distinct()
2020-08-13 16:27:04 +02:00
Benoit Marty
c9c787b11d Rename method
to merge
2020-08-13 16:24:51 +02:00
Benoit Marty
76788892c0 Merge pull request #1911 from vector-im/feature/rename_sdk_package
Rename package of SDK modules
2020-08-13 16:17:29 +02:00
Benoit Marty
cdc60cd453 Add missing Copyright 2020-08-13 15:41:05 +02:00
Benoit Marty
894f5b9ed3 Add copyright to SDK Kotlin source file 2020-08-13 15:41:05 +02:00
Benoit Marty
8f1adf6316 Ensure deserialization of previously stored objects still works
After package has been renamed from `im.vector.matrix.android` to `org.matrix.android.sdk`
2020-08-13 15:41:05 +02:00
Benoit Marty
11b5512cb8 Rename package of SDK modules 2020-08-13 12:50:58 +02:00
Benoit Marty
e3bf4c1e7b Merge pull request #1912 from vector-im/feature/post_weblate_sync
Post weblate sync
2020-08-13 12:47:22 +02:00
Benoit Marty
2d3359b70e Rename files, Weblate is expecting _ rather than - 2020-08-13 12:20:44 +02:00
Benoit Marty
a92e9040bf Fix lint issue UnusedQuantity and ensure it will be an error in the future 2020-08-13 12:15:15 +02:00
Benoit Marty
c8e5cde101 Fix lint issues 2020-08-13 12:08:01 +02:00
Benoit Marty
617558a1ca Format strings resource 2020-08-13 11:20:44 +02:00
Benoit Marty
753518fdc5 Merge pull request #1910 from RiotTranslateBot/weblate-element-android-element-app
Update from Weblate
2020-08-13 11:09:50 +02:00
Weblate
95e998b652 Merge branch 'origin/develop' into Weblate. 2020-08-13 08:48:02 +00:00
Marcelo Filho
dc17156024 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-13 06:42:18 +00:00
random
7299f938b5 Translated using Weblate (Italian)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/it/
2020-08-13 06:42:18 +00:00
@a2sc:matrix.org
6bf6c53969 Translated using Weblate (German)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/de/
2020-08-13 06:42:16 +00:00
linsui
c1b40442fa Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1 of 1 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/zh_Hans/
2020-08-13 06:42:16 +00:00
linsui
d8850e046a Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/zh_Hans/
2020-08-13 06:42:16 +00:00
Akarshan Biswas
fb09f58ac8 Translated using Weblate (Bengali (India))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/bn_IN/
2020-08-13 06:42:16 +00:00
AnonymousWebHacker
482c9ad451 Translated using Weblate (Spanish)
Currently translated at 73.8% (1353 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/es/
2020-08-12 17:54:27 +00:00
rkfg
0702d3593c Translated using Weblate (Russian)
Currently translated at 99.9% (1833 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-12 17:54:23 +00:00
Marcelo Filho
7efccab2af Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-12 17:54:22 +00:00
AmirAli Akbari
e364c78cc7 Translated using Weblate (Persian)
Currently translated at 32.3% (593 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/fa/
2020-08-12 17:54:00 +00:00
call_xz
e27632e253 Translated using Weblate (Japanese)
Currently translated at 48.4% (888 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/
2020-08-12 17:54:00 +00:00
random
93f2724f68 Translated using Weblate (Italian)
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/
2020-08-12 17:53:53 +00:00
@a2sc:matrix.org
1e56c70d6a Translated using Weblate (German)
Currently translated at 99.9% (1833 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-12 17:53:45 +00:00
Priit Jõerüüt
d836f9d1f8 Translated using Weblate (Estonian)
Currently translated at 39.4% (723 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-12 17:53:42 +00:00
Thomas Lee
d82d14c629 Translated using Weblate (Esperanto)
Currently translated at 25.3% (464 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/eo/
2020-08-12 17:53:30 +00:00
linsui
547f5634e5 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-12 17:53:25 +00:00
Akarshan Biswas
9dd61c2004 Translated using Weblate (Bengali (India))
Currently translated at 57.3% (1051 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/bn_IN/
2020-08-12 17:53:14 +00:00
Benoit Marty
bc3d7bdfc4 Merge pull request #1883 from vector-im/feature/confirm_call
Give user the possibility to prevent accidental call (#1869)
2020-08-12 11:54:58 +02:00
Benoit Marty
80d5368d75 Merge pull request #1898 from vector-im/feature/fix_crash
Fix crash reported by RageShake
2020-08-12 11:53:54 +02:00
Benoit Marty
ab9950ee73 Fix crash reported by RageShake 2020-08-12 10:49:54 +02:00
Yihong Gao
11ec53bcfc Translated using Weblate (Chinese (Simplified))
Currently translated at 91.8% (1683 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-12 02:45:37 +00:00
linsui
ca38d4ce70 Translated using Weblate (Chinese (Simplified))
Currently translated at 91.8% (1683 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-12 02:45:35 +00:00
@a2sc:matrix.org
311eeb9260 Added translation using Weblate (Kurdish) 2020-08-11 22:24:49 +00:00
Benoit Marty
98aeee9c5a Merge pull request #1803 from czeidler/relative-date-time-formatter
Relative date time formatter #822
2020-08-11 12:45:49 +02:00
Benoit Marty
7b017e4328 Ensure we will always use Context#getSystemService extension function provided by core-ktx 2020-08-11 12:42:32 +02:00
Benoit Marty
b18a8744b2 Merge pull request #1702 from johnjohndoe/system-service
Use Context#getSystemService extension function provided by core-ktx.
2020-08-11 12:37:23 +02:00
Benoit Marty
247a34438b Merge pull request #1880 from vector-im/feature/theme_cleanup
Feature/theme cleanup
2020-08-11 10:41:38 +02:00
Benoit Marty
ebc7db2bc2 Update issue templates 2020-08-11 09:45:47 +02:00
rkfg
0f0f6b90dc Translated using Weblate (Russian)
Currently translated at 98.2% (1801 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-11 07:01:37 +00:00
Artyom
c17297ad15 Translated using Weblate (Russian)
Currently translated at 98.2% (1801 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-11 07:01:36 +00:00
Tobias Preuss
40f8e6061f Use "Context#getSystemService" extension function provided by "core-ktx".
+ Re-use local variable where possible.
2020-08-09 16:16:06 +02:00
aevw
0ab2f62e28 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 22:29:50 +00:00
Marcelo Filho
9bca325e07 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 22:29:50 +00:00
aevw
eb01c0c016 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 20:33:23 +00:00
Marcelo Filho
a76e222cb5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 20:33:23 +00:00
Marcelo Filho
ebe43497d5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 19:44:16 +00:00
aevw
f181f4e449 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 19:44:16 +00:00
Artyom
d144dcf7d9 Translated using Weblate (Russian)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/ru/
2020-08-07 14:42:27 +00:00
rkfg
0e6d296c87 Translated using Weblate (Russian)
Currently translated at 90.6% (1662 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-07 14:42:26 +00:00
Artyom
6dbefb212e Translated using Weblate (Russian)
Currently translated at 90.6% (1662 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-07 14:42:26 +00:00
Alexey Murz Korepov
e11bd9436b Translated using Weblate (Russian)
Currently translated at 90.6% (1662 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-07 14:42:24 +00:00
aevw
61373e6e8e Translated using Weblate (Portuguese (Brazil))
Currently translated at 92.0% (1688 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 14:42:23 +00:00
Marcelo Filho
aa7a0abad7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 92.0% (1688 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 14:42:22 +00:00
Benoit Marty
c9d7559f03 Translated using Weblate (French)
Currently translated at 100.0% (1 of 1 strings)

Translation: Element Android/Element Android Store
Translate-URL: https://translate.riot.im/projects/element-android/element-store/fr/
2020-08-07 14:42:21 +00:00
Priit Jõerüüt
a6b7a65dfb Translated using Weblate (Estonian)
Currently translated at 30.1% (552 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-07 14:42:21 +00:00
Xidorn Quan
a0ecb6ecc2 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/zh_Hans/
2020-08-07 14:42:12 +00:00
linsui
3eb12ab116 Translated using Weblate (Chinese (Simplified))
Currently translated at 78.9% (1447 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-07 14:42:11 +00:00
Marcelo Filho
84a6d4a592 Translated using Weblate (Portuguese (Brazil))
Currently translated at 91.3% (1675 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 06:25:04 +00:00
aevw
66a7802e1b Translated using Weblate (Portuguese (Brazil))
Currently translated at 91.3% (1675 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-07 06:25:04 +00:00
Benoit Marty
fc510e86f7 ktlint 2020-08-06 17:20:14 +02:00
Xidorn Quan
0901075c9f Translated using Weblate (Chinese (Simplified))
Currently translated at 72.3% (1326 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-06 10:14:45 +00:00
linsui
6bb5835bea Translated using Weblate (Chinese (Simplified))
Currently translated at 72.3% (1326 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-06 10:14:44 +00:00
rkfg
0dd4563217 Translated using Weblate (Russian)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/ru/
2020-08-06 03:43:04 +00:00
Artyom
2b91482ec4 Translated using Weblate (Russian)
Currently translated at 88.7% (1626 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-06 03:43:04 +00:00
rkfg
4ca0a5acae Translated using Weblate (Russian)
Currently translated at 88.7% (1626 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/
2020-08-06 03:42:55 +00:00
Marcelo Filho
b90be98679 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/pt_BR/
2020-08-06 03:42:54 +00:00
aevw
2c16fc467b Translated using Weblate (Portuguese (Brazil))
Currently translated at 62.5% (1146 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-06 03:42:51 +00:00
Marcelo Filho
87084e5065 Translated using Weblate (Portuguese (Brazil))
Currently translated at 62.5% (1146 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/
2020-08-06 03:42:38 +00:00
random
f0f0fcf9ba Translated using Weblate (Italian)
Currently translated at 94.8% (1739 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/
2020-08-06 03:42:36 +00:00
@a2sc:matrix.org
8ef97e9dc6 Translated using Weblate (German)
Currently translated at 99.1% (233 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/de/
2020-08-06 03:42:33 +00:00
aWeinzierl
dedc183e75 Translated using Weblate (German)
Currently translated at 99.1% (233 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/de/
2020-08-06 03:42:33 +00:00
@a2sc:matrix.org
d301a3e5d3 Translated using Weblate (German)
Currently translated at 99.9% (1832 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-06 03:42:32 +00:00
Priit Jõerüüt
199e3165f2 Translated using Weblate (Estonian)
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/et/
2020-08-06 03:42:31 +00:00
Priit Jõerüüt
1c66705c5a Translated using Weblate (Estonian)
Currently translated at 21.6% (397 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/
2020-08-06 03:42:30 +00:00
Jeff Huang
ac86a8948e Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (235 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/zh_Hant/
2020-08-06 03:42:21 +00:00
Jeff Huang
2e8f87b80d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1834 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/
2020-08-06 03:42:20 +00:00
linsui
a708a93f3e Translated using Weblate (Chinese (Simplified))
Currently translated at 74.5% (175 of 235 strings)

Translation: Element Android/Element Android Sdk
Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/zh_Hans/
2020-08-06 03:42:13 +00:00
linsui
2ef4e9c378 Translated using Weblate (Chinese (Simplified))
Currently translated at 68.0% (1248 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/
2020-08-06 03:42:13 +00:00
Benoit Marty
b8b8a12035 Update issue templates 2020-08-05 22:05:13 +02:00
Benoit Marty
087c5cb77c Update issue templates 2020-08-05 22:02:57 +02:00
Benoit Marty
02baf824f9 Give user the possibility to prevent accidental call (#1869) 2020-08-05 19:59:25 +02:00
Benoit Marty
b833198a3a Rework text selector 2020-08-05 19:34:19 +02:00
Benoit Marty
06d927a911 Rework tabbar style 2020-08-05 19:26:00 +02:00
Benoit Marty
7ab55d46c0 No need to overide with same value 2020-08-05 18:55:57 +02:00
Benoit Marty
8e81d6fe01 Rework attrs riotx_highlighted_message_background 2020-08-05 18:54:13 +02:00
Benoit Marty
85e6ef40a1 Rework attrs vctr_line_divider and vctr_pill_receipt 2020-08-05 18:49:22 +02:00
Benoit Marty
e1db7630d9 Remove unused resources 2020-08-05 18:35:09 +02:00
Benoit Marty
a343e25785 Remove useless method now that we are on API 21+ 2020-08-05 18:30:37 +02:00
Benoit Marty
0ad059359f R.drawable.vector_label_background for API 21 2020-08-05 18:27:59 +02:00
Benoit Marty
20336af84e R.drawable.bg_unread_notification for API 21 2020-08-05 18:21:13 +02:00
Benoit Marty
0a775444dd R.drawable.divider_horizontal for API 21 2020-08-05 18:19:20 +02:00
Benoit Marty
7fe30e464d Remove unused png 2020-08-05 18:12:10 +02:00
aWeinzierl
9c1e61992a Translated using Weblate (German)
Currently translated at 99.7% (1828 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-05 12:33:25 +00:00
@a2sc:matrix.org
d41036f861 Translated using Weblate (German)
Currently translated at 99.7% (1828 of 1834 strings)

Translation: Element Android/Element Android App
Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/
2020-08-05 12:33:15 +00:00
Clemens Zeidler
159881645c Add change log entry 2020-08-05 21:04:26 +12:00
Clemens Zeidler
5e711f6c57 Fix relative date time formatting (#822)
The transitionResolution parameter has to go back to the beginning of
the day. In general, going back 24h is not enough.
2020-08-05 20:59:56 +12:00
Benoit Marty
16f80f35dd Remove unused resources 2020-08-04 17:31:14 +02:00
Benoit Marty
188aec9fc4 Remove unused attrs 2020-08-04 17:22:05 +02:00
Benoit Marty
deeb0d3303 Update Weblate URL to the brand new Weblate project 2020-08-04 14:58:52 +02:00
Benoit Marty
7a215d94d8 Merge pull request #1872 from vector-im/feature/weblate_element
Weblate for element
2020-08-04 12:45:00 +02:00
Benoit Marty
cf7770e47e Remove unused strings 2020-08-04 11:04:36 +02:00
Benoit Marty
6a8ac72b6a Remove riot ref 2020-08-04 09:13:29 +02:00
Benoit Marty
95bbdba141 Rework settings_notification_advanced_summary string 2020-08-04 09:13:29 +02:00
Benoit Marty
1ddeeba561 Little rework of default session public name 2020-08-04 09:13:29 +02:00
Benoit Marty
e95735c491 Remove unused strings 2020-08-04 09:12:16 +02:00
Benoit Marty
fa49e5cb4f Rename string id 2020-08-04 09:12:16 +02:00
Benoit Marty
a48302f433 Remove PlayStore strings from Android resource 2020-08-04 09:12:16 +02:00
Benoit Marty
ad1b2b4511 Add PlayStore description resources in the Triple-T format, to let Weblate handle them 2020-08-04 09:12:16 +02:00
Benoit Marty
0127339eac Merge pull request #1870 from vector-im/feature/rename_package
Rename packages
2020-08-04 09:11:38 +02:00
Benoit Marty
ab4a517ae0 Cleanup 2020-08-03 18:50:04 +02:00
Benoit Marty
8931fd314d Rename package im.vector.riotx to im.vector.app (other manual changes) 2020-08-03 18:48:20 +02:00
Benoit Marty
05b849de13 Rename package im.vector.riotx to im.vector.app (IDE, other variants) 2020-08-03 18:46:29 +02:00
Benoit Marty
a1f90abcd2 Rename package im.vector.riotx to im.vector.app (IDE) 2020-08-03 18:46:29 +02:00
Benoit Marty
67fc2feacb Rename package im.vector.riotx.multipicker to im.vector.lib.multipicker 2020-08-03 18:35:02 +02:00
Benoit Marty
d28c091f0a Rename package im.vector.riotx.attachmentviewer to im.vector.lib.attachmentviewer 2020-08-03 18:35:02 +02:00
Benoit Marty
b4af59728c Merge pull request #1867 from vector-im/feature/cleanup_after_ooo
Small cleanup, also to be aware of all the changes that occurred during my holidays.
2020-08-03 17:47:26 +02:00
Benoit Marty
025d5f7b4c Code readability 2020-08-03 17:33:24 +02:00
Benoit Marty
d531e88666 Key is private 2020-08-03 17:33:24 +02:00
Benoit Marty
ac845ad8c9 Hide Flair settings, this is not implemented yet. 2020-08-03 17:33:24 +02:00
Benoit Marty
ace7ff464b Banned users: use the counter as the title 2020-08-03 17:33:24 +02:00
Benoit Marty
562c6fbcce Naming convention 2020-08-03 17:33:24 +02:00
Benoit Marty
8cc12fb8d4 Only one token per request is possible so use header instead of addHeader 2020-08-03 17:33:24 +02:00
Benoit Marty
4cbb2f7d9d Cleanup 2020-08-03 17:33:24 +02:00
Benoit Marty
18c0f53764 Format 2020-08-03 17:33:24 +02:00
Benoit Marty
64d000ec53 Update PULL_REQUEST_TEMPLATE.md 2020-08-03 17:29:07 +02:00
Benoit Marty
8e84c099fa Merge pull request #1747 from vulet/develop
fix: invisible toolbar(status.im theme)
2020-08-03 16:59:30 +02:00
Benoit Marty
707b69e3e2 Merge branch 'develop' into develop 2020-08-03 16:58:52 +02:00
Valere
33f6e7e337 Version ++ 2020-08-03 14:04:31 +02:00
Valere
ee1d5faf0d Merge branch 'hotfix/fix_crash_invite_user' 2020-08-03 14:01:27 +02:00
Valere
9178fd2b5c Merge branch 'hotfix/fix_crash_invite_user' into develop 2020-08-03 14:01:27 +02:00
Valere
69e499e497 Merge hotfix 2020-08-03 14:00:32 +02:00
Valere
7308c4a15c Merge branch 'hotfix/fix_crash_before_release' 2020-08-03 12:23:55 +02:00
Valere
1370ca7082 Merge branch 'hotfix/fix_crash_before_release' into develop 2020-08-03 12:23:55 +02:00
Valere
db6045778e Update change log 2020-08-03 12:11:50 +02:00
Valere
2810923519 FIx / Crash when opening Invite User screen 2020-08-03 12:00:08 +02:00
ganfra
7f326abcd0 Merge pull request #1844 from vector-im/feature/pin_code
Feature/pin code
2020-07-31 11:51:39 +02:00
ganfra
acf977577f Pin: clean code 2020-07-31 11:47:51 +02:00
ganfra
995c552f2a Merge branch 'develop' into feature/pin_code 2020-07-31 11:41:42 +02:00
ganfra
99ae1655f5 Pin: fix PopupAlertManager showing on top of PinCode 2020-07-31 11:34:24 +02:00
ganfra
7e45fe4509 Pin: add comment on UnlockActivity interface 2020-07-31 11:33:25 +02:00
Valere
531623178a Version ++ 2020-07-31 00:52:22 +02:00
Valere
7fddfa45e8 Merge branch 'release/1.0.3' 2020-07-31 00:02:02 +02:00
Valere
2b2fd3a356 Merge branch 'release/1.0.3' into develop 2020-07-31 00:02:02 +02:00
Valere
258acaf814 Prepare release 1.0.3 2020-07-31 00:01:33 +02:00
ganfra
a883d3ecdd Merge branch 'develop' into feature/pin_code 2020-07-30 18:49:13 +02:00
Valere
2f6cdc6529 Merge pull request #1847 from vector-im/feature/crash_store_mvrx
Fix IllegalArgumentException reported from store on HomeActivity aunch
2020-07-30 18:07:11 +02:00
Valere
1f226ca6c7 Merge pull request #1845 from vector-im/feature/admin_e2e_config
Feature/admin e2e config
2020-07-30 18:06:27 +02:00
ganfra
9475cb3b39 Update CHANGES 2020-07-30 17:25:49 +02:00
ganfra
eb0d350097 Merge branch 'develop' into feature/pin_code 2020-07-30 17:24:48 +02:00
Valere
c90f5ed370 Fix IllegalArgumentException reported from store on HomeActivity aunch 2020-07-30 17:03:11 +02:00
Valere
ccb466edbe Update change log 2020-07-30 16:57:25 +02:00
Valere
1204f6d9ce UX feedback, reduce severity of message 2020-07-30 15:25:10 +02:00
ganfra
efa1263c35 Pin: set back the grace period to 2 minutes 2020-07-30 15:22:41 +02:00
ganfra
06bd353d44 Pin: polish a bit and clean code 2020-07-30 14:58:46 +02:00
Valere
562cfce9e2 Support HS admin option to disable E2EE for DMs
Fixes #1794
2020-07-30 12:08:30 +02:00
ganfra
bb066b7c65 Add PinLocker to handle lock state 2020-07-29 20:19:01 +02:00
ganfra
37521d2d4f Pin: add settings to enable/disable 2020-07-29 16:11:57 +02:00
Valere
b732ea6c69 Version ++ 2020-07-29 11:39:23 +02:00
ganfra
5426e43cbb Create PinCodeStore and migrate code to fragment 2020-07-29 11:38:04 +02:00
Valere
a048f79b37 Merge branch 'release/1.0.2' 2020-07-29 10:46:54 +02:00
Valere
3214f7d3d5 Merge branch 'release/1.0.2' into develop 2020-07-29 10:46:54 +02:00
Valere
06ef665f66 prepare release 1.0.2 2020-07-29 10:33:55 +02:00
Valere
e1a07f1da6 Merge pull request #1838 from vector-im/feature/session_store_migration
Feature/session store migration
2020-07-29 10:31:14 +02:00
Valere
5c32c7388a cleaning 2020-07-29 09:51:50 +02:00
Valere
c04f22d3bf quick fix plural 2020-07-29 09:51:20 +02:00
Valere
cbf43ea7b3 Session store migration 2020-07-29 09:50:12 +02:00
Valere
9197275343 version++ 2020-07-29 09:00:29 +02:00
ganfra
ecdef52829 Continue PIN code library integration (fork required) 2020-07-28 20:22:59 +02:00
Valere
cc4298209b Merge branch 'release/1.0.1' 2020-07-28 18:03:37 +02:00
Valere
f26ce64914 Merge branch 'release/1.0.1' into develop 2020-07-28 18:03:36 +02:00
Valere
e3f5b7cab3 Prepare release 1.0.1 2020-07-28 18:02:51 +02:00
ganfra
cd38aa42aa Merge branch 'develop' into feature/pin_code 2020-07-28 17:49:36 +02:00
Valere
dde9cdd8ac Merge pull request #1821 from vector-im/feature/notification_off_alert
Check if migration disabled notif
2020-07-28 17:04:15 +02:00
Valere
0d0308d584 Merge pull request #1802 from vector-im/feature/fix_reply_tag
Feature/fix reply tag
2020-07-28 16:58:10 +02:00
Valere
a47ff99be7 Merge branch 'develop' into feature/fix_reply_tag 2020-07-28 16:58:00 +02:00
Valere
e619217687 Code quality 2020-07-28 16:56:55 +02:00
Valere
6f5b3371fe Check if migration disabled notif 2020-07-28 16:56:55 +02:00
Valere
f7b9fc3bb1 Merge pull request #1826 from vector-im/feature/banned_list
Added banned user screen
2020-07-28 16:53:58 +02:00
ganfra
700a2e9ce3 Merge pull request #1832 from vector-im/feature/fix_timeline_loading
Fix timeline non loading when there are lots of filtered events
2020-07-28 16:30:57 +02:00
ganfra
5176a3e2aa Merge branch 'develop' into feature/fix_timeline_loading 2020-07-28 16:30:34 +02:00
Valere
4631cd0e80 Merge pull request #1831 from vector-im/feature/quick_call_update
Allow call in all 2 participants rooms
2020-07-28 16:24:22 +02:00
Valere
60c6512418 Fix / item flickering 2020-07-28 16:23:21 +02:00
Valere
12bc821ef3 code review 2020-07-28 16:23:21 +02:00
Valere
c82e910c38 Added banned user screen 2020-07-28 16:23:21 +02:00
ganfra
7ae0620b20 Update CHANGES 2020-07-28 15:09:45 +02:00
Valere
de32cdb703 Merge pull request #1828 from vector-im/feature/improve_edit_role_button
Improve UI of edit role button
2020-07-28 14:46:54 +02:00
Valere
12e2a8ffc8 Allow call in all 2 participants rooms 2020-07-28 14:43:50 +02:00
ganfra
833f64fcec Fix timeline non loading when there are lots of filtered events 2020-07-28 11:49:45 +02:00
Valere
73c051d2b1 Improve UI of edit role button 2020-07-28 11:35:37 +02:00
ganfra
da06695ab7 Relation content should be checked in encrypted content and not the decrypted one 2020-07-24 18:31:01 +02:00
Onuray Sahin
984ffc4fb9 Merge pull request #1797 from vector-im/feature/fix_rebranding_assets
Fix rebranding assets on login screens
2020-07-24 15:16:02 +03:00
ganfra
a19a3f2a7f Merge branch 'develop' into feature/pin_code 2020-07-24 11:35:38 +02:00
ganfra
d7b44ba0cf Merge branch 'develop' into feature/fix_reply_tag 2020-07-24 11:32:59 +02:00
ganfra
e90fe5cf28 Update CHANGES 2020-07-24 11:31:47 +02:00
ganfra
20c7d80bb1 Clean code 2020-07-24 11:30:27 +02:00
ganfra
25f8a9418a Merge pull request #1783 from vector-im/feature/sending_retry
Feature/sending retry
2020-07-24 10:35:24 +02:00
onurays
21b609420b ktlint fix. 2020-07-24 03:00:06 +03:00
ganfra
794b89c041 Reply: remove inner tags when replying 2020-07-23 18:23:49 +02:00
ganfra
407595e613 Change warning badge (white background) 2020-07-23 16:38:42 +02:00
ganfra
cac8099117 Local echo: use missing updateSendingInformation on RoomSummaryUpdater 2020-07-23 16:38:17 +02:00
onurays
4cc3e87d64 Fix rebranding assets on login screens. 2020-07-23 15:02:40 +03:00
ganfra
3e429490e7 Update CHANGES 2020-07-22 17:04:48 +02:00
ganfra
e23b02f2e2 Composer: set max lines to 6 so it can scroll 2020-07-22 16:02:38 +02:00
ganfra
aa5ae45a0c Add hasFailedSending in RoomSummary and a small warning icon on room list 2020-07-22 15:21:48 +02:00
ganfra
d7558902f7 Sending: limit to 3 retry before failing 2020-07-22 11:12:37 +02:00
ganfra
aa5de1896f Merge pull request #1766 from vector-im/feature/fix_annoying_issues
Fix post Element release issues
2020-07-21 16:43:26 +02:00
ganfra
e5596f6a97 Use Any instead of JsonDict so users won't loose ignored users 2020-07-21 10:43:52 +02:00
ganfra
d638306b04 Merge pull request #1703 from vector-im/feature/md_files
Riot -> Element
2020-07-21 10:08:07 +02:00
ganfra
dba9356472 Merge pull request #1714 from vector-im/feature/deactivated_account
i18n deactivated account error
2020-07-21 08:14:10 +02:00
ganfra
fb247f8bea Update CHANGES and clean code 2020-07-20 20:29:52 +02:00
ganfra
c880e2b848 Fix Requesting avatar thumbnails in Element uses wrong http "user-agent" string #1725 2020-07-20 20:24:04 +02:00
ganfra
1436477a14 Rework a bit user account data (and avoid blocking syncs) 2020-07-20 19:52:24 +02:00
ganfra
35fe4f7268 Fix modular link to EMS 2020-07-20 18:47:41 +02:00
ganfra
a488e88f93 Add reaction to RoomSummary latest previewable event 2020-07-20 16:49:05 +02:00
ganfra
0d51c160eb Should fix realm crash loop 2020-07-20 16:43:39 +02:00
vulet
f5b584ddb8 fix: invisible toolbar(status.im theme) 2020-07-20 00:15:45 +08:00
ganfra
27207a27ae Fix "uploads don't work with Room v6" #1558 2020-07-17 20:33:47 +02:00
Benoit Marty
5082defddf i18n deactivated account error 2020-07-17 17:23:48 +02:00
ganfra
c5f06386bd Continue trying to configure Pin library, stil WIP 2020-07-17 17:13:50 +02:00
ganfra
6e0095edb0 Feature/fix notification clearing (#1707)
Updating notification when entering a room
2020-07-17 13:31:36 +02:00
ganfra
f5fbb2bc4f Setup screens for Pin 2020-07-17 13:29:18 +02:00
Benoit Marty
d78cd81c6f Cleanup strings.xml 2020-07-16 19:21:02 +02:00
Benoit Marty
ef93ef57f9 Replace Riot -> Element in documentation 2020-07-16 19:19:31 +02:00
Benoit Marty
a600e896a0 Update Contributing file after the release of Element 2020-07-16 19:14:20 +02:00
Benoit Marty
993c340c4f Update Authors file after the release of Element 2020-07-16 19:11:33 +02:00
Benoit Marty
87f506f23b Update Readme file after the release of Element 2020-07-16 19:10:52 +02:00
Benoit Marty
44fb53ce6b Merge pull request #1701 from vector-im/feature/riotx_remaining
RiotX -> Element
2020-07-16 18:56:44 +02:00
Benoit Marty
1d2e374526 RiotX -> Element 2020-07-16 16:01:25 +02:00
Benoit Marty
5c423d2897 RiotX -> Element 2020-07-15 20:21:58 +02:00
Benoit Marty
6d0a1ee824 SSO Login: use "element://element" url instead of "riotx://riotx" 2020-07-15 20:21:35 +02:00
Benoit Marty
978ab76644 Merge pull request #1694 from vector-im/feature/improve_splash
Improve splash screen
2020-07-15 20:15:47 +02:00
Benoit Marty
da4e3f3b9c Merge pull request #1693 from vector-im/feature/fix_1613
Feature/fix 1613
2020-07-15 16:41:19 +02:00
Benoit Marty
f6d2d05e70 Improve splash screen 2020-07-15 15:08:46 +02:00
Benoit Marty
d747d96e77 Use correct title 2020-07-15 14:49:26 +02:00
Benoit Marty
484b69165b Add rounded light background to fix dark images on dark background issue (#1613) 2020-07-15 14:34:06 +02:00
Benoit Marty
0159e6dc00 Hide the menu item, it's not implemented yet 2020-07-15 14:33:01 +02:00
Benoit Marty
8f7aae4980 Tint the icon (#1613) 2020-07-15 14:33:01 +02:00
Benoit Marty
0f9e26efc5 let instead of also 2020-07-15 14:33:01 +02:00
Benoit Marty
53f0b77fb0 Version++ 2020-07-15 14:32:15 +02:00
Benoit Marty
fca669ff98 Merge branch 'release/1.0.0' 2020-07-15 14:27:24 +02:00
Benoit Marty
e910fc60fe Merge branch 'release/1.0.0' into develop 2020-07-15 14:27:23 +02:00
Benoit Marty
1d2e62fed7 Prepare release 1.0.0 2020-07-15 14:27:08 +02:00
Benoit Marty
7651eb5c3c Revert "Temporary remove the _dev suffix added to version"
This reverts commit 7237ec7310.
2020-07-15 14:14:44 +02:00
Benoit Marty
a06484c260 Merge pull request #1691 from vector-im/rebranding
Rebranding!
2020-07-15 14:13:11 +02:00
Benoit Marty
9b49e6a817 Use local file in a dialog though (else -> crash) 2020-07-13 23:03:16 +02:00
Benoit Marty
bef0c7725b Use openUrlInChromeCustomTab because it's better and it fixes crash on API 21 (at least) 2020-07-13 22:43:19 +02:00
Benoit Marty
7237ec7310 Temporary remove the _dev suffix added to version 2020-07-13 21:50:26 +02:00
Benoit Marty
3abe5b8467 ktlint 2020-07-13 21:38:49 +02:00
Valere
0406854fa5 lighter bottom sheet separator 2020-07-13 19:25:59 +02:00
Valere
ca6a398a72 Update add room icon 2020-07-13 19:25:44 +02:00
Valere
5e81ce8e3e Update tmp lab icon for notif tab 2020-07-13 19:25:35 +02:00
Onuray Sahin
8658090736 Fix tint color of settings. 2020-07-13 20:16:01 +03:00
Onuray Sahin
614ac88567 Create group room icon changed. 2020-07-13 20:06:39 +03:00
Onuray Sahin
797dcdb48b Merge branch 'riotx_develop' into rebranding_rebase
* riotx_develop: (111 commits)
  Video calls are shown as a voice ones in the timeline (Fixes #1676)
  Fix regression: not able to create a room without IS configured (Fixes #1679)
  Fix / view attachment crash + freeze when offline
  Version++
  Prepare release 0.91.5
  Fix test compilation issue
  Fix crash after rebase
  Add TODO
  Copy Javadoc to the API class
  Move internal methods to internal task
  Latest renaming
  Rename CreateRoomParamsInternalBuilder to CreateRoomBodyBuilder for clarity
  Rename CreateRoomParamsBuilder to CreateRoomParams for clarity
  Rename internal class
  Expose other objects in the builder to create a room
  ktlint
  Display threePid invite along with the other invite (code is a bit dirty)
  Hide right arrow if threepid invite can not be revoked
  Disable fetching Msisdn, it does not work
  Revoke ThreePid invitation (#548)
  ...

# Conflicts:
#	vector/build.gradle
#	vector/src/main/java/im/vector/riotx/features/crypto/keys/KeysExporter.kt
#	vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml
#	vector/src/main/res/values/strings.xml
2020-07-13 19:59:20 +03:00
Onuray Sahin
3a696ea9a1 Revert shield icons. 2020-07-13 19:21:22 +03:00
Onuray Sahin
1b19cb7449 Roll back ic_shield_black 2020-07-13 19:18:56 +03:00
Onuray Sahin
ea81a5298b ic_shield_black icon changed. 2020-07-13 18:55:30 +03:00
Onuray Sahin
ae65eb6a3e Advanced Settings icon changed. 2020-07-13 18:39:09 +03:00
Onuray Sahin
67e07a7932 Room action settings and leave icons changed. 2020-07-13 18:33:29 +03:00
Onuray Sahin
6ef15f3c1c ic_star icon changed. 2020-07-13 18:28:05 +03:00
Benoit Marty
0e3be83da2 Merge branch 'rebranding' of https://gitlab.matrix.org/new-vector/element/element-android into rebranding 2020-07-13 17:21:40 +02:00
Benoit Marty
8b5b7db241 Fix icons alignment issue 2020-07-13 17:21:33 +02:00
Onuray Sahin
1fd8a5fa91 Merge branch 'rebranding' of https://gitlab.matrix.org/new-vector/element/element-android into rebranding
* 'rebranding' of https://gitlab.matrix.org/new-vector/element/element-android:
  Icon: "Modular" -> "Element Matrix Services"
2020-07-13 18:11:45 +03:00
Onuray Sahin
34d7a86175 Update attachment and send icons. 2020-07-13 18:10:49 +03:00
Benoit Marty
21f1f89a4b Merge branch 'rebranding' of https://gitlab.matrix.org/new-vector/element/element-android into rebranding 2020-07-13 16:53:48 +02:00
Benoit Marty
159f286b2c Icon: "Modular" -> "Element Matrix Services" 2020-07-13 16:53:26 +02:00
Onuray Sahin
06454cc3e0 Sticker attachment icon changed. 2020-07-13 17:52:09 +03:00
Onuray Sahin
be27b580d6 ic_fab_add_chat icon changed. 2020-07-13 17:40:16 +03:00
Onuray Sahin
f91b6938f5 Remove stroke from shield icons. 2020-07-13 17:35:58 +03:00
Onuray Sahin
a7fea8d012 Relace eye and eye_closed icons. 2020-07-13 17:26:23 +03:00
Onuray Sahin
18bc40fb66 Design review fixes for login screen. 2020-07-13 17:01:48 +03:00
Benoit Marty
1dec4bc96b Wording: "Modular" -> "Element Matrix Services" 2020-07-13 15:49:46 +02:00
Benoit Marty
0e28214b63 Do not display the name change popup for a new installation 2020-07-13 14:23:06 +02:00
Benoit Marty
ca61751a8b Merge pull request #1678 from vector-im/feature/attachement_pager_fix
Fix / view attachment crash + freeze when offline
2020-07-13 11:33:11 +02:00
Benoit Marty
cce1c2252d Merge pull request #1681 from vector-im/feature/other_fixes
Video calls are shown as a voice ones in the timeline (Fixes #1676)
2020-07-13 11:31:38 +02:00
Benoit Marty
6a4d887941 Merge branch 'develop' into feature/other_fixes 2020-07-13 11:31:25 +02:00
Benoit Marty
4de1759321 Merge pull request #1680 from vector-im/feature/fix_create_room
Fix regression: not able to create a room without IS configured (Fixes #1679)
2020-07-13 11:30:47 +02:00
Benoit Marty
139cd051ab Video calls are shown as a voice ones in the timeline (Fixes #1676) 2020-07-13 10:57:52 +02:00
Benoit Marty
33b2abc3b9 Fix regression: not able to create a room without IS configured (Fixes #1679) 2020-07-13 10:46:51 +02:00
Valere
c63128cfbd Fix / view attachment crash + freeze when offline 2020-07-13 09:15:52 +02:00
Benoit Marty
5063188b25 Version++ 2020-07-11 23:00:16 +02:00
Benoit Marty
b9f0c176d9 Merge branch 'release/0.91.5' 2020-07-11 22:58:48 +02:00
Benoit Marty
d09c03bff3 Merge branch 'release/0.91.5' into develop 2020-07-11 22:58:47 +02:00
Benoit Marty
f444595845 Prepare release 0.91.5 2020-07-11 22:58:34 +02:00
Benoit Marty
eedf545409 Merge pull request #1658 from vector-im/feature/3pid_invite
3pid invite
2020-07-11 22:50:08 +02:00
Benoit Marty
aba8a3fed1 Fix test compilation issue 2020-07-11 22:49:29 +02:00
Benoit Marty
68d475dc55 Fix crash after rebase 2020-07-11 22:45:03 +02:00
Benoit Marty
ece9fbd3bb Add TODO 2020-07-11 22:26:21 +02:00
Benoit Marty
602d67155f Copy Javadoc to the API class 2020-07-11 22:25:21 +02:00
Benoit Marty
75ef491e3e Move internal methods to internal task 2020-07-11 22:22:21 +02:00
Benoit Marty
0f327fc75f Latest renaming 2020-07-11 22:17:55 +02:00
Benoit Marty
a456f4c6a5 Rename CreateRoomParamsInternalBuilder to CreateRoomBodyBuilder for clarity 2020-07-11 22:16:35 +02:00
Benoit Marty
e097bd8117 Rename CreateRoomParamsBuilder to CreateRoomParams for clarity 2020-07-11 22:15:26 +02:00
Benoit Marty
ded8acc836 Rename internal class 2020-07-11 22:13:22 +02:00
Benoit Marty
d8a0a1d38e Expose other objects in the builder to create a room 2020-07-11 22:11:15 +02:00
Benoit Marty
e8f28d7ce4 ktlint 2020-07-11 22:11:15 +02:00
Benoit Marty
a58bb776f3 Display threePid invite along with the other invite (code is a bit dirty) 2020-07-11 22:11:15 +02:00
Benoit Marty
4ba1a34f38 Hide right arrow if threepid invite can not be revoked 2020-07-11 22:11:15 +02:00
Benoit Marty
3d68b15e60 Disable fetching Msisdn, it does not work 2020-07-11 22:11:15 +02:00
Benoit Marty
c78bba803c Revoke ThreePid invitation (#548) 2020-07-11 22:11:15 +02:00
Benoit Marty
863c09142f Display three pid invites in the room members list (#548) 2020-07-11 22:11:15 +02:00
Benoit Marty
3142442e5c Load contacts much faster 2020-07-11 22:11:15 +02:00
Benoit Marty
4c1d50d554 Renames package and some other things 2020-07-11 22:11:15 +02:00
Benoit Marty
25e7bbcd79 Handle contacts permission 2020-07-11 22:10:52 +02:00
Benoit Marty
4b3a6a883d CreateRoomParams has been replaced by CreateRoomParamsBuilder, to be able to invite 3pids 2020-07-11 22:10:52 +02:00
Benoit Marty
6c0bb2a949 Add 3Pid to the list. Not compiling, I have to modify CreateRoomParam 2020-07-11 22:08:02 +02:00
Benoit Marty
f714566200 use projection to gain 25% of time 2020-07-11 22:08:02 +02:00
Benoit Marty
327a596de5 Move classes 2020-07-11 22:08:02 +02:00
Benoit Marty
cc4603b61f Rename classes 2020-07-11 22:08:02 +02:00
Benoit Marty
f51568b331 Fix a crash (#548) 2020-07-11 22:08:02 +02:00
Benoit Marty
6ceac578a3 Add checkbox to filter contacts with MatrixId only 2020-07-11 22:08:02 +02:00
Benoit Marty
1c733e6661 Display Contact list (#548)
WIP (#548)

WIP (#548)

WIP (#548)

WIP (#548)

WIP (#548)
2020-07-11 22:08:02 +02:00
Benoit Marty
3842ec6bb0 Invite by msisdn. Error 500 from matrix.org though (#548) 2020-07-11 22:07:14 +02:00
Benoit Marty
ab1d652f17 Invite by email (msisdn not working), command line (#548) 2020-07-11 22:07:14 +02:00
Benoit Marty
70e90d8542 Render third party invite event (#548) 2020-07-11 22:07:14 +02:00
Benoit Marty
39e185576c Merge pull request #1666 from vector-im/feature/tab_notification_labs
Feature/tab notification labs
2020-07-11 22:05:56 +02:00
Benoit Marty
9c402d4d40 Merge pull request #1665 from vector-im/feature/fix_small_issues
Feature/fix small issues
2020-07-11 21:58:11 +02:00
Benoit Marty
37378ca5a6 typo 2020-07-11 21:57:45 +02:00
Benoit Marty
a35749964c Merge branch 'develop' into feature/fix_small_issues 2020-07-11 21:56:07 +02:00
Valere
bbbd45efcd Fix / missing transparency on waiting view background 2020-07-11 20:46:47 +02:00
Valere
246f6bb0d0 update change log 2020-07-11 18:41:08 +02:00
Valere
a08a1d4f74 Merge pull request #1662 from vector-im/feature/manage_4s_setting
4S settings screen
2020-07-11 18:39:33 +02:00
Valere
7acbd42a45 Propose unread tab as a lab setting 2020-07-11 18:38:03 +02:00
Valere
c6a5d05ffb update change log 2020-07-11 17:29:22 +02:00
Valere
36b17e9b8c Fix / missing tint for recovery icon 2020-07-11 17:29:15 +02:00
ganfra
c2cccd8b11 Some changes after benoit's review 2020-07-11 15:26:54 +02:00
ganfra
e7804af2f7 EventInsertLiveObserver: change of delete method (should be faster) 2020-07-11 13:27:49 +02:00
ganfra
0412fabbd2 Clean comment on EventInsertLiveProcessor 2020-07-11 13:24:32 +02:00
Benoit Marty
22959cddb2 Pref is always visible and enabled 2020-07-11 13:24:10 +02:00
Benoit Marty
7193db8344 Try to improve readability 2020-07-11 13:19:43 +02:00
Benoit Marty
352662d19a Rename param 2020-07-11 13:13:44 +02:00
Benoit Marty
1afabb69c1 Cleanup pref 2020-07-11 13:13:08 +02:00
Benoit Marty
6f4ea83fa9 Create allKnown() fun 2020-07-11 13:03:53 +02:00
ganfra
1c17bd9f5a Clean code 2020-07-11 12:57:49 +02:00
Benoit Marty
de5f182f29 Move SecretsSynchronisationInfo to its file
And do some other cleanup
2020-07-11 12:57:20 +02:00
Benoit Marty
aa1843774a Cleanup 2020-07-11 12:50:16 +02:00
Benoit Marty
9e1c30ec5d No need to return the disposable, it is never used 2020-07-11 12:49:54 +02:00
Benoit Marty
31984a57d6 Subscribe to view model is already disposed 2020-07-11 12:46:10 +02:00
ganfra
2f0645a94e Fix left user has no name in db 2020-07-11 12:39:41 +02:00
Valere
c57d41863f 4S settings screen 2020-07-11 12:37:18 +02:00
Benoit Marty
25bbe9c3d6 Merge pull request #1661 from vector-im/feature/create_file_intent
Feature/create file intent
2020-07-11 12:28:15 +02:00
Benoit Marty
c5c3592a4c Merge branch 'develop' into feature/create_file_intent 2020-07-11 12:28:07 +02:00
Benoit Marty
5a8008a4dc Fix bug when restoring key backup with recovery key 2020-07-11 12:26:52 +02:00
Benoit Marty
2c5d2ea179 Improve wording 2020-07-11 12:26:47 +02:00
Benoit Marty
4387fd3327 We do not need write storage permission to create a Txt file with the intent Intent.ACTION_CREATE_DOCUMENT 2020-07-11 12:26:47 +02:00
ganfra
1f2d5b0d00 KeybackupBanner: remove unnecessary animation 2020-07-11 10:48:45 +02:00
ganfra
253582219c Remove EllipsizingTextView as it provokes more issue than it solves 2020-07-10 22:35:51 +02:00
ganfra
3fc9fe3017 Merge branch 'develop' into feature/fix_small_issues 2020-07-10 20:13:47 +02:00
ganfra
e07a584d66 Revert fixing users as it's not the good catch 2020-07-10 20:09:30 +02:00
ganfra
150d44aafd Improve a bit how joining/leaving are handled 2020-07-10 20:08:51 +02:00
Benoit Marty
179474b975 Cleanup 2020-07-10 17:51:57 +02:00
Benoit Marty
825e21362b Merge pull request #1546 from johnjohndoe/styledattributeset
Use Context#withStyledAttributes extension function.
2020-07-10 17:48:39 +02:00
Onuray Sahin
0bc51b2ed8 Change brand name in all strings for all languages. 2020-07-10 18:28:22 +03:00
Benoit Marty
4741169cc7 Merge pull request #1611 from vector-im/feature/okhttp_for_glide
Feature/okhttp for glide
2020-07-10 15:54:31 +02:00
Benoit Marty
a8ad57a9b0 Merge pull request #1648 from vector-im/feature/server_recovery_banner
Feature/server recovery banner
2020-07-10 15:53:58 +02:00
Valere
8582ad6015 Merge pull request #1636 from vector-im/feature/attachement_pager
Feature/attachement pager
2020-07-10 15:47:32 +02:00
Benoit Marty
51898a8109 Create new strings for change translations 2020-07-10 15:06:34 +02:00
Benoit Marty
d63f00851a Rename parameters 2020-07-10 14:43:14 +02:00
Benoit Marty
f179fc523d Give configured OkHttpClient to Glide and BigImageViewer 2020-07-10 14:43:07 +02:00
Benoit Marty
eda29e3fef Add link for WebRTC 2020-07-10 14:43:07 +02:00
Benoit Marty
633548f190 Create ImageManager to be able to (re-)configure the lib 2020-07-10 14:43:07 +02:00
Benoit Marty
811cbb2e20 ActiveSessionHolder to more things related to other @Singleton, and especially some missing cleanup
Such as calling `removeListener()` and `callSignalingService().removeCallListener()`
`Session.configureAndStart()` do less thing now
2020-07-10 14:43:07 +02:00
Benoit Marty
6569ee5d10 Use Set instead of List 2020-07-10 14:42:30 +02:00
Benoit Marty
5f60d7fd3b Session.configureAndStart now handle registering to webRtcPeerConnectionManager... 2020-07-10 14:42:30 +02:00
Benoit Marty
10f8aebde2 Update comment 2020-07-10 14:42:30 +02:00
Valere
ea771476cc Merge remote-tracking branch 'origin/feature/attachement_pager' into feature/attachement_pager 2020-07-10 14:39:22 +02:00
Valere
08bc487f17 klint 2020-07-10 14:39:08 +02:00
Valere
1b6b71ed98 Debounce clicks 2020-07-10 14:38:31 +02:00
Valere
9f2631110e Missing copyrights 2020-07-10 14:38:23 +02:00
Benoit Marty
e8b1e418fa ktlint 2020-07-10 14:37:57 +02:00
Valere
44563e73e2 Merge pull request #1655 from vector-im/feature/push_verif
Send verification request when the device is not new
2020-07-10 14:18:26 +02:00
Onuray Sahin
d3595173b4 Room notification settings icons changed. 2020-07-10 15:14:06 +03:00
Onuray Sahin
14d4b34cee Change event action icons. 2020-07-10 14:54:15 +03:00
Onuray Sahin
538149233b Change timeline call action icons. 2020-07-10 14:43:19 +03:00
Onuray Sahin
bcb203f8e0 Change settings icons. 2020-07-10 14:24:10 +03:00
Onuray Sahin
3c6937ff5a Change status bar icon. 2020-07-10 14:11:34 +03:00
Benoit Marty
6c0f775c4b Cleanup 2020-07-10 13:07:14 +02:00
Benoit Marty
ea3e467dc4 Format 2020-07-10 12:52:54 +02:00
Benoit Marty
5a65eddf59 Cleanup Navigator 2020-07-10 12:48:35 +02:00
Benoit Marty
e979bee920 Format 2020-07-10 12:38:20 +02:00
Benoit Marty
eff08955f1 Fix a11y 2020-07-10 12:37:48 +02:00
Onuray Sahin
9310073c07 Remove unused splash icons. 2020-07-10 13:21:30 +03:00
Benoit Marty
28869f4382 Small cleanup before merge 2020-07-10 12:19:25 +02:00
Onuray Sahin
cd949e9d38 Fix bottom sheet divider colors. 2020-07-10 13:11:23 +03:00
Onuray Sahin
541e1fc4cc Change file names with the new brand. 2020-07-10 13:11:01 +03:00
Onuray Sahin
93fe00a299 Merge branch 'develop' into rebranding_rebase
* develop: (123 commits)
  Fixes #1647 share not working
  Put xmx to 2048m
  Update changelog after PR merged
  Version++
  Prepare release 0.91.04-beta
  Add the new value to the ViewEvent, because the state is maybe not up to date.
  Fix lint error, following the upgrade of the libs
  Revert to gradle build 3.5.3
  Clean code
  Fix leaving selected group
  QuickFix / crash when  starting in airplane mode
  Group: rework a bit how and when we fetch data about groups
  EventInsert: add InsertType to avoid trying to process events we shouldn't
  Upload device keys only once to the homeserver and fix crash when no network (#1629)
  Upgrade some dependencies
  Add a delay to avoid crash. Sounds like a workaround...
  Handle certificate error in case of Direct Login
  Handle JobCancellationException
  Simplify the server selection screen: remove the "Continue" button
  Re-activate Wellknown support with updated UI (#1614)
  ...

# Conflicts:
#	vector/build.gradle
#	vector/src/main/res/values/strings.xml
2020-07-10 13:05:52 +03:00
ganfra
8814364497 Invite: we shouldn't be able to open room details 2020-07-10 11:32:28 +02:00
Onuray Sahin
0d9ff4bde3 Add branch name to login splash screen. 2020-07-10 12:04:48 +03:00
ganfra
9c595b6c02 Fix "Leave room only leaves the current version" 2020-07-10 08:54:41 +02:00
ganfra
d49d0295a2 Send verification request when the device is not new 2020-07-09 18:31:09 +02:00
ganfra
da7c971927 Fragments: use commitTransaction instead of commitNow 2020-07-09 17:46:59 +02:00
ganfra
548879bd9f Fix encryption enabling visible for all users 2020-07-09 17:20:51 +02:00
Valere
0c2516ccf8 line too long 2020-07-09 15:47:59 +02:00
Valere
332f227bc1 Signout to setup 4S 2020-07-09 15:45:58 +02:00
Valere
a98b2ecce3 Set server backup banner 2020-07-09 15:45:58 +02:00
Valere
195e2703b9 Support open from upload media tab 2020-07-09 15:22:34 +02:00
Onuray Sahin
c1f1620624 Disclaimer dialog is updated. 2020-07-09 15:17:17 +03:00
Onuray Sahin
f5284e8447 previously-riot url added to use in disclaimer dialog. 2020-07-09 15:15:27 +03:00
Onuray Sahin
347cf08861 Update settings urls. 2020-07-09 13:46:27 +03:00
Onuray Sahin
540317639a Change slogan. 2020-07-09 12:51:29 +03:00
Onuray Sahin
bdcd96544e Use bigger logo at loading screen. 2020-07-09 12:48:45 +03:00
Onuray Sahin
8237c949f1 Change logo in login screen. 2020-07-09 12:27:28 +03:00
Valere
e38cb7c1a6 Unwanted logs 2020-07-09 10:16:38 +02:00
Valere
868d9cf55c Cleaning (remove audio and file as not supported yet) 2020-07-09 10:11:10 +02:00
Valere
aa3e68f3fd Refactoring
Remove glide dependency + protect against cell reuse bugs
2020-07-09 10:08:55 +02:00
Valere
bf2d937ad6 Basic video seekTo support 2020-07-09 08:59:06 +02:00
Valere
e24d5b3ca4 Simple play/pause overlay 2020-07-08 22:58:27 +02:00
Valere
e9778d6feb Video stop/resume when paging or bg/fg 2020-07-08 22:41:17 +02:00
Valere
8c4c909f44 share action 2020-07-08 22:27:00 +02:00
Valere
a1db8653ab Basic Video Support 2020-07-08 20:09:55 +02:00
Valere
cc5df1e1d5 Update change log 2020-07-08 20:09:55 +02:00
Valere
87b1394e98 Code cleaning 2020-07-08 20:09:55 +02:00
Valere
e3c2af2c59 Code cleaning 2020-07-08 20:09:55 +02:00
Valere
a618a9214e Show hide overlay on tap 2020-07-08 20:09:55 +02:00
Valere
76133ab55e Simple overlay 2020-07-08 20:09:55 +02:00
Valere
2d4a728af4 Gif support 2020-07-08 20:09:55 +02:00
Valere
4a2a6d34ae Initial commit 2020-07-08 20:09:55 +02:00
ganfra
75c2dfcd48 Fix user data being affected by local room member event changes 2020-07-08 19:16:22 +02:00
ganfra
6ebedaf540 Update CHANGES 2020-07-08 17:40:37 +02:00
ganfra
85e8e652f1 Fix IM terms of review path 2020-07-08 17:32:54 +02:00
Onuray Sahin
f025811025 Change splash screen icons. 2020-07-08 17:54:51 +03:00
ganfra
3aabb17ea5 Fix timeline pagination when no displayable events 2020-07-08 15:51:00 +02:00
ganfra
f1e5129acb Merge pull request #1651 from vector-im/feature/quick_fix_sharing
Fixes #1647 share not working
2020-07-08 14:56:36 +02:00
ganfra
e8dbed1642 Fix relations on encrypted room 2020-07-08 14:51:15 +02:00
Onuray Sahin
6d270dc5f4 Fix background of bottom sheet generic item. 2020-07-08 13:52:56 +03:00
Onuray Sahin
2afe642e8b Use 48px icon instead of 44px. 2020-07-08 13:02:02 +03:00
Onuray Sahin
680e62cb98 Update application icons. 2020-07-08 12:55:15 +03:00
Valere
c5ba746904 Fixes #1647 share not working 2020-07-08 11:00:13 +02:00
Onuray Sahin
702711fc5e Fix drawer layout colors. 2020-07-08 10:58:24 +03:00
ganfra
0855806ae2 Fix edit being stuck 2020-07-07 22:14:11 +02:00
Benoit Marty
a2c75e7c71 Merge pull request #1640 from vector-im/mv/lower-xmx
Put xmx to 2048m
2020-07-07 14:51:38 +02:00
Mathieu Velten
6f996f1f09 Put xmx to 2048m 2020-07-07 14:23:59 +02:00
Onuray Sahin
ac7a929a1a Fix tint color of add icon. 2020-07-07 15:05:47 +03:00
Onuray Sahin
8313e45737 Use material add icon instead of png. 2020-07-07 13:28:06 +03:00
Onuray Sahin
09ca2361d7 Adjust colors and remove divider between notification settings and leave room action. 2020-07-07 13:12:24 +03:00
Benoit Marty
bcfd322b85 Update changelog after PR merged 2020-07-07 12:00:41 +02:00
Benoit Marty
9dc831d8e5 Merge pull request #1634 from vector-im/feature/db_clean_up
Feature/db clean up
2020-07-07 11:59:28 +02:00
Onuray Sahin
9514835232 Fix bottom sheet backgrounds. 2020-07-07 12:52:28 +03:00
Onuray Sahin
e93a2d7c5d UI review fixes. 2020-07-07 10:35:38 +03:00
Benoit Marty
b2f6476f78 Merge pull request #1631 from vector-im/feature/some_upgrade
Upgrade some dependencies
2020-07-06 23:38:48 +02:00
Benoit Marty
b7d86c3fa4 Merge branch 'develop' into feature/some_upgrade 2020-07-06 23:38:26 +02:00
Benoit Marty
89506b9e81 Version++ 2020-07-06 23:36:14 +02:00
Benoit Marty
51abdb6066 Merge branch 'release/0.91.4' 2020-07-06 23:31:28 +02:00
Benoit Marty
9e60f73bcf Merge branch 'release/0.91.4' into develop 2020-07-06 23:31:27 +02:00
Benoit Marty
1e6d98a121 Prepare release 0.91.04-beta 2020-07-06 23:31:03 +02:00
Benoit Marty
98d56cb556 Merge pull request #1630 from vector-im/feature/wellknown
Re-activate Wellknown support with updated UI (#1614)
2020-07-06 23:29:10 +02:00
Benoit Marty
8b1a07b8a8 Add the new value to the ViewEvent, because the state is maybe not up to date. 2020-07-06 23:05:42 +02:00
Benoit Marty
92e809fa6d Fix lint error, following the upgrade of the libs 2020-07-06 22:05:29 +02:00
Benoit Marty
a0998e4aff Revert to gradle build 3.5.3 2020-07-06 21:53:10 +02:00
Benoit Marty
804d712848 Merge pull request #1633 from vector-im/feature/keys_upload
Upload device keys only once to the homeserver and fix crash when no network (#1629)
2020-07-06 21:39:13 +02:00
ganfra
08cda2ee10 Merge develop into feature/db_clean_up 2020-07-06 19:18:42 +02:00
ganfra
bf03b367f1 Clean code 2020-07-06 19:12:24 +02:00
ganfra
c1da4aecd7 Fix leaving selected group 2020-07-06 19:09:08 +02:00
Valere
38c54e0f2c QuickFix / crash when starting in airplane mode 2020-07-06 18:51:39 +02:00
ganfra
9ebf87df62 Group: rework a bit how and when we fetch data about groups 2020-07-06 18:47:59 +02:00
ganfra
32d2cea7f8 EventInsert: add InsertType to avoid trying to process events we shouldn't 2020-07-06 18:38:30 +02:00
Benoit Marty
f998cb6b18 Upload device keys only once to the homeserver and fix crash when no network (#1629) 2020-07-06 17:12:47 +02:00
Benoit Marty
9d4e903c4a Upgrade some dependencies 2020-07-06 15:59:49 +02:00
Benoit Marty
cfdf5cb552 Add a delay to avoid crash. Sounds like a workaround... 2020-07-06 14:57:28 +02:00
Benoit Marty
e859357c6a Handle certificate error in case of Direct Login 2020-07-06 14:13:34 +02:00
Benoit Marty
e7f13c9efe Handle JobCancellationException 2020-07-06 14:12:56 +02:00
Benoit Marty
2a68c8d08b Simplify the server selection screen: remove the "Continue" button 2020-07-06 14:12:56 +02:00
Onuray Sahin
b1c088a03b Update new accent color. 2020-07-06 13:08:06 +03:00
Tobias Preuss
04f0146afd Use Context#withStyledAttributes extension function.
+ This function is more concise and ensures "recycle()" is always invoked.
+ Sources: https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-preference-release/core/core-ktx/src/main/java/androidx/core/content/Context.kt#52
2020-07-04 19:36:17 +02:00
Benoit Marty
92ecfafa0d Merge pull request #1608 from vector-im/feature/save_attachement_legacy
Fix / save media on old android
2020-07-04 12:16:59 +02:00
Benoit Marty
f74ab2dfd4 Merge branch 'develop' into feature/save_attachement_legacy 2020-07-04 12:16:50 +02:00
Benoit Marty
a1dc383148 Merge pull request #1610 from tulir/fix-reply-fallback
Fix reply fallback leaking sender locale
2020-07-04 12:15:29 +02:00
Benoit Marty
b853397c0a Re-activate Wellknown support with updated UI (#1614) 2020-07-04 12:10:17 +02:00
Benoit Marty
0cfd33fc8b Typo 2020-07-04 11:15:20 +02:00
Tulir Asokan
51e63c5d1d Remove unused reply fallback translations
Signed-off-by: Tulir Asokan <tulir@maunium.net>
2020-07-03 23:12:38 +03:00
Tulir Asokan
e9ba7342d5 Fix reply fallback format
Signed-off-by: Tulir Asokan <tulir@maunium.net>
2020-07-03 23:12:32 +03:00
ganfra
7434aed43f Use writeAsync for localEcho 2020-07-03 21:12:27 +02:00
ganfra
283f32479d Rebranch timeline + continue clean up strategy 2020-07-03 21:11:54 +02:00
Onuray Sahin
f4057ea3fa Fix background of drawer layout. 2020-07-03 14:50:33 +03:00
Onuray Sahin
a7480c1860 Change colors according to the new color palette. 2020-07-03 13:36:30 +03:00
Benoit Marty
c4ad90696f Update vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt 2020-07-03 12:28:38 +02:00
Benoit Marty
85ee183e4f Update vector/src/main/java/im/vector/riotx/features/home/room/detail/RoomDetailFragment.kt 2020-07-03 12:28:32 +02:00
Benoit Marty
586b0fe6e2 Merge pull request #1602 from vector-im/feature/work_manager_init
Work manager init
2020-07-03 12:04:53 +02:00
Valere
bdfce35d9a Fix / save media on old android
+ add numbers to file if needed
2020-07-03 10:32:07 +02:00
ganfra
3648d6292a Merge branch 'develop' into feature/db_clean_up 2020-07-03 10:21:48 +02:00
Benoit Marty
b8f88d323d Merge pull request #1604 from vector-im/feature/fix_crash_notification
Feature/fix crash notification
2020-07-03 00:23:31 +02:00
Benoit Marty
b8f66a36d5 Merge branch 'develop' into feature/fix_crash_notification 2020-07-03 00:23:21 +02:00
Benoit Marty
d4050a7b9d Due to a bug introduced in Android gradle plugin 3.6.0, we have to specify the ndk version to use 2020-07-02 23:39:42 +02:00
Benoit Marty
bfb8b6203c Add proguard command (commented) 2020-07-02 22:02:42 +02:00
Benoit Marty
15223ecfe4 Update changelog with the recent change 2020-07-02 21:31:39 +02:00
Benoit Marty
e098b87d0a Update comment 2020-07-02 21:30:49 +02:00
Benoit Marty
e878821df2 Merge pull request #1605 from vector-im/feature/fix_db_migration_serialization
Feature/fix db migration serialization
2020-07-02 21:28:30 +02:00
Valere
596fcf94ba Fix / Serialization issues
Fixes  keybackup import failing and UTD of incoming messages
2020-07-02 19:26:05 +02:00
Onuray Sahin
332041e13b Move some of colors from attrs.xml to colors_riotx.xml 2020-07-02 19:29:45 +03:00
ganfra
5008bfd6a9 Update CHANGES 2020-07-02 16:17:00 +02:00
ganfra
2ef82f1b82 Use HomeActivity.newIntent to make sure we have args 2020-07-02 16:05:05 +02:00
ganfra
2f6b38eb39 Introduce EventInsertEntity to handle db updates 2020-07-02 15:33:06 +02:00
Valere
69eaf2695e FIx / inbound session bad migration 2020-07-02 14:08:09 +02:00
Benoit Marty
542d11d7f1 Upgrade build-tools from 3.5.3 to 3.6.6 and gradle from 5.4.1 to 5.6.4 2020-07-02 12:44:07 +02:00
Benoit Marty
1de819b0a3 Fix lint false-positive about WorkManger (#1012) 2020-07-02 12:21:23 +02:00
Benoit Marty
5713fa4f59 Clean code 2020-07-02 12:17:09 +02:00
Benoit Marty
93fb40f323 (re-)Enable abortOnError for lint
And fix a first issue (on unused code)
2020-07-02 11:29:00 +02:00
Benoit Marty
f4314ebdae Version++ 2020-07-01 21:58:58 +02:00
Benoit Marty
7b075f138d Merge branch 'release/0.91.3-beta' 2020-07-01 21:51:50 +02:00
Benoit Marty
c62a7c4051 Merge branch 'release/0.91.3-beta' into develop 2020-07-01 21:51:49 +02:00
Benoit Marty
3e97e03ccc Prepare release Riot.imX v0.91.3 for the beta channel 2020-07-01 21:51:30 +02:00
Onuray Sahin
74a3d7619b Handle permalink coming from the new domain. 2020-07-01 22:21:59 +03:00
Onuray Sahin
fc88892ee6 Update bottom navigation and room profile icons. 2020-07-01 22:21:06 +03:00
Benoit Marty
01e42838ef Merge pull request #1593 from vector-im/feature/fix_crash_on_shortcuts
Clear dynamic shortcuts when user logs out
2020-07-01 20:33:00 +02:00
Benoit Marty
192c6db03e Merge pull request #1592 from vector-im/feature/new_home
Catchup tab is removed temporarily (#1565)
2020-07-01 20:32:04 +02:00
Benoit Marty
a98bd0940f Merge branch 'develop' into feature/new_home 2020-07-01 20:31:55 +02:00
Benoit Marty
c0623726ae Clear dynamic shortcuts when user log out 2020-07-01 17:20:41 +02:00
Benoit Marty
ba8ec97f6a Merge pull request #1591 from vector-im/feature/other_fixes
Render room avatar change and other fixes
2020-07-01 16:27:42 +02:00
Benoit Marty
fb1c01c37c Catchup tab is removed temporarily (#1565)
Invites are displayed in the corresponding DM or Room tab
2020-07-01 16:15:06 +02:00
Benoit Marty
f8e35da533 Render room avatar change (#1319) 2020-07-01 14:52:37 +02:00
Benoit Marty
53053d8f4a Fix layout overlap issue (#1407) 2020-07-01 14:03:30 +02:00
Benoit Marty
9eab1acf1e Allow clear text communication (to use local synapse) 2020-07-01 13:55:34 +02:00
Onuray Sahin
7aa9f88ceb New string resources created by changing brand name. 2020-07-01 14:43:35 +03:00
Benoit Marty
310517ece4 Merge pull request #1588 from vector-im/feature/fixes_before_beta_release
Fix issue with not trusted certificate on API 24+
2020-07-01 13:33:29 +02:00
Benoit Marty
8adb36c7c4 Merge pull request #1587 from vector-im/feature/fix_sync
Sync: fix liveState not initialized and add method to get current sta…
2020-07-01 13:27:48 +02:00
Benoit Marty
057f6fdf26 Kotlin style 2020-07-01 12:15:58 +02:00
Benoit Marty
b8b79de91c PinnedTrustManager differ for API 24+ 2020-07-01 12:15:58 +02:00
Benoit Marty
f86fa6cb5d Avoid Exception if array is empty. 2020-07-01 12:15:58 +02:00
ganfra
693c980414 Clean code 2020-07-01 12:11:15 +02:00
ganfra
faeeec0e37 Sync: fix liveState not initialized and add method to get current state without livedata 2020-07-01 12:10:12 +02:00
ganfra
3db26bcae1 Merge develop into db_clean_up 2020-07-01 09:32:25 +02:00
ganfra
f0dbb92d76 Attempt to clean db [WIP] 2020-06-30 19:45:17 +02:00
Benoit Marty
73ce38c6a9 Merge pull request #1583 from vector-im/feature/fix_search_case
Fixes #1468 user search case
2020-06-30 19:16:48 +02:00
Benoit Marty
901cf15a79 Merge pull request #1536 from vector-im/feature/save_file
Improove file download
2020-06-30 19:15:31 +02:00
Benoit Marty
4e3a948513 Cleanup 2020-06-30 19:12:50 +02:00
Benoit Marty
1ed8ff8711 Do some cleanup 2020-06-30 19:06:48 +02:00
Valere
4b74c7320b update change log 2020-06-30 18:49:15 +02:00
Valere
7ed9f535e6 Fix / clear on detached 2020-06-30 18:48:51 +02:00
Valere
f5c1ad8f2a Fix / remember state and resend on rebind 2020-06-30 18:48:51 +02:00
Valere
174084a256 added download animation 2020-06-30 18:48:51 +02:00
Valere
1e718bb44f javadoc 2020-06-30 18:48:51 +02:00
Valere
f0fe10a11d klint 2020-06-30 18:48:51 +02:00
Valere
ae1da6b9f5 Namespacing of file service 2020-06-30 18:48:51 +02:00
Valere
04b6b3674d Also Clear download cache when clearing media 2020-06-30 18:48:51 +02:00
Valere
4254db5cc0 fix rebase 2020-06-30 18:48:51 +02:00
Valere
86e5a45621 Fix save notification 2020-06-30 18:48:51 +02:00
Valere
397d4f0be5 Fix upload + cleaning 2020-06-30 18:48:51 +02:00
Valere
01fdc6d1bb Avoid downloading same file several times 2020-06-30 18:48:51 +02:00
Valere
33698abfb2 Download and Open file securily 2020-06-30 18:48:51 +02:00
Valere
80e8cd4191 Downloaded (large?) files are truncated 2020-06-30 18:39:13 +02:00
Valere
2932e05851 Fixes #1468 user search case 2020-06-30 18:38:46 +02:00
Benoit Marty
19f16c9e56 Merge pull request #1570 from vector-im/feature/self_signed
Allow self-signed certificate (#1564)
2020-06-30 18:34:23 +02:00
Benoit Marty
cec5cd864c Remove legacy class, we do not need them for the migration
Migration tested again and OK
2020-06-30 18:27:39 +02:00
Benoit Marty
ba26aee54c Use OkHttpClient with certificate to download files, and to perform wellknown request, and to get terms 2020-06-30 18:27:39 +02:00
Benoit Marty
6721e33c7e cleanup 2020-06-30 18:25:36 +02:00
Benoit Marty
c14b226c92 Search only Kotlin long files 2020-06-30 18:25:36 +02:00
Benoit Marty
4bb804fbf7 Allow self-signed certificate (#1564)
Accepted fingerprint before the migration to RiotX should still work after the migration.
The dialog to trust the certificate is displayed during the login flow.
For the moment, it is not displayed if the certificate change on the server once the user is logged in. This use case will be handled later.
2020-06-30 18:25:36 +02:00
Benoit Marty
6cb82421e4 Merge pull request #1441 from vector-im/feature/MSC2399
Feature/msc2399
2020-06-30 18:20:27 +02:00
Benoit Marty
6e66c31911 Small cleanup 2020-06-30 18:07:39 +02:00
Valere
a1ce245e3a Disable utd merge by default, issue with back paginate 2020-06-30 17:36:24 +02:00
Valere
668967546c Fix / if listener is not removed messages could be duplicated 2020-06-30 17:36:24 +02:00
Valere
5bd448405b Fix test compilation 2020-06-30 17:36:24 +02:00
Valere
fe235e0791 ktlint 2020-06-30 17:36:24 +02:00
Valere
a9191b8fad klint 2020-06-30 17:36:24 +02:00
Valere
63499c2f48 Add test orchestrator dependency 2020-06-30 17:36:24 +02:00
Valere
3fa2647e92 Send with held code on key requests 2020-06-30 17:36:24 +02:00
Valere
cdb1b8d8f8 post merge fix 2020-06-30 17:36:24 +02:00
Valere
c7c35399e5 post rebase 2020-06-30 17:36:24 +02:00
Valere
102b8f88d0 Persist shared session info (enhance key reshare) 2020-06-30 17:36:24 +02:00
Valere
4ca0c23e2a Mock Http requests for test 2020-06-30 17:36:24 +02:00
Valere
36de891451 E2e lab error display 2020-06-30 17:36:24 +02:00
Valere
f9d931960b rename param 2020-06-30 17:35:24 +02:00
Valere
dbe78f160b WithHeld key support initial commit 2020-06-30 17:35:24 +02:00
Benoit Marty
a6f4cd74d5 Merge pull request #1569 from vector-im/feature/fix_improve_epoxy
Feature/fix improve epoxy
2020-06-30 17:28:34 +02:00
Benoit Marty
87a087c0b5 Merge pull request #1464 from vector-im/feature/room_settings
Room Settings: Name, Topic, Photo, Aliases, History Visibility
2020-06-30 16:33:07 +02:00
Benoit Marty
962e11a740 Onuray's remark :) 2020-06-30 16:31:37 +02:00
Benoit Marty
e658ef184d Fix issue with save action visibility 2020-06-30 16:18:56 +02:00
Benoit Marty
da472ea858 Use name instead of computed displayName 2020-06-30 16:10:27 +02:00
Benoit Marty
ff0b92272a Create RoomHistoryVisibilityFormatter 2020-06-30 16:01:07 +02:00
Benoit Marty
cca6d0e967 Cleanup 2020-06-30 15:52:40 +02:00
onurays
e0ea0c195b Hide save action after saving completed. 2020-06-30 14:23:57 +02:00
onurays
b3d4d20195 Check permission before trying to reach Camera. 2020-06-30 14:23:57 +02:00
onurays
5f788d962e Use AlertDialog from v7 compat lib. 2020-06-30 14:23:57 +02:00
onurays
2650453d4b Add room alias first before setting the canonical alias. 2020-06-30 14:23:57 +02:00
onurays
4d6ba5a491 Check permission before triggering history readability click action. 2020-06-30 14:23:57 +02:00
onurays
32721caf5a Code review fix. 2020-06-30 14:23:57 +02:00
onurays
ad084e1fec Use simple dialog for avatar selection. 2020-06-30 14:23:57 +02:00
onurays
512e4f0ce3 Create UCropHelper with default settings. 2020-06-30 14:23:57 +02:00
onurays
56f8e52352 Simplify uploading room and user avatar. 2020-06-30 14:23:57 +02:00
onurays
a93cbf3548 Lint fix. 2020-06-30 14:23:57 +02:00
onurays
e0e4cf3df1 Code review fixes. 2020-06-30 14:23:57 +02:00
onurays
16bd642ae8 Implementation of updating user avatar.
Fixes #1054
2020-06-30 14:23:57 +02:00
onurays
a03f69fb98 Check if user has enough power level to change room avatar. 2020-06-30 14:22:24 +02:00
onurays
8787f5d920 Remove room avatar item from room settings. 2020-06-30 14:22:24 +02:00
onurays
ef1ae4105b Change room avatar in BigImageViewer. 2020-06-30 14:22:24 +02:00
onurays
7f2ce91c82 Add camera and gallery options to set room avatar. 2020-06-30 14:22:24 +02:00
onurays
1f30cf468a Check if user have enough power level to change settings. 2020-06-30 14:22:24 +02:00
onurays
762dd1d0a5 Implementation of canonical alias. 2020-06-30 14:22:24 +02:00
onurays
f5790e5dc2 Implementation of room history readability. 2020-06-30 14:22:24 +02:00
onurays
e1a12f4c77 Show current history readability. 2020-06-30 14:22:24 +02:00
onurays
52eec06110 Updating room avatar is implemented. 2020-06-30 14:22:24 +02:00
onurays
a6e4a328b3 Chain all operations to save settings. 2020-06-30 14:17:19 +02:00
onurays
bfebaa5c6c Show/hide save action button dynamically. 2020-06-30 14:17:19 +02:00
onurays
05e848244e Room name and topic fields added to form. 2020-06-30 14:17:19 +02:00
Onuray Sahin
08710978c5 Change the rageshake tag. 2020-06-30 15:02:37 +03:00
Onuray Sahin
cba9109206 Rename the application. 2020-06-30 14:52:50 +03:00
Onuray Sahin
482621e86f Set versionName to 1.0.0 2020-06-30 14:34:02 +03:00
Valere
c23819bfcf Merge pull request #1489 from vector-im/feature/cross_sigining_evol
Feature/cross sigining evol
2020-06-29 17:27:25 +02:00
Valere
b0034f91b0 code cleaning 2020-06-29 16:37:22 +02:00
Valere
caa7709090 Fix copy of cancel bootstrap 2020-06-29 16:37:22 +02:00
Valere
51b7a0aeae Fix / device change detection broken 2020-06-29 16:37:22 +02:00
Valere
51228a3a5c Fix / settings showing bad options when xsigning not init 2020-06-29 16:37:22 +02:00
Valere
5c091339f0 Fix / bootstrap crosssigning only was not supported 2020-06-29 16:37:22 +02:00
Valere
6643923981 Fix/ pass not save in reauth after login 2020-06-29 16:37:22 +02:00
Valere
4ce2478e44 Fix 404 when uploading xsigning keys
Own device keys was not yet uploaded, now it's done on session open . + added some cleaning of legacy things
2020-06-29 16:37:22 +02:00
Benoit Marty
6131c10d31 Show a more appropriate error when user enter a wrong backup passphrase 2020-06-29 16:36:32 +02:00
Benoit Marty
8c5ec2c57f Restore color for the second phrase 2020-06-29 16:36:32 +02:00
Benoit Marty
e046d17bf2 Remove colored part, as user think they are links. 2020-06-29 16:36:32 +02:00
Benoit Marty
8e7166662b Handle back navigation Recovery backup -> Firstform
Also create BootstrapStep.GetBackupSecretForMigration.useKey() to reduce code duplication
2020-06-29 16:36:32 +02:00
Benoit Marty
3aaa425714 Handle back navigation SetupPassphrase -> Firstform 2020-06-29 16:36:32 +02:00
Benoit Marty
a66010a1d8 Create isCrossSigningInitialized(). Do not display the conclusion Fragment anymore 2020-06-29 16:36:32 +02:00
Benoit Marty
e9706a3b64 Update UI 2020-06-29 16:36:32 +02:00
Benoit Marty
a6e61f4de8 Add link 2020-06-29 16:36:32 +02:00
Benoit Marty
e758ede706 Revert "Remove BootstrapStep.SetupPassphrase and BootstrapStep.ConfirmPassphrase"
This reverts commit 23fa44b6a6a6d34b425e2c1adef4fd2beb9800a7.
2020-06-29 16:36:32 +02:00
Benoit Marty
957fe189dc Fix issue in dark theme and a11y 2020-06-29 16:36:32 +02:00
Benoit Marty
12a4f6f05b Create isRecoverySetup() 2020-06-29 16:36:32 +02:00
Benoit Marty
bcd78a96bf Add FIXME 2020-06-29 16:36:32 +02:00
Benoit Marty
f3b464b88a Bootstrap: Add an introduction step: BootstrapSetupRecoveryKeyFragment 2020-06-29 16:36:32 +02:00
Benoit Marty
369f40c804 Remove developer mode option to set up cross-signing 2020-06-29 16:36:32 +02:00
Benoit Marty
bddd7f4005 Use defined model (tested ok) 2020-06-29 16:36:32 +02:00
Benoit Marty
5434c39453 Change 2020-06-29 16:36:32 +02:00
Benoit Marty
e4ac28877c Ask user password to initialize CrossSigning
And migrate some logic to the ViewModel
2020-06-29 16:36:19 +02:00
Benoit Marty
8df7797f6d Remove BootstrapStep.SetupPassphrase and BootstrapStep.ConfirmPassphrase 2020-06-29 16:36:19 +02:00
Benoit Marty
aa2b62976e Fix bad comment 2020-06-29 16:36:19 +02:00
Benoit Marty
e3dc6e307f Gossip MSK 2020-06-29 16:36:19 +02:00
Benoit Marty
48a30a7b82 Create a ViewState for HomeActivity
And disable the popup - WIP
2020-06-29 16:36:19 +02:00
Benoit Marty
1365240f69 Cleanup 2020-06-29 16:36:19 +02:00
Benoit Marty
1cd27d7f67 First commit to cleanup ReAuthHelper and it's usage
Also add some comment and do some other cleanup
2020-06-29 16:36:19 +02:00
ganfra
84c8f9d351 Clean code 2020-06-29 16:08:45 +02:00
ganfra
7e703e4788 Epoxy: optimize some hashcode in timeline 2020-06-29 15:05:21 +02:00
Benoit Marty
fb13b402af Prevent from importing temporary legacy classes 2020-06-29 14:22:30 +02:00
Benoit Marty
e599abc6ba Merge pull request #1554 from vector-im/feature/op
Feature/op
2020-06-29 14:10:01 +02:00
Benoit Marty
5784c4c8b3 Merge pull request #1527 from vector-im/feature/migration_from_legacy
Feature/migration from legacy
2020-06-29 14:08:53 +02:00
Benoit Marty
cec79fed44 Mutualize code 2020-06-29 11:00:40 +02:00
Benoit Marty
31a7563de5 Make check code quality ok 2020-06-29 10:16:54 +02:00
Benoit Marty
0ad2058a1a Prepare version 0.91.2-beta 2020-06-28 23:05:47 +02:00
Benoit Marty
44365d70fe Add proguard rule for WebRTC 2020-06-28 23:04:30 +02:00
Benoit Marty
bbf0b1e3ba Add a way to ensure we have @JsonClass(generateAdapter = false) for enum class.
This is not ideal, but this will save us in the future.
2020-06-28 22:06:03 +02:00
ganfra
8972319a85 Handle typing through RoomSummaryMapper + fix room summary binding called too many times 2020-06-27 18:26:14 +02:00
Benoit Marty
85f713c8c7 Add missing @JsonClass(generateAdapter = false) for Proguard 2020-06-27 11:52:47 +02:00
Benoit Marty
6e020cada2 Min SDK version is now 21, it has been forgotten to change that. 2020-06-27 11:24:28 +02:00
Benoit Marty
d436a7bad7 Increment version patch for a new release on the PlayStore 2020-06-27 00:14:32 +02:00
Benoit Marty
16a275529d Use temporary name Riot.imX 2020-06-27 00:14:32 +02:00
Benoit Marty
0ad493d860 Comment out android.permission.READ_CALL_LOG 2020-06-26 23:48:41 +02:00
Benoit Marty
30774957ba Handle /nick command (#12) 2020-06-26 23:40:23 +02:00
Benoit Marty
8a1a772ab7 Handle /op and /deop commands (#12)
Also when resetting power level, remove from list of user instead of setting the default value.
2020-06-26 23:31:19 +02:00
Benoit Marty
0d9a10f5fa Fix test compilation 2020-06-26 21:33:47 +02:00
Benoit Marty
1c9907c5d2 Do not abort on error during lint check. 2020-06-26 21:08:41 +02:00
Benoit Marty
050530a991 ktlint 2020-06-26 16:19:05 +02:00
Benoit Marty
f984cff5b4 Auto review 2020-06-26 16:19:05 +02:00
Benoit Marty
ad7297c7e3 CryptoStore migration: step5: convert serialized classes to other classes
legacy MXDeviceInfo and MXOlmInboundGroupSession2
2020-06-26 16:19:05 +02:00
Benoit Marty
17d90a32e1 CryptoStore migration: step4: clear files and prefs 2020-06-26 16:19:05 +02:00
Benoit Marty
89a20eafd8 CryptoStore migration: step3: copy DB and encrypt DB 2020-06-26 16:19:05 +02:00
Benoit Marty
a2be821d2f CryptoStore migration: step2: handle migration to RiotX (not tested) 2020-06-26 16:19:05 +02:00
Benoit Marty
39022b3b66 CryptoStore migration: step1: import migration from Riot-Android (not tested) 2020-06-26 16:19:05 +02:00
Benoit Marty
fe8f79698c Improve code 2020-06-26 16:19:05 +02:00
Benoit Marty
a0a8f95d37 Create LegacySessionImporter class and import credentials - tested OK 2020-06-26 16:19:05 +02:00
Benoit Marty
7247b4471a Import a fix from Riot-android 2020-06-26 16:19:05 +02:00
Benoit Marty
6bce62a598 Update version code to 40_091_00x to upgrade Riot-Android 2020-06-26 16:19:05 +02:00
Benoit Marty
629c73e630 Change applicationId from "im.vector.riotx" to "im.vector.app" 2020-06-26 16:19:05 +02:00
Benoit Marty
fb0d262336 Merge pull request #1510 from vector-im/feature/keys_backup_unstable
Fixes issue from timokoesters and do some cleanup
2020-06-26 15:55:40 +02:00
Benoit Marty
28df09a8d4 ktlint 2020-06-26 15:54:50 +02:00
Benoit Marty
2e93b7c4c9 Auto-review 2020-06-26 15:54:50 +02:00
Benoit Marty
4125baf066 Some more cleanup on the model used to download and to upload keys 2020-06-26 15:54:50 +02:00
Benoit Marty
1fb2569a39 Remove deviceId from /keys/upload/{deviceId} as not spec-compliant (#1502)
FTR: 1b6a74fd93
2020-06-26 15:54:50 +02:00
Benoit Marty
19ed5a2d3d Keys Backup API now use the unstable prefix (#1503) 2020-06-26 15:54:50 +02:00
Valere
84272f5b5d Merge pull request #1534 from vector-im/feature/fix_agelocalts_paginate
Pagination do not set ageLocalTs
2020-06-26 14:40:09 +02:00
Onuray Sahin
90804f7625 Merge pull request #1547 from vector-im/feature/fix_compress_images
Compress images before sending
2020-06-26 15:12:27 +03:00
onurays
824dafb525 ktlint fix. 2020-06-26 14:48:10 +03:00
onurays
3fcf77e214 Lint fix. 2020-06-26 14:10:49 +03:00
onurays
c5d2a34ebd Documentation added to explain creating a cache file. 2020-06-26 12:58:41 +03:00
Valere
a04a0e7175 Code review 2020-06-26 09:20:03 +02:00
Valere
9aa0d38116 Pagination do not set ageLocalTs 2020-06-26 09:19:55 +02:00
ganfra
f8452429a4 Merge pull request #1504 from vector-im/feature/improve_perf
Feature/improve perf
2020-06-25 17:00:56 +02:00
onurays
4349331ee7 Support compressing images on Android 10 and above. 2020-06-25 16:14:54 +03:00
ganfra
1d3dbdf989 Remove unecessary code 2020-06-25 12:20:55 +02:00
ganfra
60c873aa66 Clean code 2020-06-25 12:12:50 +02:00
Benoit Marty
674fa0e5ce Fix bug when changing display name twice
And delete the static summary
2020-06-25 11:59:11 +02:00
ganfra
f28e3ca504 Merge branch 'develop' into feature/improve_perf 2020-06-25 10:57:46 +02:00
onurays
96d6a72b97 Compress images before sending (for devices below Android 10).
Fixes #1333
2020-06-25 10:09:08 +03:00
Benoit Marty
7b3fa501c6 Merge pull request #1545 from johnjohndoe/sharedpreferences
Use SharedPreferences#edit extension function consistently.
2020-06-24 21:47:07 +02:00
Benoit Marty
16dbcc43b0 Merge pull request #1544 from vector-im/feature/fix_1543
User could not redact messages that he has sent (#1543)
2020-06-24 21:24:34 +02:00
Benoit Marty
c0c300925d Merge branch 'develop' into feature/fix_1543 2020-06-24 21:24:25 +02:00
ganfra
0a02a08ed4 Merge pull request #1508 from vector-im/feature/fix_widget
Feature/fix widget
2020-06-24 17:56:32 +02:00
ganfra
95c05f6107 Refact some more code 2020-06-24 17:05:00 +02:00
Tobias Preuss
e24785015d Use SharedPreferences#edit extension function consistently.
+ Add "androidx.core:core-ktx:1.1.0" to "matrix-sdk-android" module which
  was already used in "vector" module.
+ Sources: https://android.googlesource.com/platform/frameworks/support/+/refs/heads/androidx-preference-release/core/core-ktx/src/main/java/androidx/core/content/SharedPreferences.kt.
2020-06-24 15:40:00 +02:00
ganfra
554c37febe Merge branch 'develop' into feature/fix_widget 2020-06-24 15:14:26 +02:00
Benoit Marty
dbb9dc4458 Merge pull request #1541 from johnjohndoe/random-housekeeping
Random housekeeping indicated by Lint
2020-06-24 14:56:23 +02:00
Benoit Marty
c6dba21212 Merge pull request #1542 from vector-im/feature/fix_1537
Use vendor prefix for non merged MSC (#1537)
2020-06-24 14:50:37 +02:00
Benoit Marty
94b5e4e2f8 User could not redact messages that he has sent (#1543) 2020-06-24 14:21:45 +02:00
Benoit Marty
0d891b1c93 Use vendor prefix for non merged MSC (#1537) 2020-06-24 14:10:24 +02:00
Tobias Preuss
2f77deb0a8 Fix package name. 2020-06-24 10:58:47 +02:00
Tobias Preuss
fa0adb17b8 Use "when" subject. 2020-06-24 10:04:50 +02:00
Tobias Preuss
36bd2290e9 Use Kotlin math functions. 2020-06-23 18:31:16 +02:00
Tobias Preuss
372a5ba1ec Use "isNotEmpty" convenience function. 2020-06-23 18:29:24 +02:00
Tobias Preuss
25f45da195 Use indexing operator. 2020-06-23 18:25:37 +02:00
Tobias Preuss
9d191a783d Let variables be "val" if possible. 2020-06-23 18:23:39 +02:00
Tobias Preuss
0dc3593660 Use property access syntax. 2020-06-23 18:22:58 +02:00
Tobias Preuss
f609cc7042 Simplify loop and when statement. 2020-06-23 18:19:58 +02:00
ganfra
360666a758 Creates SessionLifecycleObserver 2020-06-23 15:12:25 +02:00
Benoit Marty
3f44056243 Merge pull request #1526 from johnjohndoe/retrofit2-call-awaitresponse
Use retrofit2.Call.awaitResponse extension provided by Retrofit 2.
2020-06-23 13:53:27 +02:00
Benoit Marty
d075cbf69b Merge pull request #1530 from vector-im/feature/display_name
Add capability to change the display name (#1529)
2020-06-23 13:52:51 +02:00
ganfra
6b13c00d56 Database: add @SessionDatabase on monarchy instances 2020-06-23 13:18:07 +02:00
ganfra
6e95c6c200 Fix in memory local echo filtering 2020-06-23 12:23:23 +02:00
Benoit Marty
35fed2676a Cleanup after Onuray's review and improve wording when removing display name 2020-06-23 11:21:00 +02:00
Benoit Marty
9754e26e5f Add capability to change the display name (#1529) 2020-06-22 20:50:31 +02:00
Benoit Marty
af9295723c Merge pull request #1528 from vector-im/feature/tabs_design
Update room category as per design
2020-06-22 17:39:45 +02:00
Valere
55993aff04 Merge pull request #1416 from vector-im/feature/voip
Call support with WebRTC
2020-06-22 17:23:22 +02:00
Tobias Preuss
66c5a35f36 Use retrofit2.Call.awaitResponse extension provided by Retrofit 2.
+ This extension is identical to the one used in this project and is
  available since Retrofit 2.6.0.
  See b761518aa1.
2020-06-22 17:04:37 +02:00
Valere
c1260dcb9b Update room category as per design 2020-06-22 17:01:15 +02:00
Benoit Marty
f4e7405d92 Cleanup 2020-06-22 16:21:36 +02:00
Benoit Marty
c15cc34bfd Call: a11y 2020-06-22 16:15:15 +02:00
Benoit Marty
16f32da647 Cleanup during review. 2020-06-22 16:15:15 +02:00
Valere
4c34d73501 Fix / connection lost timer launched abusively 2020-06-22 15:10:50 +02:00
Benoit Marty
df1bd62f47 Merge pull request #1512 from johnjohndoe/patch-1
Fix minor typo in contribution guide.
2020-06-22 14:12:08 +02:00
Benoit Marty
3ced179fbb Merge branch 'develop' into patch-1 2020-06-22 14:11:50 +02:00
Benoit Marty
957ceff87c Merge pull request #1520 from johnjohndoe/random-housekeeping
Random housekeeping indicated by Lint
2020-06-22 14:11:08 +02:00
Tobias Preuss
85fcc2eab7 Fix minor typo.
+ Fix spelling of "remaining".
2020-06-22 12:25:34 +02:00
Tobias Preuss
e7143b53d5 Fix self-assignment of callback. 2020-06-22 12:08:49 +02:00
Tobias Preuss
b728e10616 Removed unneeded conversion. 2020-06-22 12:08:49 +02:00
Tobias Preuss
8ffa0061e9 Remove unneeded qualifier for constant. 2020-06-22 12:08:49 +02:00
Tobias Preuss
b767c2fa54 Let variable be "val" if possible. 2020-06-22 12:08:49 +02:00
Tobias Preuss
aeb41bc516 Remove redundant "public" qualifier. 2020-06-22 12:08:49 +02:00
Tobias Preuss
178bdff62a Use string template syntax. 2020-06-22 12:08:49 +02:00
Tobias Preuss
3e79da6a79 Infer type. 2020-06-22 12:08:49 +02:00
ganfra
f762c4c7a2 Makes sure bind and unbind are calling super in items 2020-06-22 11:19:53 +02:00
ganfra
8de0bdca93 Merge branch 'develop' into feature/fix_widget 2020-06-22 10:21:39 +02:00
Valere
ef2fcd60d7 code cleaning 2020-06-22 09:54:45 +02:00
Benoit Marty
55b61775e8 Merge pull request #1514 from 532910/local_resources
put F-Droid and GPlay badges locally
2020-06-22 09:50:54 +02:00
Valere
07e57b1498 clean 2020-06-22 09:48:01 +02:00
Benoit Marty
b522c9f62f Merge pull request #1513 from huoxiaoyao/configure_os_independent
Minor dev setup improvement for Linux/Windows.
2020-06-22 09:47:37 +02:00
Valere
04a7c57d64 Fix / false detection of bt headset + restore state after call 2020-06-22 09:47:34 +02:00
Benoit Marty
367da0c78f Merge pull request #1523 from vector-im/feature/fix_1519
Feature/fix 1519
2020-06-22 09:42:47 +02:00
Benoit Marty
057c21f7d0 Incomplete predicate in RealmCryptoStore#getOutgoingRoomKeyRequest (#1519) 2020-06-22 09:17:37 +02:00
Benoit Marty
af8ab57e60 Rename methods and variables for code clarity 2020-06-22 09:14:59 +02:00
Sergio E. Nemirowski
409b6b807e put F-Droid and GPlay badges locally
this adds images for F-Droid and GPlay buttons for README.md

Signed-off-by: Sergio E. Nemirowski <sergio@outerface.net>
2020-06-20 19:42:31 +03:00
fabianu
4a454f0817 Added ANDROID_STUDIO as optional variable to specify android studio location. 2020-06-20 17:03:10 +02:00
Valere
6b806922ee Fix / prevent camera switch if no second camera 2020-06-20 09:50:32 +02:00
Valere
64a67b57b8 Fix / android 7 unlock screen on incoming call 2020-06-20 09:49:56 +02:00
Valere
76bcf9dcf7 Fix / activeCallPipInitialized not correctly initialized 2020-06-20 09:24:05 +02:00
ganfra
234dfa18d3 Widgets: fix some issues with navigation 2020-06-19 20:38:30 +02:00
ganfra
ba0823f4d0 Widget: fix terms not presented 2020-06-19 20:35:29 +02:00
Valere
9d401512d3 dead code 2020-06-19 19:06:25 +02:00
Valere
464e99505b Update change log 2020-06-19 18:57:50 +02:00
Valere
17cf3fd7ad Active call (with PIP) , in Room and Home 2020-06-19 18:54:39 +02:00
Valere
60998c9146 Missing release of webrtc surfaces 2020-06-19 17:34:05 +02:00
Valere
bd19225219 Add connection loader 2020-06-19 15:20:26 +02:00
Valere
2868d62185 hang up menu action 2020-06-19 15:20:10 +02:00
Valere
2a3d20d300 FIx rebase 2020-06-19 13:42:35 +02:00
Valere
30dee07a3b Hide switch camera for voice call 2020-06-19 13:37:12 +02:00
Valere
96ecb1d07e Fix Crash / stop capture in wrong thread 2020-06-19 13:37:12 +02:00
Valere
99056a7807 Fix / inversed icons HD/SD 2020-06-19 13:37:12 +02:00
Valere
374790176f Toggle HD/SD 2020-06-19 13:37:12 +02:00
Valere
f3e2a55869 Crash Fix / nullify factory after dispose 2020-06-19 13:37:12 +02:00
Valere
666f3ea152 code quality 2020-06-19 13:37:12 +02:00
Valere
25fe56116c Ask for permission before starting call 2020-06-19 13:37:12 +02:00
Valere
b27eead016 Support toggle front/back camera 2020-06-19 13:36:42 +02:00
Valere
77a01f0cd4 lazy create and destroy peer connection factory 2020-06-19 13:36:42 +02:00
Valere
5dfa08ace6 Bluetooth headset support 2020-06-19 13:36:42 +02:00
Valere
4c61dfef62 Support headset buttons in background 2020-06-19 13:36:42 +02:00
Valere
9653f082a3 accept/hangup on press on headset button 2020-06-19 13:36:42 +02:00
Valere
3e2d892fb5 Headset support
+ detect plug/unplugg
2020-06-19 13:36:42 +02:00
Valere
30d47b4fa6 Clear incoming calls managed by other session 2020-06-19 13:36:42 +02:00
Valere
fd3f591541 Show error on connecting timeout + refactoring 2020-06-19 13:36:42 +02:00
Valere
c85ba51274 Basic discard of old call events 2020-06-19 13:36:42 +02:00
Valere
843da1d48d Incoming notification + ringing 2020-06-19 13:36:42 +02:00
Valere
d8cf44fdc9 Simple cache of turn server response
in memory cache in service + show active call banner only if connected
2020-06-19 13:36:42 +02:00
Valere
8662797cf8 Restart capture after close for older android 2020-06-19 13:36:42 +02:00
Valere
eabb0bb41d Restart capture when camera is back to available 2020-06-19 13:36:42 +02:00
Valere
4966bef9c3 Quick signaling doc 2020-06-19 13:36:42 +02:00
Valere
0f625c27a1 Simple menu to select sound device 2020-06-19 13:36:42 +02:00
Valere
248b9ff1e1 Very basic audio speaker support 2020-06-19 13:36:42 +02:00
Valere
39f3a1c697 Fix glitch when opening timeline first time 2020-06-19 13:36:42 +02:00
Valere
c6100fc26c Code cleaning 2020-06-19 13:36:42 +02:00
Valere
84b474d070 klint 2020-06-19 13:36:42 +02:00
Valere
c4b977c6e1 Basic return to call Ux in Room detail 2020-06-19 13:36:42 +02:00
Valere
a1907aaddb Cleaning call states 2020-06-19 13:36:16 +02:00
Valere
56ed56a986 let remote view resize with aspect ratio 2020-06-19 13:36:16 +02:00
Valere
91f28bfb8a basic toggle mute and toggle video 2020-06-19 13:36:16 +02:00
Valere
46d7db8214 klint 2020-06-19 13:36:16 +02:00
Valere
b5cdb44642 Fix rebase 2020-06-19 13:36:16 +02:00
Valere
cb964c6dcd dead code 2020-06-19 13:36:16 +02:00
Valere
e79a4771c1 revert test code 2020-06-19 13:36:16 +02:00
Valere
9006acb66a WIP | Avoid re-negociation pre-agree-upon signaling/negotiation. 2020-06-19 13:36:16 +02:00
onurays
435a6b2f1a Add ice candidates to peer connection. 2020-06-19 13:36:16 +02:00
onurays
4d288ddd55 Require turn server before creating PeerConnection. 2020-06-19 13:36:16 +02:00
onurays
24cea5110e Show / hide call views according to call type. 2020-06-19 13:36:16 +02:00
onurays
79f804b2d4 Use single sdp and stream observer. 2020-06-19 13:36:16 +02:00
onurays
4b85e39e3e Implementation of turn server api. 2020-06-19 13:36:16 +02:00
onurays
8f5918de4d Cleanup unused code. 2020-06-19 13:36:16 +02:00
Benoit Marty
ae762aa928 Cleanup 2020-06-19 13:36:16 +02:00
Benoit Marty
928da82dde Make menu item live 2020-06-19 13:36:16 +02:00
Benoit Marty
94ea857738 Fix icons tint, esp in dark theme 2020-06-19 13:36:03 +02:00
Benoit Marty
0bb92e9e91 Hide m.call.candidates in the timeline by default.
And handle them correctly when all events are displayed
2020-06-19 13:36:03 +02:00
Benoit Marty
df4aab1d73 Use EventType.isCallEvent() 2020-06-19 13:36:03 +02:00
Benoit Marty
d3f93984d4 Compact coding 2020-06-19 13:36:03 +02:00
Benoit Marty
125d61eb68 Rename parameters 2020-06-19 13:36:03 +02:00
onurays
c0988ba6d9 Merge conflicts and implement answer function. 2020-06-19 13:36:03 +02:00
Benoit Marty
03b9904b07 Create a MxCall interface to better handle call 2020-06-19 13:36:03 +02:00
Benoit Marty
24a9931abd Rename some API 2020-06-19 13:36:03 +02:00
Benoit Marty
2581a3433e Create RoomCallService 2020-06-19 13:36:03 +02:00
Benoit Marty
8c9ca1e0f2 Cleanup listener 2020-06-19 13:35:38 +02:00
Benoit Marty
dcae051e85 Create enum as per the spec and use default values when applicable 2020-06-19 13:35:38 +02:00
Benoit Marty
3d03bf6f91 Add Javadoc to the model 2020-06-19 13:35:38 +02:00
onurays
54b154f85f Send sdp to remote party when answer is received. 2020-06-19 13:35:38 +02:00
onurays
37c926d178 Attach local video renderers. 2020-06-19 13:35:38 +02:00
onurays
f50f81d321 Implement rejecting incoming call. 2020-06-19 13:35:38 +02:00
onurays
743ace7e60 Move voip responsibilities from views to WebRtcPeerConnectionManager. 2020-06-19 13:35:38 +02:00
onurays
5d476e7259 Show the foreground service for incoming and outgoing calls. 2020-06-19 13:35:38 +02:00
onurays
fb6bcc8470 Foreground call service and action receiver implemented. 2020-06-19 13:35:38 +02:00
onurays
bda1633979 New material resources added. 2020-06-19 13:35:38 +02:00
onurays
4169f580b8 Create foreground call service. 2020-06-19 13:35:38 +02:00
onurays
4a4edcf82a Experimental implementation of Telecom API. 2020-06-19 13:35:38 +02:00
onurays
a1fc0db8a2 Finish CallActivity when m.call.hangup received. 2020-06-19 13:35:38 +02:00
Valere
dc19652c2b WIP
refact WIP


TMP


WIP
2020-06-19 13:35:38 +02:00
Benoit Marty
d2f1488934 Merge pull request #1500 from vector-im/feature/api_21
Min SDK level set to 21 (#405)
2020-06-19 09:45:22 +02:00
Benoit Marty
bbdf6c6eaf Merge pull request #1496 from vector-im/feature/small_fixies
Small fixies
2020-06-18 14:31:11 +02:00
Benoit Marty
f532d28fb3 Min SDK level set to 21 (#405) 2020-06-18 14:18:40 +02:00
Benoit Marty
0135368328 Prevent infinite loop on 403 and fix bad url used to load the terms 2020-06-18 10:06:31 +02:00
Benoit Marty
af81a52746 Use CustomChromeTab to open T&C 2020-06-17 19:04:35 +02:00
Benoit Marty
86b4c9ac73 "Add Matrix app" menu is now always visible (#1495) 2020-06-17 18:13:09 +02:00
Benoit Marty
1df3b4e18f Fix dark theme issue on login screen (#1097) 2020-06-17 15:52:31 +02:00
Benoit Marty
fa204eca3b Add link to Widget doc 2020-06-17 15:37:35 +02:00
Benoit Marty
2c34fe2dc3 Add airplane mode icon 2020-06-17 15:30:56 +02:00
Benoit Marty
9c34187391 Move "integration" setting above "advanced" section 2020-06-17 15:17:22 +02:00
ganfra
10d78a3102 Shortcuts: avoid crash when retrieving images 2020-06-16 17:50:43 +02:00
ganfra
46378845e9 Typings: extract from room summary and use an in memory tracker 2020-06-16 17:50:08 +02:00
Benoit Marty
ff39b22686 Add changelog entry for proguard 2020-06-16 11:18:33 +02:00
Benoit Marty
601e11980f Merge pull request #1478 from vector-im/feature/proguard
Feature/proguard
2020-06-16 11:15:21 +02:00
ganfra
8cef299878 Timeline: add room summary holder to avoid fetching in item factory 2020-06-16 11:08:38 +02:00
Benoit Marty
914bfb105c Version++ 2020-06-15 23:28:57 +02:00
Benoit Marty
8c98125755 Merge branch 'release/0.22.0' 2020-06-15 23:27:49 +02:00
Benoit Marty
076ecca5a9 Merge branch 'release/0.22.0' into develop 2020-06-15 23:27:48 +02:00
Benoit Marty
840648b750 Prepare release 0.22.0 2020-06-15 23:27:10 +02:00
Benoit Marty
29fd4c4bd2 Fix issue on dark themes, after alert popup dismiss 2020-06-15 23:25:32 +02:00
Benoit Marty
905fa7dd86 Format 2020-06-15 20:05:50 +02:00
Benoit Marty
e8af71f641 Merge pull request #1485 from RiotTranslateBot/weblate-riot-android-riotx-application
Update from Weblate
2020-06-15 20:05:02 +02:00
rkfg
6901d368d2 Translated using Weblate (Russian)
Currently translated at 100.0% (231 of 231 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/ru/
2020-06-15 15:43:04 +00:00
Benoit Marty
e89a340fae Format string resources 2020-06-15 16:47:05 +02:00
Benoit Marty
c3d6135fb3 Fix lint issues 2020-06-15 16:29:10 +02:00
Benoit Marty
6611defd87 Merge pull request #1484 from RiotTranslateBot/weblate-riot-android-riotx-application
Update from Weblate
2020-06-15 16:10:51 +02:00
Weblate
5c449a9e30 michaelk merges translation 2020-06-15 13:24:46 +00:00
LinAGKar
415ac6a748 Translated using Weblate (Swedish)
Currently translated at 41.5% (712 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-15 12:55:46 +00:00
Osoitz
7ddafa098f Translated using Weblate (Basque)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/eu/
2020-06-15 12:55:45 +00:00
Osoitz
177f7b9cb3 Translated using Weblate (Basque)
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eu/
2020-06-15 12:55:45 +00:00
Benoit Marty
fb1704b717 Merge pull request #1465 from vector-im/bmarty-patch-1
Add command line to run Android test
2020-06-15 14:48:01 +02:00
Benoit Marty
ade1f1b911 Merge pull request #1479 from vector-im/feature/memory_leaks
Feature/memory leaks
2020-06-15 14:47:16 +02:00
Benoit Marty
344a9836d2 Typo and cleanup 2020-06-15 14:44:44 +02:00
Benoit Marty
2c1487d303 Merge pull request #1466 from vector-im/feature/toggle_favorite
Add capability to add and remove a room from the favorites (#1217)
2020-06-15 14:29:48 +02:00
LinAGKar
e1e505e695 Translated using Weblate (Swedish)
Currently translated at 40.8% (701 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-14 05:26:12 +00:00
Marko Dimjašević
c5cd68416f Translated using Weblate (Croatian)
Currently translated at 71.6% (1229 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-06-14 05:26:12 +00:00
Slavi Pantaleev
45f757e157 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/bg/
2020-06-14 05:26:12 +00:00
Slavi Pantaleev
de77c8a210 Translated using Weblate (Bulgarian)
Currently translated at 82.8% (1421 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/bg/
2020-06-14 05:26:11 +00:00
ganfra
54b3af2c88 Merge pull request #1459 from vector-im/feature/power_level
Feature/power level
2020-06-12 16:12:37 +02:00
ganfra
171a945de9 Membership: refact a bit and add a left message when kicked or banned 2020-06-12 15:29:07 +02:00
LinAGKar
d845d10d73 Translated using Weblate (Swedish)
Currently translated at 40.7% (699 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-12 11:26:16 +00:00
reg4xp
98d91a746e Translated using Weblate (Persian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/fa/
2020-06-12 11:26:15 +00:00
reg4xp
1be1b5b263 Translated using Weblate (Persian)
Currently translated at 34.4% (591 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fa/
2020-06-12 11:26:15 +00:00
Marko Dimjašević
dafb0c8d5c Translated using Weblate (Croatian)
Currently translated at 71.5% (1227 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-06-12 11:26:09 +00:00
ganfra
6ca69a9947 Remove unnecessary comment 2020-06-12 10:02:57 +02:00
ganfra
ff171a39c6 Memory leaks: clean after Benoit's remarks 2020-06-12 09:58:45 +02:00
Benoit Marty
8acee57118 Implement my suggestions 2020-06-11 22:01:04 +02:00
Benoit Marty
d03ab989e6 Hide WidgetBanner by default, it can be visible if phone is slow 2020-06-11 21:42:04 +02:00
Benoit Marty
4f5b1d9646 Close Activity when room is left.
Create a dedicated ViewModel to handle that in Activity rather than multiple times in Fragments
2020-06-11 21:40:22 +02:00
ganfra
f8dca1237a Fix lint issues 2020-06-11 20:20:06 +02:00
ganfra
c382f706a6 Leaks: disable leakcanary 2020-06-11 19:40:46 +02:00
ganfra
23cbed310a Proguard: activate it in release 2020-06-11 19:37:20 +02:00
ganfra
1786ba30f7 Proguard: handle matrix sdk 2020-06-11 19:36:15 +02:00
Benoit Marty
530ce0952c Typo and cleanup 2020-06-11 18:00:34 +02:00
Benoit Marty
262f10af9a Remove ability to kick or ban yourself 2020-06-11 16:59:14 +02:00
Benoit Marty
3430a8f3ea Fix demote yourself issue 2020-06-11 16:48:32 +02:00
Benoit Marty
959be3a23d Fix layout issue on read only rooms 2020-06-11 16:39:41 +02:00
Benoit Marty
15306fc116 Italic text 2020-06-11 16:30:34 +02:00
Benoit Marty
fb5013db88 Restore previous way to managed power level string, to be able to translate them correctly 2020-06-11 16:27:46 +02:00
Benoit Marty
ab4780c9b9 Remove translation of deleted strings 2020-06-11 16:27:46 +02:00
ganfra
e6a71ab7de PowerLevel: fix role order 2020-06-11 13:49:36 +02:00
LinAGKar
6aecf68098 Translated using Weblate (Swedish)
Currently translated at 40.6% (697 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-11 06:29:33 +00:00
Nils Haugen
dc54c6139f Translated using Weblate (Norwegian Nynorsk)
Currently translated at 49.4% (848 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nn/
2020-06-11 06:29:33 +00:00
Priit Jõerüüt
71f158c526 Translated using Weblate (Estonian)
Currently translated at 97.6% (160 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/et/
2020-06-11 06:29:32 +00:00
Marko Dimjašević
dc7067baff Translated using Weblate (Croatian)
Currently translated at 71.5% (1227 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-06-11 06:29:32 +00:00
Besnik Bleta
ced226777f Translated using Weblate (Albanian)
Currently translated at 99.6% (1710 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sq/
2020-06-11 06:29:27 +00:00
ganfra
579d4f7a5b Merge branch 'develop' into feature/power_level 2020-06-10 17:21:04 +02:00
ganfra
60b91d4d50 PowerLevel : clean after Benoit's review 2020-06-10 17:19:33 +02:00
ganfra
917042c48c Remove memory leak from Autocompleter 2020-06-10 16:14:19 +02:00
Benoit Marty
ed27c35bb4 Merge pull request #1467 from vector-im/feature/modular_link
Update link to Modular url from "https://modular.im/" to "https://modular.im/services/matrix-hosting-riot" and open it using ChromeCustomTab
2020-06-10 10:12:48 +02:00
Benoit Marty
c35c94b7b7 Update link to Modular url from "https://modular.im/" to "https://modular.im/services/matrix-hosting-riot" and open it using ChromeCustomTab 2020-06-10 09:13:08 +02:00
Benoit Marty
d8317f7439 Add capability to add and remove a room from the favorites (#1217) 2020-06-10 00:42:14 +02:00
Benoit Marty
9a3813f883 Add command line to run Android test 2020-06-09 17:04:50 +02:00
Benoit Marty
0a7f77ea16 ktlint 2020-06-08 22:08:59 +02:00
ganfra
d6329a1ab6 Start looking at memory leaks 2020-06-08 19:46:55 +02:00
Benoit Marty
0ba120356a Merge pull request #1447 from vector-im/feature/fix_version
Feature/fix version
2020-06-08 18:16:51 +02:00
Benoit Marty
d402b49f07 Merge branch 'develop' into feature/fix_version 2020-06-08 18:16:42 +02:00
Benoit Marty
d4ba9fa09a Cleanup after Ganfra's review 2020-06-08 18:15:00 +02:00
Benoit Marty
62f352243d Merge pull request #1448 from vector-im/feature/fix
Feature/fix
2020-06-08 18:10:06 +02:00
Benoit Marty
1ad19b5e93 Merge branch 'develop' into feature/fix 2020-06-08 18:09:57 +02:00
Benoit Marty
e7ba0a5c60 Merge pull request #1449 from vector-im/feature/fix_1444
Wrong /query request (#1444)
2020-06-08 18:07:23 +02:00
Benoit Marty
050407f7c7 Merge branch 'develop' into feature/fix_1444 2020-06-08 18:07:15 +02:00
Benoit Marty
dffe096c59 Merge pull request #1451 from vector-im/feature/sso_redirect
Correctly handle SSO login redirection
2020-06-08 18:06:00 +02:00
ganfra
bf5ad2cf18 Power level: warn when demoting yourself 2020-06-08 17:36:30 +02:00
ganfra
a8ae4ddde8 Power level: use confirmation dialog 2020-06-08 16:33:56 +02:00
LinAGKar
2596a9ef7e Translated using Weblate (Swedish)
Currently translated at 40.4% (694 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-08 11:29:54 +00:00
Eduardo F
f74989ac1d Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.2% (879 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pt_BR/
2020-06-08 11:29:40 +00:00
Krystian Chachuła
d3bc4017a5 Translated using Weblate (Polish)
Currently translated at 90.8% (1559 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pl/
2020-06-08 11:29:39 +00:00
Nils Haugen
ab8480d983 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 78.0% (128 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/nn/
2020-06-08 11:29:39 +00:00
Nils Haugen
50dcc24900 Translated using Weblate (Norwegian Nynorsk)
Currently translated at 49.3% (847 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nn/
2020-06-08 11:29:39 +00:00
Marko Dimjašević
a66470f93b Translated using Weblate (Croatian)
Currently translated at 68.9% (1183 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-06-08 11:29:38 +00:00
ganfra
d2dba1826d Update CHANGES 2020-06-08 10:32:02 +02:00
ganfra
7f02195377 Clean code 2020-06-08 10:29:09 +02:00
ganfra
0002cddd67 Merge branch 'develop' into feature/power_level 2020-06-08 10:12:53 +02:00
Benoit Marty
19e1683106 Move class LoginFlowType to api package 2020-06-08 09:16:31 +02:00
Benoit Marty
5c538c7865 Clarify type when retrieving supported login flow (be conform to the spec) 2020-06-08 09:11:23 +02:00
Benoit Marty
ee23967afe I made a mistake: registration step m.login.token type is not the same that login request. 2020-06-08 08:53:06 +02:00
ganfra
86dd8f3fd8 Update epoxy to last stable version 2020-06-05 20:14:36 +02:00
ganfra
f19e2a0995 Room left: fix state not being updated 2020-06-05 20:09:30 +02:00
ganfra
afd1002fdb Room Permission: default to true for sending event 2020-06-05 20:09:13 +02:00
ganfra
07c7ed0a4e Powerlevel: use edit text for custom 2020-06-05 20:08:39 +02:00
Benoit Marty
b48eb6e9cc SSO Update the documentation 2020-06-05 19:14:31 +02:00
ganfra
e5da5a34cb Power levels: handle some action permissions 2020-06-05 19:12:33 +02:00
Benoit Marty
f3a2c467ed small typo 2020-06-05 12:21:58 +02:00
ganfra
a1fd35aa67 Room member: continue to branch admin/moderator actions 2020-06-05 11:13:00 +02:00
ganfra
ad8ed37ff6 Profile action: fix editable icon 2020-06-05 11:12:33 +02:00
Benoit Marty
088e8bc9f9 Add some comment 2020-06-05 10:09:49 +02:00
Benoit Marty
3714323d74 Rename Constants 2020-06-05 01:16:19 +02:00
Benoit Marty
d70b19fa93 SSO login is now performed in the default browser (#1400) - WIP
Use ChromeCustomTabs to host the SSO web page
2020-06-05 01:14:35 +02:00
ganfra
08693a6875 Add some admin actions (ban, kick, unban) 2020-06-04 18:36:28 +02:00
ganfra
73eca2407b Power level: handle timeline rendering 2020-06-04 17:18:39 +02:00
Benoit Marty
ae7a52cecf Correctly handle SSO login redirection 2020-06-04 16:55:27 +02:00
Benoit Marty
2e244dd448 Merge pull request #1446 from vector-im/feature/various_fixes
Hide left rooms in breadcrumbs (#766)
2020-06-04 15:07:45 +02:00
Benoit Marty
1ad77530aa Use RoomSummaryQueryParams as per Ganfra's excellent suggestion 2020-06-04 14:36:51 +02:00
Benoit Marty
e44963728f Merge pull request #1450 from vector-im/feature/navigation_bar
Fix bad color contrast for navigation and status bar
2020-06-04 14:31:06 +02:00
ganfra
9075371145 Power level: start to handle updating 2020-06-04 13:09:20 +02:00
Benoit Marty
3b256a708e Fix status bar icon contrast on API in [21,23[ 2020-06-04 12:55:27 +02:00
Benoit Marty
aea517515c Fix navigation bar icon contrast on API in [21,27[ (#1342) 2020-06-04 12:50:42 +02:00
Benoit Marty
f28889284d Wrong /query request (#1444) 2020-06-04 11:59:04 +02:00
Valere
240f1f51b9 Merge pull request #1437 from vector-im/feature/fix_1169
Fix / reply ux stays too long
2020-06-04 11:44:53 +02:00
Valere
05efd7423e Merge branch 'develop' into feature/fix_1169 2020-06-04 11:44:32 +02:00
Benoit Marty
fce8a3bc18 changes.md 2020-06-04 11:43:54 +02:00
Valere
2adb5af051 update change log 2020-06-04 11:43:47 +02:00
Benoit Marty
8b7e5e527a Make Credentials.homeServer optional because it is deprecated (#1443)
It is never used currently in RiotX, but if homeserver does not sent it, it would crash.
2020-06-04 11:41:32 +02:00
Benoit Marty
c3d8916802 fix param name 2020-06-04 11:40:38 +02:00
Benoit Marty
532f5e58ea Move class Versions to internal package 2020-06-04 11:30:24 +02:00
Benoit Marty
57a5714fb5 Add the ability to compare Homeserver version (#1442) 2020-06-04 11:24:31 +02:00
Benoit Marty
a3fd49499b Hide left rooms in breadcrumbs (#766) 2020-06-04 08:59:01 +02:00
Benoit Marty
3dc2cd4d7a Disable one code check 2020-06-03 18:54:03 +02:00
Benoit Marty
0b738e3d9e Merge pull request #1409 from vector-im/feature/markdown_test
Send plain text in the body
2020-06-03 18:45:06 +02:00
Benoit Marty
b29c2b2de4 Send plain text in the body
According to https://matrix.org/docs/spec/client_server/latest#m-room-message-msgtypes, the plain text version of the HTML should be provided in the body.

Also create MarkdownParser class to be able to unit test it.
2020-06-03 18:44:35 +02:00
Benoit Marty
40f2d19f81 Merge pull request #1415 from vector-im/feature/signup_username_digit
Temporary fix to show error when user is creating an account on matrix.org with userId containing only digits (#1410)
2020-06-03 18:41:55 +02:00
Benoit Marty
2e997f2c67 Wrong issue number 2020-06-03 18:41:27 +02:00
Benoit Marty
0fd50892af Temporary fix to show error when user is creating an account on matrix.org with userId containing only digits (#1410) 2020-06-03 18:41:07 +02:00
Benoit Marty
55bd346cb2 Merge pull request #1425 from vector-im/feature/integration_manager
Feature/integration manager
2020-06-03 18:10:03 +02:00
ganfra
0724ac133b Widget notice: capitalize first letter 2020-06-03 15:22:20 +02:00
ganfra
0507fa5b0e Widgets: clean again after Benoit's review 2020-06-03 12:00:52 +02:00
Benoit Marty
617e945afa Merge pull request #1436 from vector-im/feature/Fix_1430_X_made_no_change
Hide "X made no changes" event by default in timeline (#1430)
2020-06-03 09:47:51 +02:00
Benoit Marty
870c4bf765 Check that content is not null 2020-06-03 09:32:20 +02:00
Benoit Marty
9a592e9c7e Create IsUselessResolver object 2020-06-03 01:13:02 +02:00
ganfra
53592ac404 Fix lint issues 2020-06-02 20:28:18 +02:00
ganfra
d8848a6062 Merge branch 'develop' into feature/integration_manager 2020-06-02 20:26:03 +02:00
ganfra
173c1d3a6e Integration: make the default urls modifiable from MatrixConfiguration 2020-06-02 20:05:00 +02:00
ganfra
c815c4080d Widget: changes naming algorithm (align on web) 2020-06-02 19:51:16 +02:00
Valere
c09626182c Fix / reply ux stays too long 2020-06-02 19:31:25 +02:00
ganfra
65c6ce3033 Merge branch 'feature/integration_manager' of github.com:vector-im/riotX-android into feature/integration_manager 2020-06-02 19:02:31 +02:00
ganfra
06cc2f527e Clean after Benoit's review 2020-06-02 19:02:21 +02:00
ganfra
9da5061689 Update CHANGES.md
Co-authored-by: Benoit Marty <benoitm@matrix.org>
2020-06-02 16:37:51 +02:00
ganfra
82b4415f7d Widget: fix loading widgets without scalar token 2020-06-02 16:02:10 +02:00
Benoit Marty
3f1e5b9b1e Hide "X made no changes" event by default in timeline (#1430) 2020-06-02 15:54:01 +02:00
Benoit Marty
1b95d98ccd Merge pull request #1423 from vector-im/feature/invalidate
Yet another cleanup PR
2020-06-02 14:42:51 +02:00
Benoit Marty
e2e1925796 Restore .observeOn(AndroidSchedulers.mainThread()) 2020-06-02 14:24:29 +02:00
Benoit Marty
52c8f24df5 Merge pull request #1417 from vector-im/feature/you
Use "you" instead of your display name for notice events you have sent
2020-06-02 14:16:46 +02:00
Benoit Marty
ca855da8ae Fix issue reported during review by Onuray 2020-06-02 13:15:03 +02:00
Benoit Marty
a39d35e54c Improve Kotlin code readability: use when instead of if and add a few newlines 2020-06-02 13:15:03 +02:00
Benoit Marty
3bd2b24b10 Use "you" instead of display name when the current user has sent the event. 2020-06-02 13:15:03 +02:00
Benoit Marty
12448426d4 Fix typo reported by rageshake 2020-06-01 22:12:11 +02:00
LinAGKar
a043d7cac7 Translated using Weblate (Swedish)
Currently translated at 25.4% (436 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-06-01 15:29:17 +00:00
rkfg
4d88111d48 Translated using Weblate (Russian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/ru/
2020-06-01 15:29:15 +00:00
rkfg
34d6610bf8 Translated using Weblate (Russian)
Currently translated at 85.0% (1459 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-06-01 15:29:15 +00:00
Nils J. Haugen
4bfc52327b Translated using Weblate (Norwegian Nynorsk)
Currently translated at 49.4% (849 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nn/
2020-06-01 15:29:14 +00:00
nosorae
15d5f7ff55 Translated using Weblate (Korean)
Currently translated at 73.2% (1256 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ko/
2020-06-01 15:29:14 +00:00
Szimszon
91ecd1aeeb Translated using Weblate (Hungarian)
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hu/
2020-06-01 15:29:14 +00:00
sr093906
342f871916 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/zh_Hans/
2020-06-01 15:29:10 +00:00
Nikita Ledenev
18d51de0b9 Translated using Weblate (Russian)
Currently translated at 85.0% (1459 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-06-01 06:08:36 +00:00
rkfg
4dc6cae854 Translated using Weblate (Russian)
Currently translated at 85.0% (1459 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-06-01 06:08:35 +00:00
rkfg
5fb160e1ac Translated using Weblate (Russian)
Currently translated at 83.8% (1439 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-30 18:28:21 +00:00
Амёба
f1589314c2 Translated using Weblate (Russian)
Currently translated at 83.8% (1439 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-30 18:28:19 +00:00
LinAGKar
7fb9a550c8 Translated using Weblate (Swedish)
Currently translated at 23.2% (399 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-30 09:29:28 +00:00
Амёба
46f7f4814c Translated using Weblate (Russian)
Currently translated at 82.6% (1418 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-30 09:29:24 +00:00
Benoit Marty
c002cc104c Translated using Weblate (Portuguese (Brazil))
Currently translated at 51.1% (878 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pt_BR/
2020-05-30 09:29:22 +00:00
random
492128a621 Translated using Weblate (Italian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/it/
2020-05-30 09:29:22 +00:00
random
fff0f09684 Translated using Weblate (Italian)
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/it/
2020-05-30 09:29:22 +00:00
Szimszon
64054d13a3 Translated using Weblate (Hungarian)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/hu/
2020-05-30 09:29:20 +00:00
Szimszon
ae8d7096c3 Translated using Weblate (Hungarian)
Currently translated at 98.5% (1691 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hu/
2020-05-30 09:29:20 +00:00
Kévin C
13e04b6362 Translated using Weblate (French)
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/fr/
2020-05-30 09:29:19 +00:00
Kévin C
89e557bcef Translated using Weblate (French)
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-30 09:29:19 +00:00
Samu Voutilainen
fdf4749c1b Translated using Weblate (Finnish)
Currently translated at 99.4% (163 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/fi/
2020-05-30 09:29:17 +00:00
zeritti
a63608bf97 Translated using Weblate (Czech)
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/cs/
2020-05-30 09:29:17 +00:00
Jeff Huang
5c101e9466 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (164 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/zh_Hant/
2020-05-30 09:29:12 +00:00
Jeff Huang
4b25ebc731 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1717 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/zh_Hant/
2020-05-30 09:29:12 +00:00
Besnik Bleta
8e88fcb462 Translated using Weblate (Albanian)
Currently translated at 99.4% (163 of 164 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/sq/
2020-05-30 09:29:10 +00:00
Besnik Bleta
fd19b345a1 Translated using Weblate (Albanian)
Currently translated at 99.4% (1707 of 1717 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sq/
2020-05-30 09:29:10 +00:00
Benoit Marty
4a7bba047b Merge pull request #1420 from vector-im/feature/fix_theme_switch
Fix: Switch theme is not fully taken into account without restarting the app
2020-05-29 19:22:43 +02:00
ganfra
440c21e9f3 Update CHANGES 2020-05-29 19:06:06 +02:00
ganfra
959b679086 Clean files 2020-05-29 19:03:54 +02:00
ganfra
64cfd4d81a Widget: fix nullable widgetId 2020-05-29 18:08:56 +02:00
ganfra
c742ca3b41 Widget: fix widget title color 2020-05-29 17:09:10 +02:00
ganfra
2002252f72 Widget: Handle failures on permissions 2020-05-29 16:44:17 +02:00
ganfra
7df8b3a9bf Widgets: observe wellknown for integ config and open Jitsi in browser 2020-05-29 12:23:36 +02:00
Benoit Marty
3fea2173f4 Move fun to a dedicated file. 2020-05-29 11:57:20 +02:00
Benoit Marty
d125cb5c01 Some cleanup:
- use invalidate() from MvRx
- use throttleFirst instead of debounce
- remove useless observe on main thread
- remove useless calls to super.invalidate()
2020-05-29 11:36:27 +02:00
Benoit Marty
86c9264ed9 Fix: Switch theme is not fully taken into account without restarting the app 2020-05-28 23:03:04 +02:00
ganfra
00f2d0249f Merge branch 'develop' into feature/integration_manager 2020-05-28 20:33:51 +02:00
ganfra
4465e6eea3 Widget: format url with roomId if needed 2020-05-28 20:26:34 +02:00
ganfra
b87fb8c396 Widget: show sticker in room summary format 2020-05-28 20:15:11 +02:00
ganfra
d4706b38b8 Widgets: display widget events in timeline 2020-05-28 20:04:41 +02:00
ganfra
31c82b4ba6 Widget: show room widgets in bottom sheet and fix some widget actions 2020-05-28 19:39:07 +02:00
ganfra
cb80d8d349 Widget: add active widgets 2020-05-28 17:08:57 +02:00
Benoit Marty
997101a44b Merge branch 'hotfix/crash_locales' 2020-05-28 11:31:38 +02:00
Benoit Marty
7be3434136 Merge branch 'hotfix/crash_locales' into develop 2020-05-28 11:31:38 +02:00
Benoit Marty
ec1422b0f0 Fix crash due to bad script. Tha bad value has already been fixed on Weblate. 2020-05-28 11:27:11 +02:00
Benoit Marty
b0a6eaaa96 Version++ 2020-05-28 10:45:58 +02:00
Benoit Marty
d1c4d4b099 Merge branch 'release/0.21.0' 2020-05-28 10:43:55 +02:00
Benoit Marty
d35905787d Merge branch 'release/0.21.0' into develop 2020-05-28 10:43:53 +02:00
Benoit Marty
9a972b2f73 Prepare release 0.21.0 2020-05-28 10:43:40 +02:00
ganfra
1fe0c8a3e9 Widgets: handle actions (revoke, delete, edit, open in browser) and permissions bottom sheet 2020-05-28 10:25:04 +02:00
Benoit Marty
116bab5bc8 Fix call event not rendered in e2e rooms. 2020-05-27 19:02:27 +02:00
Benoit Marty
c76eb3bc98 Fix lint issue 2020-05-27 18:58:45 +02:00
Benoit Marty
81c1717384 Format strings 2020-05-27 18:49:34 +02:00
Benoit Marty
0fd0500d30 Merge pull request #1414 from RiotTranslateBot/weblate-riot-android-riotx-application
Update from Weblate
2020-05-27 17:50:06 +02:00
Benoit Marty
34d638da4f Merge pull request #1411 from vector-im/feature/attachment_e2e
Feature/attachment e2e
2020-05-27 15:13:17 +02:00
Weblate
e39b177b5b Merge branch 'origin/develop' into Weblate. 2020-05-27 13:04:35 +00:00
LinAGKar
07aa3ee64c Translated using Weblate (Swedish)
Currently translated at 19.9% (335 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-27 13:04:29 +00:00
yuuki-san
c94856cdf8 Translated using Weblate (Slovak)
Currently translated at 95.7% (156 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/sk/
2020-05-27 13:04:26 +00:00
yuuki-san
4dd0c04537 Translated using Weblate (Slovak)
Currently translated at 53.9% (906 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sk/
2020-05-27 13:04:26 +00:00
Амёба
99c409b6d2 Translated using Weblate (Russian)
Currently translated at 82.6% (1390 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-27 13:04:26 +00:00
Marko Dimjašević
8cb2c2532f Translated using Weblate (Croatian)
Currently translated at 54.2% (912 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-05-27 13:04:24 +00:00
Benoit Marty
6f804cab4d Avoid duplicated events in DB (one with localId and one with eventId from homeserver, once synced) 2020-05-27 11:27:54 +02:00
Benoit Marty
cf3dbb378e Get uploaded files for e2e rooms, from local DB 2020-05-26 22:06:51 +02:00
ganfra
e32716aa48 Widget: add room active widgets to RoomDetailViewState 2020-05-26 19:47:06 +02:00
ganfra
ba46f10e3f Add integration entry to settings 2020-05-26 19:44:14 +02:00
ganfra
4b37ede8c2 Widget: handle sticker 2020-05-26 18:16:38 +02:00
ganfra
dbe4c0c8e4 Remove duplicates from identity feature 2020-05-26 11:38:29 +02:00
ganfra
4f4afd6840 Widget post api: handle last methods 2020-05-26 11:29:42 +02:00
ganfra
7409fde650 Merge branch 'develop' into feature/integration_manager 2020-05-26 08:55:01 +02:00
ganfra
cfa31e6332 Widgets: fix extracting user widgets 2020-05-26 08:31:19 +02:00
ganfra
df973a6275 Widget: makes the integration manager screen mostly working 2020-05-26 08:07:09 +02:00
Benoit Marty
0eb36a607b Merge pull request #1402 from vector-im/feature/rageshake_dialogs
Feature/rageshake dialogs
2020-05-26 00:04:33 +02:00
Benoit Marty
0509e76f18 var -> val 2020-05-25 23:54:53 +02:00
Benoit Marty
e379ccf086 Extract MatrixConfiguration to its own file, for a better visibility 2020-05-25 23:53:36 +02:00
Benoit Marty
7ae52d676d Use directly java.net.proxy class 2020-05-25 23:50:10 +02:00
Benoit Marty
3d33018ffa Merge pull request #1147 from unclejay80/http_proxy_init
added network proxy configuration
2020-05-25 23:43:11 +02:00
Benoit Marty
860595520b Merge pull request #1401 from vector-im/feature/cleanup
Small PR with code cleanup
2020-05-25 17:30:31 +02:00
Benoit Marty
ae318a835e Merge pull request #1387 from vector-im/feature/attachments_list
Attachments list
2020-05-25 17:29:54 +02:00
Benoit Marty
7a3dbecc08 Fixes #860 2020-05-25 17:05:17 +02:00
Benoit Marty
c52aae7c29 Uploads: Snackbar 2020-05-25 17:05:17 +02:00
Benoit Marty
f0f3e8ddb9 Uploads: auto-review 2020-05-25 17:05:17 +02:00
Benoit Marty
a95102a78f Uploads: Use StateView for better Loading/Empty rendering 2020-05-25 17:02:57 +02:00
Benoit Marty
2adafbeb03 Uploads: use SenderInfo in TimelineEvent 2020-05-25 17:02:57 +02:00
Benoit Marty
f3a5fb7fe3 Uploads: rework: provide information about the sender 2020-05-25 16:54:08 +02:00
Benoit Marty
907a786b1a Uploads: load element until loader not displayed anymore 2020-05-25 16:54:08 +02:00
Benoit Marty
e3ed3e5b05 Uploads: cleanup 2020-05-25 16:54:08 +02:00
Benoit Marty
a2b366ebfe Uploads: add placeholder for images 2020-05-25 16:54:08 +02:00
Benoit Marty
f7de2f0f13 Uploads: create extension 2020-05-25 16:54:08 +02:00
Benoit Marty
919225bdfd Uploads: create extension 2020-05-25 16:54:08 +02:00
Benoit Marty
88cba74cac Uploads: add screen - WIP 2020-05-25 16:54:08 +02:00
Benoit Marty
e9ca876444 Uploads: add screen - WIP 2020-05-25 16:54:08 +02:00
Benoit Marty
0992e76800 Uploads: add screen - WIP 2020-05-25 16:54:08 +02:00
Benoit Marty
8a9498bae4 Uploads: add the service and the task 2020-05-25 16:54:08 +02:00
Weblate
d2598480c8 var -> val 2020-05-25 16:54:08 +02:00
Benoit Marty
6e57b06673 Ensure Filter model match the spec and add Javadoc 2020-05-25 16:54:08 +02:00
Benoit Marty
a036be6436 Fix missing title in BugReport screen 2020-05-25 15:42:58 +02:00
Benoit Marty
53c7ea2831 Kotlin: use orEmpty() for Maps 2020-05-25 15:42:30 +02:00
Benoit Marty
e117fec74f Kotlin: use orEmpty() for Maps 2020-05-25 14:07:25 +02:00
Benoit Marty
6e01b75b2f Dagger: use generic name for parameters 2020-05-25 14:04:36 +02:00
Benoit Marty
691e7fe616 Kotlin: use orEmpty() 2020-05-25 14:04:36 +02:00
Benoit Marty
e793a46576 Merge pull request #1390 from vector-im/feature/icon
Change icon to magnifying-glass to filter room (#1384)
2020-05-25 10:57:30 +02:00
Benoit Marty
fa48e8cffa Change icon to magnifying-glass to filter room (#1384) 2020-05-25 10:57:14 +02:00
Benoit Marty
69cf437a39 Merge pull request #1291 from vector-im/feature/complete_security
Add hint to translators
2020-05-25 10:28:20 +02:00
Benoit Marty
ebbc432570 Merge pull request #1398 from vector-im/feature/date_time
Bugfixes
2020-05-25 10:13:30 +02:00
LinAGKar
2532724e92 Translated using Weblate (Swedish)
Currently translated at 18.8% (316 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-25 00:29:11 +00:00
MamasLT
e31693b4b7 Translated using Weblate (Lithuanian)
Currently translated at 2.5% (4 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/lt/
2020-05-25 00:29:10 +00:00
Marko Dimjašević
3ed6452232 Translated using Weblate (Croatian)
Currently translated at 50.9% (856 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-05-25 00:29:10 +00:00
Besnik Bleta
166aaa62f0 Translated using Weblate (Albanian)
Currently translated at 99.5% (1673 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sq/
2020-05-25 00:29:00 +00:00
MamasLT
45e5fff622 Added translation using Weblate (Lithuanian) 2020-05-23 23:44:45 +00:00
MamasLT
8f2dba09ee Added translation using Weblate (Lithuanian) 2020-05-23 23:43:32 +00:00
LinAGKar
2ea46c5e54 Translated using Weblate (Swedish)
Currently translated at 18.7% (315 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-23 14:29:20 +00:00
@a2sc:matrix.org
fc5f0f7673 Translated using Weblate (German)
Currently translated at 99.5% (1674 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-23 14:29:19 +00:00
Tirifto
188f4a2e72 Translated using Weblate (Esperanto)
Currently translated at 27.5% (463 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eo/
2020-05-23 14:29:18 +00:00
Marko Dimjašević
cf97fc3b01 Translated using Weblate (Croatian)
Currently translated at 41.2% (693 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-05-23 14:29:15 +00:00
Osoitz
5267ba240a Translated using Weblate (Basque)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/eu/
2020-05-23 14:29:00 +00:00
Osoitz
f185dcacd7 Translated using Weblate (Basque)
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eu/
2020-05-23 14:29:00 +00:00
Benoit Marty
330a33a0e8 Render formatted_body for m.notice and m.emote (Fixes #1196) 2020-05-21 01:47:17 +02:00
Benoit Marty
b75b299847 Create MessageContentWithFormattedBody interface 2020-05-21 01:05:47 +02:00
Benoit Marty
7c59bcc928 Only "org.matrix.custom.html" is supported 2020-05-21 00:41:36 +02:00
Benoit Marty
0e110b0794 Cleanup: use existing TextContent class instead of Pair<> 2020-05-21 00:40:12 +02:00
Benoit Marty
e156a62e19 Enable markdown (if active) when sending emote (Fixes #734) 2020-05-21 00:27:19 +02:00
Benoit Marty
628439aa65 Mardown: sending "**text in bold** was sending extra paragraph and extra new line 2020-05-21 00:25:59 +02:00
Benoit Marty
d49fcb80fc "Seen by" uses 12h time (Fixes #1378)
DateUtils.FORMAT_SHOW_TIME has to be used for i18n to be effective on DateUtils.getRelativeDateTimeString(), do not ask me why.
Also internal switching of language does not have effect on this method, you'll have to restart the application.
2020-05-20 23:52:41 +02:00
ganfra
00fd067c6b Widget: continue working on interaction with SDK. Not sure yet how to manage properly distinction between room and "admin" widgets. 2020-05-20 20:39:18 +02:00
Benoit Marty
ca37895619 Merge pull request #1374 from vector-im/feature/sas_v2
support new key agreement method for SAS
2020-05-20 18:32:01 +02:00
Benoit Marty
43497e0da9 Merge pull request #1315 from vector-im/feature/forward_pagination
Feature/forward pagination
2020-05-20 18:30:09 +02:00
LinAGKar
efa510c0a8 Translated using Weblate (Swedish)
Currently translated at 17.1% (287 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-20 15:29:38 +00:00
yuuki-san
0828159ee4 Translated using Weblate (Slovak)
Currently translated at 53.9% (906 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sk/
2020-05-20 15:29:35 +00:00
Амёба
90f21198c3 Translated using Weblate (Russian)
Currently translated at 82.1% (1381 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-20 15:29:34 +00:00
Eduardo F
a0b0778fce Translated using Weblate (Portuguese (Brazil))
Currently translated at 52.2% (878 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pt_BR/
2020-05-20 15:29:33 +00:00
random
d937fa67ad Translated using Weblate (Italian)
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/it/
2020-05-20 15:29:33 +00:00
Kim Brose
91d396fbca Translated using Weblate (German)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/de/
2020-05-20 15:29:32 +00:00
@a2sc:matrix.org
afba5b2b6c Translated using Weblate (German)
Currently translated at 99.5% (1673 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-20 15:29:32 +00:00
Benoit Marty
b579a1bc83 Translated using Weblate (French)
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-20 15:29:31 +00:00
Priit Jõerüüt
db49673fc7 Translated using Weblate (Estonian)
Currently translated at 14.2% (239 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/et/
2020-05-20 15:29:31 +00:00
Marko Dimjašević
bb0511e659 Translated using Weblate (Croatian)
Currently translated at 26.2% (441 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-05-20 15:29:22 +00:00
Jeff Huang
0e0763ec2d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/zh_Hant/
2020-05-20 15:28:52 +00:00
ganfra
3faf42be53 Widget: get user list widgets from user account 2020-05-19 18:40:11 +02:00
ganfra
dea903bcb5 Merge branch 'develop' into feature/integration_manager 2020-05-19 16:08:46 +02:00
ganfra
e1c6542e03 Merge branch 'develop' into feature/forward_pagination 2020-05-19 15:25:33 +02:00
ganfra
01484978bd Fix lint 2020-05-19 15:24:36 +02:00
ganfra
cad14c93d0 Timeline: fix tests and add message order check 2020-05-19 14:39:42 +02:00
toastbroot
ee52b9185b Translated using Weblate (German)
Currently translated at 99.4% (1672 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-19 09:33:16 +00:00
Valere
861a7f791f Update change log 2020-05-19 09:57:54 +02:00
Valere
f2fa57224b Update matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultVerificationService.kt
Co-authored-by: Hubert Chathi <hubert@uhoreg.ca>
2020-05-19 09:55:45 +02:00
Valere
e0977dd97b Add new key agreement protocol 2020-05-19 09:55:45 +02:00
Benoit Marty
f47bef71a4 Merge pull request #1354 from vector-im/feature/identity
Identity server
2020-05-18 17:28:57 +02:00
Benoit Marty
92985fc8e7 Split long line 2020-05-18 17:25:15 +02:00
Benoit Marty
243b0a7d82 ktlint 2020-05-18 17:23:33 +02:00
Benoit Marty
92c719a803 Set identity server: do not show the error in the EditText when user want to use the default identity server 2020-05-18 17:23:33 +02:00
Benoit Marty
f4108ae0eb Properly handle Loading state: button were still active... Also finish the work on the controller 2020-05-18 17:23:33 +02:00
Benoit Marty
ecf3fee709 Integrate Valere's remarks - step 3: use viewModelScope in ViewModels 2020-05-18 17:23:33 +02:00
Benoit Marty
e67e472025 Integrate Valere's remarks - step 2: Stop using (or at least reduce usage of) GlobalScope 2020-05-18 17:23:33 +02:00
Benoit Marty
a6541481bf Integrate Valere's remarks - step 1 2020-05-18 17:23:33 +02:00
Benoit Marty
85a4f83662 Colorize the identity server url 2020-05-18 17:23:33 +02:00
Benoit Marty
22955e6b34 Use debouncedClicks every where, for faster UI (it uses throttleFirst operator instead of debounce) 2020-05-18 17:23:33 +02:00
Benoit Marty
9520aff848 Use debouncedClicks every where, for faster UI (it uses throttleFirst operator instead of debounce) 2020-05-18 17:23:33 +02:00
Benoit Marty
6b09a78ece Identity: Improve identity choice screen after review 2020-05-18 17:23:33 +02:00
Benoit Marty
789bcc8d77 Identity: Bugfix: do not fail when trying to disconnect the current identity server, if there is no token available 2020-05-18 17:23:33 +02:00
Benoit Marty
2914117a8e Move some classes 2020-05-18 17:23:33 +02:00
Benoit Marty
8049962a99 Create a Wellknown module, because both AuthModule and HomeServerCapability module need it 2020-05-18 17:23:33 +02:00
Benoit Marty
225b1c380e Identity: retrieve the default identity server url 2020-05-18 17:23:33 +02:00
Benoit Marty
60d80ea0ba Fix compilation issue after rebase 2020-05-18 17:23:33 +02:00
Benoit Marty
c8211098f3 Identity: The store has to be migrated properly because it contains user's data 2020-05-18 17:23:33 +02:00
Benoit Marty
e78fde4eca Identity: rename a few class and add a mapper to avoid using Entities in the code 2020-05-18 17:23:33 +02:00
Benoit Marty
59d60813fb Cleanup 2020-05-18 17:23:33 +02:00
Benoit Marty
4c31e52892 Add facilities and Javadoc on SessionParams data class 2020-05-18 17:23:33 +02:00
Benoit Marty
c646fd2b36 ktlint 2020-05-18 17:23:33 +02:00
Benoit Marty
6432859732 Avoid code duplication 2020-05-18 17:23:33 +02:00
Benoit Marty
2beef7d816 Identity: fix issue with logout request.
Also disconnect previous set identity server when changing url, when disconnecting, and when deactivating account
2020-05-18 17:23:33 +02:00
Benoit Marty
623056455b Identity: fix rendering error 2020-05-18 17:23:33 +02:00
Benoit Marty
7a4d9370e3 Identity: human readable errors 2020-05-18 17:23:33 +02:00
Benoit Marty
fe3138492e Identity: fix issue in dark theme 2020-05-18 17:23:33 +02:00
Benoit Marty
05a52164f3 Identity: Changelog and documentation 2020-05-18 17:23:33 +02:00
Benoit Marty
d14f1dd1ab Capability: do not update data if the corresponding request fails 2020-05-18 17:23:13 +02:00
Benoit Marty
88e8c11ee5 Identity: protect against outdated homeserver 2020-05-18 17:23:13 +02:00
Benoit Marty
7afc7bdb31 Identity refresh main setting page. 2020-05-18 17:23:13 +02:00
Benoit Marty
84a3754c9f Confirm identity server disconnection in all cases, as Riot-Web does 2020-05-18 17:23:13 +02:00
Benoit Marty
4b2f8e9174 Auto-review 2020-05-18 17:23:13 +02:00
Benoit Marty
a17932e17e Add missing internal 2020-05-18 17:23:13 +02:00
Benoit Marty
084c27a2bb Identity: cleanup 2020-05-18 17:23:13 +02:00
Benoit Marty
ed2f62cbe7 Identity: ping API V2 and cleanup 2020-05-18 17:23:13 +02:00
Benoit Marty
38fb7185b6 Identity: One class per file 2020-05-18 17:23:13 +02:00
Benoit Marty
ce42d2fb8a Identity: improve terms not signed case 2020-05-18 17:23:13 +02:00
Benoit Marty
af3fc22e2d Identity: correctly handle terms update 2020-05-18 17:22:40 +02:00
Benoit Marty
b659cb60a2 Improve code 2020-05-18 17:22:40 +02:00
Benoit Marty
34cf9903dc Improve code 2020-05-18 17:22:40 +02:00
Benoit Marty
062a21e39a Improve code 2020-05-18 17:22:40 +02:00
Benoit Marty
4510aff00a ktlint 2020-05-18 17:22:40 +02:00
Benoit Marty
d0953b8406 Identity: Cleanup 2020-05-18 17:22:40 +02:00
Benoit Marty
7822660ce7 Identity: Extract enum for Epoxy Items 2020-05-18 17:22:40 +02:00
Benoit Marty
bdfcf5c67c Identity: cleanup Epoxy items 2020-05-18 17:22:40 +02:00
Benoit Marty
ae0d09a049 Identity: cancel binding WIP 2020-05-18 17:22:40 +02:00
Benoit Marty
69759b7415 Identity: store sendAttempt in DB 2020-05-18 17:22:40 +02:00
Benoit Marty
7e8e1ab9b7 Identity: change DB and add sendAttempt 2020-05-18 17:22:40 +02:00
Benoit Marty
b44f5d3b4a Handle correctly the verification code error case 2020-05-18 17:22:40 +02:00
Benoit Marty
03f8b66993 Remove undocumented parameter
https://github.com/matrix-org/sydent/issues/195
2020-05-18 17:22:40 +02:00
Benoit Marty
e411f139c8 Identity: validate code received by SMS 2020-05-18 17:22:40 +02:00
Benoit Marty
e962d1dadf Small improvement 2020-05-18 17:22:40 +02:00
Benoit Marty
756b0febe6 Identity: Add some doc 2020-05-18 17:22:40 +02:00
Benoit Marty
1535f3e2e5 Identity: bind/unbnd: restore the bind in progress State 2020-05-18 17:22:40 +02:00
Benoit Marty
3e808dec90 Identity: bind/unbnd WIP 2020-05-18 17:22:40 +02:00
Benoit Marty
637f4a8350 Fix small UI bug 2020-05-18 17:22:40 +02:00
Benoit Marty
d3bc9f52fd Remove duplicated class 2020-05-18 17:22:40 +02:00
Benoit Marty
ffd8ac859d Identity: fix sync of indetity server change 2020-05-18 17:22:40 +02:00
Benoit Marty
6e43e9b51c Identity: refresh pepper, logout feature and other improvements 2020-05-18 17:22:40 +02:00
Benoit Marty
426171508e Import and adapt Terms Of Service management: SDK and UI (compiling) - still fixing issue 2020-05-18 17:22:40 +02:00
Benoit Marty
e86460b578 Import and adapt Terms Of Service management: SDK and UI (compiling) 2020-05-18 17:22:40 +02:00
Benoit Marty
8dd5f88dba Identity: cleanup UI 2020-05-18 17:21:59 +02:00
Benoit Marty
3aa6de7cf5 Identity: progressing 2020-05-18 17:21:59 +02:00
Benoit Marty
a75242c79d Retrieve ThreePids from homeserver 2020-05-18 17:21:59 +02:00
Benoit Marty
784918350b Identity: import UI/UX From Riot and adapt to RiotX architecture 2020-05-18 17:21:59 +02:00
Benoit Marty
0199cf9a03 Identity - Fix issue with Realm 2020-05-18 17:21:59 +02:00
Benoit Marty
ab6e7a3b8a Identity - WIP (compilation ok) 2020-05-18 17:21:59 +02:00
Benoit Marty
f489265ce7 Create AccessTokenProvider 2020-05-18 17:21:59 +02:00
Benoit Marty
6c9c3e5cb3 To merge with previous previous commit 2020-05-18 17:21:59 +02:00
Benoit Marty
9b7c2599a7 Add withOlmUtility facility 2020-05-18 17:21:59 +02:00
Benoit Marty
25bbd7c526 Identity - Create DB 2020-05-18 17:21:59 +02:00
Benoit Marty
e0c3f3638d Merge pull request #1370 from vector-im/feature/redacted_message
Feature/redacted message
2020-05-18 16:30:40 +02:00
Benoit Marty
d45653dbb3 Ganfra's review: Improve the filters declaration 2020-05-18 16:26:18 +02:00
Benoit Marty
f70623beea Ganfra's review: Handle filterRedacted in TimelineHiddenReadReceipts 2020-05-18 16:26:18 +02:00
Benoit Marty
e542e4ba22 Add a setting to hide redacted events (#951) 2020-05-18 16:26:18 +02:00
Benoit Marty
05d1e64cb5 New rendering for redacted message 2020-05-18 16:25:54 +02:00
Benoit Marty
adac80062c Merge pull request #1368 from vector-im/feature/switch_language
Feature/switch language
2020-05-18 16:22:07 +02:00
Benoit Marty
28f8d9500e Better coroutine management 2020-05-18 16:21:47 +02:00
Benoit Marty
538bda329e Lazy load available languages 2020-05-18 16:21:47 +02:00
Benoit Marty
a00ddca188 Create SystemLocaleProvider 2020-05-18 16:21:47 +02:00
Benoit Marty
8ac2cb0530 Cleanup 2020-05-18 16:21:47 +02:00
Benoit Marty
19d655ec41 Locales: improve algo 2020-05-18 16:21:47 +02:00
Benoit Marty
4961bb0e08 FontSize: rework by creating FontScaleValue data class. 2020-05-18 16:21:47 +02:00
Benoit Marty
f45040c405 Locale: support locale change 2020-05-18 16:21:24 +02:00
Benoit Marty
9fed62e4a7 Improve template 2020-05-18 16:21:00 +02:00
Benoit Marty
43b9e2cec9 Merge pull request #1382 from vector-im/feature/aiplane_mode
Better connectivity lost indicator when airplane mode is on
2020-05-18 15:35:14 +02:00
Benoit Marty
3185b88fe5 Better connectivity lost indicator when airplane mode is on 2020-05-18 15:09:14 +02:00
LinAGKar
c2906d9b06 Translated using Weblate (Swedish)
Currently translated at 14.6% (245 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-16 18:28:48 +00:00
Амёба
cfb615f972 Translated using Weblate (Russian)
Currently translated at 82.1% (1381 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-16 18:28:48 +00:00
Priit Jõerüüt
9c22c0952c Translated using Weblate (Estonian)
Currently translated at 5.9% (100 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/et/
2020-05-16 18:28:48 +00:00
Priit Jõerüüt
5a834619c0 Translated using Weblate (Estonian)
Currently translated at 97.5% (159 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/et/
2020-05-16 18:28:43 +00:00
LinAGKar
3b62f50f7b Translated using Weblate (Swedish)
Currently translated at 14.4% (242 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-16 08:03:01 +00:00
LinAGKar
18e804d174 Translated using Weblate (Swedish)
Currently translated at 14.3% (241 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-16 07:22:14 +00:00
Szimszon
c105d82027 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hu/
2020-05-16 07:22:11 +00:00
Kévin C
860921217d Translated using Weblate (French)
Currently translated at 100.0% (1682 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-16 07:22:06 +00:00
Priit Jõerüüt
3fe2f2876a Translated using Weblate (Estonian)
Currently translated at 1.6% (27 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/et/
2020-05-16 07:22:05 +00:00
Marko Dimjašević
e84fd408be Translated using Weblate (Croatian)
Currently translated at 0.5% (8 of 1682 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hr/
2020-05-16 07:22:05 +00:00
Marko Dimjašević
f361fd7355 Added translation using Weblate (Croatian) 2020-05-15 21:33:36 +00:00
ganfra
458e3ee5e8 Timeline: fetch next token with the help of getContext when required 2020-05-15 20:18:07 +02:00
Benoit Marty
5fa247a0c5 Remove temporary tool and strings_riotX.xml temporary files 2020-05-15 15:50:15 +02:00
Benoit Marty
48e58967b2 Version++ 2020-05-15 15:48:15 +02:00
Benoit Marty
d1d79c0191 Merge branch 'release/0.20.0' 2020-05-15 15:45:26 +02:00
Benoit Marty
0a41a9f773 Merge branch 'release/0.20.0' into develop 2020-05-15 15:45:26 +02:00
Benoit Marty
03fa0e6ad6 Prepare release 0.20.0 2020-05-15 15:44:36 +02:00
Benoit Marty
8eebcef4e9 Fix #1373 2020-05-15 15:36:52 +02:00
Benoit Marty
ea1c75c16a Fix lint issues in Strings 2020-05-15 12:58:14 +02:00
Benoit Marty
7a2aefd8fb Format string resources 2020-05-15 12:46:20 +02:00
Benoit Marty
33ec1bbfb3 Merge pull request #1371 from RiotTranslateBot/weblate-riot-android-riotx-application
Update from Weblate
2020-05-15 12:41:06 +02:00
Weblate
8883832b86 Merge branch 'origin/develop' into Weblate. 2020-05-15 10:09:23 +00:00
LinAGKar
308828ef50 Translated using Weblate (Swedish)
Currently translated at 14.3% (239 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-15 10:04:42 +00:00
Benoit Marty
885dac4ad1 Translated using Weblate (French)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-15 10:04:39 +00:00
Priit Jõerüüt
c03d61e09f Translated using Weblate (Estonian)
Currently translated at 1.5% (25 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/et/
2020-05-15 10:04:38 +00:00
Priit Jõerüüt
b2bacdfa4e Translated using Weblate (Estonian)
Currently translated at 92.6% (151 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/et/
2020-05-15 10:04:36 +00:00
Tirifto
06defaf14e Translated using Weblate (Esperanto)
Currently translated at 24.2% (404 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eo/
2020-05-15 10:04:33 +00:00
ganfra
22e3b370e3 IntegrationConfig: make preferred non null as we should at least get the default one 2020-05-14 17:54:27 +02:00
ganfra
8f5589d3e1 Start creating the widget url builder 2020-05-14 17:05:22 +02:00
ganfra
03389fc040 Change some naming 2020-05-14 17:05:08 +02:00
Benoit Marty
4698cf7a9b Merge pull request #1367 from vector-im/feature/fix_crash_1366
Fix crash on restore backup from ky
2020-05-14 16:07:40 +02:00
Priit Jõerüüt
5004fba986 Added translation using Weblate (Estonian) 2020-05-14 08:16:34 +00:00
Priit Jõerüüt
8cc82fe5ba Added translation using Weblate (Estonian) 2020-05-14 08:13:31 +00:00
LinAGKar
c9fb231714 Translated using Weblate (Swedish)
Currently translated at 12.0% (200 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-13 23:28:56 +00:00
Амёба
0f22b55786 Translated using Weblate (Russian)
Currently translated at 82.5% (1380 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-13 23:28:55 +00:00
zurtel22
535148e68a Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 23:28:47 +00:00
Dominik Mahnkopf
878e093b6b Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 23:28:47 +00:00
Tirifto
0e5f741b6b Translated using Weblate (Esperanto)
Currently translated at 21.2% (355 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eo/
2020-05-13 23:28:47 +00:00
Dominik Mahnkopf
36b1717fc1 Translated using Weblate (Dutch)
Currently translated at 68.4% (1144 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nl/
2020-05-13 23:28:38 +00:00
tleydxdy
37392b5495 Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/zh_Hans/
2020-05-13 23:28:38 +00:00
nikonak
84f2fc41b3 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 20:46:48 +00:00
Dominik Mahnkopf
ebdf75091a Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 20:46:48 +00:00
nikonak
ce304ace2b Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 20:24:08 +00:00
Dominik Mahnkopf
0d2acec73e Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 20:24:08 +00:00
nikonak
0144764f69 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 19:34:47 +00:00
Dominik Mahnkopf
aad4b3dc39 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-13 19:34:47 +00:00
ganfra
996aa9ef66 Merge branch 'develop' into feature/integration_manager 2020-05-13 20:21:48 +02:00
ganfra
9778999a7f Create RoomWidget feature 2020-05-13 20:04:19 +02:00
ganfra
91301197ea Try to communicate with WidgetPostAPI 2020-05-13 20:04:08 +02:00
Valere
040deea655 Fix crash on restore backup from ky 2020-05-13 16:59:55 +02:00
Valere
1e2b5dd428 Merge pull request #1365 from vector-im/feature/fix_crash_1364
Fix crash 1364
2020-05-13 16:59:08 +02:00
Valere
8d32c27ce0 Fix crash 1364 2020-05-13 16:57:57 +02:00
Valere
074a9e9f29 Merge pull request #1338 from vector-im/feature/crash_manual_verify
Crashes when private key missing
2020-05-13 16:35:38 +02:00
Valere
650b6bd9ea Merge branch 'develop' into feature/crash_manual_verify 2020-05-13 16:35:28 +02:00
Benoit Marty
3dd74d6828 Merge pull request #1095 from vector-im/feature/wellknown
Add wellknown support in the login flow
2020-05-13 15:29:02 +02:00
Benoit Marty
f717a37a4a Split long line 2020-05-13 15:28:05 +02:00
Benoit Marty
d8b1372a0f Login request does not provide the full Wellknown data. Change the model to reflect that, to avoid misunderstanding. 2020-05-13 14:03:10 +02:00
Benoit Marty
678cf50dbd Add Javadoc 2020-05-13 13:56:33 +02:00
Benoit Marty
57fca80cbb Disable possibility to login using matrixId (waiting for design) 2020-05-13 13:33:12 +02:00
Benoit Marty
cf7de8bb8b Typo 2020-05-13 12:43:54 +02:00
Benoit Marty
a70fdedce5 Try to use wellKnown request, when user is entering a homeserver URL 2020-05-13 12:43:54 +02:00
Benoit Marty
c173235ee3 ktlint 2020-05-13 12:43:54 +02:00
Benoit Marty
f74b1e6c2e Migrate Login Navigation view model to regular ViewEvents 2020-05-13 12:43:54 +02:00
Benoit Marty
c9bc6f4a9e Support homeserver discovery from MXID - Wellknown (#476) 2020-05-13 12:42:08 +02:00
Benoit Marty
63c18e82c8 typo... 2020-05-13 00:34:33 +02:00
Benoit Marty
037b2e1d60 PR merged after a release, move 2 lines 2020-05-13 00:34:03 +02:00
Benoit Marty
aea9c958bf Merge pull request #1307 from vector-im/feature/invite_members_to_room
Invite members to an existing room
2020-05-13 00:29:55 +02:00
Benoit Marty
7f185a729e Merge pull request #1345 from emmaguy/direct-shortcuts
Add direct shortcuts
2020-05-13 00:25:58 +02:00
Emma Vanbrabant
d08b4e1ea0 PR feedback 2020-05-12 19:37:03 +01:00
onurays
4eaed945e2 Fix plurals. 2020-05-12 15:31:15 +03:00
HaHaNoname
14b1b10556 Translated using Weblate (Russian)
Currently translated at 75.2% (1258 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/ru/
2020-05-12 12:28:46 +00:00
Tirifto
df762e40bb Translated using Weblate (Esperanto)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/eo/
2020-05-12 12:28:46 +00:00
Tirifto
684972185f Translated using Weblate (Esperanto)
Currently translated at 14.7% (245 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/eo/
2020-05-12 12:28:45 +00:00
onurays
04dd13d03b Use plurals in case of 3 or more invited users. 2020-05-12 14:10:23 +03:00
onurays
700fd47f22 Toast message formatting of invited users. 2020-05-12 12:10:45 +03:00
Benoit Marty
b36759deb4 Merge pull request #1226 from ndarilek/develop
Set `tickerText` to improve accessibility of notifications.
2020-05-11 22:28:36 +02:00
Benoit Marty
25d224be6b Merge branch 'develop' into develop 2020-05-11 22:27:16 +02:00
onurays
fe013f803e Add action menu icon to invite users. 2020-05-11 22:43:55 +03:00
ganfra
01d6b52a60 Widgets: handle scalar token 2020-05-11 20:00:50 +02:00
ganfra
ce884ac577 Merge branch 'develop' into feature/integration_manager 2020-05-11 15:48:27 +02:00
Benoit Marty
6abc51d05d Merge pull request #1339 from vector-im/feature/openId
Create a specific module for OpenId
2020-05-11 15:41:41 +02:00
LinAGKar
a98916c985 Translated using Weblate (Swedish)
Currently translated at 11.1% (186 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-11 10:28:38 +00:00
Frisk
9e29533aad Translated using Weblate (Polish)
Currently translated at 93.3% (1560 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pl/
2020-05-11 10:28:37 +00:00
tctovsli
7119403cde Translated using Weblate (Norwegian Bokmål)
Currently translated at 34.5% (577 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nb_NO/
2020-05-11 10:28:36 +00:00
nikonak
7f55e4fb1e Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-11 10:28:34 +00:00
zurtel22
82df62a600 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-11 10:28:34 +00:00
Pepper.Cabbit.Snoopy
d0c722eae1 Translated using Weblate (Chinese (Simplified))
Currently translated at 64.5% (1078 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/zh_Hans/
2020-05-11 10:28:33 +00:00
nikonak
40649e9c3c Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 22:23:53 +00:00
zurtel22
431b285806 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 22:23:52 +00:00
nikonak
75f84fe1f4 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 22:20:28 +00:00
zurtel22
98bf02efa9 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 22:20:28 +00:00
nikonak
0eb68b531c Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 21:47:22 +00:00
zurtel22
9124844e3e Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-10 21:47:22 +00:00
Emma Vanbrabant
f568553d21 Add to changes 2020-05-09 21:07:03 +01:00
Emma Vanbrabant
92c9d4fc22 remove unused import
Signed-off-by: Emma Vanbrabant <emmag87@gmail.com>
2020-05-09 20:58:15 +01:00
Emma Vanbrabant
957d51cf3f Fix placeholder icons 2020-05-09 20:50:58 +01:00
Emma Vanbrabant
54ecc25831 Create ShortcutBuilder and use 2020-05-09 20:12:51 +01:00
kujaw
738a368a6f Translated using Weblate (Polish)
Currently translated at 93.1% (1557 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pl/
2020-05-09 18:02:25 +00:00
LinAGKar
969f070175 Translated using Weblate (Swedish)
Currently translated at 10.6% (178 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-09 16:28:51 +00:00
@a2sc:matrix.org
d8d78b124d Translated using Weblate (German)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-09 16:28:37 +00:00
Alexander Eisele
9a9f0c200e Translated using Weblate (German)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-09 16:28:37 +00:00
Tirifto
247ffc1270 Translated using Weblate (Esperanto)
Currently translated at 82.2% (134 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/eo/
2020-05-09 16:28:37 +00:00
LinAGKar
690d05aeca Translated using Weblate (Danish)
Currently translated at 23.8% (398 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/da/
2020-05-09 16:28:30 +00:00
LinAGKar
c33f3b76fa Translated using Weblate (Swedish)
Currently translated at 0.5% (8 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sv/
2020-05-08 06:28:32 +00:00
laeberkaes
8616c454e1 Translated using Weblate (German)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/de/
2020-05-08 06:28:31 +00:00
laeberkaes
17db994d35 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-08 06:28:30 +00:00
Samu Voutilainen
6c1c1ca8b0 Translated using Weblate (Finnish)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/fi/
2020-05-08 06:28:30 +00:00
Ville Ranki
f1613eacbb Translated using Weblate (Finnish)
Currently translated at 94.0% (1572 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fi/
2020-05-08 06:28:30 +00:00
Besnik Bleta
67d1c2dc80 Translated using Weblate (Albanian)
Currently translated at 98.8% (161 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/sq/
2020-05-08 06:28:28 +00:00
Besnik Bleta
c2b2b856a1 Translated using Weblate (Albanian)
Currently translated at 99.6% (1665 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sq/
2020-05-08 06:28:28 +00:00
LinAGKar
44f946513f Added translation using Weblate (Swedish) 2020-05-08 06:15:51 +00:00
Valere
1cafca6de6 Merge pull request #1334 from vector-im/feature/fix_1329
Fix #1329
2020-05-07 17:45:09 +02:00
Nolan Darilek
35ee7f0b40 Add changelog entry. 2020-05-07 15:38:28 +00:00
Nolan Darilek
6e8e7164c6 Use last event when generating ticker text. 2020-05-07 15:29:42 +00:00
Nolan Darilek
6bbded1e65 Use string resource for generating ticker text. 2020-05-07 15:14:31 +00:00
Ville Ranki
0aa90c3eea Translated using Weblate (Finnish)
Currently translated at 100.0% (163 of 163 strings)

Translation: Riot Android/RiotX Matrix SDK
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-matrix-sdk/fi/
2020-05-07 06:15:43 +00:00
Alexander Eisele
b44b0ec998 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:10:26 +00:00
laeberkaes
07c6259734 Translated using Weblate (German)
Currently translated at 99.9% (1671 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:10:25 +00:00
Alexander Eisele
1785d4d0b4 Translated using Weblate (German)
Currently translated at 99.6% (1665 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:08:11 +00:00
laeberkaes
22d06928c8 Translated using Weblate (German)
Currently translated at 99.6% (1665 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:08:11 +00:00
Alexander Eisele
d6fe6e44bd Translated using Weblate (German)
Currently translated at 99.3% (1660 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:06:47 +00:00
laeberkaes
d51ee19f3f Translated using Weblate (German)
Currently translated at 99.3% (1660 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:06:47 +00:00
Alexander Eisele
717e5161a6 Translated using Weblate (German)
Currently translated at 98.9% (1654 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:05:07 +00:00
laeberkaes
be9fa268b1 Translated using Weblate (German)
Currently translated at 98.9% (1654 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:05:07 +00:00
Alexander Eisele
14e8bbcec6 Translated using Weblate (German)
Currently translated at 98.9% (1653 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:03:45 +00:00
laeberkaes
26105dc25f Translated using Weblate (German)
Currently translated at 98.9% (1653 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:03:45 +00:00
Alexander Eisele
53ba1c2068 Translated using Weblate (German)
Currently translated at 98.8% (1652 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:03:19 +00:00
laeberkaes
fa004c9d93 Translated using Weblate (German)
Currently translated at 98.8% (1652 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:03:18 +00:00
Alexander Eisele
be94921918 Translated using Weblate (German)
Currently translated at 98.7% (1650 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:00:54 +00:00
laeberkaes
2f5fe59aa6 Translated using Weblate (German)
Currently translated at 98.7% (1650 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 22:00:53 +00:00
Alexander Eisele
89fb2cf391 Translated using Weblate (German)
Currently translated at 98.3% (1644 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:55:58 +00:00
laeberkaes
f1d2abc9b1 Translated using Weblate (German)
Currently translated at 98.3% (1644 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:55:58 +00:00
Alexander Eisele
2aa8512f6f Translated using Weblate (German)
Currently translated at 98.1% (1641 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:52:02 +00:00
laeberkaes
2d31402cf0 Translated using Weblate (German)
Currently translated at 98.1% (1641 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:52:02 +00:00
Alexander Eisele
6d61848ed6 Translated using Weblate (German)
Currently translated at 98.1% (1640 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:42:56 +00:00
laeberkaes
0e0b724535 Translated using Weblate (German)
Currently translated at 98.1% (1640 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:42:55 +00:00
Alexander Eisele
e13915b0c7 Translated using Weblate (German)
Currently translated at 98.0% (1639 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:40:19 +00:00
laeberkaes
361f0415bb Translated using Weblate (German)
Currently translated at 98.0% (1639 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:40:18 +00:00
Alexander Eisele
c3b662fa1f Translated using Weblate (German)
Currently translated at 98.0% (1638 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:40:01 +00:00
laeberkaes
2d3e23ee11 Translated using Weblate (German)
Currently translated at 98.0% (1638 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:40:00 +00:00
Alexander Eisele
fc8ab0d462 Translated using Weblate (German)
Currently translated at 97.9% (1637 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:36:10 +00:00
laeberkaes
89629ffe93 Translated using Weblate (German)
Currently translated at 97.9% (1637 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:36:10 +00:00
Alexander Eisele
e97d565809 Translated using Weblate (German)
Currently translated at 97.8% (1636 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:35:28 +00:00
laeberkaes
7e3413eda7 Translated using Weblate (German)
Currently translated at 97.8% (1636 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:35:28 +00:00
Alexander Eisele
7966f6e308 Translated using Weblate (German)
Currently translated at 97.7% (1634 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:34:42 +00:00
laeberkaes
e1286a0ed4 Translated using Weblate (German)
Currently translated at 97.7% (1634 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:34:42 +00:00
Alexander Eisele
1e2d267fec Translated using Weblate (German)
Currently translated at 97.6% (1632 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:36 +00:00
laeberkaes
8b3403c115 Translated using Weblate (German)
Currently translated at 97.6% (1632 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:35 +00:00
Alexander Eisele
da4b029093 Translated using Weblate (German)
Currently translated at 97.5% (1631 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:22 +00:00
laeberkaes
b48113a353 Translated using Weblate (German)
Currently translated at 97.5% (1631 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:21 +00:00
Alexander Eisele
e1884e7c73 Translated using Weblate (German)
Currently translated at 97.5% (1630 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:01 +00:00
laeberkaes
daae030134 Translated using Weblate (German)
Currently translated at 97.5% (1630 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:32:01 +00:00
Alexander Eisele
19e1da1216 Translated using Weblate (German)
Currently translated at 97.3% (1627 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:30:27 +00:00
laeberkaes
e9bb95b3b3 Translated using Weblate (German)
Currently translated at 97.3% (1627 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:30:26 +00:00
Alexander Eisele
a43ca5925c Translated using Weblate (German)
Currently translated at 97.1% (1624 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:28:41 +00:00
laeberkaes
dd46798bda Translated using Weblate (German)
Currently translated at 97.1% (1624 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:28:41 +00:00
Alexander Eisele
d70a09ded8 Translated using Weblate (German)
Currently translated at 97.1% (1623 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:27:28 +00:00
laeberkaes
439aa7854c Translated using Weblate (German)
Currently translated at 97.1% (1623 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 21:27:28 +00:00
Benoit Marty
750550ad3e Create a specific module for OpenId 2020-05-06 22:14:56 +02:00
Besnik Bleta
b6af2269d2 Translated using Weblate (Albanian)
Currently translated at 99.6% (1665 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/sq/
2020-05-06 18:59:23 +00:00
ganfra
b047f36e86 Creates a Widget Manager to be used internally and state event service 2020-05-06 20:49:07 +02:00
kujaw
afbda4ac28 Translated using Weblate (Polish)
Currently translated at 93.1% (1556 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/pl/
2020-05-06 17:23:33 +00:00
Szimszon
f5fd0ac323 Translated using Weblate (Hungarian)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/hu/
2020-05-06 17:23:31 +00:00
Alexander Eisele
18de0ca951 Translated using Weblate (German)
Currently translated at 96.9% (1621 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 17:23:31 +00:00
Christopher Rossbach
b53c073b90 Translated using Weblate (German)
Currently translated at 96.9% (1621 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-06 17:23:30 +00:00
Kévin C
13ebef334f Translated using Weblate (French)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-06 17:23:30 +00:00
Ville Ranki
b1ba4e393e Translated using Weblate (Finnish)
Currently translated at 93.8% (1568 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fi/
2020-05-06 17:23:30 +00:00
Martijn de Boer
d898bc71f7 Translated using Weblate (Dutch)
Currently translated at 68.4% (1144 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/nl/
2020-05-06 17:23:20 +00:00
Valere
0afa7a706a Update change log 2020-05-06 18:20:43 +02:00
Valere
da68212255 Crashes when private key missing 2020-05-06 18:14:44 +02:00
ganfra
4fdd2f4eed Create WidgetsAPI 2020-05-06 15:53:28 +02:00
Valere
583139d51e klint 2020-05-06 15:06:34 +02:00
Valere
cee8ae3af4 Fix #1329
+ migration to remove duplicate
2020-05-06 15:04:17 +02:00
ganfra
182753e4ec Start creating integration manager 2020-05-06 11:53:35 +02:00
onurays
c7c6cf70e4 Code review fixes. 2020-05-06 11:20:08 +03:00
Dirmin
1491bddb3b Translated using Weblate (French)
Currently translated at 100.0% (1672 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/fr/
2020-05-06 06:42:49 +00:00
Alexander Eisele
ac5db83880 Translated using Weblate (German)
Currently translated at 96.5% (1614 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-05 13:35:17 +00:00
Christopher Rossbach
b2f3ba220e Translated using Weblate (German)
Currently translated at 96.5% (1614 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-05 13:35:17 +00:00
n3niu
deb783f797 Translated using Weblate (German)
Currently translated at 96.5% (1613 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-05 13:34:25 +00:00
Alexander Eisele
5fcf54cd57 Translated using Weblate (German)
Currently translated at 96.5% (1613 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-05 13:34:25 +00:00
ganfra
29c9d3070c Start creating bunch of necessary classes 2020-05-05 13:05:45 +02:00
Benoit Marty
4306cb7812 Upgrade build tools version (SDK 29) 2020-05-05 12:08:19 +02:00
Benoit Marty
a4b8dc9400 Fix test compilation issue 2020-05-05 11:49:03 +02:00
Benoit Marty
c7a7ad7b57 Merge branch 'hotfix/fix_crash_before_release' into develop 2020-05-05 11:33:40 +02:00
Benoit Marty
ffeae7ec83 Fix timeline navigation when opening an event in a previous lastForward chunk.
In this case, we do not have a nextToken, but there are more event to load. So we perform a GET /context on the last known event.
Not sure it is correct to do that though...
2020-05-05 02:41:32 +02:00
Benoit Marty
db77e7b817 Create a fun 2020-05-05 02:41:32 +02:00
Benoit Marty
fcee85a682 Cleanup and doc 2020-05-05 02:41:32 +02:00
Benoit Marty
17ddb5ce43 if all events are rendered in the timeline (developer mode), render the room creation event. 2020-05-05 02:41:32 +02:00
Benoit Marty
53583c691f Add some logs 2020-05-05 02:41:32 +02:00
Benoit Marty
2b9d3960b3 Improve tests 2020-05-05 02:41:32 +02:00
Benoit Marty
92befcde5d Add test to cover previous last forward case (passing) 2020-05-05 02:41:32 +02:00
Benoit Marty
697eaec197 TI: After jump to unread, newer messages are never loaded (#1008) 2020-05-05 02:41:32 +02:00
Benoit Marty
86fba28313 After jump to unread, newer messages are never loaded (#1008) 2020-05-05 02:41:32 +02:00
Benoit Marty
f3c3c07d46 Kotlin sugar 2020-05-05 00:14:57 +02:00
Benoit Marty
8966e24925 Create a debug method to send x times the same event 2020-05-05 00:14:57 +02:00
Benoit Marty
becc5a7b54 Add assertion in debug 2020-05-05 00:14:57 +02:00
Benoit Marty
a61434ae08 doc 2020-05-05 00:14:57 +02:00
Benoit Marty
20b726819f Rename "LastLive" -> "LastForward" 2020-05-05 00:14:57 +02:00
Benoit Marty
bfd847179f Wait more 2020-05-05 00:14:57 +02:00
Benoit Marty
7e955ef0e4 Add possibility to create clear room 2020-05-05 00:14:57 +02:00
Benoit Marty
2697800deb Doc and cleanup 2020-05-05 00:14:57 +02:00
Benoit Marty
2c47fe9f0d typo 2020-05-05 00:14:57 +02:00
aWeinzierl
423f21b02e Translated using Weblate (German)
Currently translated at 96.4% (1611 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-04 18:43:34 +00:00
Alexander Eisele
eb6546d81c Translated using Weblate (German)
Currently translated at 96.4% (1611 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-04 18:43:33 +00:00
upgradetofreedom
4e2878300f Translated using Weblate (German)
Currently translated at 96.4% (1611 of 1672 strings)

Translation: Riot Android/RiotX application
Translate-URL: https://translate.riot.im/projects/riot-android/riotx-application/de/
2020-05-04 18:43:33 +00:00
Benoit Marty
6843ea113b Version++ 2020-05-04 16:06:41 +02:00
Benoit Marty
c0b7ea6dd1 Merge branch 'release/0.19.0' into develop 2020-05-04 16:03:34 +02:00
onurays
3a0eed795a Lint fix. 2020-05-04 12:09:36 +03:00
onurays
c1c0c6f2c6 Lint fixes. 2020-05-04 11:22:27 +03:00
Onuray Sahin
d2f0957eba Merge branch 'develop' into feature/invite_members_to_room 2020-04-30 16:11:52 +03:00
onurays
db18272ef2 Remove strings from strings_riotX.xml 2020-04-30 15:47:31 +03:00
onurays
cf5d89ea9b Documentation added for new parameter excludedUserIds. 2020-04-30 15:40:54 +03:00
onurays
0aeb327062 Changelog added. 2020-04-30 15:40:02 +03:00
onurays
5dc50195b3 Filter existing room members. 2020-04-30 15:28:20 +03:00
onurays
57a87ba620 Add InviteUsersToRoomActivity and mvrx classes. 2020-04-30 13:54:09 +03:00
onurays
a4eba653a3 Make a generic user directory search & selection views. 2020-04-30 02:50:30 +03:00
onurays
f25c981173 Add menu item to invite users to the room. 2020-04-28 17:30:23 +03:00
Benoit Marty
aa16ba88ae Add hint to translators 2020-04-27 12:41:47 +02:00
Nolan Darilek
2e4d30ef29 Set tickerText to improve accessibility of notifications.
Signed-off-by: Nolan Darilek <nolan@thewordnerd.info>
2020-04-15 07:43:41 -05:00
unclejay
a2367ef14f added network proxy configuration 2020-03-16 21:12:15 +01:00
3013 changed files with 101290 additions and 34521 deletions

34
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,34 @@
---
name: Bug report
about: Create a report to help us improve Element
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Smartphone (please complete the following information):**
- Device: [e.g. Samsung S6]
- OS: [e.g. Android 6.0]
**Additional context**
- App version and store [e.g. 1.0.0 - F-Droid]
- Homeserver: [e.g. matrix.org]
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: type:suggestion
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -1,10 +1,10 @@
### Pull Request Checklist
<!-- Please read [CONTRIBUTING.md](https://github.com/vector-im/riotX-android/blob/develop/CONTRIBUTING.md) before submitting your pull request -->
<!-- Please read [CONTRIBUTING.md](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md) before submitting your pull request -->
- [ ] Changes has been tested on an Android device or Android emulator with API 16
- [ ] Changes has been tested on an Android device or Android emulator with API 21
- [ ] UI change has been tested on both light and dark themes
- [ ] Pull request is based on the develop branch
- [ ] Pull request updates [CHANGES.md](https://github.com/vector-im/riotX-android/blob/develop/CHANGES.md)
- [ ] Pull request updates [CHANGES.md](https://github.com/vector-im/element-android/blob/develop/CHANGES.md)
- [ ] 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)

View File

@@ -0,0 +1,10 @@
name: "Validate Gradle Wrapper"
on: [push, pull_request]
jobs:
validation:
name: "Validation"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: gradle/wrapper-validation-action@v1

View File

@@ -4,7 +4,16 @@
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="kotlinx.android.synthetic" withSubpackages="true" static="false" />
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
</value>
</option>
<option name="PACKAGES_IMPORT_LAYOUT">
<value>
<package name="" alias="false" withSubpackages="true" />
<package name="java" alias="false" withSubpackages="true" />
<package name="javax" alias="false" withSubpackages="true" />
<package name="kotlin" alias="false" withSubpackages="true" />
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
<option name="ALIGN_IN_COLUMNS_CASE_BRANCH" value="true" />

View File

@@ -7,17 +7,22 @@
<w>ciphertext</w>
<w>coroutine</w>
<w>decryptor</w>
<w>displayname</w>
<w>emoji</w>
<w>emojis</w>
<w>fdroid</w>
<w>gplay</w>
<w>hmac</w>
<w>homeserver</w>
<w>jitsi</w>
<w>ktlint</w>
<w>linkified</w>
<w>linkify</w>
<w>megolm</w>
<w>msisdn</w>
<w>msisdns</w>
<w>pbkdf</w>
<w>pids</w>
<w>pkcs</w>
<w>riotx</w>
<w>signin</w>

View File

@@ -1,4 +1,4 @@
A full developer contributors list can be found [here](https://github.com/vector-im/riotX-android/graphs/contributors).
A full developer contributors list can be found [here](https://github.com/vector-im/element-android/graphs/contributors).
# Core team:
@@ -28,8 +28,8 @@ Even if we try to be able to work on all the functionalities, we have more knowl
# Other contributors
First of all, we thank all contributors who use RiotX and report problems on this GitHub project or via the integrated rageshake function.
First of all, we thank all contributors who use Element and report problems on this GitHub project or via the integrated rageshake function.
We do not forget all translators, for their work of translating RiotX into many languages. They are also the authors of RiotX.
We do not forget all translators, for their work of translating Element into many languages. They are also the authors of Element.
Feel free to add your name below, when you contribute to the project!

View File

@@ -1,3 +1,363 @@
Changes in Element 1.0.7 (2020-09-17)
===================================================
Improvements 🙌:
- Handle date formatting properly (show time am/pm if needed, display year when needed)
- Improve F-Droid Notification (#2055)
Bugfix 🐛:
- Clear the notification when the event is read elsewhere (#1822)
- Speakerphone is not used for ringback tone (#1644, #1645)
- Back camera preview is not mirrored anymore (#1776)
- Various report of people that cannot play video (#2107)
- Rooms incorrectly marked as unread (#588)
- Allow users to show/hide room member state events (#1231)
- Fix stuck on loader when launching home
SDK API changes ⚠️:
- Create a new RawService to get plain data from the server.
Other changes:
- Performance: share Realm instance used on UI thread and improve SharedPreferences reading time.
Changes in Element 1.0.6 (2020-09-08)
===================================================
Features ✨:
- List phone numbers and emails added to the Matrix account, and add emails and phone numbers to account (#44, #45)
Improvements 🙌:
- You can now join room through permalink and within room directory search
- Add long click gesture to copy userId, user display name, room name, room topic and room alias (#1774)
- Fix several issues when uploading big files (#1889)
- Do not propose to verify session if there is only one session and 4S is not configured (#1901)
- Call screen does not use proximity sensor (#1735)
Bugfix 🐛:
- Display name not shown under Settings/General (#1926)
- Editing message forgets line breaks and markdown (#1939)
- Words containing my name should not trigger notifications (#1781)
- Fix changing language issue
- Fix FontSize issue (#1483, #1787)
- Fix bad color for settings icon on Android < 24 (#1786)
- Change user or room avatar: when selecting Gallery, I'm not proposed to crop the selected image (#1590)
- Loudspeaker is always used (#1685)
- Fix uploads still don't work with room v6 (#1879)
- Can't handle ongoing call events in background (#1992)
- Handle room, user and group links by the Element app (#1795)
- Update associated site domain (#1833)
- Crash / Attachment viewer: Cannot draw a recycled Bitmap #2034
- Login with Matrix-Id | Autodiscovery fails if identity server is invalid and Homeserver ok (#2027)
- Support for image compression on Android 10
- Verification popup won't show
- Android 6: App crash when read Contact permission is granted (#2064)
- JSON for verification events leaks in to the room list (#1246)
- Replies to poll appears in timeline as unsupported events during sending (#1004)
Translations 🗣:
- The SDK is now using SAS string translations from [Weblate Matrix-doc project](https://translate.riot.im/projects/matrix-doc/) (#1909)
- New translation to kabyle
Build 🧱:
- Some dependencies have been upgraded (coroutine, recyclerView, appCompat, core-ktx, firebase-messaging)
- Buildkite:
New pipeline location: https://github.com/matrix-org/pipelines/blob/master/element-android/pipeline.yml
New build location: https://buildkite.com/matrix-dot-org/element-android
Other changes:
- Use File extension functions to make code more concise (#1996)
- Create a script to import SAS strings (#1909)
- Support `data-mx-[bg-]color` attributes on `<font>` tags.
Changes in Element 1.0.5 (2020-08-21)
===================================================
Features :
- Protect access to the app by a pin code (#1700)
- Conference with Jitsi support (#43)
Improvements 🙌:
- Share button in rooms gives room ID link without via parameters (#1927)
- Give user the possibility to prevent accidental call (#1869)
- Display device information (name, id and key) in Cryptography setting screen (#1784)
- Ensure users do not accidentally ignore other users (#1890)
- Better handling DM creation when invitees cannot be inviting due to denied federation
- Support new config.json format and config.domain.json files (#1682)
- Increase Font size on Calling screen (#1643)
- Make the user's Avatar live in the general settings
Bugfix 🐛:
- Fix incorrect date format for some Asian languages (#1928)
- Fix invisible toolbar (Status.im theme) (#1746)
- Fix relative date time formatting (#822)
- Fix crash reported by RageShake
- Fix refreshing of sessions list when another session is logged out
- Fix IllegalArgumentException: Receiver not registered: NetworkInfoReceiver (#1960)
- Failed to build unique file (#1954)
- Highlighted Event when opening a permalink from another room (#1033)
- A Kick appears has "someone has made no change" (#1959)
- Avoid NetworkOnMainThreadException when setting a user avatar
- Renew turnserver credentials when ttl runs out
Translations 🗣:
- Add PlayStore description resources in the Triple-T format, to let Weblate handle them
SDK API changes :
- Rename package `im.vector.matrix.android` to `org.matrix.android.sdk`
- Rename package `im.vector.matrix.rx` to `org.matrix.android.sdk.rx`
Build 🧱:
- Fix RtlHardcoded issues (use `Start` and `End` instead of `Left` and `Right` layout attributes)
Other changes:
- Use `Context#getSystemService` extension function provided by `core-ktx` (#1702)
- Hide Flair settings, this is not implemented yet.
- Rename package `im.vector.riotx.attachmentviewer` to `im.vector.lib.attachmentviewer`
- Rename package `im.vector.riotx.multipicker` to `im.vector.lib.multipicker`
- Rename package `im.vector.riotx` to `im.vector.app`
- Remove old code that was used on devices with api level <21
- Add Official Gradle Wrapper Validation Action
Changes in Element 1.0.4 (2020-08-03)
===================================================
Bugfix 🐛:
- Fix Crash when opening invite to room user screen
Changes in Element 1.0.3 (2020-07-31)
===================================================
Features :
- Support server admin option to disable E2EE for DMs / private rooms [users can still enable] (#1794)
Bugfix 🐛:
- Crash reported on playstore for HomeActivity launch (151 reports)
Changes in Element 1.0.2 (2020-07-29)
===================================================
Improvements 🙌:
- Added Session Database migration to avoid unneeded initial syncs
Changes in Element 1.0.1 (2020-07-28)
===================================================
Improvements 🙌:
- Sending events is now retried only 3 times, so we avoid blocking the sending queue too long.
- Display warning when fail to send events in room list
- Improve UI of edit role action in member profile
- Moderation | New screen to display list of banned users in room settings, with unban action
Bugfix 🐛:
- Fix theme issue on Room directory screen (#1613)
- Fix notification not dismissing when entering a room
- Fix uploads don't work with Room v6 (#1558)
- Fix Requesting avatar thumbnails in Element uses wrong http "user-agent" string (#1725)
- Fix 404 on EMS (#1761)
- Fix Infinite loop at startup when migrating account from Riot (#1699)
- Fix Element crashes in loop after initial sync (#1709)
- Remove inner mx-reply tags before replying
- Fix timeline items not loading when there are only filtered events
- Fix "Voice & Video" grayed out in Settings (#1733)
- Fix Allow VOIP call in all rooms with 2 participants (even if not DM)
- Migration from old client does not enable notifications (#1723)
Other changes:
- i18n deactivated account error
Changes in Element 1.0.0 (2020-07-15)
===================================================
Features :
- Re-branding: The app is now called Element. New name, new themes, new icons, etc. More details here: https://element.io/blog/welcome-to-element/ (#1691)
Bugfix 🐛:
- Video calls are shown as a voice ones in the timeline (#1676)
- Fix regression: not able to create a room without IS configured (#1679)
Changes in Riot.imX 0.91.5 (2020-07-11)
===================================================
Features :
- 3pid invite: it is now possible to invite people by email. An Identity Server has to be configured (#548)
Improvements 🙌:
- Cleaning chunks with lots of events as long as a threshold has been exceeded (35_000 events in DB) (#1634)
- Creating and listening to EventInsertEntity. (#1634)
- Handling (almost) properly the groups fetching (#1634)
- Improve fullscreen media display (#327)
- Setup server recovery banner (#1648)
- Set up SSSS from security settings (#1567)
- New lab setting to add 'unread notifications' tab to main screen
- Render third party invite event (#548)
- Display three pid invites in the room members list (#548)
Bugfix 🐛:
- Integration Manager: Wrong URL to review terms if URL in config contains path (#1606)
- Regression Composer does not grow, crops out text (#1650)
- Bug / Unwanted draft (#698)
- All users seems to be able to see the enable encryption option in room settings (#1341)
- Leave room only leaves the current version (#1656)
- Regression | Share action menu do not work (#1647)
- verification issues on transition (#1555)
- Fix issue when restoring keys backup using recovery key
SDK API changes :
- CreateRoomParams has been updated
Build 🧱:
- Upgrade some dependencies
- Revert to build-tools 3.5.3
Other changes:
- Use Intent.ACTION_CREATE_DOCUMENT to save megolm key or recovery key in a txt file
- Use `Context#withStyledAttributes` extension function (#1546)
Changes in Riot.imX 0.91.4 (2020-07-06)
===================================================
Features :
- Re-activate Wellknown support with updated UI (#1614)
Improvements 🙌:
- Upload device keys only once to the homeserver and fix crash when no network (#1629)
Bugfix 🐛:
- Fix crash when coming from a notification (#1601)
- Fix Exception when importing keys (#1576)
- File isn't downloaded when another file with the same name already exists (#1578)
- saved images don't show up in gallery (#1324)
- Fix reply fallback leaking sender locale (#429)
Build 🧱:
- Fix lint false-positive about WorkManager (#1012)
- Upgrade build-tools from 3.5.3 to 3.6.3
- Upgrade gradle from 5.4.1 to 5.6.4
Changes in Riot.imX 0.91.3 (2020-07-01)
===================================================
Notes:
- This version is the third beta version of RiotX codebase published as Riot-Android on the PlayStore.
- Changelog below includes changes of v0.91.0, v0.91.1, and v0.91.2, because the first beta versions have been tagged and
published from the branch feature/migration_from_legacy.
- This version uses temporary name `Riot.imX`, to distinguish the app with RiotX app.
Features :
- Call with WebRTC support (##611)
- Add capability to change the display name (#1529)
Improvements 🙌:
- "Add Matrix app" menu is now always visible (#1495)
- Handle `/op`, `/deop`, and `/nick` commands (#12)
- Prioritising Recovery key over Recovery passphrase (#1463)
- Room Settings: Name, Topic, Photo, Aliases, History Visibility (#1455)
- Update user avatar (#1054)
- Allow self-signed certificate (#1564)
- Improve file download and open in timeline
- Catchup tab is removed temporarily (#1565)
- Render room avatar change (#1319)
Bugfix 🐛:
- Fix dark theme issue on login screen (#1097)
- Incomplete predicate in RealmCryptoStore#getOutgoingRoomKeyRequest (#1519)
- User could not redact message that they have sent (#1543)
- Use vendor prefix for non merged MSC (#1537)
- Compress images before sending (#1333)
- Searching by displayname is case sensitive (#1468)
- Fix layout overlap issue (#1407)
Build 🧱:
- Enable code optimization (Proguard)
- SDK is now API level 21 minimum, and so RiotX (#405)
Other changes:
- Use `SharedPreferences#edit` extension function consistently (#1545)
- Use `retrofit2.Call.awaitResponse` extension provided by Retrofit 2. (#1526)
- Fix minor typo in contribution guide (#1512)
- Fix self-assignment of callback in `DefaultRoomPushRuleService#setRoomNotificationState` (#1520)
- Random housekeeping clean-ups indicated by Lint (#1520, #1541)
- Keys Backup API now use the unstable prefix (#1503)
- Remove deviceId from /keys/upload/{deviceId} as not spec-compliant (#1502)
Changes in RiotX 0.22.0 (2020-06-15)
===================================================
Features :
- Integration Manager and Widget support (#48)
- Send stickers (#51)
Improvements 🙌:
- New wording for notice when current user is the sender
- Hide "X made no changes" event by default in timeline (#1430)
- Hide left rooms in breadcrumbs (#766)
- Handle PowerLevel properly (#627)
- Correctly handle SSO login redirection
- SSO login is now performed in the default browser, or in Chrome Custom tab if available (#1400)
- Improve checking of homeserver version support (#1442)
- Add capability to add and remove a room from the favorites (#1217)
Bugfix 🐛:
- Switch theme is not fully taken into account without restarting the app
- Temporary fix to show error when user is creating an account on matrix.org with userId containing only digits (#1410)
- Reply composer overlay stays on screen too long after send (#1169)
- Fix navigation bar icon contrast on API in [21,27[ (#1342)
- Fix status bar icon contrast on API in [21,23[
- Wrong /query request (#1444)
- Make Credentials.homeServer optional because it is deprecated (#1443)
- Fix issue on dark themes, after alert popup dismiss
Other changes:
- Send plain text in the body of events containing formatted body, as per https://matrix.org/docs/spec/client_server/latest#m-room-message-msgtypes
- Update link to Modular url from "https://modular.im/" to "https://modular.im/services/matrix-hosting-riot" and open it using ChromeCustomTab
Changes in RiotX 0.21.0 (2020-05-28)
===================================================
Features :
- Identity server support (#607)
- Switch language support (#41)
- Display list of attachments of a room (#860)
Improvements 🙌:
- Better connectivity lost indicator when airplane mode is on
- Add a setting to hide redacted events (#951)
- Render formatted_body for m.notice and m.emote (#1196)
- Change icon to magnifying-glass to filter room (#1384)
Bugfix 🐛:
- After jump to unread, newer messages are never loaded (#1008)
- Fix issues with FontScale switch (#69, #645)
- "Seen by" uses 12h time (#1378)
- Enable markdown (if active) when sending emote (#734)
- Screenshots for Rageshake now includes Dialogs such as BottomSheet (#1349)
SDK API changes :
- initialize with proxy configuration
Other changes:
- support new key agreement method for SAS (#1374)
Changes in RiotX 0.20.0 (2020-05-15)
===================================================
Features :
- Add Direct Shortcuts (#652)
Improvements 🙌:
- Invite member(s) to an existing room (#1276)
- Improve notification accessibility with ticker text (#1226)
- Support homeserver discovery from MXID (DISABLED: waiting for design) (#476)
Bugfix 🐛:
- Fix | Verify Manually by Text crashes if private SSK not known (#1337)
- Sometimes the same device appears twice in the list of devices of a user (#1329)
- Random Crashes while doing sth with cross signing keys (#1364)
- Crash | crash while restoring key backup (#1366)
SDK API changes :
- excludedUserIds parameter added to the UserService.getPagedUsersLive() function
Changes in RiotX 0.19.0 (2020-05-04)
===================================================
@@ -513,7 +873,7 @@ Mode details here: https://medium.com/@RiotChat/introducing-the-riotx-beta-for-a
=======================================================
Changes in RiotX 0.X.0 (2020-XX-XX)
Changes in Element 1.X.X (2020-XX-XX)
===================================================
Features ✨:

View File

@@ -2,9 +2,7 @@
Please read https://github.com/matrix-org/synapse/blob/master/CONTRIBUTING.md
Android support can be found in this [![Riot Android Matrix room #riot-android:matrix.org](https://img.shields.io/matrix/riot-android:matrix.org.svg?label=%23riot-android:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#riot-android:matrix.org) room.
Dedicated room for RiotX: [![RiotX Android Matrix room #riot-android:matrix.org](https://img.shields.io/matrix/riotx:matrix.org.svg?label=%23RiotX:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#riotx:matrix.org)
Android support can be found in this [![Element Android Matrix room #element-android:matrix.org](https://img.shields.io/matrix/element-android:matrix.org.svg?label=%23element-android:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#element-android:matrix.org) room.
# Specific rules for Matrix Android projects
@@ -19,7 +17,11 @@ An Android Studio template has been added to the project to help creating all fi
To install the template (to be done only once):
- Go to folder `./tools/template`.
- Run the script `./configure.sh`.
- Mac OSX: Run the script `./configure.sh`.
Linux: Run `ANDROID_STUDIO=/path/to/android-studio ./configure`
- e.g. `ANDROID_STUDIO=/usr/local/android-studio ./configure`
- Restart Android Studio.
To create a new screen:
@@ -27,20 +29,18 @@ To create a new screen:
- Then right click on the package, and select `New/New Vector/RiotX Feature`.
- Follow the Wizard, especially replace `Main` by something more relevant to your feature.
- Click on `Finish`.
- Remainning steps are described as TODO in the generated files, or will be pointed out by the compilator, or at runtime :)
- Remaining steps are described as TODO in the generated files, or will be pointed out by the compilator, or at runtime :)
Note that if the templates are modified, the only things to do is to restart Android Studio for the change to take effect.
## Compilation
For now, the Matrix SDK and the RiotX application are in the same project. So there is no specific thing to do, this project should compile without any special action.
For now, the Matrix SDK and the Element application are in the same project. So there is no specific thing to do, this project should compile without any special action.
## I want to help translating RiotX
## I want to help translating Element
If you want to fix an issue with an English string, please submit a PR.
If you want to fix an issue in other languages, or add a missing translation, or even add a new language, please use [Weblate](https://translate.riot.im/projects/riot-android/).
For the moment, Strings from Riot will be used, there is no dedicated project in Weblate for RiotX.
If you want to fix an issue in other languages, or add a missing translation, or even add a new language, please use [Weblate](https://translate.riot.im/projects/element-android/).
## I want to submit a PR to fix an issue
@@ -97,7 +97,7 @@ Make sure the following commands execute without any error:
### Tests
RiotX is currently supported on Android KitKat (API 19+): please test your change on an Android device (or Android emulator) running with API 19. Many issues can happen (including crashes) on older devices.
Element is currently supported on Android Lollipop (API 21+): please test your change on an Android device (or Android emulator) running with API 21. Many issues can happen (including crashes) on older devices.
Also, if possible, please test your change on a real device. Testing on Android emulator may not be sufficient.
You should consider adding Unit tests with your PR, and also integration tests (AndroidTest). Please refer to [this document](./docs/integration_tests.md) to install and run the integration test environment.
@@ -116,7 +116,7 @@ Please consider accessibility as an important point. As a minimum requirement, i
When adding or editing layouts, make sure the layout will render correctly if device uses a RTL (Right To Left) language.
You can check this in the layout editor preview by selecting any RTL language (ex: Arabic).
Also please check that the colors are ok for all the current themes of RiotX. Please use `?attr` instead of `@color` to reference colors in the layout. You can check this in the layout editor preview by selecting all the main themes (`AppTheme.Status`, `AppTheme.Dark`, etc.).
Also please check that the colors are ok for all the current themes of Element. Please use `?attr` instead of `@color` to reference colors in the layout. You can check this in the layout editor preview by selecting all the main themes (`AppTheme.Status`, `AppTheme.Dark`, etc.).
### Authors

View File

@@ -1,38 +1,34 @@
[![Buildkite](https://badge.buildkite.com/657d3db27364448d69d54f66c690f7788bc6aa80a7628e37f3.svg?branch=develop)](https://buildkite.com/matrix-dot-org/riotx-android/builds?branch=develop)
[![Weblate](https://translate.riot.im/widgets/riot-android/-/svg-badge.svg)](https://translate.riot.im/engage/riot-android/?utm_source=widget)
[![RiotX Android Matrix room #riot-android:matrix.org](https://img.shields.io/matrix/riotx:matrix.org.svg?label=%23RiotX:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#riotx:matrix.org)
[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=alert_status)](https://sonarcloud.io/dashboard?id=vector.android.riotx)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=vector.android.riotx)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=vector.android.riotx&metric=bugs)](https://sonarcloud.io/dashboard?id=vector.android.riotx)
[![Buildkite](https://badge.buildkite.com/ad0065c1b70f557cd3b1d3d68f9c2154010f83c4d6f71706a9.svg?branch=develop)](https://buildkite.com/matrix-dot-org/element-android/builds?branch=develop)
[![Weblate](https://translate.riot.im/widgets/element-android/-/svg-badge.svg)](https://translate.riot.im/engage/element-android/?utm_source=widget)
[![Element Android Matrix room #element-android:matrix.org](https://img.shields.io/matrix/element-android:matrix.org.svg?label=%23element-android:matrix.org&logo=matrix&server_fqdn=matrix.org)](https://matrix.to/#/#element-android:matrix.org)
[![Quality Gate](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=alert_status)](https://sonarcloud.io/dashboard?id=im.vector.app.android)
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=im.vector.app.android)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=im.vector.app.android&metric=bugs)](https://sonarcloud.io/dashboard?id=im.vector.app.android)
# RiotX Android
# Element Android
RiotX is an Android Matrix Client currently in beta but in active development.
Element Android is an Android Matrix Client provided by [Element](https://element.io/).
It is a total rewrite of [Riot-Android](https://github.com/vector-im/riot-android) with a new user experience. RiotX will become the official replacement as soon as all features are implemented.
It is a total rewrite of [Riot-Android](https://github.com/vector-im/riot-android) with a new user experience.
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png" alt="Get it on Google Play" height="60">](https://play.google.com/store/apps/details?id=im.vector.riotx)
[<img src="https://f-droid.org/badge/get-it-on.png" alt="Get it on F-Droid" height="60">](https://f-droid.org/app/im.vector.riotx)
[<img src="resources/img/google-play-badge.png" alt="Get it on Google Play" height="60">](https://play.google.com/store/apps/details?id=im.vector.app)
[<img src="resources/img/f-droid-badge.png" alt="Get it on F-Droid" height="60">](https://f-droid.org/app/im.vector.app)
Nightly build: [![Buildkite](https://badge.buildkite.com/657d3db27364448d69d54f66c690f7788bc6aa80a7628e37f3.svg?branch=develop)](https://buildkite.com/matrix-dot-org/riotx-android/builds?branch=develop)
Nightly build: [![Buildkite](https://badge.buildkite.com/ad0065c1b70f557cd3b1d3d68f9c2154010f83c4d6f71706a9.svg?branch=develop)](https://buildkite.com/matrix-dot-org/element-android/builds?branch=develop)
# New Android SDK
RiotX is based on a new Android SDK fully written in Kotlin (like RiotX). In order to make the early development as fast as possible, RiotX and the new SDK currently share the same git repository. We will make separate repos once the SDK is stable enough.
Element is based on a new Android SDK fully written in Kotlin (like Element). In order to make the early development as fast as possible, Element and the new SDK currently share the same git repository.
At each Element release, the SDK module is copied to a dedicated repository: https://github.com/matrix-org/matrix-android-sdk2. That way, third party apps can add a regular gradle dependency to use it. So more details on how to do that here: https://github.com/matrix-org/matrix-android-sdk2.
# Roadmap
The current target is to release an application out of beta with the same level of features (and even more) as Riot.
The roadmap has 3 phases:
- [phase 0](https://github.com/vector-im/riotX-android/labels/phase0): Prototyping / Project setup
- [phase 1](https://github.com/vector-im/riotX-android/labels/phase1): Beta release to the Play Store
- [phase 2](https://github.com/vector-im/riotX-android/labels/phase2): Out of beta
The version 1.0.0 of Element still misses some features which was previously included in Riot-Android.
The team will work to add them on a regular basis.
## Contributing
Please refer to [CONTRIBUTING.md](https://github.com/vector-im/riotX-android/blob/develop/CONTRIBUTING.md) if you want to contribute on Matrix Android projects!
Please refer to [CONTRIBUTING.md](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md) if you want to contribute on Matrix Android projects!
Come chat with the community in the dedicated Matrix [room](https://matrix.to/#/#riotx:matrix.org).
Come chat with the community in the dedicated Matrix [room](https://matrix.to/#/#element-android:matrix.org).

1
attachment-viewer/.gitignore vendored Normal file
View File

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

View File

@@ -0,0 +1,78 @@
/*
* Copyright (c) 2020 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.
*/
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
buildscript {
repositories {
maven {
url 'https://jitpack.io'
content {
// PhotoView
includeGroupByRegex 'com\\.github\\.chrisbanes'
}
}
jcenter()
}
}
android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
implementation 'com.github.chrisbanes:PhotoView:2.0.0'
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'com.google.android.material:material:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0'
implementation 'androidx.navigation:navigation-ui-ktx:2.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

View File

21
attachment-viewer/proguard-rules.pro vendored Normal file
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,2 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest package="im.vector.lib.attachmentviewer" />

View File

@@ -0,0 +1,35 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
class AnimatedImageViewHolder constructor(itemView: View) :
BaseViewHolder(itemView) {
val touchImageView: ImageView = itemView.findViewById(R.id.imageView)
val imageLoaderProgress: ProgressBar = itemView.findViewById(R.id.imageLoaderProgress)
internal val target = DefaultImageLoaderTarget(this, this.touchImageView)
override fun onRecycled() {
super.onRecycled()
touchImageView.setImageDrawable(null)
}
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
sealed class AttachmentEvents {
data class VideoEvent(val isPlaying: Boolean, val progress: Int, val duration: Int) : AttachmentEvents()
}
interface AttachmentEventListener {
fun onEvent(event: AttachmentEvents)
}
sealed class AttachmentCommands {
object PauseVideo : AttachmentCommands()
object StartVideo : AttachmentCommands()
data class SeekTo(val percentProgress: Int) : AttachmentCommands()
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.content.Context
import android.view.View
sealed class AttachmentInfo(open val uid: String) {
data class Image(override val uid: String, val url: String, val data: Any?) : AttachmentInfo(uid)
data class AnimatedImage(override val uid: String, val url: String, val data: Any?) : AttachmentInfo(uid)
data class Video(override val uid: String, val url: String, val data: Any, val thumbnail: Image?) : AttachmentInfo(uid)
// data class Audio(override val uid: String, val url: String, val data: Any) : AttachmentInfo(uid)
// data class File(override val uid: String, val url: String, val data: Any) : AttachmentInfo(uid)
}
interface AttachmentSourceProvider {
fun getItemCount(): Int
fun getAttachmentInfoAt(position: Int): AttachmentInfo
fun loadImage(target: ImageLoaderTarget, info: AttachmentInfo.Image)
fun loadImage(target: ImageLoaderTarget, info: AttachmentInfo.AnimatedImage)
fun loadVideo(target: VideoLoaderTarget, info: AttachmentInfo.Video)
fun overlayViewAtPosition(context: Context, position: Int): View?
fun clear(id: String)
}

View File

@@ -0,0 +1,335 @@
/*
* Copyright (c) 2020 New Vector Ltd
* Copyright (C) 2018 stfalcon.com
*
* 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 im.vector.lib.attachmentviewer
import android.graphics.Color
import android.os.Bundle
import android.view.GestureDetector
import android.view.MotionEvent
import android.view.ScaleGestureDetector
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.GestureDetectorCompat
import androidx.core.view.ViewCompat
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.transition.TransitionManager
import androidx.viewpager2.widget.ViewPager2
import kotlinx.android.synthetic.main.activity_attachment_viewer.*
import java.lang.ref.WeakReference
import kotlin.math.abs
abstract class AttachmentViewerActivity : AppCompatActivity(), AttachmentEventListener {
lateinit var pager2: ViewPager2
lateinit var imageTransitionView: ImageView
lateinit var transitionImageContainer: ViewGroup
var topInset = 0
var bottomInset = 0
var systemUiVisibility = true
private var overlayView: View? = null
set(value) {
if (value == overlayView) return
overlayView?.let { rootContainer.removeView(it) }
rootContainer.addView(value)
value?.updatePadding(top = topInset, bottom = bottomInset)
field = value
}
private lateinit var swipeDismissHandler: SwipeToDismissHandler
private lateinit var directionDetector: SwipeDirectionDetector
private lateinit var scaleDetector: ScaleGestureDetector
private lateinit var gestureDetector: GestureDetectorCompat
var currentPosition = 0
private var swipeDirection: SwipeDirection? = null
private fun isScaled() = attachmentsAdapter.isScaled(currentPosition)
private var wasScaled: Boolean = false
private var isSwipeToDismissAllowed: Boolean = true
private lateinit var attachmentsAdapter: AttachmentsAdapter
private var isOverlayWasClicked = false
// private val shouldDismissToBottom: Boolean
// get() = e == null
// || !externalTransitionImageView.isRectVisible
// || !isAtStartPosition
private var isImagePagerIdle = true
fun setSourceProvider(sourceProvider: AttachmentSourceProvider) {
attachmentsAdapter.attachmentSourceProvider = sourceProvider
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// This is important for the dispatchTouchEvent, if not we must correct
// the touch coordinates
window.decorView.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_IMMERSIVE)
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)
setContentView(R.layout.activity_attachment_viewer)
attachmentPager.orientation = ViewPager2.ORIENTATION_HORIZONTAL
attachmentsAdapter = AttachmentsAdapter()
attachmentPager.adapter = attachmentsAdapter
imageTransitionView = transitionImageView
transitionImageContainer = findViewById(R.id.transitionImageContainer)
pager2 = attachmentPager
directionDetector = createSwipeDirectionDetector()
gestureDetector = createGestureDetector()
attachmentPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageScrollStateChanged(state: Int) {
isImagePagerIdle = state == ViewPager2.SCROLL_STATE_IDLE
}
override fun onPageSelected(position: Int) {
onSelectedPositionChanged(position)
}
})
swipeDismissHandler = createSwipeToDismissHandler()
rootContainer.setOnTouchListener(swipeDismissHandler)
rootContainer.viewTreeObserver.addOnGlobalLayoutListener { swipeDismissHandler.translationLimit = dismissContainer.height / 4 }
scaleDetector = createScaleGestureDetector()
ViewCompat.setOnApplyWindowInsetsListener(rootContainer) { _, insets ->
overlayView?.updatePadding(top = insets.systemWindowInsetTop, bottom = insets.systemWindowInsetBottom)
topInset = insets.systemWindowInsetTop
bottomInset = insets.systemWindowInsetBottom
insets
}
}
fun onSelectedPositionChanged(position: Int) {
attachmentsAdapter.recyclerView?.findViewHolderForAdapterPosition(currentPosition)?.let {
(it as? BaseViewHolder)?.onSelected(false)
}
attachmentsAdapter.recyclerView?.findViewHolderForAdapterPosition(position)?.let {
(it as? BaseViewHolder)?.onSelected(true)
if (it is VideoViewHolder) {
it.eventListener = WeakReference(this)
}
}
currentPosition = position
overlayView = attachmentsAdapter.attachmentSourceProvider?.overlayViewAtPosition(this@AttachmentViewerActivity, position)
}
override fun onPause() {
attachmentsAdapter.onPause(currentPosition)
super.onPause()
}
override fun onResume() {
super.onResume()
attachmentsAdapter.onResume(currentPosition)
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
// The zoomable view is configured to disallow interception when image is zoomed
// Check if the overlay is visible, and wants to handle the click
if (overlayView?.isVisible == true && overlayView?.dispatchTouchEvent(ev) == true) {
return true
}
// Log.v("ATTACHEMENTS", "================\ndispatchTouchEvent $ev")
handleUpDownEvent(ev)
// Log.v("ATTACHEMENTS", "scaleDetector is in progress ${scaleDetector.isInProgress}")
// Log.v("ATTACHEMENTS", "pointerCount ${ev.pointerCount}")
// Log.v("ATTACHEMENTS", "wasScaled $wasScaled")
if (swipeDirection == null && (scaleDetector.isInProgress || ev.pointerCount > 1 || wasScaled)) {
wasScaled = true
// Log.v("ATTACHEMENTS", "dispatch to pager")
return attachmentPager.dispatchTouchEvent(ev)
}
// Log.v("ATTACHEMENTS", "is current item scaled ${isScaled()}")
return (if (isScaled()) super.dispatchTouchEvent(ev) else handleTouchIfNotScaled(ev)).also {
// Log.v("ATTACHEMENTS", "\n================")
}
}
private fun handleUpDownEvent(event: MotionEvent) {
// Log.v("ATTACHEMENTS", "handleUpDownEvent $event")
if (event.action == MotionEvent.ACTION_UP) {
handleEventActionUp(event)
}
if (event.action == MotionEvent.ACTION_DOWN) {
handleEventActionDown(event)
}
scaleDetector.onTouchEvent(event)
gestureDetector.onTouchEvent(event)
}
private fun handleEventActionDown(event: MotionEvent) {
swipeDirection = null
wasScaled = false
attachmentPager.dispatchTouchEvent(event)
swipeDismissHandler.onTouch(rootContainer, event)
isOverlayWasClicked = dispatchOverlayTouch(event)
}
private fun handleEventActionUp(event: MotionEvent) {
// wasDoubleTapped = false
swipeDismissHandler.onTouch(rootContainer, event)
attachmentPager.dispatchTouchEvent(event)
isOverlayWasClicked = dispatchOverlayTouch(event)
}
private fun handleSingleTap(event: MotionEvent, isOverlayWasClicked: Boolean) {
// TODO if there is no overlay, we should at least toggle system bars?
if (overlayView != null && !isOverlayWasClicked) {
toggleOverlayViewVisibility()
super.dispatchTouchEvent(event)
}
}
private fun toggleOverlayViewVisibility() {
if (systemUiVisibility) {
// we hide
TransitionManager.beginDelayedTransition(rootContainer)
hideSystemUI()
overlayView?.isVisible = false
} else {
// we show
TransitionManager.beginDelayedTransition(rootContainer)
showSystemUI()
overlayView?.isVisible = true
}
}
private fun handleTouchIfNotScaled(event: MotionEvent): Boolean {
// Log.v("ATTACHEMENTS", "handleTouchIfNotScaled $event")
directionDetector.handleTouchEvent(event)
return when (swipeDirection) {
SwipeDirection.Up, SwipeDirection.Down -> {
if (isSwipeToDismissAllowed && !wasScaled && isImagePagerIdle) {
swipeDismissHandler.onTouch(rootContainer, event)
} else true
}
SwipeDirection.Left, SwipeDirection.Right -> {
attachmentPager.dispatchTouchEvent(event)
}
else -> true
}
}
private fun handleSwipeViewMove(translationY: Float, translationLimit: Int) {
val alpha = calculateTranslationAlpha(translationY, translationLimit)
backgroundView.alpha = alpha
dismissContainer.alpha = alpha
overlayView?.alpha = alpha
}
private fun dispatchOverlayTouch(event: MotionEvent): Boolean =
overlayView
?.let { it.isVisible && it.dispatchTouchEvent(event) }
?: false
private fun calculateTranslationAlpha(translationY: Float, translationLimit: Int): Float =
1.0f - 1.0f / translationLimit.toFloat() / 4f * abs(translationY)
private fun createSwipeToDismissHandler()
: SwipeToDismissHandler = SwipeToDismissHandler(
swipeView = dismissContainer,
shouldAnimateDismiss = { shouldAnimateDismiss() },
onDismiss = { animateClose() },
onSwipeViewMove = ::handleSwipeViewMove)
private fun createSwipeDirectionDetector() =
SwipeDirectionDetector(this) { swipeDirection = it }
private fun createScaleGestureDetector() =
ScaleGestureDetector(this, ScaleGestureDetector.SimpleOnScaleGestureListener())
private fun createGestureDetector() =
GestureDetectorCompat(this, object : GestureDetector.SimpleOnGestureListener() {
override fun onSingleTapConfirmed(e: MotionEvent): Boolean {
if (isImagePagerIdle) {
handleSingleTap(e, isOverlayWasClicked)
}
return false
}
override fun onDoubleTap(e: MotionEvent?): Boolean {
return super.onDoubleTap(e)
}
})
override fun onEvent(event: AttachmentEvents) {
if (overlayView is AttachmentEventListener) {
(overlayView as? AttachmentEventListener)?.onEvent(event)
}
}
protected open fun shouldAnimateDismiss(): Boolean = true
protected open fun animateClose() {
window.statusBarColor = Color.TRANSPARENT
finish()
}
fun handle(commands: AttachmentCommands) {
(attachmentsAdapter.recyclerView?.findViewHolderForAdapterPosition(currentPosition) as? BaseViewHolder)
?.handleCommand(commands)
}
private fun hideSystemUI() {
systemUiVisibility = false
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
// Shows the system bars by removing all the flags
// except for the ones that make the content appear under the system bars.
private fun showSystemUI() {
systemUiVisibility = true
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
}
}

View File

@@ -0,0 +1,115 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
class AttachmentsAdapter : RecyclerView.Adapter<BaseViewHolder>() {
var attachmentSourceProvider: AttachmentSourceProvider? = null
set(value) {
field = value
notifyDataSetChanged()
}
var recyclerView: RecyclerView? = null
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
this.recyclerView = recyclerView
}
override fun onDetachedFromRecyclerView(recyclerView: RecyclerView) {
this.recyclerView = null
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder {
val inflater = LayoutInflater.from(parent.context)
val itemView = inflater.inflate(viewType, parent, false)
return when (viewType) {
R.layout.item_image_attachment -> ZoomableImageViewHolder(itemView)
R.layout.item_animated_image_attachment -> AnimatedImageViewHolder(itemView)
R.layout.item_video_attachment -> VideoViewHolder(itemView)
else -> UnsupportedViewHolder(itemView)
}
}
override fun getItemViewType(position: Int): Int {
val info = attachmentSourceProvider!!.getAttachmentInfoAt(position)
return when (info) {
is AttachmentInfo.Image -> R.layout.item_image_attachment
is AttachmentInfo.Video -> R.layout.item_video_attachment
is AttachmentInfo.AnimatedImage -> R.layout.item_animated_image_attachment
// is AttachmentInfo.Audio -> TODO()
// is AttachmentInfo.File -> TODO()
}
}
override fun getItemCount(): Int {
return attachmentSourceProvider?.getItemCount() ?: 0
}
override fun onBindViewHolder(holder: BaseViewHolder, position: Int) {
attachmentSourceProvider?.getAttachmentInfoAt(position)?.let {
holder.bind(it)
when (it) {
is AttachmentInfo.Image -> {
attachmentSourceProvider?.loadImage((holder as ZoomableImageViewHolder).target, it)
}
is AttachmentInfo.AnimatedImage -> {
attachmentSourceProvider?.loadImage((holder as AnimatedImageViewHolder).target, it)
}
is AttachmentInfo.Video -> {
attachmentSourceProvider?.loadVideo((holder as VideoViewHolder).target, it)
}
// else -> {
// // }
}
}
}
override fun onViewAttachedToWindow(holder: BaseViewHolder) {
holder.onAttached()
}
override fun onViewRecycled(holder: BaseViewHolder) {
holder.onRecycled()
}
override fun onViewDetachedFromWindow(holder: BaseViewHolder) {
holder.onDetached()
}
fun isScaled(position: Int): Boolean {
val holder = recyclerView?.findViewHolderForAdapterPosition(position)
if (holder is ZoomableImageViewHolder) {
return holder.touchImageView.attacher.scale > 1f
}
return false
}
fun onPause(position: Int) {
val holder = recyclerView?.findViewHolderForAdapterPosition(position) as? BaseViewHolder
holder?.entersBackground()
}
fun onResume(position: Int) {
val holder = recyclerView?.findViewHolderForAdapterPosition(position) as? BaseViewHolder
holder?.entersForeground()
}
}

View File

@@ -0,0 +1,45 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.view.View
import androidx.recyclerview.widget.RecyclerView
abstract class BaseViewHolder constructor(itemView: View) :
RecyclerView.ViewHolder(itemView) {
open fun onRecycled() {
boundResourceUid = null
}
open fun onAttached() {}
open fun onDetached() {}
open fun entersBackground() {}
open fun entersForeground() {}
open fun onSelected(selected: Boolean) {}
open fun handleCommand(commands: AttachmentCommands) {}
var boundResourceUid: String? = null
open fun bind(attachmentInfo: AttachmentInfo) {
boundResourceUid = attachmentInfo.uid
}
}
class UnsupportedViewHolder constructor(itemView: View) :
BaseViewHolder(itemView)

View File

@@ -0,0 +1,106 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.graphics.drawable.Animatable
import android.graphics.drawable.Drawable
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
interface ImageLoaderTarget {
fun contextView(): ImageView
fun onResourceLoading(uid: String, placeholder: Drawable?)
fun onLoadFailed(uid: String, errorDrawable: Drawable?)
fun onResourceCleared(uid: String, placeholder: Drawable?)
fun onResourceReady(uid: String, resource: Drawable)
}
internal class DefaultImageLoaderTarget(val holder: AnimatedImageViewHolder, private val contextView: ImageView)
: ImageLoaderTarget {
override fun contextView(): ImageView {
return contextView
}
override fun onResourceLoading(uid: String, placeholder: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = true
}
override fun onLoadFailed(uid: String, errorDrawable: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = false
holder.touchImageView.setImageDrawable(errorDrawable)
}
override fun onResourceCleared(uid: String, placeholder: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.touchImageView.setImageDrawable(placeholder)
}
override fun onResourceReady(uid: String, resource: Drawable) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = false
// Glide mess up the view size :/
holder.touchImageView.updateLayoutParams {
width = LinearLayout.LayoutParams.MATCH_PARENT
height = LinearLayout.LayoutParams.MATCH_PARENT
}
holder.touchImageView.setImageDrawable(resource)
if (resource is Animatable) {
resource.start()
}
}
internal class ZoomableImageTarget(val holder: ZoomableImageViewHolder, private val contextView: ImageView) : ImageLoaderTarget {
override fun contextView() = contextView
override fun onResourceLoading(uid: String, placeholder: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = true
holder.touchImageView.setImageDrawable(placeholder)
}
override fun onLoadFailed(uid: String, errorDrawable: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = false
holder.touchImageView.setImageDrawable(errorDrawable)
}
override fun onResourceCleared(uid: String, placeholder: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.touchImageView.setImageDrawable(placeholder)
}
override fun onResourceReady(uid: String, resource: Drawable) {
if (holder.boundResourceUid != uid) return
holder.imageLoaderProgress.isVisible = false
// Glide mess up the view size :/
holder.touchImageView.updateLayoutParams {
width = LinearLayout.LayoutParams.MATCH_PARENT
height = LinearLayout.LayoutParams.MATCH_PARENT
}
holder.touchImageView.setImageDrawable(resource)
}
}
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2020 New Vector Ltd
* Copyright (C) 2018 stfalcon.com
*
* 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 im.vector.lib.attachmentviewer
sealed class SwipeDirection {
object NotDetected : SwipeDirection()
object Up : SwipeDirection()
object Down : SwipeDirection()
object Left : SwipeDirection()
object Right : SwipeDirection()
companion object {
fun fromAngle(angle: Double): SwipeDirection {
return when (angle) {
in 0.0..45.0 -> Right
in 45.0..135.0 -> Up
in 135.0..225.0 -> Left
in 225.0..315.0 -> Down
in 315.0..360.0 -> Right
else -> NotDetected
}
}
}
}

View File

@@ -0,0 +1,91 @@
/*
* Copyright (c) 2020 New Vector Ltd
* Copyright (C) 2018 stfalcon.com
*
* 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 im.vector.lib.attachmentviewer
import android.content.Context
import android.view.MotionEvent
import kotlin.math.sqrt
class SwipeDirectionDetector(
context: Context,
private val onDirectionDetected: (SwipeDirection) -> Unit
) {
private val touchSlop: Int = android.view.ViewConfiguration.get(context).scaledTouchSlop
private var startX: Float = 0f
private var startY: Float = 0f
private var isDetected: Boolean = false
fun handleTouchEvent(event: MotionEvent) {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
startX = event.x
startY = event.y
}
MotionEvent.ACTION_CANCEL, MotionEvent.ACTION_UP -> {
if (!isDetected) {
onDirectionDetected(SwipeDirection.NotDetected)
}
startY = 0.0f
startX = startY
isDetected = false
}
MotionEvent.ACTION_MOVE -> if (!isDetected && getEventDistance(event) > touchSlop) {
isDetected = true
onDirectionDetected(getDirection(startX, startY, event.x, event.y))
}
}
}
/**
* Given two points in the plane p1=(x1, x2) and p2=(y1, y1), this method
* returns the direction that an arrow pointing from p1 to p2 would have.
*
* @param x1 the x position of the first point
* @param y1 the y position of the first point
* @param x2 the x position of the second point
* @param y2 the y position of the second point
* @return the direction
*/
private fun getDirection(x1: Float, y1: Float, x2: Float, y2: Float): SwipeDirection {
val angle = getAngle(x1, y1, x2, y2)
return SwipeDirection.fromAngle(angle)
}
/**
* Finds the angle between two points in the plane (x1,y1) and (x2, y2)
* The angle is measured with 0/360 being the X-axis to the right, angles
* increase counter clockwise.
*
* @param x1 the x position of the first point
* @param y1 the y position of the first point
* @param x2 the x position of the second point
* @param y2 the y position of the second point
* @return the angle between two points
*/
private fun getAngle(x1: Float, y1: Float, x2: Float, y2: Float): Double {
val rad = Math.atan2((y1 - y2).toDouble(), (x2 - x1).toDouble()) + Math.PI
return (rad * 180 / Math.PI + 180) % 360
}
private fun getEventDistance(ev: MotionEvent): Float {
val dx = ev.getX(0) - startX
val dy = ev.getY(0) - startY
return sqrt((dx * dx + dy * dy).toDouble()).toFloat()
}
}

View File

@@ -0,0 +1,126 @@
/*
* Copyright (c) 2020 New Vector Ltd
* Copyright (C) 2018 stfalcon.com
*
* 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 im.vector.lib.attachmentviewer
import android.animation.Animator
import android.animation.AnimatorListenerAdapter
import android.annotation.SuppressLint
import android.graphics.Rect
import android.view.MotionEvent
import android.view.View
import android.view.ViewPropertyAnimator
import android.view.animation.AccelerateInterpolator
class SwipeToDismissHandler(
private val swipeView: View,
private val onDismiss: () -> Unit,
private val onSwipeViewMove: (translationY: Float, translationLimit: Int) -> Unit,
private val shouldAnimateDismiss: () -> Boolean
) : View.OnTouchListener {
companion object {
private const val ANIMATION_DURATION = 200L
}
var translationLimit: Int = swipeView.height / 4
private var isTracking = false
private var startY: Float = 0f
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(v: View, event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
if (swipeView.hitRect.contains(event.x.toInt(), event.y.toInt())) {
isTracking = true
}
startY = event.y
return true
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
if (isTracking) {
isTracking = false
onTrackingEnd(v.height)
}
return true
}
MotionEvent.ACTION_MOVE -> {
if (isTracking) {
val translationY = event.y - startY
swipeView.translationY = translationY
onSwipeViewMove(translationY, translationLimit)
}
return true
}
else -> {
return false
}
}
}
internal fun initiateDismissToBottom() {
animateTranslation(swipeView.height.toFloat())
}
private fun onTrackingEnd(parentHeight: Int) {
val animateTo = when {
swipeView.translationY < -translationLimit -> -parentHeight.toFloat()
swipeView.translationY > translationLimit -> parentHeight.toFloat()
else -> 0f
}
if (animateTo != 0f && !shouldAnimateDismiss()) {
onDismiss()
} else {
animateTranslation(animateTo)
}
}
private fun animateTranslation(translationTo: Float) {
swipeView.animate()
.translationY(translationTo)
.setDuration(ANIMATION_DURATION)
.setInterpolator(AccelerateInterpolator())
.setUpdateListener { onSwipeViewMove(swipeView.translationY, translationLimit) }
.setAnimatorListener(onAnimationEnd = {
if (translationTo != 0f) {
onDismiss()
}
// remove the update listener, otherwise it will be saved on the next animation execution:
swipeView.animate().setUpdateListener(null)
})
.start()
}
}
internal fun ViewPropertyAnimator.setAnimatorListener(
onAnimationEnd: ((Animator?) -> Unit)? = null,
onAnimationStart: ((Animator?) -> Unit)? = null
) = this.setListener(
object : AnimatorListenerAdapter() {
override fun onAnimationEnd(animation: Animator?) {
onAnimationEnd?.invoke(animation)
}
override fun onAnimationStart(animation: Animator?) {
onAnimationStart?.invoke(animation)
}
})
internal val View?.hitRect: Rect
get() = Rect().also { this?.getHitRect(it) }

View File

@@ -0,0 +1,89 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.graphics.drawable.Drawable
import android.widget.ImageView
import androidx.core.view.isVisible
import java.io.File
interface VideoLoaderTarget {
fun contextView(): ImageView
fun onThumbnailResourceLoading(uid: String, placeholder: Drawable?)
fun onThumbnailLoadFailed(uid: String, errorDrawable: Drawable?)
fun onThumbnailResourceCleared(uid: String, placeholder: Drawable?)
fun onThumbnailResourceReady(uid: String, resource: Drawable)
fun onVideoFileLoading(uid: String)
fun onVideoFileLoadFailed(uid: String)
fun onVideoFileReady(uid: String, file: File)
fun onVideoURLReady(uid: String, path: String)
}
internal class DefaultVideoLoaderTarget(val holder: VideoViewHolder, private val contextView: ImageView) : VideoLoaderTarget {
override fun contextView(): ImageView = contextView
override fun onThumbnailResourceLoading(uid: String, placeholder: Drawable?) {
}
override fun onThumbnailLoadFailed(uid: String, errorDrawable: Drawable?) {
}
override fun onThumbnailResourceCleared(uid: String, placeholder: Drawable?) {
if (holder.boundResourceUid != uid) return
holder.thumbnailImage.setImageDrawable(placeholder)
}
override fun onThumbnailResourceReady(uid: String, resource: Drawable) {
if (holder.boundResourceUid != uid) return
holder.thumbnailImage.setImageDrawable(resource)
}
override fun onVideoFileLoading(uid: String) {
if (holder.boundResourceUid != uid) return
holder.thumbnailImage.isVisible = true
holder.loaderProgressBar.isVisible = true
holder.videoView.isVisible = false
}
override fun onVideoFileLoadFailed(uid: String) {
if (holder.boundResourceUid != uid) return
holder.videoFileLoadError()
}
override fun onVideoFileReady(uid: String, file: File) {
if (holder.boundResourceUid != uid) return
arrangeForVideoReady()
holder.videoReady(file)
}
override fun onVideoURLReady(uid: String, path: String) {
if (holder.boundResourceUid != uid) return
arrangeForVideoReady()
holder.videoReady(path)
}
private fun arrangeForVideoReady() {
holder.thumbnailImage.isVisible = false
holder.loaderProgressBar.isVisible = false
holder.videoView.isVisible = true
}
}

View File

@@ -0,0 +1,170 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.util.Log
import android.view.View
import android.widget.ImageView
import android.widget.ProgressBar
import android.widget.TextView
import android.widget.VideoView
import androidx.core.view.isVisible
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import java.io.File
import java.lang.ref.WeakReference
import java.util.concurrent.TimeUnit
// TODO, it would be probably better to use a unique media player
// for better customization and control
// But for now VideoView is enough, it released player when detached, we use a timer to update progress
class VideoViewHolder constructor(itemView: View) :
BaseViewHolder(itemView) {
private var isSelected = false
private var mVideoPath: String? = null
private var progressDisposable: Disposable? = null
private var progress: Int = 0
private var wasPaused = false
var eventListener: WeakReference<AttachmentEventListener>? = null
val thumbnailImage: ImageView = itemView.findViewById(R.id.videoThumbnailImage)
val videoView: VideoView = itemView.findViewById(R.id.videoView)
val loaderProgressBar: ProgressBar = itemView.findViewById(R.id.videoLoaderProgress)
val videoControlIcon: ImageView = itemView.findViewById(R.id.videoControlIcon)
val errorTextView: TextView = itemView.findViewById(R.id.videoMediaViewerErrorView)
internal val target = DefaultVideoLoaderTarget(this, thumbnailImage)
override fun onRecycled() {
super.onRecycled()
progressDisposable?.dispose()
progressDisposable = null
mVideoPath = null
}
fun videoReady(file: File) {
mVideoPath = file.path
if (isSelected) {
startPlaying()
}
}
fun videoReady(path: String) {
mVideoPath = path
if (isSelected) {
startPlaying()
}
}
fun videoFileLoadError() {
}
override fun entersBackground() {
if (videoView.isPlaying) {
progress = videoView.currentPosition
progressDisposable?.dispose()
progressDisposable = null
videoView.stopPlayback()
videoView.pause()
}
}
override fun entersForeground() {
onSelected(isSelected)
}
override fun onSelected(selected: Boolean) {
if (!selected) {
if (videoView.isPlaying) {
progress = videoView.currentPosition
videoView.stopPlayback()
} else {
progress = 0
}
progressDisposable?.dispose()
progressDisposable = null
} else {
if (mVideoPath != null) {
startPlaying()
}
}
isSelected = true
}
private fun startPlaying() {
thumbnailImage.isVisible = false
loaderProgressBar.isVisible = false
videoView.isVisible = true
videoView.setOnPreparedListener {
progressDisposable?.dispose()
progressDisposable = Observable.interval(100, TimeUnit.MILLISECONDS)
.timeInterval()
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
val duration = videoView.duration
val progress = videoView.currentPosition
val isPlaying = videoView.isPlaying
// Log.v("FOO", "isPlaying $isPlaying $progress/$duration")
eventListener?.get()?.onEvent(AttachmentEvents.VideoEvent(isPlaying, progress, duration))
}
}
try {
videoView.setVideoPath(mVideoPath)
} catch (failure: Throwable) {
// Couldn't open
Log.v(VideoViewHolder::class.java.name, "Failed to start video")
}
if (!wasPaused) {
videoView.start()
if (progress > 0) {
videoView.seekTo(progress)
}
}
}
override fun handleCommand(commands: AttachmentCommands) {
if (!isSelected) return
when (commands) {
AttachmentCommands.StartVideo -> {
wasPaused = false
videoView.start()
}
AttachmentCommands.PauseVideo -> {
wasPaused = true
videoView.pause()
}
is AttachmentCommands.SeekTo -> {
val duration = videoView.duration
if (duration > 0) {
val seekDuration = duration * (commands.percentProgress / 100f)
videoView.seekTo(seekDuration.toInt())
}
}
}
}
override fun bind(attachmentInfo: AttachmentInfo) {
super.bind(attachmentInfo)
progress = 0
wasPaused = false
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (c) 2020 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 im.vector.lib.attachmentviewer
import android.view.View
import android.widget.ProgressBar
import com.github.chrisbanes.photoview.PhotoView
class ZoomableImageViewHolder constructor(itemView: View) :
BaseViewHolder(itemView) {
val touchImageView: PhotoView = itemView.findViewById(R.id.touchImageView)
val imageLoaderProgress: ProgressBar = itemView.findViewById(R.id.imageLoaderProgress)
init {
touchImageView.setAllowParentInterceptOnEdge(false)
touchImageView.setOnScaleChangeListener { scaleFactor, _, _ ->
// Log.v("ATTACHEMENTS", "scaleFactor $scaleFactor")
// It's a bit annoying but when you pitch down the scaling
// is not exactly one :/
touchImageView.setAllowParentInterceptOnEdge(scaleFactor <= 1.0008f)
}
touchImageView.setScale(1.0f, true)
touchImageView.setAllowParentInterceptOnEdge(true)
}
internal val target = DefaultImageLoaderTarget.ZoomableImageTarget(this, touchImageView)
override fun onRecycled() {
super.onRecycled()
touchImageView.setImageDrawable(null)
}
}

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".AttachmentViewerActivity">
<View
android:id="@+id/backgroundView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="1"
android:background="@android:color/black" />
<FrameLayout
android:id="@+id/dismissContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/transitionImageContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="UselessParent"
tools:visibility="invisible">
<ImageView
android:id="@+id/transitionImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
</FrameLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/attachmentPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:orientation="horizontal"
android:visibility="visible" />
</FrameLayout>
</FrameLayout>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/imageView"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:layout_centerInParent="true"
android:id="@+id/imageLoaderProgress"
style="?android:attr/progressBarStyle"
android:layout_width="40dp"
android:layout_height="40dp"
android:visibility="visible"
tools:visibility="gone" />
</RelativeLayout>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/touchImageView"
android:visibility="visible"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<ProgressBar
android:layout_centerInParent="true"
android:id="@+id/imageLoaderProgress"
style="?android:attr/progressBarStyle"
android:layout_width="40dp"
android:layout_height="40dp"
android:visibility="visible"
tools:visibility="gone" />
</RelativeLayout>

View File

@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/videoThumbnailImage"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:scaleType="centerInside" />
<VideoView
android:id="@+id/videoView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
<ImageView
android:id="@+id/videoControlIcon"
android:layout_centerInParent="true"
android:visibility="gone"
tools:visibility="visible"
android:layout_width="44dp"
android:layout_height="44dp"
/>
<ProgressBar
android:layout_centerInParent="true"
android:id="@+id/videoLoaderProgress"
style="?android:attr/progressBarStyle"
android:layout_width="40dp"
android:layout_height="40dp"
android:visibility="invisible"
tools:visibility="visible" />
<TextView
android:id="@+id/videoMediaViewerErrorView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_margin="16dp"
android:textSize="16sp"
android:visibility="gone"
tools:text="Error"
tools:visibility="visible" />
</RelativeLayout>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/design_default_color_primary">
<TextView
android:id="@+id/testPage"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1"
android:textSize="80sp"
android:textStyle="bold" />
</RelativeLayout>

View File

@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.3.72'
repositories {
google()
jcenter()
@@ -10,12 +10,13 @@ buildscript {
}
}
dependencies {
// Warning: 3.6.3 leads to infinite gradle builds. Stick to 3.5.3 for the moment
classpath 'com.android.tools.build:gradle:3.5.3'
classpath 'com.google.gms:google-services:4.3.2'
classpath "com.airbnb.okreplay:gradle-plugin:1.5.0"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1'
classpath 'com.google.android.gms:oss-licenses-plugin:0.9.5'
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -38,6 +39,10 @@ allprojects {
includeGroupByRegex "com\\.github\\.yalantis"
// JsonViewer
includeGroupByRegex 'com\\.github\\.BillCarsonFr'
// PhotoView
includeGroupByRegex 'com\\.github\\.chrisbanes'
// PFLockScreen-Android
includeGroupByRegex 'com\\.github\\.vector-im'
}
}
maven {
@@ -47,6 +52,12 @@ allprojects {
}
}
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
// Jitsi repo
maven {
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
// Note: to test Jitsi release you can use a local file like this:
// url "file:///Users/bmarty/workspaces/jitsi_libre_maven/android-sdk-2.9.3"
}
google()
jcenter()
}
@@ -70,15 +81,15 @@ apply plugin: 'org.sonarqube'
sonarqube {
properties {
property "sonar.projectName", "RiotX-Android"
property "sonar.projectKey", "vector.android.riotx"
property "sonar.projectName", "Element-Android"
property "sonar.projectKey", "im.vector.app.android"
property "sonar.host.url", "https://sonarcloud.io"
property "sonar.projectVersion", project(":vector").android.defaultConfig.versionName
property "sonar.sourceEncoding", "UTF-8"
property "sonar.links.homepage", "https://github.com/vector-im/riotX-android/"
property "sonar.links.ci", "https://buildkite.com/matrix-dot-org/riotx-android"
property "sonar.links.scm", "https://github.com/vector-im/riotX-android/"
property "sonar.links.issue", "https://github.com/vector-im/riotX-android/issues"
property "sonar.links.homepage", "https://github.com/vector-im/element-android/"
property "sonar.links.ci", "https://buildkite.com/matrix-dot-org/element-android"
property "sonar.links.scm", "https://github.com/vector-im/element-android/"
property "sonar.links.issue", "https://github.com/vector-im/element-android/issues"
property "sonar.organization", "new_vector_ltd_organization"
property "sonar.login", project.hasProperty("SONAR_LOGIN") ? SONAR_LOGIN : "invalid"
}
@@ -89,11 +100,18 @@ project(":vector") {
properties {
property "sonar.sources", project(":vector").android.sourceSets.main.java.srcDirs
// exclude source code from analyses separated by a colon (:)
// property "sonar.exclusions", "**/*.*"
// Exclude Java source
property "sonar.exclusions", "**/BugReporterMultipartBody.java"
}
}
}
project(":diff-match-patch") {
sonarqube {
skipProject = true
}
}
//project(":matrix-sdk-android") {
// sonarqube {
// properties {

285
docs/add_threePids.md Normal file
View File

@@ -0,0 +1,285 @@
# Adding and removing ThreePids to an account
## Add email
### User enter the email
> POST https://homeserver.org/_matrix/client/r0/account/3pid/email/requestToken
```json
{
"email": "alice@email-provider.org",
"client_secret": "TixzvOnw7nLEUdiQEmkHzkXKrY4HhiGh",
"send_attempt": 1
}
```
#### The email is already added to an account
400
```json
{
"errcode": "M_THREEPID_IN_USE",
"error": "Email is already in use"
}
```
#### The email is free
Wording: "We've sent you an email to verify your address. Please follow the instructions there and then click the button below."
200
```json
{
"sid": "bxyDHuJKsdkjMlTJ"
}
```
## User receive an e-mail
> [homeserver.org] Validate your email
>
> A request to add an email address to your Matrix account has been received. If this was you, please click the link below to confirm adding this email:
https://homeserver.org/_matrix/client/unstable/add_threepid/email/submit_token?token=WUnEhQAmJrXupdEbXgdWvnVIKaGYZFsU&client_secret=TixzvOnw7nLEUdiQEmkHzkXKrY4HhiGh&sid=bxyDHuJKsdkjMlTJ
>
> If this was not you, you can safely ignore this email. Thank you.
### User clicks on the link
The browser displays the following message:
> Your email has now been validated, please return to your client. You may now close this window.
### User returns on Element
User clicks on CONTINUE
> POST https://homeserver.org/_matrix/client/r0/account/3pid/add
```json
{
"sid": "bxyDHuJKsdkjMlTJ",
"client_secret": "TixzvOnw7nLEUdiQEmkHzkXKrY4HhiGh"
}
```
401 User Interactive Authentication
```json
{
"session": "ppvvnozXCQZFaggUBlHJYPjA",
"flows": [
{
"stages": [
"m.login.password"
]
}
],
"params": {
}
}
```
### User enters his password
POST https://homeserver.org/_matrix/client/r0/account/3pid/add
```json
{
"sid": "bxyDHuJKsdkjMlTJ",
"client_secret": "TixzvOnw7nLEUdiQEmkHzkXKrY4HhiGh",
"auth": {
"session": "ppvvnozXCQZFaggUBlHJYPjA",
"type": "m.login.password",
"user": "@benoitx:matrix.org",
"password": "weak_password"
}
}
```
#### The link has not been clicked
400
```json
{
"errcode": "M_THREEPID_AUTH_FAILED",
"error": "No validated 3pid session found"
}
```
#### Wrong password
401
```json
{
"session": "fXHOvoQsPMhEebVqTnIrzZJN",
"flows": [
{
"stages": [
"m.login.password"
]
}
],
"params": {
},
"completed":[
],
"error": "Invalid password",
"errcode": "M_FORBIDDEN"
}
```
#### The link has been clicked and the account password is correct
200
```json
{}
```
## Remove email
### User want to remove an email from his account
> POST https://homeserver.org/_matrix/client/r0/account/3pid/delete
```json
{
"medium": "email",
"address": "alice@email-provider.org"
}
```
#### Email was not bound to an identity server
200
```json
{
"id_server_unbind_result": "no-support"
}
```
#### Email was bound to an identity server
200
```json
{
"id_server_unbind_result": "success"
}
```
## Add phone number
> POST https://homeserver.org/_matrix/client/r0/account/3pid/msisdn/requestToken
```json
{
"country": "FR",
"phone_number": "611223344",
"client_secret": "f1K29wFZBEr4RZYatu7xj8nEbXiVpr7J",
"send_attempt": 1
}
```
Note that the phone number is sent without `+` and without the country code
#### The phone number is already added to an account
400
```json
{
"errcode": "M_THREEPID_IN_USE",
"error": "MSISDN is already in use"
}
```
#### The phone number is free
Wording: "A text message has been sent to +33611223344. Please enter the verification code it contains."
200
```json
{
"msisdn": "33651547677",
"intl_fmt": "+33 6 51 54 76 77",
"success": true,
"sid": "253299954",
"submit_url": "https://homeserver.org/_matrix/client/unstable/add_threepid/msisdn/submit_token"
}
```
## User receive a text message
> Riot
> Your Riot validation code is 892541, please enter this into the app
### User enter the code to the app
#### Wrong code
> POST https://homeserver.org/_matrix/client/unstable/add_threepid/msisdn/submit_token
```json
{
"sid": "253299954",
"client_secret": "f1K29wFZBEr4RZYatu7xj8nEbXiVpr7J",
"token": "111111"
}
```
400
```json
{
"errcode": "M_UNKNOWN",
"error": "Error contacting the identity server"
}
```
This is not an ideal, but the client will display a hint to check the entered code to the user.
#### Correct code
> POST https://homeserver.org/_matrix/client/unstable/add_threepid/msisdn/submit_token
```json
{
"sid": "253299954",
"client_secret": "f1K29wFZBEr4RZYatu7xj8nEbXiVpr7J",
"token": "892541"
}
```
200
```json
{
"success": true
}
```
Then the app call `https://homeserver.org/_matrix/client/r0/account/3pid/add` as per adding an email and follow the same UIS flow
## Remove phone number
### User wants to remove a phone number from his account
This is the same request and response than to remove email, but with this body:
```json
{
"medium": "msisdn",
"address": "33611223344"
}
```
Note that the phone number is provided without `+`, but with the country code.

92
docs/identity_server.md Normal file
View File

@@ -0,0 +1,92 @@
# Identity server
Issue: #607
PR: #1354
## Introduction
Identity Servers support contact discovery on Matrix by letting people look up Third Party Identifiers to see if the owner has publicly linked them with their Matrix ID.
## Implementation
The current implementation was Inspired by the code from Riot-Android.
Difference though (list not exhaustive):
- Only API v2 is supported (see https://matrix.org/docs/spec/identity_service/latest)
- Homeserver has to be up to date to support binding (Versions.isLoginAndRegistrationSupportedBySdk() has to return true)
- The SDK managed the session and client secret when binding ThreePid. Those data are not exposed to the client.
- The SDK supports incremental sendAttempt (this is not used by Element)
- The "Continue" button is now under the information, and not as the same place that the checkbox
- The app can cancel a binding. Current data are erased from DB.
- The API (IdentityService) is improved.
- A new DB to store data related to the identity server management.
Missing features (list not exhaustive):
- Invite by 3Pid (will be in a dedicated PR)
- Add email or phone to account (not P1, can be done on Element-Web)
- List email and phone of the account (could be done in a dedicated PR)
- Search contact (not P1)
- Logout from identity server when user sign out or deactivate his account.
## Related MSCs
The list can be found here: https://matrix.org/blog/2019/09/27/privacy-improvements-in-synapse-1-4-and-riot-1-4
## Steps and requirements
- Only one identity server by account can be set. The user's choice is stored in account data with key `m.identity_server`. But every clients will managed its own token to log in to the identity server
```json
{
"type": "m.identity_server",
"content": {
"base_url": "https://matrix.org"
}
}
```
- The accepted terms are stored in the account data:
```json
{
"type": "m.accepted_terms",
"content": {
"accepted": [
"https://vector.im/identity-server-privacy-notice-1"
]
}
}
```
- Default identity server URL, from Wellknown data is proposed to the user.
- Identity server can be set
- Identity server can be changed on another user's device, so when the change is detected (thanks to account data sync) Element should properly disconnect from a previous identity server (I think it was not the case in Riot-Android, where we keep the token forever)
- Registration to the identity server is managed with an openId token
- Terms of service can be accepted when configuring the identity server.
- Terms of service can be accepted after, if they change.
- Identity server can be modified
- Identity server can be disconnected with a warning dialog, with special content if there are current bound 3pid on this identity server.
- Email can be bound
- Email can be unbound
- Phone can be bound
- Phone can be unbound
- Look up can be performed, to get matrixIds from local contact book (phone and email): Android permission correctly handled (not done yet)
- Look up pepper can be updated if it is rotated on the identity server
- Invitation using 3PID can be done (See #548) (not done yet)
- Homeserver access-token will never be sent to an identity server
- When user sign-out: logout from the identity server if any.
- When user deactivate account: logout from the identity server if any.
## Screens
### Settings
Identity server settings can be accessed from the internal setting of the application, both from "Discovery" section and from identity detail section.
### Discovery screen
This screen displays the identity server configuration and the binding of the user's ThreePid (email and msisdn). This is the main screen of the feature.
### Set identity server screen
This screen is a form to set a new identity server URL
## Ref:
- https://matrix.org/blog/2019/09/27/privacy-improvements-in-synapse-1-4-and-riot-1-4 is a good summary of the role of an Identity server and the proper way to configure and use it in respect to the privacy and the consent of the user.
- API documentation: https://matrix.org/docs/spec/identity_service/latest
- vector.im TOS: https://vector.im/identity-server-privacy-notice

View File

@@ -59,6 +59,12 @@ It's recommended to run tests using an Android Emulator and not a real device. F
You can run all the tests in the `androidTest` folders.
It can be done using this command:
```bash
./gradlew vector:connectedAndroidTest matrix-sdk-android:connectedAndroidTest
```
## Stop Synapse
To stop Synapse, you can run the following commands:

82
docs/jitsi.md Normal file
View File

@@ -0,0 +1,82 @@
# Jitsi in Element Android
Native Jitsi support has been added to Element Android by the PR [#1914](https://github.com/vector-im/element-android/pull/1914). The description of the PR contains some documentation about the behaviour in each possible room configuration.
Also, ensure to have a look on [the documentation from Element Web](https://github.com/vector-im/element-web/blob/develop/docs/jitsi.md)
The official documentation about how to integrate the Jitsi SDK in an Android app is available here: https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-android-sdk.
# Native Jitsi SDK
The Jitsi SDK is built by ourselves with the flag LIBRE_BUILD, to be able to be integrated on the F-Droid version of Element Android.
The generated maven repository is then host in the project https://github.com/vector-im/jitsi_libre_maven
## How to build the Jitsi Meet SDK
### Jitsi version
Update the script `./tools/jitsi/build_jisti_libs.sh` with the tag of the project `https://github.com/jitsi/jitsi-meet`.
Currently we are building the version with the tag `android-sdk-2.9.3`.
### Run the build script
At the root of the Element Android, run the following script:
```shell script
./tools/jitsi/build_jisti_libs.sh
```
It will build the Jitsi Meet Android library and put every generated files in the folder `/tmp/jitsi`
### Link with the new generated library
- Update the file `./build.gradle` to use the previously created local Maven repository. Currently we have this line:
```groovy
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
```
You can uncomment and update the line starting with `// url "file://...` and comment the line starting with `url`, to test the library using the locally generated Maven repository.
- Update the dependency of the WebRTC library in the file `./matrix-sdk-android/build.gradle`. Currently we have this line:
```groovy
implementation('com.facebook.react:react-native-webrtc:1.84.0-jitsi-5112273@aar')
```
- Update the dependency of the Jitsi Meet library in the file `./vector/build.gradle`. Currently we have this line:
```groovy
implementation('org.jitsi.react:jitsi-meet-sdk:2.9.3') { transitive = true }
```
- Perform a gradle sync and build the project
- Perform test
### Sanity tests
In order to validate that the upgrade of the Jitsi and WebRTC dependency does not break anything, the following sanity tests have to be performed, using two devices:
- Make 1-1 audio call (so using WebRTC)
- Make 1-1 video call (so using WebRTC)
- Create and join a conference call with audio only (so using Jitsi library). Leave the conference. Join it again.
- Create and join a conference call with audio and video (so using Jitsi library) Leave the conference. Join it again.
### Export the build library
If all the tests are passed, you can export the generated Jitsi library to our Maven repository.
- Clone the project https://github.com/vector-im/jitsi_libre_maven.
- Create a new folder with the version name.
- Copy every generated files form `/tmp/jitsi` to the folder you have just created.
- Commit and push the change on https://github.com/vector-im/jitsi_libre_maven.
- Update the file `./build.gradle` to use the previously created Maven repository. Currently we have this line:
```groovy
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
```
- Build the project and perform the sanity tests again.
- Update the file `/CANGES.md` to notify about the library upgrade, and create a regular PR for project Element Android.

View File

@@ -1,4 +1,4 @@
This document aims to describe how RiotX android displays notifications to the end user. It also clarifies notifications and background settings in the app.
This document aims to describe how Element android displays notifications to the end user. It also clarifies notifications and background settings in the app.
# Table of Contents
1. [Prerequisites Knowledge](#prerequisites-knowledge)
@@ -9,7 +9,7 @@ This document aims to describe how RiotX android displays notifications to the e
* [How does the Home Server knows when to notify a client?](#how-does-the-home-server-knows-when-to-notify-a-client)
* [Push vs privacy, and mitigation](#push-vs-privacy-and-mitigation)
* [Background processing limitations](#background-processing-limitations)
2. [RiotX Notification implementations](#riotx-notification-implementations)
2. [Element Notification implementations](#element-notification-implementations)
* [Requirements](#requirements)
* [Foreground sync mode (Gplay & F-Droid)](#foreground-sync-mode-gplay-f-droid)
* [Push (FCM) received in background](#push-fcm-received-in-background)
@@ -50,7 +50,7 @@ By default, this is 0, so the server will return immediately even if the respons
**delay** is a client preference. When the server responds to a sync request, the client waits for `delay`before calling a new sync.
When the RiotX Android app is open (i.e in foreground state), the default timeout is 30 seconds, and delay is 0.
When the Element Android app is open (i.e in foreground state), the default timeout is 30 seconds, and delay is 0.
## How does a mobile app receives push notification
@@ -86,7 +86,7 @@ This need some disambiguation, because it is the source of common confusion:
In order to send a push to a mobile, App developers need to have a server that will use the FCM APIs, and these APIs requires authentication!
This server is called a **Push Gateway** in the matrix world
That means that RiotX Android, a matrix client created by New Vector, is using a **Push Gateway** with the needed credentials (FCM API secret Key) in order to send push to the New Vector client.
That means that Element Android, a matrix client created by New Vector, is using a **Push Gateway** with the needed credentials (FCM API secret Key) in order to send push to the New Vector client.
If you create your own matrix client, you will also need to deploy an instance of a **Push Gateway** with the credentials needed to use FCM for your app.
@@ -132,7 +132,7 @@ A Home Server can be configured with default rules (for Direct messages, group m
There are different kind of push rules, it can be per room (each new message on this room should be notified), it can also define a pattern that a message should match (when you are mentioned, or key word based).
Notifications have 2 'levels' (`highlighted = true/false sound = default/custom`). In RiotX these notifications level are reflected as Noisy/Silent.
Notifications have 2 'levels' (`highlighted = true/false sound = default/custom`). In Element these notifications level are reflected as Noisy/Silent.
**What about encrypted messages?**
@@ -158,7 +158,7 @@ In a nutshell, apps can't do much in background now.
If the devices is not plugged and stays IDLE for a certain amount of time, radio (mobile connectivity) and CPU can/will be turned off.
For an application like RiotX, where users can receive important information at anytime, the best option is to rely on a push system (Google's Firebase Message a.k.a FCM). FCM high priority push can wake up the device and whitelist an application to perform background task (for a limited but unspecified amount of time).
For an application like Element, where users can receive important information at anytime, the best option is to rely on a push system (Google's Firebase Message a.k.a FCM). FCM high priority push can wake up the device and whitelist an application to perform background task (for a limited but unspecified amount of time).
Notice that this is still evolving, and in future versions application that has been 'background restricted' by users won't be able to wake up even when a high priority push is received. Also high priority notifications could be rate limited (not defined anywhere)
@@ -167,41 +167,41 @@ The documentation on this subject is vague, and as per our experiments not alway
It is getting more and more complex to have reliable notifications when FCM is not used.
# RiotX Notification implementations
# Element Notification implementations
## Requirements
RiotX Android must work with and without FCM.
* The RiotX android app published on F-Droid do not rely on FCM (all related dependencies are not present)
* The RiotX android app published on google play rely on FCM, with a fallback mode when FCM registration has failed (e.g outdated or missing Google Play Services)
Element Android must work with and without FCM.
* The Element android app published on F-Droid do not rely on FCM (all related dependencies are not present)
* The Element android app published on google play rely on FCM, with a fallback mode when FCM registration has failed (e.g outdated or missing Google Play Services)
## Foreground sync mode (Gplay & F-Droid)
When in foreground, RiotX performs sync continuously with a timeout value set to 10 seconds (see HttpPooling).
When in foreground, Element performs sync continuously with a timeout value set to 10 seconds (see HttpPooling).
As this mode does not need to live beyond the scope of the application, and as per Google recommendation, RiotX uses the internal app resources (Thread and Timers) to perform the syncs.
As this mode does not need to live beyond the scope of the application, and as per Google recommendation, Element uses the internal app resources (Thread and Timers) to perform the syncs.
This mode is turned on when the app enters foreground, and off when enters background.
In background, and depending on wether push is available or not, RiotX will use different methods to perform the syncs (Workers / Alarms / Service)
In background, and depending on wether push is available or not, Element will use different methods to perform the syncs (Workers / Alarms / Service)
## Push (FCM) received in background
In order to enable Push, RiotX must first get a push token from the firebase SDK, then register a pusher with this token on the HomeServer.
In order to enable Push, Element must first get a push token from the firebase SDK, then register a pusher with this token on the HomeServer.
When a message should be notified to a user, the user's homeserver notifies the registered `push gateway` for RiotX, that is [sygnal](https://github.com/matrix-org/sygnal) _- The reference implementation for push gateways -_ hosted by matrix.org.
When a message should be notified to a user, the user's homeserver notifies the registered `push gateway` for Element, that is [sygnal](https://github.com/matrix-org/sygnal) _- The reference implementation for push gateways -_ hosted by matrix.org.
This sygnal instance is configured with the required FCM API authentication token, and will then use the FCM API in order to notify the user's device running riotX.
This sygnal instance is configured with the required FCM API authentication token, and will then use the FCM API in order to notify the user's device running Element.
```
Homeserver ----> Sygnal (configured for RiotX) ----> FCM ----> RiotX
Homeserver ----> Sygnal (configured for Element) ----> FCM ----> Element
```
The push gateway is configured to only send `(eventId,roomId)` in the push payload (for better [privacy](#push-vs-privacy-and-mitigation)).
RiotX needs then to synchronise with the user's HomeServer, in order to resolve the event and create a notification.
Element needs then to synchronise with the user's HomeServer, in order to resolve the event and create a notification.
As per [Google recommendation](https://android-developers.googleblog.com/2018/09/notifying-your-users-with-fcm.html), RiotX will then use the WorkManager API in order to trigger a background sync.
As per [Google recommendation](https://android-developers.googleblog.com/2018/09/notifying-your-users-with-fcm.html), Element will then use the WorkManager API in order to trigger a background sync.
**Google recommendations:**
> We recommend using FCM messages in combination with the WorkManager 1 or JobScheduler API
@@ -209,7 +209,7 @@ As per [Google recommendation](https://android-developers.googleblog.com/2018/09
> Avoid background services. One common pitfall is using a background service to fetch data in the FCM message handler, since background service will be stopped by the system per recent changes to Google Play Policy
```
Homeserver ----> Sygnal ----> FCM ----> RiotX
Homeserver ----> Sygnal ----> FCM ----> Element
(Sync) ----> Homeserver
<----
Display notification
@@ -217,24 +217,24 @@ Homeserver ----> Sygnal ----> FCM ----> RiotX
**Possible outcomes**
Upon reception of the FCM push, RiotX will perform a sync call to the Home Server, during this process it is possible that:
Upon reception of the FCM push, Element will perform a sync call to the Home Server, during this process it is possible that:
* Happy path, the sync is performed, the message resolved and displayed in the notification drawer
* The notified message is not in the sync. Can happen if a lot of things did happen since the push (`gappy sync`)
* The sync generates additional notifications (e.g an encrypted message where the user is mentioned detected locally)
* The sync takes too long and the process is killed before completion, or network is not reliable and the sync fails.
RiotX implements several strategies in these cases (TODO document)
Element implements several strategies in these cases (TODO document)
## FCM Fallback mode
It is possible that RiotX is not able to get a FCM push token.
It is possible that Element is not able to get a FCM push token.
Common errors (amoung several others) that can cause that:
* Google Play Services is outdated
* Google Play Service fails in someways with FCM servers (infamous `SERVICE_NOT_AVAILABLE`)
If RiotX is able to detect one of this cases, it will notifies it to the users and when possible help him fix it via a dedicated troubleshoot screen.
If Element is able to detect one of this cases, it will notifies it to the users and when possible help him fix it via a dedicated troubleshoot screen.
Meanwhile, in order to offer a minimal service, and as per Google's recommendation for background activities, RiotX will launch periodic background sync in order to stays in sync with servers.
Meanwhile, in order to offer a minimal service, and as per Google's recommendation for background activities, Element will launch periodic background sync in order to stays in sync with servers.
The fallback mode is impacted by all the battery life saving mechanism implemented by android. Meaning that if the app is not used for a certain amount of time (`App-Standby`), or the device stays still and unplugged (`Light Doze`) , the sync will become less frequent.
@@ -248,7 +248,7 @@ The fallback mode is supposed to be a temporary state waiting for the user to fi
## F-Droid background Mode
The F-Droid RiotX flavor has no dependencies to FCM, therefore cannot relies on Push.
The F-Droid Element flavor has no dependencies to FCM, therefore cannot relies on Push.
Also Google's recommended background processing method cannot be applied. This is because all of these methods are affected by IDLE modes, and will result on the user not being notified at all when the app is in a Doze mode (only in maintenance windows that could happens only after hours).
@@ -262,7 +262,7 @@ F-Droid version will schedule alarms that will then trigger a Broadcast Receiver
Depending on the system status (or device make), it is still possible that the app is not given enough time to launch the service, or that the radio is still turned off thus preventing the sync to success (that's why Alarms are not recommended for network related tasks).
That is why on RiotX F-Droid, the broadcast receiver will acquire a temporary WAKE_LOCK for several seconds (thus securing cpu/network), and launch the service in foreground. The service performs the sync.
That is why on Element F-Droid, the broadcast receiver will acquire a temporary WAKE_LOCK for several seconds (thus securing cpu/network), and launch the service in foreground. The service performs the sync.
Note that foreground services require to put a notification informing the user that the app is doing something even if not launched).

View File

@@ -2,13 +2,15 @@
This document describes the flow of signin to a homeserver, and also the flow when user want to reset his password. Examples come from the `matrix.org` homeserver.
## Sign up flows
## Sign in flows
### Get the flow
Client request the sign-in flows, once the homeserver is chosen by the user and its url is known (in the example it's `https://matrix.org`)
> curl -X GET 'https://matrix.org/_matrix/client/r0/login'
```shell script
curl -X GET 'https://matrix.org/_matrix/client/r0/login'
```
200
@@ -26,7 +28,9 @@ Client request the sign-in flows, once the homeserver is chosen by the user and
The user is able to connect using `m.login.password`
> curl -X POST --data $'{"identifier":{"type":"m.id.user","user":"alice"},"password":"weak_password","type":"m.login.password","initial_device_display_name":"Portable"}' 'https://matrix.org/_matrix/client/r0/login'
```shell script
curl -X POST --data $'{"identifier":{"type":"m.id.user","user":"alice"},"password":"weak_password","type":"m.login.password","initial_device_display_name":"Portable"}' 'https://matrix.org/_matrix/client/r0/login'
```
```json
{
@@ -58,7 +62,7 @@ We get credential (200)
```json
{
"user_id": "@alice:matrix.org",
"access_token": "MDAxOGxvY2F0aW9uIG1hdHREDACTEDb2l0MDgxNjptYXRyaXgub3JnCjAwMTZjaWQgdHlwZSA9IGFjY2VzcwowMDIxY2lkIG5vbmNlID0gfnYrSypfdTtkNXIuNWx1KgowMDJmc2lnbmF0dXJlIOsh1XqeAkXexh4qcofl_aR4kHJoSOWYGOhE7-ubX-DZCg",
"access_token": "MDAxOGxvY2F0aW9uIG1hdHREDACTEDb2l0MDgxNjptYXRyaXgub3JnCjAwMTZjaWQgdHlwZSA9IGFjY2VzcwowMDIxY2lr",
"home_server": "matrix.org",
"device_id": "GTVREDALBF",
"well_known": {
@@ -73,14 +77,16 @@ We get credential (200)
If the user has associated an email with its account, he can signin using the email.
> curl -X POST --data $'{"identifier":{"type":"m.id.thirdparty","medium":"email","address":"alice@yopmail.com"},"password":"weak_password","type":"m.login.password","initial_device_display_name":"Portable"}' 'https://matrix.org/_matrix/client/r0/login'
```shell script
curl -X POST --data $'{"identifier":{"type":"m.id.thirdparty","medium":"email","address":"alice@email-provider.org"},"password":"weak_password","type":"m.login.password","initial_device_display_name":"Portable"}' 'https://matrix.org/_matrix/client/r0/login'
```
```json
{
"identifier": {
"type": "m.id.thirdparty",
"medium": "email",
"address": "alice@yopmail.com"
"address": "alice@email-provider.org"
},
"password": "weak_password",
"type": "m.login.password",
@@ -117,7 +123,7 @@ We get the credentials (200)
```json
{
"user_id": "@alice:matrix.org",
"access_token": "MDAxOGxvY2F0aW9uIG1hdHJpeC5vcmREDACTEDZXJfaWQgPSBAYmVub2l0MDgxNjptYXRyaXgub3JnCjAwMTZjaWQgdHlwZSA9IGFjY2VzcwowMDIxY2lkIG5vbmNlID0gNjtDY0MwRlNPSFFoOC5wOgowMDJmc2lnbmF0dXJlIGiTRm1mYLLxQywxOh3qzQVT8HoEorSokEP2u-bAwtnYCg",
"access_token": "MDAxOGxvY2F0aW9uIG1hdHJpeC5vcmREDACTEDZXJfaWQgPSBAYmVub2l0MDgxNjptYXRyaXgub3Jnfrfdegfszsefddvf",
"home_server": "matrix.org",
"device_id": "WBSREDASND",
"well_known": {
@@ -132,11 +138,13 @@ It's worth noting that the response from the homeserver contains the userId of A
### Login with Msisdn
Not supported yet in RiotX
Not supported yet in Element
### Login with SSO
> curl -X GET 'https://homeserver.with.sso/_matrix/client/r0/login'
```shell script
curl -X GET 'https://homeserver.with.sso/_matrix/client/r0/login'
```
200
@@ -145,12 +153,61 @@ Not supported yet in RiotX
"flows": [
{
"type": "m.login.sso"
},
{
"type": "m.login.token"
}
]
}
```
In this case, the user can click on "Sign in with SSO" and the web screen will be displayed on the page `https://homeserver.with.sso/_matrix/static/client/login/` and the credentials will be passed back to the native code through the JS bridge
In this case, the user can click on "Sign in with SSO" and the native web browser, or a ChromeCustomTab if the device supports it, will be launched on the page
> https://homeserver.with.sso/_matrix/client/r0/login/sso/redirect?redirectUrl=element%3A%2F%element
The parameter `redirectUrl` is set to `element://element`.
ChromeCustomTabs are an intermediate way to display a WebPage, between a WebView and using the external browser. More info can be found [here](https://developer.chrome.com/multidevice/android/customtabs)
The browser will then take care of the SSO login, which may include creating a third party account, entering an email, settings a display name, or any other possibilities.
During the process, user may be asked to validate an email by clicking on a link it contains. The link has to be opened in the browser which initiates the authentication. This is why we cannot use WebView anymore.
Once the process is finished, the web page will call the `redirectUrl` with an extra parameter `loginToken`
> element://element?loginToken=MDAxOWxvY2F0aW9uIG1vemlsbGEub3JnCjAwMTNpZGVudGlmaWVy
This navigation is intercepted by Element by the `LoginActivity`, which will then ask the homeserver to convert this `loginToken` to an access token
```shell script
curl -X POST --data $'{"type":"m.login.token","token":"MDAxOWxvY2F0aW9uIG1vemlsbGEub3JnCjAwMTNpZGVudGlmaWVy"}' 'https://homeserver.with.sso/_matrix/client/r0/login'
```
```json
{
"type": "m.login.token",
"token": "MDAxOWxvY2F0aW9uIG1vemlsbGEub3JnCjAwMTNpZGVudGlmaWVy"
}
```
We get the credentials (200)
```json
{
"user_id": "@alice:homeserver.with.sso",
"access_token": "MDAxOWxvY2F0aW9uIG1vemlsbGEub3JnCjAwMTNpZGVudGlmaWVyIGtleQowMDEwY2lkIGdlbiA9IDEKMDAyY2NpZCB1c2",
"home_server": "homeserver.with.sso",
"device_id": "DETBTVAHCH",
"well_known": {
"m.homeserver": {
"base_url": "https:\/\/homeserver.with.sso\/"
},
"m.identity_server": {
"base_url": "https:\/\/vector.im"
}
}
}
```
## Reset password
@@ -167,7 +224,9 @@ We display a warning regarding e2e.
At the first step, we do not send the password, only the email and a client secret, generated by the application
> curl -X POST --data $'{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","send_attempt":0,"email":"user@domain.com"}' 'https://matrix.org/_matrix/client/r0/account/password/email/requestToken'
```shell script
curl -X POST --data $'{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","send_attempt":0,"email":"user@domain.com"}' 'https://matrix.org/_matrix/client/r0/account/password/email/requestToken'
```
```json
{
@@ -204,7 +263,9 @@ During this step, the new password is sent to the homeserver.
If the user confirms before the link is clicked, we get an error:
> curl -X POST --data $'{"auth":{"type":"m.login.email.identity","threepid_creds":{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","sid":"tQNbrREDACTEDldA"}},"new_password":"weak_password"}' 'https://matrix.org/_matrix/client/r0/account/password'
```shell script
curl -X POST --data $'{"auth":{"type":"m.login.email.identity","threepid_creds":{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","sid":"tQNbrREDACTEDldA"}},"new_password":"weak_password"}' 'https://matrix.org/_matrix/client/r0/account/password'
```
```json
{
@@ -238,7 +299,9 @@ It contains the client secret, a token and the sid
When the user click the link, if validate his ownership and the new password can now be ent by the application (on user demand):
> curl -X POST --data $'{"auth":{"type":"m.login.email.identity","threepid_creds":{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","sid":"tQNbrREDACTEDldA"}},"new_password":"weak_password"}' 'https://matrix.org/_matrix/client/r0/account/password'
```shell script
curl -X POST --data $'{"auth":{"type":"m.login.email.identity","threepid_creds":{"client_secret":"6c57f284-85e2-421b-8270-fb1795a120a7","sid":"tQNbrREDACTEDldA"}},"new_password":"weak_password"}' 'https://matrix.org/_matrix/client/r0/account/password'
```
```json
{

View File

@@ -10,7 +10,9 @@ This document describes the flow of registration to a homeserver. Examples come
Client request the sign-up flows, once the homeserver is chosen by the user and its url is known (in the example it's `https://matrix.org`)
> curl -X POST --data $'{}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -70,7 +72,9 @@ If the registration is not possible, we get a 403
The app is displaying a form to enter username and password.
> curl -X POST --data $'{"initial_device_display_name":"Mobile device","username":"alice","password": "weak_password"}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"initial_device_display_name":"Mobile device","username":"alice","password": "weak_password"}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -133,9 +137,11 @@ We get a 400:
### Step 2: entering email
User is proposed to enter an email. We skip this step.
User is proposed to enter an email. User skips this step.
> curl -X POST --data $'{"auth":{"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.dummy"}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.dummy"}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -189,16 +195,18 @@ User is proposed to enter an email. We skip this step.
}
```
### Step 2 bis: we enter an email
### Step 2 bis: user enters an email
We request a token to the homeserver. The `client_secret` is generated by the application
> curl -X POST --data $'{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","email":"alice@yopmail.com","send_attempt":0}' 'https://matrix.org/_matrix/client/r0/register/email/requestToken'
```shell script
curl -X POST --data $'{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","email":"alice@email-provider.org","send_attempt":0}' 'https://matrix.org/_matrix/client/r0/register/email/requestToken'
```
```json
{
"client_secret": "53e679ea-oRED-ACTED-92b8-3012c49c6cfa",
"email": "alice@yopmail.com",
"email": "alice@email-provider.org",
"send_attempt": 0
}
```
@@ -213,7 +221,9 @@ We request a token to the homeserver. The `client_secret` is generated by the ap
And
> curl -X POST --data $'{"auth":{"threepid_creds":{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","sid":"qlBCREDACTEDEtgxD"},"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.email.identity"}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"threepid_creds":{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","sid":"qlBCREDACTEDEtgxD"},"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.email.identity"}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -239,7 +249,9 @@ We get 401 since the email is not validated yet:
The app is now polling on
> curl -X POST --data $'{"auth":{"threepid_creds":{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","sid":"qlBCREDACTEDEtgxD"},"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.email.identity"}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"threepid_creds":{"client_secret":"53e679ea-oRED-ACTED-92b8-3012c49c6cfa","sid":"qlBCREDACTEDEtgxD"},"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.email.identity"}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -254,7 +266,7 @@ The app is now polling on
}
```
We click on the link received by email `https://matrix.org/_matrix/client/unstable/registration/email/submit_token?token=vtQjQIZfwdoREDACTEDozrmKYSWlCXsJ&client_secret=53e679ea-oRED-ACTED-92b8-3012c49c6cfa&sid=qlBCREDACTEDEtgxD` which contains:
User clicks on the link received by email `https://matrix.org/_matrix/client/unstable/registration/email/submit_token?token=vtQjQIZfwdoREDACTEDozrmKYSWlCXsJ&client_secret=53e679ea-oRED-ACTED-92b8-3012c49c6cfa&sid=qlBCREDACTEDEtgxD` which contains:
- A `token` vtQjQIZfwdoREDACTEDozrmKYSWlCXsJ
- The `client_secret`: 53e679ea-oRED-ACTED-92b8-3012c49c6cfa
- A `sid`: qlBCREDACTEDEtgxD
@@ -306,7 +318,9 @@ Once the link is clicked, the registration request (polling) returns a 401 with
User is proposed to accept T&C and he accepts them
> curl -X POST --data $'{"auth":{"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.terms"}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.terms"}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -365,7 +379,9 @@ User is proposed to accept T&C and he accepts them
User is proposed to prove he is not a robot and he does it:
> curl -X POST --data $'{"auth":{"response":"03AOLTBLSiGS9GhFDpAMblJ2nlXOmHXqAYJ5OvHCPUjiVLBef3k9snOYI_BDC32-t4D2jv-tpvkaiEI_uloobFd9RUTPpJ7con2hMddbKjSCYqXqcUQFhzhbcX6kw8uBnh2sbwBe80_ihrHGXEoACXQkL0ki1Q0uEtOeW20YBRjbNABsZPpLNZhGIWC0QVXnQ4FouAtZrl3gOAiyM-oG3cgP6M9pcANIAC_7T2P2amAHbtsTlSR9CsazNyS-rtDR9b5MywdtnWN9Aw8fTJb8cXQk_j7nvugMxzofPjSOrPKcr8h5OqPlpUCyxxnFtag6cuaPSUwh43D2L0E-ZX7djzaY2Yh_U2n6HegFNPOQ22CJmfrKwDlodmAfMPvAXyq77n3HpoREDACTEDo3830RHF4BfkGXUaZjctgg-A1mvC17hmQmQpkG7IhDqyw0onU-0vF_-ehCjq_CcQEDpS_O3uiHJaG5xGf-0rhLm57v_wA3deugbsZuO4uTuxZZycN_mKxZ97jlDVBetl9hc_5REPbhcT1w3uzTCSx7Q","session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.recaptcha"}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"response":"03AOLTBLSiGS9GhFDpAMblJ2nlXOmHXqAYJ5OvHCPUjiVLBef3k9snOYI_BDC32-t4D2jv-tpvkaiEI_uloobFd9RUTPpJ7con2hMddbKjSCYqXqcUQFhzhbcX6kw8uBnh2sbwBe80_ihrHGXEoACXQkL0ki1Q0uEtOeW20YBRjbNABsZPpLNZhGIWC0QVXnQ4FouAtZrl3gOAiyM-oG3cgP6M9pcANIAC_7T2P2amAHbtsTlSR9CsazNyS-rtDR9b5MywdtnWN9Aw8fTJb8cXQk_j7nvugMxzofPjSOrPKcr8h5OqPlpUCyxxnFtag6cuaPSUwh43D2L0E-ZX7djzaY2Yh_U2n6HegFNPOQ22CJmfrKwDlodmAfMPvAXyq77n3HpoREDACTEDo3830RHF4BfkGXUaZjctgg-A1mvC17hmQmQpkG7IhDqyw0onU-0vF_-ehCjq_CcQEDpS_O3uiHJaG5xGf-0rhLm57v_wA3deugbsZuO4uTuxZZycN_mKxZ97jlDVBetl9hc_5REPbhcT1w3uzTCSx7Q","session":"xptUYoREDACTEDogOWAGVnbJQ","type":"m.login.recaptcha"}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -396,9 +412,11 @@ Some homeservers may require the user to enter MSISDN.
On matrix.org, it's not required, and not even optional, but it's still possible for the app to add a MSISDN during the registration.
The user enter a phone number and select a country, the `client_secret` is generated by the application
The user enters a phone number and selects a country, the `client_secret` is generated by the application
> curl -X POST --data $'{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","send_attempt":1,"country":"FR","phone_number":"+33611223344"}' 'https://matrix.org/_matrix/client/r0/register/msisdn/requestToken'
```shell script
curl -X POST --data $'{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","send_attempt":1,"country":"FR","phone_number":"+33611223344"}' 'https://matrix.org/_matrix/client/r0/register/msisdn/requestToken'
```
```json
{
@@ -430,10 +448,11 @@ If it is not the case, the homeserver send the SMS and returns some data, especi
}
```
When you execute the register request, with the received `sid`, you get an error since the MSISDN is not validated yet:
> curl -X POST --data $'{"auth":{"type":"m.login.msisdn","session":"xptUYoREDACTEDogOWAGVnbJQ","threepid_creds":{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798"}}}' 'https://matrix.org/_matrix/client/r0/register'
When we execute the register request, with the received `sid`, we get an error since the MSISDN is not validated yet:
```shell script
curl -X POST --data $'{"auth":{"type":"m.login.msisdn","session":"xptUYoREDACTEDogOWAGVnbJQ","threepid_creds":{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798"}}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
"auth": {
@@ -492,7 +511,9 @@ There is an issue on Synapse, which return a 401, it sends too much data along w
The user receive the SMS, he can enter the SMS code in the app, which is sent using the "submit_url" received ie the response of the `requestToken` request:
> curl -X POST --data $'{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798","token":"123456"}' 'https://matrix.org/_matrix/client/unstable/add_threepid/msisdn/submit_token'
```shell script
curl -X POST --data $'{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798","token":"123456"}' 'https://matrix.org/_matrix/client/unstable/add_threepid/msisdn/submit_token'
```
```json
{
@@ -520,7 +541,9 @@ And if the code is correct we get a 200 with:
We can now execute the registration request, to the homeserver
> curl -X POST --data $'{"auth":{"type":"m.login.msisdn","session":"xptUYoREDACTEDogOWAGVnbJQ","threepid_creds":{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798"}}}' 'https://matrix.org/_matrix/client/r0/register'
```shell script
curl -X POST --data $'{"auth":{"type":"m.login.msisdn","session":"xptUYoREDACTEDogOWAGVnbJQ","threepid_creds":{"client_secret":"d3e285f6-972a-496c-9a22-7915a2db57c7","sid":"1678881798"}}}' 'https://matrix.org/_matrix/client/r0/register'
```
```json
{
@@ -535,7 +558,7 @@ We can now execute the registration request, to the homeserver
}
```
Now the homeserver consider that the `m.login.msisdn` step is completed (401):
Now the homeserver considers that the `m.login.msisdn` step is completed (401):
```json
{

425
docs/voip_signaling.md Normal file
View File

@@ -0,0 +1,425 @@
Useful links:
- https://codelabs.developers.google.com/codelabs/webrtc-web/#0
- http://webrtc.github.io/webrtc-org/native-code/android/
╔════════════════════════════════════════════════╗
║ ║
║A] Placing a call offer ║
║ ║
╚════════════════════════════════════════════════╝
┌───────────────┐
│ Matrix │
├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌─────────────────┐ │ ┌───────────────────────────┐ ┌─────────────────┐
│ Caller │ │ Signaling Room │ │ │ Callee │
└─────────────────┘ │ ├───────────────────────────┤ └─────────────────┘
┌────┐ │ │ │
│ 3 │ │ │ ┌────────────────────┐ │
┌─────────────────┐──────┴────┴──────────────────────────┼─▶│ m.call.invite │ │ │ ┌─────────────────┐
│ │ │ │ │ mx event │ │ │ │
│ │ │ └────────────────────┘ │ │ │ │
│ │ │ │ │ │ │
│ Element │ │ │ │ │ Element │
┌──│ App │ │ │ │ │ App │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │
│ └─────────────────┘ │ │ │ └─────────────────┘
┌────┤ ▲ │ │ │
│ 1 │ ├────┐ │ └───────────────────────────┘
└────┤ │ 2 │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
│ ┌──┴────┴─────────┐ ┌─────────────────┐
│ │ │ │ │
│ │ │ │ │
│ │ WebRtc │ │ WebRtc │
└─▶│ │ │ │
│ │ │ │
│ │ │ │
└─────────────────┘ └─────────────────┘
┌────┐
│ 1 │ The Caller app get access to system resources (camera, mic), eventually stun/turn servers, define some
└────┘ constrains (video quality, format) and pass it to WebRtc in order to create a Peer Call offer
┌────┐
│ 2 │ The WebRtc layer creates a call Offer (sdp) that needs to be sent to callee
└────┘
┌────┐ The app layer, takes the webrtc offer, encapsulate it in a matrix event adds a callId and send it to the other
│ 3 │ user via the room
└────┘
┌──────────────┐
│ mx event │
├──────────────┴────────┐
│ type: m.call.invite │
│ + callId │
│ │
│ ┌──────────────────┐ │
│ │ webrtc sdp │ │
│ └──────────────────┘ │
└───────────────────────┘
╔════════════════════════════════════════════════╗
║ ║
║B] Sending connection establishment info ║
║ ║
╚════════════════════════════════════════════════╝
┌───────────────┐
│ Matrix │
├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌─────────────────┐ │ ┌───────────────────────────┐ ┌─────────────────┐
│ Caller │ │ Signaling Room │ │ │ Callee │
└─────────────────┘ │ ├───────────────────────────┤ └─────────────────┘
│ ┌────────────────────┐ │ │
│ │ │ m.call.invite │ │
┌─────────────────┐ │ │ mx event │ │ │ ┌─────────────────┐
│ │ ┌────┐ │ │ └────────────────────┘ │ │ │
│ │ │ 3 │ │ ┌────────────────────┐ │ │ │ │
│ │──────┴────┴───────┼──────────────────┼─▶│ m.call.candidates │ │ │ │
│ Element │ │ │ mx event │ │ │ │ Element │
│ App │ │ │ └────────────────────┘ │ │ App │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
└─────────────────┘ │ │ │ └─────────────────┘
▲ │ │ │
├────┐ │ └───────────────────────────┘
│ 2 │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
┌───────┴────┴────┐ ┌─────────────────┐
│ │ │ │
│ │ │ │
│ WebRtc │ ┌───────────────┐ │ WebRtc │
│ │ │ Stun / Turn │ │ │
│ │ ├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ │
│ │ │ │ │
└─────────────────┘ │ └─────────────────┘
▲ │
│ │
└──────────┬────┬───────────▶ │
┌───────────────┐ │ 1 │ │
│ │ └────┘ │
│ Network Stack │ │
│ │ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
│ │
└───────────────┘
┌────┐
│ 1 │ The WebRtc layer gathers information on how it can be reach by the other peer directly (Ice candidates)
└────┘
┌──────────────────────────────────────────────────────────────────┐
│candidate:1 1 tcp 1518149375 127.0.0.1 35990 typ host │
└──────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│candidate:2 1 UDP 2130706431 192.168.1.102 1816 typ host │
└──────────────────────────────────────────────────────────────────┘
┌────┐
│ 2 │ The WebRTC layer notifies the App layer when it finds new Ice Candidates
└────┘
┌────┐ The app layer, takes the ice candidates, encapsulate them in one or several matrix event adds the callId and
│ 3 │ send it to the other user via the room
└────┘
┌──────────────┐
│ mx event │
├──────────────┴────────────────────────┐
│ type: m.call.candidates │
│ │
│ +CallId │
│ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
└───────────────────────────────────────┘
╔════════════════════════════════════════════════╗
║ ║
║C] Receiving a call offer ║
║ ║
╚════════════════════════════════════════════════╝
┌───────────────┐
│ Matrix │
├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
│ ┌─────────────────┐
│ │ Callee │
┌─────────────────┐ │ ┌───────────────────────────┐ └─────────────────┘
│ Caller │ │ Signaling Room │ │
└─────────────────┘ │ ├───────────────────────────┤
│ ┌────────────────────┐ │ │ ┌─────────────────┐
│ │ │ m.call.invite │───┼────────────────────────────┬────┬───▶│ │
┌─────────────────┐ │ │ mx event │ │ │ │ 1 │ │ │
│ │ │ │ └────────────────────┘ │ └────┘ │ │
│ │ │ ┌────────────────────┐ │ │ │ Element │
│ │ │ │ │ m.call.candidates │ │ │ App │
│ Element │ │ │ mx event │ │ │ │ │
│ App │ │ │ └────────────────────┘ │ │ │
│ │ │ ┌────────────────────┐◀──┼─────────────────┼───┬────┬───────────┤ │
│ │◀──────────────────┼──────────────────┼──│ m.call.answer │ │ │ 4 │ └──┬──────────────┘
│ │ │ │ mx event │ │ │ └────┘ ├────┐ ▲
└────┬────────────┘ │ │ └────────────────────┘ │ │ 2 │ ├────┐
│ │ │ │ ├────┘ │ 3 │
│ │ └───────────────────────────┘ ┌──▼─────────┴────┤
┌────▼────────────┐ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘ │ │
│ │ │ │
│ │ │ WebRtc │
│ WebRtc │ │ ┌──┴─────────────────┐
│ │ │ │ caller offer │
┌──────────┴─────────┐ │ │ └──┬─────────────────┘
│ callee answer │ │ └─────────────────┘
└────────────────────┴───────┘
┌────┐
│ 1 │ Bob receives a call.invite event in a room, then creates a WebRTC peer connection object
└────┘
┌────┐
│ 2 │ The encapsulated call offer sdp from the mx event is transmitted to WebRTC
└────┘
┌────┐
│ 3 │ WebRTC then creates a call answer for the offer and send it back to app layer
└────┘
┌────┐ The app layer, takes the webrtc answer, encapsulate it in a matrix event adds a callId and send it to the
│ 3 │ other user via the room
└────┘
┌──────────────┐
│ mx event │
├──────────────┴────────┐
│ type: m.call.answer │
│ + callId │
│ │
│ ┌──────────────────┐ │
│ │ webrtc sdp │ │
│ └──────────────────┘ │
└───────────────────────┘
╔════════════════════════════════════════════════╗
║ ║
║D] Callee sends connection establishment info ║
║ ║
╚════════════════════════════════════════════════╝
┌───────────────┐
│ Matrix │
├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌─────────────────┐ │ ┌───────────────────────────┐ ┌─────────────────┐
│ Caller │ │ Signaling Room │ │ │ Callee │
└─────────────────┘ │ ├───────────────────────────┤ └─────────────────┘
│ ┌────────────────────┐ │ │
│ │ │ m.call.invite │ │
┌─────────────────┐ │ │ mx event │ │ │ ┌─────────────────┐
│ │ │ │ └────────────────────┘ │ │ │
│ │ │ ┌────────────────────┐ │ │ │ │
│ │ │ │ │ m.call.candidates │ │ │ │
│ Element │ │ │ mx event │ │ │ │ Element │
│ App │ │ │ └────────────────────┘ │ ┌────┐ │ App │
│ │ │ ┌────────────────────┐ │ │ │ 3 │ │ │
│ │◀──────────────────┼┐ │ │ m.call.answer │ │ ┌───────┴────┴────────│ │
│ │ │ │ │ mx event │ │ ││ │ │
└─────────────────┘ ││ │ └────────────────────┘ │ │ └─────────────────┘
│ │ │ ┌────────────────────┐ │ ││ ▲
│ │└─────────────────┼──│ m.call.candidates │ │ │ ├────┐
▼ │ │ mx event │◀──┼────────────────┘│ │ 2 │
┌─────────────────┐ │ │ └────────────────────┘ │ ┌────┴────┴───────┐
│ │ └───────────────────────────┘ │ │ │
│ │ │ │ │
│ WebRtc │ │ │ WebRtc │
│ │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ ┌───┴────────────────┐
│ │ │ │ caller offer │
┌────────┴───────────┐ │ │ └───┬────────────────┘
│ callee answer ├─────┘ ┌───────────────┐ └─────────────────┘
├────────────────────┤ │ Stun / Turn │ ▲
│ callee ice │ ├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ┌────┐ │
│ candidates │ │ │ 1 │ │
└────────────────────┘ │ ├────┴──┴───────┐
│ │ │
│ │ Network Stack │
│◀─────────────────────┤ │
│ │ │
│ └───────────────┘
─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘
┌────┐
│ 1 │ The WebRtc layer gathers information on how it can be reach by the other peer directly (Ice candidates)
└────┘
┌──────────────────────────────────────────────────────────────────┐
│candidate:1 1 tcp 1518149375 127.0.0.1 35990 typ host │
└──────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────┐
│candidate:2 1 UDP 2130706431 192.168.1.102 1816 typ host │
└──────────────────────────────────────────────────────────────────┘
┌────┐
│ 2 │ The WebRTC layer notifies the App layer when it finds new Ice Candidates
└────┘
┌────┐ The app layer, takes the ice candidates, encapsulate them in one or several matrix event adds the callId and
│ 3 │ send it to the other user via the room
└────┘
┌──────────────┐
│ mx event │
├──────────────┴────────────────────────┐
│ type: m.call.candidates │
│ │
│ +CallId │
│ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
│ ┌──────────────────┐ │
│ │ice candidate sdp │ │
│ └──────────────────┘ │
└───────────────────────────────────────┘
╔════════════════════════════════════════════════╗
║ ║
║D] Caller Callee connection ║
║ ║
╚════════════════════════════════════════════════╝
┌───────────────┐
┌─────────────────┐ │ Matrix │ ┌─────────────────┐
│ Caller │ ├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ Callee │
└─────────────────┘ │ └─────────────────┘
┌─────────────────┐ │ ┌─────────────────┐
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ Element │ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ │ Element │
│ App │ │ App │
│ │ │ │
│ │ │ │
│ │ │ │
└─────────────────┘ └─────────────────┘
┌───────────────┐
│ Internet │
├───────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌─────────────────┐ │ ┌─────────────────┐
│ │ │ │ │
│ ├───────────────────────────────────────────────────────────────────────────────────┴─────────────────────┤ │
│ WebRtc │█████████████████████████████████████████████████████████████████████████████████████████████████████████│ WebRtc │
┌─────────────┴──────┐ ├────────────────────────────────────────┬──────────────────────────┬───────────────┬─────────────────────┤ ┌─────┴──────────────┐
│ callee answer │ │ │ │ Video / Audio Stream │ │ │ caller offer │
├────────────────────┤ │ └──────────────────────────┘ │ │ ├────────────────────┤
│ callee ice ├──────────┘ └ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ └───────────┤ caller ice │
│ candidates │ │ candidates │
└────────────────────┘ └────────────────────┘
┌─────────────────────────────────────────────────────┐
│ │░
│ If connection is impossible (firewall), and a turn │░
│server is available, connection could happen through │░
│ a relay │░
│ │░
└─────────────────────────────────────────────────────┘░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
┌───────────────┐
│ Internet │
└─┬─────────────┴ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─
┌─────────────────┐ │ ┌─────────────────┐
│ │ │ ┌─────────────────────────┐ │ │
│ ├───────────────────────────────────────┐│ │ │ │ │
│ WebRtc │███████████████████████████████████████││ │ │ WebRtc │
│ ├───────────────────────────────────────┘│ │ │ │ │
│ │ ┌────────┴─────────────────┐ │ Relay │┌─────────────────────────────────────┤ │
┌───────────────┴────┐ │ │ Video / Audio Stream │ │ ││█████████████████████████████████████│ ┌───────┴────────────┐
│ callee answer ├────────────┘ └────────┬─────────────────┘ │ │└─────────────────────────────────────┴─────────┤ caller offer │
├────────────────────┤ │ │ │ ├────────────────────┤
│ callee ice │ │ │ │ │ caller ice │
│ candidates │ └─────────────────────────┘ │ │ candidates │
└────────────────────┘ │ └────────────────────┘
└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─

View File

@@ -8,7 +8,7 @@
# The setting is particularly useful for tweaking memory settings.
android.enableJetifier=true
android.useAndroidX=true
org.gradle.jvmargs=-Xmx1536m
org.gradle.jvmargs=-Xmx2048m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

View File

@@ -1,6 +1,6 @@
#Fri Sep 27 10:10:35 CEST 2019
#Thu Jul 02 12:33:07 CEST 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip

View File

@@ -6,7 +6,7 @@ android {
compileSdkVersion 29
defaultConfig {
minSdkVersion 16
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"
@@ -39,7 +39,7 @@ dependencies {
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
// Paging
implementation "androidx.paging:paging-runtime-ktx:2.1.0"
implementation "androidx.paging:paging-runtime-ktx:2.1.2"
// Logging
implementation 'com.jakewharton.timber:timber:4.7.1'

View File

@@ -1,2 +1,2 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="im.vector.matrix.rx" />
package="org.matrix.android.sdk.rx" />

View File

@@ -1,152 +0,0 @@
/*
* Copyright 2019 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 im.vector.matrix.rx
import androidx.paging.PagedList
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.crypto.crosssigning.MXCrossSigningInfo
import im.vector.matrix.android.api.session.group.GroupSummaryQueryParams
import im.vector.matrix.android.api.session.group.model.GroupSummary
import im.vector.matrix.android.api.session.pushers.Pusher
import im.vector.matrix.android.api.session.room.RoomSummaryQueryParams
import im.vector.matrix.android.api.session.room.model.RoomSummary
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
import im.vector.matrix.android.api.session.sync.SyncState
import im.vector.matrix.android.api.session.user.model.User
import im.vector.matrix.android.api.util.JsonDict
import im.vector.matrix.android.api.util.Optional
import im.vector.matrix.android.api.util.toOptional
import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.rest.DeviceInfo
import im.vector.matrix.android.internal.crypto.store.PrivateKeysInfo
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
import io.reactivex.Observable
import io.reactivex.Single
class RxSession(private val session: Session) {
fun liveRoomSummaries(queryParams: RoomSummaryQueryParams): Observable<List<RoomSummary>> {
return session.getRoomSummariesLive(queryParams).asObservable()
.startWithCallable {
session.getRoomSummaries(queryParams)
}
}
fun liveGroupSummaries(queryParams: GroupSummaryQueryParams): Observable<List<GroupSummary>> {
return session.getGroupSummariesLive(queryParams).asObservable()
.startWithCallable {
session.getGroupSummaries(queryParams)
}
}
fun liveBreadcrumbs(): Observable<List<RoomSummary>> {
return session.getBreadcrumbsLive().asObservable()
.startWithCallable {
session.getBreadcrumbs()
}
}
fun liveMyDeviceInfo(): Observable<List<DeviceInfo>> {
return session.cryptoService().getLiveMyDevicesInfo().asObservable()
.startWithCallable {
session.cryptoService().getMyDevicesInfo()
}
}
fun liveSyncState(): Observable<SyncState> {
return session.getSyncStateLive().asObservable()
}
fun livePushers(): Observable<List<Pusher>> {
return session.getPushersLive().asObservable()
}
fun liveUser(userId: String): Observable<Optional<User>> {
return session.getUserLive(userId).asObservable()
.startWithCallable {
session.getUser(userId).toOptional()
}
}
fun liveUsers(): Observable<List<User>> {
return session.getUsersLive().asObservable()
}
fun liveIgnoredUsers(): Observable<List<User>> {
return session.getIgnoredUsersLive().asObservable()
}
fun livePagedUsers(filter: String? = null): Observable<PagedList<User>> {
return session.getPagedUsersLive(filter).asObservable()
}
fun createRoom(roomParams: CreateRoomParams): Single<String> = singleBuilder {
session.createRoom(roomParams, it)
}
fun searchUsersDirectory(search: String,
limit: Int,
excludedUserIds: Set<String>): Single<List<User>> = singleBuilder {
session.searchUsersDirectory(search, limit, excludedUserIds, it)
}
fun joinRoom(roomIdOrAlias: String,
reason: String? = null,
viaServers: List<String> = emptyList()): Single<Unit> = singleBuilder {
session.joinRoom(roomIdOrAlias, reason, viaServers, it)
}
fun getRoomIdByAlias(roomAlias: String,
searchOnServer: Boolean): Single<Optional<String>> = singleBuilder {
session.getRoomIdByAlias(roomAlias, searchOnServer, it)
}
fun getProfileInfo(userId: String): Single<JsonDict> = singleBuilder {
session.getProfile(userId, it)
}
fun liveUserCryptoDevices(userId: String): Observable<List<CryptoDeviceInfo>> {
return session.cryptoService().getLiveCryptoDeviceInfo(userId).asObservable().startWithCallable {
session.cryptoService().getCryptoDeviceInfo(userId)
}
}
fun liveCrossSigningInfo(userId: String): Observable<Optional<MXCrossSigningInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningKeys(userId).asObservable()
.startWithCallable {
session.cryptoService().crossSigningService().getUserCrossSigningKeys(userId).toOptional()
}
}
fun liveCrossSigningPrivateKeys(): Observable<Optional<PrivateKeysInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().asObservable()
.startWithCallable {
session.cryptoService().crossSigningService().getCrossSigningPrivateKeys().toOptional()
}
}
fun liveAccountData(types: Set<String>): Observable<List<UserAccountDataEvent>> {
return session.getLiveAccountDataEvents(types).asObservable()
.startWithCallable {
session.getAccountDataEvents(types)
}
}
}
fun Session.rx(): RxSession {
return RxSession(this)
}

View File

@@ -1,5 +1,6 @@
/*
* Copyright 2019 New Vector Ltd
* 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.
@@ -14,7 +15,7 @@
* limitations under the License.
*/
package im.vector.matrix.rx
package org.matrix.android.sdk.rx
import androidx.lifecycle.LiveData
import androidx.lifecycle.Observer

View File

@@ -1,5 +1,6 @@
/*
* Copyright 2019 New Vector Ltd
* 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.
@@ -14,9 +15,9 @@
* limitations under the License.
*/
package im.vector.matrix.rx
package org.matrix.android.sdk.rx
import im.vector.matrix.android.api.util.Optional
import org.matrix.android.sdk.api.util.Optional
import io.reactivex.Observable
fun <T : Any> Observable<Optional<T>>.unwrap(): Observable<T> {

View File

@@ -1,5 +1,6 @@
/*
* Copyright 2019 New Vector Ltd
* 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.
@@ -14,10 +15,10 @@
* limitations under the License.
*/
package im.vector.matrix.rx
package org.matrix.android.sdk.rx
import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.util.Cancelable
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.util.Cancelable
import io.reactivex.Completable
import io.reactivex.Single

View File

@@ -1,5 +1,6 @@
/*
* Copyright 2019 New Vector Ltd
* Copyright (c) 2020 New Vector Ltd
* 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.
@@ -14,20 +15,25 @@
* limitations under the License.
*/
package im.vector.matrix.rx
package org.matrix.android.sdk.rx
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.room.Room
import im.vector.matrix.android.api.session.room.members.RoomMemberQueryParams
import im.vector.matrix.android.api.session.room.model.EventAnnotationsSummary
import im.vector.matrix.android.api.session.room.model.ReadReceipt
import im.vector.matrix.android.api.session.room.model.RoomMemberSummary
import im.vector.matrix.android.api.session.room.model.RoomSummary
import im.vector.matrix.android.api.session.room.notification.RoomNotificationState
import im.vector.matrix.android.api.session.room.send.UserDraft
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.util.Optional
import im.vector.matrix.android.api.util.toOptional
import android.net.Uri
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.identity.ThreePid
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.RoomHistoryVisibility
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
import io.reactivex.Completable
import io.reactivex.Observable
import io.reactivex.Single
@@ -60,13 +66,20 @@ class RxRoom(private val room: Room) {
}
}
fun liveStateEvent(eventType: String, stateKey: String): Observable<Optional<Event>> {
fun liveStateEvent(eventType: String, stateKey: QueryStringValue): Observable<Optional<Event>> {
return room.getStateEventLive(eventType, stateKey).asObservable()
.startWithCallable {
room.getStateEvent(eventType, stateKey).toOptional()
}
}
fun liveStateEvents(eventTypes: Set<String>): Observable<List<Event>> {
return room.getStateEventsLive(eventTypes).asObservable()
.startWithCallable {
room.getStateEvents(eventTypes)
}
}
fun liveReadMarker(): Observable<Optional<String>> {
return room.getReadMarkerLive().asObservable()
}
@@ -95,6 +108,38 @@ class RxRoom(private val room: Room) {
fun liveNotificationState(): Observable<RoomNotificationState> {
return room.getLiveRoomNotificationState().asObservable()
}
fun invite(userId: String, reason: String? = null): Completable = completableBuilder<Unit> {
room.invite(userId, reason, it)
}
fun invite3pid(threePid: ThreePid): Completable = completableBuilder<Unit> {
room.invite3pid(threePid, it)
}
fun updateTopic(topic: String): Completable = completableBuilder<Unit> {
room.updateTopic(topic, it)
}
fun updateName(name: String): Completable = completableBuilder<Unit> {
room.updateName(name, it)
}
fun addRoomAlias(alias: String): Completable = completableBuilder<Unit> {
room.addRoomAlias(alias, it)
}
fun updateCanonicalAlias(alias: String): Completable = completableBuilder<Unit> {
room.updateCanonicalAlias(alias, it)
}
fun updateHistoryReadability(readability: RoomHistoryVisibility): Completable = completableBuilder<Unit> {
room.updateHistoryReadability(readability, it)
}
fun updateAvatar(avatarUri: Uri, fileName: String): Completable = completableBuilder<Unit> {
room.updateAvatar(avatarUri, fileName, it)
}
}
fun Room.rx(): RxRoom {

View File

@@ -0,0 +1,221 @@
/*
* Copyright (c) 2020 New Vector Ltd
* 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.rx
import androidx.paging.PagedList
import io.reactivex.Observable
import io.reactivex.Single
import io.reactivex.functions.Function3
import org.matrix.android.sdk.api.extensions.orFalse
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.KEYBACKUP_SECRET_SSSS_NAME
import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME
import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo
import org.matrix.android.sdk.api.session.crypto.crosssigning.SELF_SIGNING_KEY_SSSS_NAME
import org.matrix.android.sdk.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME
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.members.ChangeMembershipState
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
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.JsonDict
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 RxSession(private val session: Session) {
fun liveRoomSummaries(queryParams: RoomSummaryQueryParams): Observable<List<RoomSummary>> {
return session.getRoomSummariesLive(queryParams).asObservable()
.startWithCallable {
session.getRoomSummaries(queryParams)
}
}
fun liveGroupSummaries(queryParams: GroupSummaryQueryParams): Observable<List<GroupSummary>> {
return session.getGroupSummariesLive(queryParams).asObservable()
.startWithCallable {
session.getGroupSummaries(queryParams)
}
}
fun liveBreadcrumbs(queryParams: RoomSummaryQueryParams): Observable<List<RoomSummary>> {
return session.getBreadcrumbsLive(queryParams).asObservable()
.startWithCallable {
session.getBreadcrumbs(queryParams)
}
}
fun liveMyDevicesInfo(): Observable<List<DeviceInfo>> {
return session.cryptoService().getLiveMyDevicesInfo().asObservable()
.startWithCallable {
session.cryptoService().getMyDevicesInfo()
}
}
fun liveSyncState(): Observable<SyncState> {
return session.getSyncStateLive().asObservable()
}
fun livePushers(): Observable<List<Pusher>> {
return session.getPushersLive().asObservable()
}
fun liveUser(userId: String): Observable<Optional<User>> {
return session.getUserLive(userId).asObservable()
.startWithCallable {
session.getUser(userId).toOptional()
}
}
fun liveUsers(): Observable<List<User>> {
return session.getUsersLive().asObservable()
}
fun liveIgnoredUsers(): Observable<List<User>> {
return session.getIgnoredUsersLive().asObservable()
}
fun livePagedUsers(filter: String? = null, excludedUserIds: Set<String>? = null): Observable<PagedList<User>> {
return session.getPagedUsersLive(filter, excludedUserIds).asObservable()
}
fun liveThreePIds(refreshData: Boolean): Observable<List<ThreePid>> {
return session.getThreePidsLive(refreshData).asObservable()
.startWithCallable { session.getThreePids() }
}
fun livePendingThreePIds(): Observable<List<ThreePid>> {
return session.getPendingThreePidsLive().asObservable()
.startWithCallable { session.getPendingThreePids() }
}
fun createRoom(roomParams: CreateRoomParams): Single<String> = singleBuilder {
session.createRoom(roomParams, it)
}
fun searchUsersDirectory(search: String,
limit: Int,
excludedUserIds: Set<String>): Single<List<User>> = singleBuilder {
session.searchUsersDirectory(search, limit, excludedUserIds, it)
}
fun joinRoom(roomIdOrAlias: String,
reason: String? = null,
viaServers: List<String> = emptyList()): Single<Unit> = singleBuilder {
session.joinRoom(roomIdOrAlias, reason, viaServers, it)
}
fun getRoomIdByAlias(roomAlias: String,
searchOnServer: Boolean): Single<Optional<String>> = singleBuilder {
session.getRoomIdByAlias(roomAlias, searchOnServer, it)
}
fun getProfileInfo(userId: String): Single<JsonDict> = singleBuilder {
session.getProfile(userId, it)
}
fun liveUserCryptoDevices(userId: String): Observable<List<CryptoDeviceInfo>> {
return session.cryptoService().getLiveCryptoDeviceInfo(userId).asObservable().startWithCallable {
session.cryptoService().getCryptoDeviceInfo(userId)
}
}
fun liveCrossSigningInfo(userId: String): Observable<Optional<MXCrossSigningInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningKeys(userId).asObservable()
.startWithCallable {
session.cryptoService().crossSigningService().getUserCrossSigningKeys(userId).toOptional()
}
}
fun liveCrossSigningPrivateKeys(): Observable<Optional<PrivateKeysInfo>> {
return session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().asObservable()
.startWithCallable {
session.cryptoService().crossSigningService().getCrossSigningPrivateKeys().toOptional()
}
}
fun liveAccountData(types: Set<String>): Observable<List<UserAccountDataEvent>> {
return session.getLiveAccountDataEvents(types).asObservable()
.startWithCallable {
session.getAccountDataEvents(types)
}
}
fun liveRoomWidgets(
roomId: String,
widgetId: QueryStringValue,
widgetTypes: Set<String>? = null,
excludedTypes: Set<String>? = null
): Observable<List<Widget>> {
return session.widgetService().getRoomWidgetsLive(roomId, widgetId, widgetTypes, excludedTypes).asObservable()
.startWithCallable {
session.widgetService().getRoomWidgets(roomId, widgetId, widgetTypes, excludedTypes)
}
}
fun liveRoomChangeMembershipState(): Observable<Map<String, ChangeMembershipState>> {
return session.getChangeMembershipsLive().asObservable()
}
fun liveSecretSynchronisationInfo(): Observable<SecretsSynchronisationInfo> {
return Observable.combineLatest<List<UserAccountDataEvent>, Optional<MXCrossSigningInfo>, Optional<PrivateKeysInfo>, SecretsSynchronisationInfo>(
liveAccountData(setOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME)),
liveCrossSigningInfo(session.myUserId),
liveCrossSigningPrivateKeys(),
Function3 { _, crossSigningInfo, pInfo ->
// first check if 4S is already setup
val is4SSetup = session.sharedSecretStorageService.isRecoverySetup()
val isCrossSigningEnabled = crossSigningInfo.getOrNull() != null
val isCrossSigningTrusted = crossSigningInfo.getOrNull()?.isTrusted() == true
val allPrivateKeysKnown = pInfo.getOrNull()?.allKnown().orFalse()
val keysBackupService = session.cryptoService().keysBackupService()
val currentBackupVersion = keysBackupService.currentBackupVersion
val megolmBackupAvailable = currentBackupVersion != null
val savedBackupKey = keysBackupService.getKeyBackupRecoveryKeyInfo()
val megolmKeyKnown = savedBackupKey?.version == currentBackupVersion
SecretsSynchronisationInfo(
isBackupSetup = is4SSetup,
isCrossSigningEnabled = isCrossSigningEnabled,
isCrossSigningTrusted = isCrossSigningTrusted,
allPrivateKeysKnown = allPrivateKeysKnown,
megolmBackupAvailable = megolmBackupAvailable,
megolmSecretKnown = megolmKeyKnown,
isMegolmKeyIn4S = session.sharedSecretStorageService.isMegolmKeyInBackup()
)
}
)
.distinctUntilChanged()
}
}
fun Session.rx(): RxSession {
return RxSession(this)
}

View File

@@ -0,0 +1,28 @@
/*
* Copyright (c) 2020 New Vector Ltd
* 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.rx
data class SecretsSynchronisationInfo(
val isBackupSetup: Boolean,
val isCrossSigningEnabled: Boolean,
val isCrossSigningTrusted: Boolean,
val allPrivateKeysKnown: Boolean,
val megolmBackupAvailable: Boolean,
val megolmSecretKnown: Boolean,
val isMegolmKeyIn4S: Boolean
)

View File

@@ -23,7 +23,7 @@ android {
testOptions.unitTests.includeAndroidResources = true
defaultConfig {
minSdkVersion 16
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "0.0.1"
@@ -31,14 +31,26 @@ android {
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// The following argument makes the Android Test Orchestrator run its
// "pm clear" command after each test invocation. This command ensures
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
resValue "string", "git_sdk_revision", "\"${gitRevision()}\""
resValue "string", "git_sdk_revision_unix_date", "\"${gitRevisionUnixDate()}\""
resValue "string", "git_sdk_revision_date", "\"${gitRevisionDate()}\""
defaultConfig {
consumerProguardFiles 'proguard-rules.pro'
}
}
testOptions {
execution 'ANDROIDX_TEST_ORCHESTRATOR'
}
buildTypes {
debug {
// Set to true to log privacy or sensible data, such as token
buildConfigField "boolean", "LOG_PRIVATE_DATA", project.property("vector.debugPrivateData")
@@ -49,9 +61,6 @@ android {
release {
buildConfigField "boolean", "LOG_PRIVATE_DATA", "false"
buildConfigField "okhttp3.logging.HttpLoggingInterceptor.Level", "OKHTTP_LOGGING_LEVEL", "okhttp3.logging.HttpLoggingInterceptor.Level.NONE"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
@@ -103,25 +112,31 @@ dependencies {
def moshi_version = '1.8.0'
def lifecycle_version = '2.2.0'
def arch_version = '2.1.0'
def coroutines_version = "1.3.2"
def coroutines_version = "1.3.8"
def markwon_version = '3.1.0'
def daggerVersion = '2.25.4'
def work_version = '2.3.3'
def work_version = '2.4.0'
def retrofit_version = '2.6.2'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
implementation "androidx.appcompat:appcompat:1.1.0"
implementation "androidx.appcompat:appcompat:1.2.0"
implementation "androidx.core:core-ktx:1.3.1"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
// Network
implementation 'com.squareup.retrofit2:retrofit:2.6.2'
implementation 'com.squareup.retrofit2:converter-moshi:2.6.2'
implementation 'com.squareup.okhttp3:okhttp:4.2.2'
implementation 'com.squareup.okhttp3:logging-interceptor:4.2.2'
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-moshi:$retrofit_version"
implementation(platform("com.squareup.okhttp3:okhttp-bom:4.8.1"))
implementation 'com.squareup.okhttp3:okhttp'
implementation 'com.squareup.okhttp3:logging-interceptor'
implementation 'com.squareup.okhttp3:okhttp-urlconnection'
implementation "com.squareup.moshi:moshi-adapters:$moshi_version"
kapt "com.squareup.moshi:moshi-kotlin-codegen:$moshi_version"
@@ -129,7 +144,6 @@ dependencies {
// Image
implementation 'androidx.exifinterface:exifinterface:1.3.0-alpha01'
implementation 'id.zelory:compressor:3.0.0'
// Database
implementation 'com.github.Zhuinden:realm-monarchy:0.5.1'
@@ -158,6 +172,15 @@ dependencies {
// Bus
implementation 'org.greenrobot:eventbus:3.1.1'
// Phone number https://github.com/google/libphonenumber
implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.23'
// Web RTC
// org.webrtc:google-webrtc is for development purposes only. See http://webrtc.github.io/webrtc-org/native-code/android/
// implementation 'org.webrtc:google-webrtc:1.0.+'
// Use the same WebRTC library than the one used by Jitsi library
implementation('com.facebook.react:react-native-webrtc:1.84.0-jitsi-5112273@aar')
debugImplementation 'com.airbnb.okreplay:okreplay:1.5.0'
releaseImplementation 'com.airbnb.okreplay:noop:1.5.0'
androidTestImplementation 'com.airbnb.okreplay:espresso:1.5.0'
@@ -172,6 +195,7 @@ dependencies {
// Plant Timber tree for test
testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1'
kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion"
androidTestImplementation 'androidx.test:core:1.2.0'
androidTestImplementation 'androidx.test:runner:1.2.0'
androidTestImplementation 'androidx.test:rules:1.2.0'
@@ -184,4 +208,6 @@ dependencies {
androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
// Plant Timber tree for test
androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1'
androidTestUtil 'androidx.test:orchestrator:1.2.0'
}

View File

@@ -29,5 +29,6 @@
<issue id="SetTextI18n" severity="error" />
<issue id="ViewConstructor" severity="error" />
<issue id="UseValueOf" severity="error" />
<issue id="ObsoleteSdkInt" severity="error" />
</lint>

View File

@@ -19,3 +19,64 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
### EVENT BUS ###
-keepattributes *Annotation*
-keepclassmembers class * {
@org.greenrobot.eventbus.Subscribe <methods>;
}
-keep enum org.greenrobot.eventbus.ThreadMode { *; }
### MOSHI ###
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
-keepclasseswithmembers class * {
@com.squareup.moshi.* <methods>;
}
-keep @com.squareup.moshi.JsonQualifier interface *
# Enum field names are used by the integrated EnumJsonAdapter.
# values() is synthesized by the Kotlin compiler and is used by EnumJsonAdapter indirectly
# Annotate enums with @JsonClass(generateAdapter = false) to use them with Moshi.
-keepclassmembers @com.squareup.moshi.JsonClass class * extends java.lang.Enum {
<fields>;
**[] values();
}
-keep class kotlin.reflect.jvm.internal.impl.builtins.BuiltInsLoaderImpl
-keepclassmembers class kotlin.Metadata {
public <methods>;
}
### OKHTTP for Android Studio ###
-keep class okhttp3.Headers { *; }
-keep interface okhttp3.Interceptor.* { *; }
### OLM JNI ###
-keep class org.matrix.olm.** { *; }
### Webrtc
-keep class org.webrtc.** { *; }
### Serializable persisted classes
# https://www.guardsquare.com/en/products/proguard/manual/examples#serializable
-keepnames class * implements java.io.Serializable
-keepclassmembers class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
!static !transient <fields>;
!private <fields>;
!private <methods>;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2019 New Vector Ltd
* Copyright (c) 2020 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.
@@ -14,11 +14,11 @@
* limitations under the License.
*/
package im.vector.matrix.android
package org.matrix.android.sdk
import android.content.Context
import androidx.test.core.app.ApplicationProvider
import im.vector.matrix.android.test.shared.createTimberTestRule
import org.matrix.android.sdk.test.shared.createTimberTestRule
import org.junit.Rule
import java.io.File

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2019 New Vector Ltd
* Copyright (c) 2020 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android;
package org.matrix.android.sdk;
import androidx.annotation.Nullable;
import androidx.lifecycle.LiveData;

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2019 New Vector Ltd
* Copyright (c) 2020 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.
@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android;
package org.matrix.android.sdk;
import android.os.Handler;
import android.os.Looper;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android
package org.matrix.android.sdk
import okreplay.OkReplayConfig
import okreplay.PermissionRule

View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/
package im.vector.matrix.android
package org.matrix.android.sdk
import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers
import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.asCoroutineDispatcher
import java.util.concurrent.Executors

View File

@@ -14,13 +14,13 @@
* limitations under the License.
*/
package im.vector.matrix.android.account
package org.matrix.android.sdk.account
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith

View File

@@ -14,13 +14,13 @@
* limitations under the License.
*/
package im.vector.matrix.android.account
package org.matrix.android.sdk.account
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.failure.isInvalidPassword
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.failure.isInvalidPassword
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.amshove.kluent.shouldBeTrue
import org.junit.FixMethodOrder
import org.junit.Test

View File

@@ -14,17 +14,17 @@
* limitations under the License.
*/
package im.vector.matrix.android.account
package org.matrix.android.sdk.account
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.auth.data.LoginFlowResult
import im.vector.matrix.android.api.auth.registration.RegistrationResult
import im.vector.matrix.android.api.failure.Failure
import im.vector.matrix.android.api.failure.MatrixError
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.common.TestMatrixCallback
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.auth.data.LoginFlowResult
import org.matrix.android.sdk.api.auth.registration.RegistrationResult
import org.matrix.android.sdk.api.failure.Failure
import org.matrix.android.sdk.api.failure.MatrixError
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.common.TestMatrixCallback
import org.junit.Assert.assertTrue
import org.junit.FixMethodOrder
import org.junit.Test

View File

@@ -0,0 +1,101 @@
/*
* Copyright (c) 2020 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.api
import android.content.Context
import androidx.lifecycle.ProcessLifecycleOwner
import androidx.work.Configuration
import androidx.work.WorkManager
import com.zhuinden.monarchy.Monarchy
import org.matrix.android.sdk.BuildConfig
import org.matrix.android.sdk.api.auth.AuthenticationService
import org.matrix.android.sdk.api.legacy.LegacySessionImporter
import org.matrix.android.sdk.api.raw.RawService
import org.matrix.android.sdk.common.DaggerTestMatrixComponent
import org.matrix.android.sdk.internal.SessionManager
import org.matrix.android.sdk.internal.network.UserAgentHolder
import org.matrix.android.sdk.internal.util.BackgroundDetectionObserver
import org.matrix.olm.OlmManager
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
/**
* This is the main entry point to the matrix sdk.
* To get the singleton instance, use getInstance static method.
*/
class Matrix private constructor(context: Context, matrixConfiguration: MatrixConfiguration) {
@Inject internal lateinit var legacySessionImporter: LegacySessionImporter
@Inject internal lateinit var authenticationService: AuthenticationService
@Inject internal lateinit var rawService: RawService
@Inject internal lateinit var userAgentHolder: UserAgentHolder
@Inject internal lateinit var backgroundDetectionObserver: BackgroundDetectionObserver
@Inject internal lateinit var olmManager: OlmManager
@Inject internal lateinit var sessionManager: SessionManager
init {
Monarchy.init(context)
DaggerTestMatrixComponent.factory().create(context, matrixConfiguration).inject(this)
if (context.applicationContext !is Configuration.Provider) {
WorkManager.initialize(context, Configuration.Builder().setExecutor(Executors.newCachedThreadPool()).build())
}
ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver)
}
fun getUserAgent() = userAgentHolder.userAgent
fun authenticationService(): AuthenticationService {
return authenticationService
}
fun rawService() = rawService
fun legacySessionImporter(): LegacySessionImporter {
return legacySessionImporter
}
companion object {
private lateinit var instance: Matrix
private val isInit = AtomicBoolean(false)
fun initialize(context: Context, matrixConfiguration: MatrixConfiguration) {
if (isInit.compareAndSet(false, true)) {
instance = Matrix(context.applicationContext, matrixConfiguration)
}
}
fun getInstance(context: Context): Matrix {
if (isInit.compareAndSet(false, true)) {
val appContext = context.applicationContext
if (appContext is MatrixConfiguration.Provider) {
val matrixConfiguration = (appContext as MatrixConfiguration.Provider).providesMatrixConfiguration()
instance = Matrix(appContext, matrixConfiguration)
} else {
throw IllegalStateException("Matrix is not initialized properly." +
" You should call Matrix.initialize or let your application implements MatrixConfiguration.Provider.")
}
}
return instance
}
fun getSdkVersion(): String {
return BuildConfig.VERSION_NAME + " (" + BuildConfig.GIT_SDK_REVISION + ")"
}
}
}

View File

@@ -15,27 +15,27 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import android.content.Context
import android.net.Uri
import androidx.lifecycle.Observer
import im.vector.matrix.android.api.Matrix
import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.MatrixConfiguration
import im.vector.matrix.android.api.auth.data.HomeServerConnectionConfig
import im.vector.matrix.android.api.auth.data.LoginFlowResult
import im.vector.matrix.android.api.auth.registration.RegistrationResult
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.api.session.events.model.LocalEcho
import im.vector.matrix.android.api.session.events.model.toModel
import im.vector.matrix.android.api.session.room.Room
import im.vector.matrix.android.api.session.room.model.message.MessageContent
import im.vector.matrix.android.api.session.room.timeline.Timeline
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.room.timeline.TimelineSettings
import im.vector.matrix.android.api.session.sync.SyncState
import org.matrix.android.sdk.api.Matrix
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixConfiguration
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
import org.matrix.android.sdk.api.auth.data.LoginFlowResult
import org.matrix.android.sdk.api.auth.registration.RegistrationResult
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.model.message.MessageContent
import org.matrix.android.sdk.api.session.room.send.SendState
import org.matrix.android.sdk.api.session.room.timeline.Timeline
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
import org.matrix.android.sdk.api.session.sync.SyncState
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.delay
@@ -57,9 +57,10 @@ class CommonTestHelper(context: Context) {
val matrix: Matrix
fun getTestInterceptor(session: Session): MockOkHttpInterceptor? = TestNetworkModule.interceptorForSession(session.sessionId) as? MockOkHttpInterceptor
init {
Matrix.initialize(context, MatrixConfiguration("TestFlavor"))
matrix = Matrix.getInstance(context)
}
@@ -88,7 +89,8 @@ class CommonTestHelper(context: Context) {
fun syncSession(session: Session) {
val lock = CountDownLatch(1)
session.open()
GlobalScope.launch(Dispatchers.Main) { session.open() }
session.startSync(true)
val syncLiveData = runBlocking(Dispatchers.Main) {
@@ -115,8 +117,9 @@ class CommonTestHelper(context: Context) {
* @param nbOfMessages the number of time the message will be sent
*/
fun sendTextMessage(room: Room, message: String, nbOfMessages: Int): List<TimelineEvent> {
val timeline = room.createTimeline(null, TimelineSettings(10))
val sentEvents = ArrayList<TimelineEvent>(nbOfMessages)
val latch = CountDownLatch(nbOfMessages)
val latch = CountDownLatch(1)
val timelineListener = object : Timeline.Listener {
override fun onTimelineFailure(throwable: Throwable) {
}
@@ -127,28 +130,29 @@ class CommonTestHelper(context: Context) {
override fun onTimelineUpdated(snapshot: List<TimelineEvent>) {
val newMessages = snapshot
.filter { LocalEcho.isLocalEchoId(it.eventId).not() }
.filter { it.root.sendState == SendState.SYNCED }
.filter { it.root.getClearType() == EventType.MESSAGE }
.filter { it.root.getClearContent().toModel<MessageContent>()?.body?.startsWith(message) == true }
if (newMessages.size == nbOfMessages) {
sentEvents.addAll(newMessages)
// Remove listener now, if not at the next update sendEvents could change
timeline.removeListener(this)
latch.countDown()
}
}
}
val timeline = room.createTimeline(null, TimelineSettings(10))
timeline.start()
timeline.addListener(timelineListener)
for (i in 0 until nbOfMessages) {
room.sendTextMessage(message + " #" + (i + 1))
}
await(latch)
timeline.removeListener(timelineListener)
// Wait 3 second more per message
await(latch, timeout = TestConstants.timeOutMillis + 3_000L * nbOfMessages)
timeline.dispose()
// Check that all events has been created
assertEquals(nbOfMessages.toLong(), sentEvents.size.toLong())
assertEquals("Message number do not match $sentEvents", nbOfMessages.toLong(), sentEvents.size.toLong())
return sentEvents
}
@@ -291,6 +295,24 @@ class CommonTestHelper(context: Context) {
return requestFailure!!
}
fun createEventListener(latch: CountDownLatch, predicate: (List<TimelineEvent>) -> Boolean): Timeline.Listener {
return object : Timeline.Listener {
override fun onTimelineFailure(throwable: Throwable) {
// noop
}
override fun onNewTimelineEvents(eventIds: List<String>) {
// noop
}
override fun onTimelineUpdated(snapshot: List<TimelineEvent>) {
if (predicate(snapshot)) {
latch.countDown()
}
}
}
}
/**
* Await for a latch and ensure the result is true
*
@@ -349,3 +371,13 @@ class CommonTestHelper(context: Context) {
session.close()
}
}
fun List<TimelineEvent>.checkSendOrder(baseTextMessage: String, numberOfMessages: Int, startIndex: Int): Boolean {
return drop(startIndex)
.take(numberOfMessages)
.foldRightIndexed(true) { index, timelineEvent, acc ->
val body = timelineEvent.root.content.toModel<MessageContent>()?.body
val currentMessageSuffix = numberOfMessages - index
acc && (body == null || body.startsWith(baseTextMessage) && body.endsWith("#$currentMessageSuffix"))
}
}

View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import im.vector.matrix.android.api.session.Session
import org.matrix.android.sdk.api.session.Session
data class CryptoTestData(val firstSession: Session,
val roomId: String,

View File

@@ -14,26 +14,32 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import android.os.SystemClock
import android.util.Log
import androidx.lifecycle.Observer
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.api.session.events.model.toContent
import im.vector.matrix.android.api.session.room.Room
import im.vector.matrix.android.api.session.room.model.Membership
import im.vector.matrix.android.api.session.room.model.RoomSummary
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
import im.vector.matrix.android.api.session.room.roomSummaryQueryParams
import im.vector.matrix.android.api.session.room.timeline.Timeline
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.room.timeline.TimelineSettings
import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupAuthData
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.verification.IncomingSasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.OutgoingSasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toContent
import org.matrix.android.sdk.api.session.room.Room
import org.matrix.android.sdk.api.session.room.model.Membership
import org.matrix.android.sdk.api.session.room.model.RoomSummary
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams
import org.matrix.android.sdk.api.session.room.timeline.Timeline
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupAuthData
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@@ -41,6 +47,8 @@ import kotlinx.coroutines.runBlocking
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import java.util.UUID
import java.util.concurrent.CountDownLatch
class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
@@ -53,18 +61,20 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
/**
* @return alice session
*/
fun doE2ETestWithAliceInARoom(): CryptoTestData {
fun doE2ETestWithAliceInARoom(encryptedRoom: Boolean = true): CryptoTestData {
val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, defaultSessionParams)
val roomId = mTestHelper.doSync<String> {
aliceSession.createRoom(CreateRoomParams(name = "MyRoom"), it)
aliceSession.createRoom(CreateRoomParams().apply { name = "MyRoom" }, it)
}
if (encryptedRoom) {
val room = aliceSession.getRoom(roomId)!!
mTestHelper.doSync<Unit> {
room.enableEncryption(callback = it)
}
}
return CryptoTestData(aliceSession, roomId)
}
@@ -72,8 +82,8 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
/**
* @return alice and bob sessions
*/
fun doE2ETestWithAliceAndBobInARoom(): CryptoTestData {
val cryptoTestData = doE2ETestWithAliceInARoom()
fun doE2ETestWithAliceAndBobInARoom(encryptedRoom: Boolean = true): CryptoTestData {
val cryptoTestData = doE2ETestWithAliceInARoom(encryptedRoom)
val aliceSession = cryptoTestData.firstSession
val aliceRoomId = cryptoTestData.roomId
@@ -165,7 +175,7 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
}
mTestHelper.doSync<Unit> {
samSession.joinRoom(room.roomId, null, it)
samSession.joinRoom(room.roomId, null, emptyList(), it)
}
return samSession
@@ -239,14 +249,14 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
val eventWireContent = event.content.toContent()
assertNotNull(eventWireContent)
assertNull(eventWireContent.get("body"))
assertEquals(MXCRYPTO_ALGORITHM_MEGOLM, eventWireContent.get("algorithm"))
assertNull(eventWireContent["body"])
assertEquals(MXCRYPTO_ALGORITHM_MEGOLM, eventWireContent["algorithm"])
assertNotNull(eventWireContent.get("ciphertext"))
assertNotNull(eventWireContent.get("session_id"))
assertNotNull(eventWireContent.get("sender_key"))
assertNotNull(eventWireContent["ciphertext"])
assertNotNull(eventWireContent["session_id"])
assertNotNull(eventWireContent["sender_key"])
assertEquals(senderSession.sessionParams.credentials.deviceId, eventWireContent.get("device_id"))
assertEquals(senderSession.sessionParams.deviceId, eventWireContent["device_id"])
assertNotNull(event.eventId)
assertEquals(roomId, event.roomId)
@@ -255,7 +265,7 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
val eventContent = event.toContent()
assertNotNull(eventContent)
assertEquals(clearMessage, eventContent.get("body"))
assertEquals(clearMessage, eventContent["body"])
assertEquals(senderSession.myUserId, event.senderId)
}
@@ -272,4 +282,143 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
authData = createFakeMegolmBackupAuthData()
)
}
fun createDM(alice: Session, bob: Session): String {
val roomId = mTestHelper.doSync<String> {
alice.createRoom(
CreateRoomParams().apply {
invitedUserIds.add(bob.myUserId)
setDirectMessage()
enableEncryptionIfInvitedUsersSupportIt = true
},
it
)
}
mTestHelper.waitWithLatch { latch ->
val bobRoomSummariesLive = runBlocking(Dispatchers.Main) {
bob.getRoomSummariesLive(roomSummaryQueryParams { })
}
val newRoomObserver = object : Observer<List<RoomSummary>> {
override fun onChanged(t: List<RoomSummary>?) {
val indexOfFirst = t?.indexOfFirst { it.roomId == roomId } ?: -1
if (indexOfFirst != -1) {
latch.countDown()
bobRoomSummariesLive.removeObserver(this)
}
}
}
GlobalScope.launch(Dispatchers.Main) {
bobRoomSummariesLive.observeForever(newRoomObserver)
}
}
mTestHelper.waitWithLatch { latch ->
val bobRoomSummariesLive = runBlocking(Dispatchers.Main) {
bob.getRoomSummariesLive(roomSummaryQueryParams { })
}
val newRoomObserver = object : Observer<List<RoomSummary>> {
override fun onChanged(t: List<RoomSummary>?) {
if (bob.getRoom(roomId)
?.getRoomMember(bob.myUserId)
?.membership == Membership.JOIN) {
latch.countDown()
bobRoomSummariesLive.removeObserver(this)
}
}
}
GlobalScope.launch(Dispatchers.Main) {
bobRoomSummariesLive.observeForever(newRoomObserver)
}
mTestHelper.doSync<Unit> { bob.joinRoom(roomId, callback = it) }
}
return roomId
}
fun initializeCrossSigning(session: Session) {
mTestHelper.doSync<Unit> {
session.cryptoService().crossSigningService()
.initializeCrossSigning(UserPasswordAuth(
user = session.myUserId,
password = TestConstants.PASSWORD
), it)
}
}
fun verifySASCrossSign(alice: Session, bob: Session, roomId: String) {
assertTrue(alice.cryptoService().crossSigningService().canCrossSign())
assertTrue(bob.cryptoService().crossSigningService().canCrossSign())
val requestID = UUID.randomUUID().toString()
val aliceVerificationService = alice.cryptoService().verificationService()
val bobVerificationService = bob.cryptoService().verificationService()
aliceVerificationService.beginKeyVerificationInDMs(
VerificationMethod.SAS,
requestID,
roomId,
bob.myUserId,
bob.sessionParams.credentials.deviceId!!,
null)
// we should reach SHOW SAS on both
var alicePovTx: OutgoingSasVerificationTransaction? = null
var bobPovTx: IncomingSasVerificationTransaction? = null
// wait for alice to get the ready
mTestHelper.waitWithLatch {
mTestHelper.retryPeriodicallyWithLatch(it) {
bobPovTx = bobVerificationService.getExistingTransaction(alice.myUserId, requestID) as? IncomingSasVerificationTransaction
Log.v("TEST", "== bobPovTx is ${alicePovTx?.uxState}")
if (bobPovTx?.state == VerificationTxState.OnStarted) {
bobPovTx?.performAccept()
true
} else {
false
}
}
}
mTestHelper.waitWithLatch {
mTestHelper.retryPeriodicallyWithLatch(it) {
alicePovTx = aliceVerificationService.getExistingTransaction(bob.myUserId, requestID) as? OutgoingSasVerificationTransaction
Log.v("TEST", "== alicePovTx is ${alicePovTx?.uxState}")
alicePovTx?.state == VerificationTxState.ShortCodeReady
}
}
// wait for alice to get the ready
mTestHelper.waitWithLatch {
mTestHelper.retryPeriodicallyWithLatch(it) {
bobPovTx = bobVerificationService.getExistingTransaction(alice.myUserId, requestID) as? IncomingSasVerificationTransaction
Log.v("TEST", "== bobPovTx is ${alicePovTx?.uxState}")
if (bobPovTx?.state == VerificationTxState.OnStarted) {
bobPovTx?.performAccept()
}
bobPovTx?.state == VerificationTxState.ShortCodeReady
}
}
assertEquals("SAS code do not match", alicePovTx!!.getDecimalCodeRepresentation(), bobPovTx!!.getDecimalCodeRepresentation())
bobPovTx!!.userHasVerifiedShortCode()
alicePovTx!!.userHasVerifiedShortCode()
mTestHelper.waitWithLatch {
mTestHelper.retryPeriodicallyWithLatch(it) {
alice.cryptoService().crossSigningService().isUserTrusted(bob.myUserId)
}
}
mTestHelper.waitWithLatch {
mTestHelper.retryPeriodicallyWithLatch(it) {
alice.cryptoService().crossSigningService().isUserTrusted(bob.myUserId)
}
}
}
}

View File

@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import org.matrix.android.sdk.internal.session.TestInterceptor
import okhttp3.Interceptor
import okhttp3.Protocol
import okhttp3.Request
@@ -37,7 +38,7 @@ import javax.net.ssl.HttpsURLConnection
* AutoDiscovery().findClientConfig("matrix.org", <callback>)
* </code>
*/
class MockOkHttpInterceptor : Interceptor {
class MockOkHttpInterceptor : TestInterceptor {
private var rules: ArrayList<Rule> = ArrayList()
@@ -45,6 +46,12 @@ class MockOkHttpInterceptor : Interceptor {
rules.add(rule)
}
fun clearRules() {
rules.clear()
}
override var sessionId: String? = null
override fun intercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request()

View File

@@ -14,6 +14,6 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
data class SessionTestParams @JvmOverloads constructor(val withInitialSync: Boolean = false)

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import android.os.Debug

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
package im.vector.matrix.android.common
package org.matrix.android.sdk.common
import androidx.annotation.CallSuper
import im.vector.matrix.android.api.MatrixCallback
import org.matrix.android.sdk.api.MatrixCallback
import org.junit.Assert.fail
import timber.log.Timber
import java.util.concurrent.CountDownLatch

View File

@@ -0,0 +1,46 @@
/*
* Copyright (c) 2020 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.common
import android.content.Context
import dagger.BindsInstance
import dagger.Component
import org.matrix.android.sdk.api.MatrixConfiguration
import org.matrix.android.sdk.internal.auth.AuthModule
import org.matrix.android.sdk.internal.di.MatrixComponent
import org.matrix.android.sdk.internal.di.MatrixModule
import org.matrix.android.sdk.internal.di.MatrixScope
import org.matrix.android.sdk.internal.di.NetworkModule
import org.matrix.android.sdk.internal.raw.RawModule
@Component(modules = [
TestModule::class,
MatrixModule::class,
NetworkModule::class,
AuthModule::class,
RawModule::class,
TestNetworkModule::class
])
@MatrixScope
internal interface TestMatrixComponent : MatrixComponent {
@Component.Factory
interface Factory {
fun create(@BindsInstance context: Context,
@BindsInstance matrixConfiguration: MatrixConfiguration): TestMatrixComponent
}
}

View File

@@ -0,0 +1,27 @@
/*
* Copyright (c) 2020 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.common
import dagger.Binds
import dagger.Module
import org.matrix.android.sdk.internal.di.MatrixComponent
@Module
internal abstract class TestModule {
@Binds
abstract fun providesMatrixComponent(testMatrixComponent: TestMatrixComponent): MatrixComponent
}

View File

@@ -0,0 +1,39 @@
/*
* Copyright (c) 2020 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.common
import dagger.Module
import dagger.Provides
import org.matrix.android.sdk.internal.session.MockHttpInterceptor
import org.matrix.android.sdk.internal.session.TestInterceptor
@Module
internal object TestNetworkModule {
val interceptors = ArrayList<TestInterceptor>()
fun interceptorForSession(sessionId: String): TestInterceptor? = interceptors.firstOrNull { it.sessionId == sessionId }
@Provides
@JvmStatic
@MockHttpInterceptor
fun providesTestInterceptor(): TestInterceptor? {
return MockOkHttpInterceptor().also {
interceptors.add(it)
}
}
}

View File

@@ -14,22 +14,22 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto
package org.matrix.android.sdk.internal.crypto
import android.os.MemoryFile
import android.util.Base64
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.internal.crypto.attachments.MXEncryptedAttachments
import im.vector.matrix.android.internal.crypto.model.rest.EncryptedFileInfo
import im.vector.matrix.android.internal.crypto.model.rest.EncryptedFileKey
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNotNull
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
import java.io.ByteArrayInputStream
import org.matrix.android.sdk.internal.crypto.attachments.MXEncryptedAttachments
import org.matrix.android.sdk.internal.crypto.model.rest.EncryptedFileInfo
import org.matrix.android.sdk.internal.crypto.model.rest.EncryptedFileKey
import org.matrix.android.sdk.internal.crypto.attachments.toElementToDecrypt
import java.io.ByteArrayOutputStream
import java.io.InputStream
/**
@@ -41,29 +41,26 @@ import java.io.InputStream
class AttachmentEncryptionTest {
private fun checkDecryption(input: String, encryptedFileInfo: EncryptedFileInfo): String {
val `in` = Base64.decode(input, Base64.DEFAULT)
val inputAsByteArray = Base64.decode(input, Base64.DEFAULT)
val inputStream: InputStream
inputStream = if (`in`.isEmpty()) {
ByteArrayInputStream(`in`)
inputStream = if (inputAsByteArray.isEmpty()) {
inputAsByteArray.inputStream()
} else {
val memoryFile = MemoryFile("file" + System.currentTimeMillis(), `in`.size)
memoryFile.outputStream.write(`in`)
val memoryFile = MemoryFile("file" + System.currentTimeMillis(), inputAsByteArray.size)
memoryFile.outputStream.write(inputAsByteArray)
memoryFile.inputStream
}
val decryptedStream = MXEncryptedAttachments.decryptAttachment(inputStream, encryptedFileInfo)
val decryptedStream = ByteArrayOutputStream()
val result = MXEncryptedAttachments.decryptAttachment(inputStream, encryptedFileInfo.toElementToDecrypt()!!, decryptedStream)
assertNotNull(decryptedStream)
assert(result)
val buffer = ByteArray(100)
val toByteArray = decryptedStream.toByteArray()
val len = decryptedStream!!.read(buffer)
decryptedStream.close()
return Base64.encodeToString(buffer, 0, len, Base64.DEFAULT).replace("\n".toRegex(), "").replace("=".toRegex(), "")
return Base64.encodeToString(toByteArray, 0, toByteArray.size, Base64.DEFAULT).replace("\n".toRegex(), "").replace("=".toRegex(), "")
}
@Test
@@ -74,7 +71,7 @@ class AttachmentEncryptionTest {
key = EncryptedFileKey(
alg = "A256CTR",
k = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
key_ops = listOf("encrypt", "decrypt"),
keyOps = listOf("encrypt", "decrypt"),
kty = "oct",
ext = true
),
@@ -93,7 +90,7 @@ class AttachmentEncryptionTest {
key = EncryptedFileKey(
alg = "A256CTR",
k = "__________________________________________8",
key_ops = listOf("encrypt", "decrypt"),
keyOps = listOf("encrypt", "decrypt"),
kty = "oct",
ext = true
),
@@ -112,7 +109,7 @@ class AttachmentEncryptionTest {
key = EncryptedFileKey(
alg = "A256CTR",
k = "__________________________________________8",
key_ops = listOf("encrypt", "decrypt"),
keyOps = listOf("encrypt", "decrypt"),
kty = "oct",
ext = true
),
@@ -133,7 +130,7 @@ class AttachmentEncryptionTest {
key = EncryptedFileKey(
alg = "A256CTR",
k = "__________________________________________8",
key_ops = listOf("encrypt", "decrypt"),
keyOps = listOf("encrypt", "decrypt"),
kty = "oct",
ext = true
),

View File

@@ -14,14 +14,14 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto
package org.matrix.android.sdk.internal.crypto
import im.vector.matrix.android.api.auth.data.Credentials
import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore
import im.vector.matrix.android.internal.crypto.store.db.RealmCryptoStore
import im.vector.matrix.android.internal.crypto.store.db.RealmCryptoStoreModule
import im.vector.matrix.android.internal.crypto.store.db.mapper.CrossSigningKeysMapper
import im.vector.matrix.android.internal.di.MoshiProvider
import org.matrix.android.sdk.api.auth.data.Credentials
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStore
import org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStoreModule
import org.matrix.android.sdk.internal.crypto.store.db.mapper.CrossSigningKeysMapper
import org.matrix.android.sdk.internal.di.MoshiProvider
import io.realm.RealmConfiguration
import kotlin.random.Random

View File

@@ -14,18 +14,16 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto
package org.matrix.android.sdk.internal.crypto
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.internal.crypto.model.OlmSessionWrapper
import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.internal.crypto.model.OlmSessionWrapper
import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore
import io.realm.Realm
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotEquals
import org.junit.Assert.assertNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
@@ -45,22 +43,22 @@ class CryptoStoreTest : InstrumentedTest {
Realm.init(context())
}
@Test
fun test_metadata_realm_ok() {
val cryptoStore: IMXCryptoStore = cryptoStoreHelper.createStore()
assertFalse(cryptoStore.hasData())
cryptoStore.open()
assertEquals("deviceId_sample", cryptoStore.getDeviceId())
assertTrue(cryptoStore.hasData())
// Cleanup
cryptoStore.close()
cryptoStore.deleteStore()
}
// @Test
// fun test_metadata_realm_ok() {
// val cryptoStore: IMXCryptoStore = cryptoStoreHelper.createStore()
//
// assertFalse(cryptoStore.hasData())
//
// cryptoStore.open()
//
// assertEquals("deviceId_sample", cryptoStore.getDeviceId())
//
// assertTrue(cryptoStore.hasData())
//
// // Cleanup
// cryptoStore.close()
// cryptoStore.deleteStore()
// }
@Test
fun test_lastSessionUsed() {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto
package org.matrix.android.sdk.internal.crypto
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Assert.assertEquals

View File

@@ -14,25 +14,25 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto
package org.matrix.android.sdk.internal.crypto
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.extensions.tryThis
import im.vector.matrix.android.api.session.crypto.MXCryptoError
import im.vector.matrix.android.api.session.events.model.EventType
import im.vector.matrix.android.api.session.events.model.toModel
import im.vector.matrix.android.api.session.room.timeline.Timeline
import im.vector.matrix.android.api.session.room.timeline.TimelineEvent
import im.vector.matrix.android.api.session.room.timeline.TimelineSettings
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.internal.crypto.model.OlmSessionWrapper
import im.vector.matrix.android.internal.crypto.model.event.EncryptedEventContent
import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
import im.vector.matrix.android.internal.crypto.store.db.deserializeFromRealm
import im.vector.matrix.android.internal.crypto.store.db.serializeForRealm
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.extensions.tryThis
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.timeline.Timeline
import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent
import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.internal.crypto.model.OlmSessionWrapper
import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent
import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth
import org.matrix.android.sdk.internal.crypto.store.db.deserializeFromRealm
import org.matrix.android.sdk.internal.crypto.store.db.serializeForRealm
import org.amshove.kluent.shouldBe
import org.junit.Assert
import org.junit.Before

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.crosssigning
package org.matrix.android.sdk.internal.crypto.crosssigning
import org.amshove.kluent.shouldBeNull
import org.amshove.kluent.shouldBeTrue

View File

@@ -1,14 +1,14 @@
package im.vector.matrix.android.internal.crypto.crosssigning
package org.matrix.android.sdk.internal.crypto.crosssigning
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap
import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
@@ -122,7 +122,7 @@ class XSigningTest : InstrumentedTest {
// We will want to test that in alice POV, this new device would be trusted by cross signing
val bobSession2 = mTestHelper.logIntoAccount(bobUserId, SessionTestParams(true))
val bobSecondDeviceId = bobSession2.sessionParams.credentials.deviceId!!
val bobSecondDeviceId = bobSession2.sessionParams.deviceId!!
// Check that bob first session sees the new login
val data = mTestHelper.doSync<MXUsersDevicesMap<CryptoDeviceInfo>> {

View File

@@ -14,32 +14,33 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.gossiping
package org.matrix.android.sdk.internal.crypto.gossiping
import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.session.crypto.verification.IncomingSasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.SasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod
import im.vector.matrix.android.api.session.crypto.verification.VerificationService
import im.vector.matrix.android.api.session.crypto.verification.VerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState
import im.vector.matrix.android.api.session.events.model.toModel
import im.vector.matrix.android.api.session.room.model.RoomDirectoryVisibility
import im.vector.matrix.android.api.session.room.model.create.CreateRoomParams
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.internal.crypto.GossipingRequestState
import im.vector.matrix.android.internal.crypto.OutgoingGossipingRequestState
import im.vector.matrix.android.internal.crypto.crosssigning.DeviceTrustLevel
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import im.vector.matrix.android.internal.crypto.keysbackup.model.rest.KeysVersion
import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
import im.vector.matrix.android.internal.crypto.model.event.EncryptedEventContent
import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.session.crypto.verification.IncomingSasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.SasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
import org.matrix.android.sdk.api.session.room.model.create.CreateRoomParams
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.internal.crypto.GossipingRequestState
import org.matrix.android.sdk.internal.crypto.OutgoingGossipingRequestState
import org.matrix.android.sdk.internal.crypto.crosssigning.DeviceTrustLevel
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysVersion
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap
import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent
import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth
import junit.framework.TestCase.assertEquals
import junit.framework.TestCase.assertNotNull
import junit.framework.TestCase.assertTrue
@@ -56,6 +57,7 @@ import java.util.concurrent.CountDownLatch
class KeyShareTests : InstrumentedTest {
private val mTestHelper = CommonTestHelper(context())
private val mCryptoTestHelper = CryptoTestHelper(mTestHelper)
@Test
fun test_DoNotSelfShareIfNotTrusted() {
@@ -64,7 +66,10 @@ class KeyShareTests : InstrumentedTest {
// Create an encrypted room and add a message
val roomId = mTestHelper.doSync<String> {
aliceSession.createRoom(
CreateRoomParams(RoomDirectoryVisibility.PRIVATE).enableEncryptionWithAlgorithm(true),
CreateRoomParams().apply {
visibility = RoomDirectoryVisibility.PRIVATE
enableEncryption()
},
it
)
}
@@ -90,7 +95,7 @@ class KeyShareTests : InstrumentedTest {
} catch (failure: Throwable) {
}
val outgoingRequestBefore = aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
val outgoingRequestsBefore = aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
// Try to request
aliceSession2.cryptoService().requestRoomKeyForEvent(receivedEvent.root)
@@ -100,10 +105,10 @@ class KeyShareTests : InstrumentedTest {
var outGoingRequestId: String? = null
mTestHelper.retryPeriodicallyWithLatch(waitLatch) {
aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
.filter { req ->
// filter out request that was known before
!outgoingRequestBefore.any { req.requestId == it.requestId }
!outgoingRequestsBefore.any { req.requestId == it.requestId }
}
.let {
val outgoing = it.firstOrNull { it.sessionId == eventMegolmSessionId }
@@ -115,10 +120,10 @@ class KeyShareTests : InstrumentedTest {
Log.v("TEST", "=======> Outgoing requet Id is $outGoingRequestId")
val outgoingRequestAfter = aliceSession2.cryptoService().getOutgoingRoomKeyRequest()
val outgoingRequestAfter = aliceSession2.cryptoService().getOutgoingRoomKeyRequests()
// We should have a new request
Assert.assertTrue(outgoingRequestAfter.size > outgoingRequestBefore.size)
Assert.assertTrue(outgoingRequestAfter.size > outgoingRequestsBefore.size)
Assert.assertNotNull(outgoingRequestAfter.first { it.sessionId == eventMegolmSessionId })
// The first session should see an incoming request
@@ -126,7 +131,7 @@ class KeyShareTests : InstrumentedTest {
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
// DEBUG LOGS
aliceSession.cryptoService().getIncomingRoomKeyRequest().let {
aliceSession.cryptoService().getIncomingRoomKeyRequests().let {
Log.v("TEST", "Incoming request Session 1 (looking for $outGoingRequestId)")
Log.v("TEST", "=========================")
it.forEach { keyRequest ->
@@ -135,7 +140,7 @@ class KeyShareTests : InstrumentedTest {
Log.v("TEST", "=========================")
}
val incoming = aliceSession.cryptoService().getIncomingRoomKeyRequest().firstOrNull { it.requestId == outGoingRequestId }
val incoming = aliceSession.cryptoService().getIncomingRoomKeyRequests().firstOrNull { it.requestId == outGoingRequestId }
incoming?.state == GossipingRequestState.REJECTED
}
}
@@ -148,14 +153,14 @@ class KeyShareTests : InstrumentedTest {
// Mark the device as trusted
aliceSession.cryptoService().setDeviceVerification(DeviceTrustLevel(crossSigningVerified = false, locallyVerified = true), aliceSession.myUserId,
aliceSession2.sessionParams.credentials.deviceId ?: "")
aliceSession2.sessionParams.deviceId ?: "")
// Re request
aliceSession2.cryptoService().reRequestRoomKeyForEvent(receivedEvent.root)
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
aliceSession.cryptoService().getIncomingRoomKeyRequest().let {
aliceSession.cryptoService().getIncomingRoomKeyRequests().let {
Log.v("TEST", "Incoming request Session 1")
Log.v("TEST", "=========================")
it.forEach {
@@ -171,7 +176,7 @@ class KeyShareTests : InstrumentedTest {
Thread.sleep(6_000)
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
aliceSession2.cryptoService().getOutgoingRoomKeyRequest().let {
aliceSession2.cryptoService().getOutgoingRoomKeyRequests().let {
it.any { it.requestBody?.sessionId == eventMegolmSessionId && it.state == OutgoingGossipingRequestState.CANCELLED }
}
}
@@ -234,6 +239,7 @@ class KeyShareTests : InstrumentedTest {
}
if (tx.state == VerificationTxState.ShortCodeReady) {
session1ShortCode = tx.getDecimalCodeRepresentation()
Thread.sleep(500)
tx.userHasVerifiedShortCode()
}
}
@@ -246,19 +252,20 @@ class KeyShareTests : InstrumentedTest {
if (tx is SasVerificationTransaction) {
if (tx.state == VerificationTxState.ShortCodeReady) {
session2ShortCode = tx.getDecimalCodeRepresentation()
Thread.sleep(500)
tx.userHasVerifiedShortCode()
}
}
}
})
val txId: String = "m.testVerif12"
aliceVerificationService2.beginKeyVerification(VerificationMethod.SAS, aliceSession1.myUserId, aliceSession1.sessionParams.credentials.deviceId
val txId = "m.testVerif12"
aliceVerificationService2.beginKeyVerification(VerificationMethod.SAS, aliceSession1.myUserId, aliceSession1.sessionParams.deviceId
?: "", txId)
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
aliceSession1.cryptoService().getDeviceInfo(aliceSession1.myUserId, aliceSession2.sessionParams.credentials.deviceId ?: "")?.isVerified == true
aliceSession1.cryptoService().getDeviceInfo(aliceSession1.myUserId, aliceSession2.sessionParams.deviceId ?: "")?.isVerified == true
}
}
@@ -281,9 +288,12 @@ class KeyShareTests : InstrumentedTest {
mTestHelper.waitWithLatch(60_000) { latch ->
val keysBackupService = aliceSession2.cryptoService().keysBackupService()
mTestHelper.retryPeriodicallyWithLatch(latch) {
Log.d("#TEST", "Recovery :${ keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey}")
Log.d("#TEST", "Recovery :${keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey}")
keysBackupService.getKeyBackupRecoveryKeyInfo()?.recoveryKey == creationInfo.recoveryKey
}
}
mTestHelper.signOutAndClose(aliceSession1)
mTestHelper.signOutAndClose(aliceSession2)
}
}

View File

@@ -0,0 +1,245 @@
/*
* Copyright (c) 2020 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.internal.crypto.gossiping
import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.NoOpMatrixCallback
import org.matrix.android.sdk.api.extensions.tryThis
import org.matrix.android.sdk.api.session.crypto.MXCryptoError
import org.matrix.android.sdk.api.session.events.model.EventType
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.MockOkHttpInterceptor
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.internal.crypto.model.event.EncryptedEventContent
import org.matrix.android.sdk.internal.crypto.model.event.WithHeldCode
import org.junit.Assert
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
@RunWith(AndroidJUnit4::class)
@FixMethodOrder(MethodSorters.JVM)
class WithHeldTests : InstrumentedTest {
private val mTestHelper = CommonTestHelper(context())
private val mCryptoTestHelper = CryptoTestHelper(mTestHelper)
@Test
fun test_WithHeldUnverifiedReason() {
// =============================
// ARRANGE
// =============================
val aliceSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
val bobSession = mTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(true))
// Initialize cross signing on both
mCryptoTestHelper.initializeCrossSigning(aliceSession)
mCryptoTestHelper.initializeCrossSigning(bobSession)
val roomId = mCryptoTestHelper.createDM(aliceSession, bobSession)
mCryptoTestHelper.verifySASCrossSign(aliceSession, bobSession, roomId)
val roomAlicePOV = aliceSession.getRoom(roomId)!!
val bobUnverifiedSession = mTestHelper.logIntoAccount(bobSession.myUserId, SessionTestParams(true))
// =============================
// ACT
// =============================
// Alice decide to not send to unverified sessions
aliceSession.cryptoService().setGlobalBlacklistUnverifiedDevices(true)
val timelineEvent = mTestHelper.sendTextMessage(roomAlicePOV, "Hello Bob", 1).first()
// await for bob unverified session to get the message
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
bobUnverifiedSession.getRoom(roomId)?.getTimeLineEvent(timelineEvent.eventId) != null
}
}
val eventBobPOV = bobUnverifiedSession.getRoom(roomId)?.getTimeLineEvent(timelineEvent.eventId)!!
// =============================
// ASSERT
// =============================
// Bob should not be able to decrypt because the keys is withheld
try {
// .. might need to wait a bit for stability?
bobUnverifiedSession.cryptoService().decryptEvent(eventBobPOV.root, "")
Assert.fail("This session should not be able to decrypt")
} catch (failure: Throwable) {
val type = (failure as MXCryptoError.Base).errorType
val technicalMessage = failure.technicalMessage
Assert.assertEquals("Error should be withheld", MXCryptoError.ErrorType.KEYS_WITHHELD, type)
Assert.assertEquals("Cause should be unverified", WithHeldCode.UNVERIFIED.value, technicalMessage)
}
// enable back sending to unverified
aliceSession.cryptoService().setGlobalBlacklistUnverifiedDevices(false)
val secondEvent = mTestHelper.sendTextMessage(roomAlicePOV, "Verify your device!!", 1).first()
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
val ev = bobUnverifiedSession.getRoom(roomId)?.getTimeLineEvent(secondEvent.eventId)
// wait until it's decrypted
ev?.root?.getClearType() == EventType.MESSAGE
}
}
// Previous message should still be undecryptable (partially withheld session)
try {
// .. might need to wait a bit for stability?
bobUnverifiedSession.cryptoService().decryptEvent(eventBobPOV.root, "")
Assert.fail("This session should not be able to decrypt")
} catch (failure: Throwable) {
val type = (failure as MXCryptoError.Base).errorType
val technicalMessage = failure.technicalMessage
Assert.assertEquals("Error should be withheld", MXCryptoError.ErrorType.KEYS_WITHHELD, type)
Assert.assertEquals("Cause should be unverified", WithHeldCode.UNVERIFIED.value, technicalMessage)
}
mTestHelper.signOutAndClose(aliceSession)
mTestHelper.signOutAndClose(bobSession)
mTestHelper.signOutAndClose(bobUnverifiedSession)
}
@Test
fun test_WithHeldNoOlm() {
val testData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom()
val aliceSession = testData.firstSession
val bobSession = testData.secondSession!!
val aliceInterceptor = mTestHelper.getTestInterceptor(aliceSession)
// Simulate no OTK
aliceInterceptor!!.addRule(MockOkHttpInterceptor.SimpleRule(
"/keys/claim",
200,
"""
{ "one_time_keys" : {} }
"""
))
Log.d("#TEST", "Recovery :${aliceSession.sessionParams.credentials.accessToken}")
val roomAlicePov = aliceSession.getRoom(testData.roomId)!!
val eventId = mTestHelper.sendTextMessage(roomAlicePov, "first message", 1).first().eventId
// await for bob session to get the message
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
bobSession.getRoom(testData.roomId)?.getTimeLineEvent(eventId) != null
}
}
// Previous message should still be undecryptable (partially withheld session)
val eventBobPOV = bobSession.getRoom(testData.roomId)?.getTimeLineEvent(eventId)
try {
// .. might need to wait a bit for stability?
bobSession.cryptoService().decryptEvent(eventBobPOV!!.root, "")
Assert.fail("This session should not be able to decrypt")
} catch (failure: Throwable) {
val type = (failure as MXCryptoError.Base).errorType
val technicalMessage = failure.technicalMessage
Assert.assertEquals("Error should be withheld", MXCryptoError.ErrorType.KEYS_WITHHELD, type)
Assert.assertEquals("Cause should be unverified", WithHeldCode.NO_OLM.value, technicalMessage)
}
// Ensure that alice has marked the session to be shared with bob
val sessionId = eventBobPOV!!.root.content.toModel<EncryptedEventContent>()!!.sessionId!!
val chainIndex = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(bobSession.myUserId, bobSession.sessionParams.credentials.deviceId)
Assert.assertEquals("Alice should have marked bob's device for this session", 0, chainIndex)
// Add a new device for bob
aliceInterceptor.clearRules()
val bobSecondSession = mTestHelper.logIntoAccount(bobSession.myUserId, SessionTestParams(withInitialSync = true))
// send a second message
val secondMessageId = mTestHelper.sendTextMessage(roomAlicePov, "second message", 1).first().eventId
// Check that the
// await for bob SecondSession session to get the message
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
bobSecondSession.getRoom(testData.roomId)?.getTimeLineEvent(secondMessageId) != null
}
}
val chainIndex2 = aliceSession.cryptoService().getSharedWithInfo(testData.roomId, sessionId).getObject(bobSecondSession.myUserId, bobSecondSession.sessionParams.credentials.deviceId)
Assert.assertEquals("Alice should have marked bob's device for this session", 1, chainIndex2)
aliceInterceptor.clearRules()
testData.cleanUp(mTestHelper)
mTestHelper.signOutAndClose(bobSecondSession)
}
@Test
fun test_WithHeldKeyRequest() {
val testData = mCryptoTestHelper.doE2ETestWithAliceAndBobInARoom()
val aliceSession = testData.firstSession
val bobSession = testData.secondSession!!
val roomAlicePov = aliceSession.getRoom(testData.roomId)!!
val eventId = mTestHelper.sendTextMessage(roomAlicePov, "first message", 1).first().eventId
mTestHelper.signOutAndClose(bobSession)
// Create a new session for bob
val bobSecondSession = mTestHelper.logIntoAccount(bobSession.myUserId, SessionTestParams(true))
// initialize to force request keys if missing
mCryptoTestHelper.initializeCrossSigning(bobSecondSession)
// Trust bob second device from Alice POV
aliceSession.cryptoService().crossSigningService().trustDevice(bobSecondSession.sessionParams.deviceId!!, NoOpMatrixCallback())
bobSecondSession.cryptoService().crossSigningService().trustDevice(aliceSession.sessionParams.deviceId!!, NoOpMatrixCallback())
var sessionId: String? = null
// Check that the
// await for bob SecondSession session to get the message
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
val timeLineEvent = bobSecondSession.getRoom(testData.roomId)?.getTimeLineEvent(eventId)?.also {
// try to decrypt and force key request
tryThis { bobSecondSession.cryptoService().decryptEvent(it.root, "") }
}
sessionId = timeLineEvent?.root?.content?.toModel<EncryptedEventContent>()?.sessionId
timeLineEvent != null
}
}
// Check that bob second session requested the key
mTestHelper.waitWithLatch { latch ->
mTestHelper.retryPeriodicallyWithLatch(latch) {
val wc = bobSecondSession.cryptoService().getWithHeldMegolmSession(roomAlicePov.roomId, sessionId!!)
wc?.code == WithHeldCode.UNAUTHORISED
}
}
}
}

View File

@@ -14,12 +14,12 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.listeners.ProgressListener
import im.vector.matrix.android.common.assertByteArrayNotEqual
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.listeners.ProgressListener
import org.matrix.android.sdk.common.assertByteArrayNotEqual
import org.junit.Assert.assertArrayEquals
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue

View File

@@ -14,18 +14,18 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestData
import im.vector.matrix.android.internal.crypto.model.OlmInboundGroupSessionWrapper
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestData
import org.matrix.android.sdk.internal.crypto.model.OlmInboundGroupSessionWrapper2
/**
* Data class to store result of [KeysBackupTestHelper.createKeysBackupScenarioWithPassword]
*/
data class KeysBackupScenarioData(val cryptoTestData: CryptoTestData,
val aliceKeys: List<OlmInboundGroupSessionWrapper>,
val aliceKeys: List<OlmInboundGroupSessionWrapper2>,
val prepareKeysBackupDataResult: PrepareKeysBackupDataResult,
val aliceSession2: Session) {
fun cleanUp(testHelper: CommonTestHelper) {

View File

@@ -14,25 +14,25 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.listeners.ProgressListener
import im.vector.matrix.android.api.listeners.StepProgressListener
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupState
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupStateListener
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.common.TestMatrixCallback
import im.vector.matrix.android.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import im.vector.matrix.android.internal.crypto.crosssigning.DeviceTrustLevel
import im.vector.matrix.android.internal.crypto.keysbackup.model.KeysBackupVersionTrust
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import im.vector.matrix.android.internal.crypto.keysbackup.model.rest.KeysVersion
import im.vector.matrix.android.internal.crypto.keysbackup.model.rest.KeysVersionResult
import im.vector.matrix.android.internal.crypto.model.ImportRoomKeysResult
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.listeners.ProgressListener
import org.matrix.android.sdk.api.listeners.StepProgressListener
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.common.TestMatrixCallback
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import org.matrix.android.sdk.internal.crypto.crosssigning.DeviceTrustLevel
import org.matrix.android.sdk.internal.crypto.keysbackup.model.KeysBackupVersionTrust
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysVersion
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysVersionResult
import org.matrix.android.sdk.internal.crypto.model.ImportRoomKeysResult
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
@@ -835,7 +835,7 @@ class KeysBackupTest : InstrumentedTest {
assertTrue(signature.valid)
assertNotNull(signature.device)
assertEquals(cryptoTestData.firstSession.cryptoService().getMyDevice().deviceId, signature.deviceId)
assertEquals(signature.device!!.deviceId, cryptoTestData.firstSession.sessionParams.credentials.deviceId)
assertEquals(signature.device!!.deviceId, cryptoTestData.firstSession.sessionParams.deviceId)
stateObserver.stopAndCheckStates(null)
cryptoTestData.cleanUp(mTestHelper)
@@ -997,7 +997,7 @@ class KeysBackupTest : InstrumentedTest {
keysBackup.backupAllGroupSessions(null, it)
}
val oldDeviceId = cryptoTestData.firstSession.sessionParams.credentials.deviceId!!
val oldDeviceId = cryptoTestData.firstSession.sessionParams.deviceId!!
val oldKeyBackupVersion = keysBackup.currentBackupVersion
val aliceUserId = cryptoTestData.firstSession.myUserId

View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import im.vector.matrix.android.common.SessionTestParams
import org.matrix.android.sdk.common.SessionTestParams
object KeysBackupTestConstants {
val defaultSessionParams = SessionTestParams(withInitialSync = false)

View File

@@ -14,20 +14,20 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import im.vector.matrix.android.api.listeners.ProgressListener
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupService
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupState
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupStateListener
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.assertDictEquals
import im.vector.matrix.android.common.assertListEquals
import im.vector.matrix.android.internal.crypto.MegolmSessionData
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import im.vector.matrix.android.internal.crypto.keysbackup.model.rest.KeysVersion
import org.matrix.android.sdk.api.listeners.ProgressListener
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.assertDictEquals
import org.matrix.android.sdk.common.assertListEquals
import org.matrix.android.sdk.internal.crypto.MegolmSessionData
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysVersion
import org.junit.Assert
import java.util.concurrent.CountDownLatch

View File

@@ -14,9 +14,9 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import im.vector.matrix.android.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupCreationInfo
data class PrepareKeysBackupDataResult(val megolmBackupCreationInfo: MegolmBackupCreationInfo,
val version: String)

View File

@@ -14,11 +14,11 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.keysbackup
package org.matrix.android.sdk.internal.crypto.keysbackup
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupService
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupState
import im.vector.matrix.android.api.session.crypto.keysbackup.KeysBackupStateListener
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNull
import java.util.concurrent.CountDownLatch

View File

@@ -14,28 +14,28 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.ssss
package org.matrix.android.sdk.internal.crypto.ssss
import androidx.lifecycle.Observer
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.MatrixCallback
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.securestorage.EncryptedSecretContent
import im.vector.matrix.android.api.session.securestorage.KeySigner
import im.vector.matrix.android.api.session.securestorage.RawBytesKeySpec
import im.vector.matrix.android.api.session.securestorage.SecretStorageKeyContent
import im.vector.matrix.android.api.session.securestorage.SharedSecretStorageService
import im.vector.matrix.android.api.session.securestorage.SsssKeyCreationInfo
import im.vector.matrix.android.api.util.Optional
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.SessionTestParams
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.common.TestMatrixCallback
import im.vector.matrix.android.internal.crypto.SSSS_ALGORITHM_AES_HMAC_SHA2
import im.vector.matrix.android.internal.crypto.crosssigning.toBase64NoPadding
import im.vector.matrix.android.internal.crypto.secrets.DefaultSharedSecretStorageService
import im.vector.matrix.android.internal.session.sync.model.accountdata.UserAccountDataEvent
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.MatrixCallback
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.securestorage.EncryptedSecretContent
import org.matrix.android.sdk.api.session.securestorage.KeySigner
import org.matrix.android.sdk.api.session.securestorage.RawBytesKeySpec
import org.matrix.android.sdk.api.session.securestorage.SecretStorageKeyContent
import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageService
import org.matrix.android.sdk.api.session.securestorage.SsssKeyCreationInfo
import org.matrix.android.sdk.api.util.Optional
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.SessionTestParams
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.common.TestMatrixCallback
import org.matrix.android.sdk.internal.crypto.SSSS_ALGORITHM_AES_HMAC_SHA2
import org.matrix.android.sdk.internal.crypto.crosssigning.toBase64NoPadding
import org.matrix.android.sdk.internal.crypto.secrets.DefaultSharedSecretStorageService
import org.matrix.android.sdk.api.session.accountdata.UserAccountDataEvent
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
@@ -144,7 +144,7 @@ class QuadSTests : InstrumentedTest {
val secretAccountData = assertAccountData(aliceSession, "secret.of.life")
val encryptedContent = secretAccountData.content.get("encrypted") as? Map<*, *>
val encryptedContent = secretAccountData.content["encrypted"] as? Map<*, *>
assertNotNull("Element should be encrypted", encryptedContent)
assertNotNull("Secret should be encrypted with default key", encryptedContent?.get(keyId))

View File

@@ -14,30 +14,30 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.verification
package org.matrix.android.sdk.internal.crypto.verification
import android.util.Log
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.session.Session
import im.vector.matrix.android.api.session.crypto.verification.CancelCode
import im.vector.matrix.android.api.session.crypto.verification.IncomingSasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.OutgoingSasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.SasMode
import im.vector.matrix.android.api.session.crypto.verification.SasVerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod
import im.vector.matrix.android.api.session.crypto.verification.VerificationService
import im.vector.matrix.android.api.session.crypto.verification.VerificationTransaction
import im.vector.matrix.android.api.session.crypto.verification.VerificationTxState
import im.vector.matrix.android.api.session.events.model.Event
import im.vector.matrix.android.api.session.events.model.toModel
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.internal.crypto.model.CryptoDeviceInfo
import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationCancel
import im.vector.matrix.android.internal.crypto.model.rest.KeyVerificationStart
import im.vector.matrix.android.internal.crypto.model.rest.toValue
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.session.Session
import org.matrix.android.sdk.api.session.crypto.verification.CancelCode
import org.matrix.android.sdk.api.session.crypto.verification.IncomingSasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.OutgoingSasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.SasMode
import org.matrix.android.sdk.api.session.crypto.verification.SasVerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction
import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState
import org.matrix.android.sdk.api.session.events.model.Event
import org.matrix.android.sdk.api.session.events.model.toModel
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo
import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap
import org.matrix.android.sdk.internal.crypto.model.rest.KeyVerificationCancel
import org.matrix.android.sdk.internal.crypto.model.rest.KeyVerificationStart
import org.matrix.android.sdk.internal.crypto.model.rest.toValue
import org.junit.Assert.assertEquals
import org.junit.Assert.assertFalse
import org.junit.Assert.assertNotNull
@@ -468,15 +468,20 @@ class SASTest : InstrumentedTest {
val aliceSASLatch = CountDownLatch(1)
val aliceListener = object : VerificationService.Listener {
var matchOnce = true
override fun transactionUpdated(tx: VerificationTransaction) {
val uxState = (tx as OutgoingSasVerificationTransaction).uxState
Log.v("TEST", "== aliceState ${uxState.name}")
when (uxState) {
OutgoingSasVerificationTransaction.UxState.SHOW_SAS -> {
tx.userHasVerifiedShortCode()
}
OutgoingSasVerificationTransaction.UxState.VERIFIED -> {
if (matchOnce) {
matchOnce = false
aliceSASLatch.countDown()
}
}
else -> Unit
}
}
@@ -485,15 +490,24 @@ class SASTest : InstrumentedTest {
val bobSASLatch = CountDownLatch(1)
val bobListener = object : VerificationService.Listener {
var acceptOnce = true
var matchOnce = true
override fun transactionUpdated(tx: VerificationTransaction) {
val uxState = (tx as IncomingSasVerificationTransaction).uxState
Log.v("TEST", "== bobState ${uxState.name}")
when (uxState) {
IncomingSasVerificationTransaction.UxState.SHOW_ACCEPT -> {
if (acceptOnce) {
acceptOnce = false
tx.performAccept()
}
}
IncomingSasVerificationTransaction.UxState.SHOW_SAS -> {
if (matchOnce) {
matchOnce = false
tx.userHasVerifiedShortCode()
}
}
IncomingSasVerificationTransaction.UxState.VERIFIED -> {
bobSASLatch.countDown()
}
@@ -579,7 +593,7 @@ class SASTest : InstrumentedTest {
requestID!!,
cryptoTestData.roomId,
bobSession.myUserId,
bobSession.sessionParams.credentials.deviceId!!,
bobSession.sessionParams.deviceId!!,
null)
bobVerificationService.beginKeyVerificationInDMs(
@@ -587,7 +601,7 @@ class SASTest : InstrumentedTest {
requestID!!,
cryptoTestData.roomId,
aliceSession.myUserId,
aliceSession.sessionParams.credentials.deviceId!!,
aliceSession.sessionParams.deviceId!!,
null)
// we should reach SHOW SAS on both

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.verification.qrcode
package org.matrix.android.sdk.internal.crypto.verification.qrcode
fun hexToByteArray(hex: String): ByteArray {
// Remove all spaces

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.verification.qrcode
package org.matrix.android.sdk.internal.crypto.verification.qrcode
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import org.matrix.android.sdk.InstrumentedTest
import org.amshove.kluent.shouldBeNull
import org.amshove.kluent.shouldEqual
import org.amshove.kluent.shouldEqualTo

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.verification.qrcode
package org.matrix.android.sdk.internal.crypto.verification.qrcode
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import org.matrix.android.sdk.InstrumentedTest
import org.amshove.kluent.shouldBe
import org.amshove.kluent.shouldNotBeEqualTo
import org.junit.FixMethodOrder

View File

@@ -14,17 +14,17 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.crypto.verification.qrcode
package org.matrix.android.sdk.internal.crypto.verification.qrcode
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import im.vector.matrix.android.api.session.crypto.verification.VerificationMethod
import im.vector.matrix.android.api.session.crypto.verification.VerificationService
import im.vector.matrix.android.common.CommonTestHelper
import im.vector.matrix.android.common.CryptoTestHelper
import im.vector.matrix.android.common.TestConstants
import im.vector.matrix.android.internal.crypto.model.rest.UserPasswordAuth
import im.vector.matrix.android.api.session.crypto.verification.PendingVerificationRequest
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod
import org.matrix.android.sdk.api.session.crypto.verification.VerificationService
import org.matrix.android.sdk.common.CommonTestHelper
import org.matrix.android.sdk.common.CryptoTestHelper
import org.matrix.android.sdk.common.TestConstants
import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth
import org.matrix.android.sdk.api.session.crypto.verification.PendingVerificationRequest
import org.amshove.kluent.shouldBe
import org.junit.FixMethodOrder
import org.junit.Test

View File

@@ -0,0 +1,358 @@
/*
* Copyright (c) 2020 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.internal.session.room.send
import androidx.test.ext.junit.runners.AndroidJUnit4
import org.commonmark.parser.Parser
import org.commonmark.renderer.html.HtmlRenderer
import org.junit.Assert.assertEquals
import org.junit.FixMethodOrder
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
import org.matrix.android.sdk.InstrumentedTest
/**
* It will not be possible to test all combinations. For the moment I add a few tests, then, depending on the problem discovered in the wild,
* we can add more tests to cover the edge cases.
* Some tests are suffixed with `_not_passing`, maybe one day we will fix them...
* Element Web should be used as a reference for expected results, but not always.
* Also Element Web does not provide plain text body when formatted text is provided. The body contains what the user has entered. We are doing
* the same to be able to edit messages (See #1939)
* See https://matrix.org/docs/spec/client_server/latest#m-room-message-msgtypes
*/
@Suppress("SpellCheckingInspection")
@RunWith(AndroidJUnit4::class)
@FixMethodOrder(MethodSorters.JVM)
class MarkdownParserTest : InstrumentedTest {
/**
* Create the same parser than in the RoomModule
*/
private val markdownParser = MarkdownParser(
Parser.builder().build(),
HtmlRenderer.builder().build()
)
@Test
fun parseNoMarkdown() {
testIdentity("")
testIdentity("a")
testIdentity("1")
testIdentity("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et " +
"dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea com" +
"modo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pari" +
"atur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
}
@Test
fun parseSpaces() {
testIdentity(" ")
testIdentity(" ")
testIdentity("\n")
}
@Test
fun parseNewLines() {
testIdentity("line1\nline2")
testIdentity("line1\nline2\nline3")
}
@Test
fun parseBold() {
testType(
name = "bold",
markdownPattern = "**",
htmlExpectedTag = "strong"
)
}
@Test
fun parseBoldNewLines() {
testTypeNewLines(
name = "bold",
markdownPattern = "**",
htmlExpectedTag = "strong"
)
}
@Test
fun parseItalic() {
testType(
name = "italic",
markdownPattern = "*",
htmlExpectedTag = "em"
)
}
@Test
fun parseItalicNewLines() {
testTypeNewLines(
name = "italic",
markdownPattern = "*",
htmlExpectedTag = "em"
)
}
@Test
fun parseItalic2() {
// Element Web format
"_italic_".let { markdownParser.parse(it).expect(it, "<em>italic</em>") }
}
/**
* Note: the test is not passing, it does not work on Element Web neither
*/
@Test
fun parseStrike_not_passing() {
testType(
name = "strike",
markdownPattern = "~~",
htmlExpectedTag = "del"
)
}
@Test
fun parseStrikeNewLines() {
testTypeNewLines(
name = "strike",
markdownPattern = "~~",
htmlExpectedTag = "del"
)
}
@Test
fun parseCode() {
testType(
name = "code",
markdownPattern = "`",
htmlExpectedTag = "code"
)
}
@Test
fun parseCodeNewLines() {
testTypeNewLines(
name = "code",
markdownPattern = "`",
htmlExpectedTag = "code"
)
}
@Test
fun parseCode2() {
testType(
name = "code",
markdownPattern = "``",
htmlExpectedTag = "code"
)
}
@Test
fun parseCode2NewLines() {
testTypeNewLines(
name = "code",
markdownPattern = "``",
htmlExpectedTag = "code"
)
}
@Test
fun parseCode3() {
testType(
name = "code",
markdownPattern = "```",
htmlExpectedTag = "code"
)
}
@Test
fun parseCode3NewLines() {
testTypeNewLines(
name = "code",
markdownPattern = "```",
htmlExpectedTag = "code"
)
}
@Test
fun parseUnorderedList() {
"- item1".let { markdownParser.parse(it).expect(it, "<ul>\n<li>item1</li>\n</ul>") }
"- item1\n- item2".let { markdownParser.parse(it).expect(it, "<ul>\n<li>item1</li>\n<li>item2</li>\n</ul>") }
}
@Test
fun parseOrderedList() {
"1. item1".let { markdownParser.parse(it).expect(it, "<ol>\n<li>item1</li>\n</ol>") }
"1. item1\n2. item2".let { markdownParser.parse(it).expect(it, "<ol>\n<li>item1</li>\n<li>item2</li>\n</ol>") }
}
@Test
fun parseHorizontalLine() {
"---".let { markdownParser.parse(it).expect(it, "<hr />") }
}
@Test
fun parseH2AndContent() {
"a\n---\nb".let { markdownParser.parse(it).expect(it, "<h2>a</h2>\n<p>b</p>") }
}
@Test
fun parseQuote() {
"> quoted".let { markdownParser.parse(it).expect(it, "<blockquote>\n<p>quoted</p>\n</blockquote>") }
}
@Test
fun parseQuote_not_passing() {
"> quoted\nline2".let { markdownParser.parse(it).expect(it, "<blockquote><p>quoted<br />line2</p></blockquote>") }
}
@Test
fun parseBoldItalic() {
"*italic* **bold**".let { markdownParser.parse(it).expect(it, "<em>italic</em> <strong>bold</strong>") }
"**bold** *italic*".let { markdownParser.parse(it).expect(it, "<strong>bold</strong> <em>italic</em>") }
}
@Test
fun parseHead() {
"# head1".let { markdownParser.parse(it).expect(it, "<h1>head1</h1>") }
"## head2".let { markdownParser.parse(it).expect(it, "<h2>head2</h2>") }
"### head3".let { markdownParser.parse(it).expect(it, "<h3>head3</h3>") }
"#### head4".let { markdownParser.parse(it).expect(it, "<h4>head4</h4>") }
"##### head5".let { markdownParser.parse(it).expect(it, "<h5>head5</h5>") }
"###### head6".let { markdownParser.parse(it).expect(it, "<h6>head6</h6>") }
}
@Test
fun parseHeads() {
"# head1\n# head2".let { markdownParser.parse(it).expect(it, "<h1>head1</h1>\n<h1>head2</h1>") }
}
@Test
fun parseBoldNewLines_not_passing() {
"**bold**\nline2".let { markdownParser.parse(it).expect(it, "<strong>bold</strong><br />line2") }
}
@Test
fun parseLinks() {
"[link](target)".let { markdownParser.parse(it).expect(it, """<a href="target">link</a>""") }
}
@Test
fun parseParagraph() {
"# head\ncontent".let { markdownParser.parse(it).expect(it, "<h1>head</h1>\n<p>content</p>") }
}
private fun testIdentity(text: String) {
markdownParser.parse(text).expect(text, null)
}
private fun testType(name: String,
markdownPattern: String,
htmlExpectedTag: String) {
// Test simple case
"$markdownPattern$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag>")
}
// Test twice the same tag
"$markdownPattern$name$markdownPattern and $markdownPattern$name bis$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag> and <$htmlExpectedTag>$name bis</$htmlExpectedTag>")
}
val textBefore = "a"
val textAfter = "b"
// With sticked text before
"$textBefore$markdownPattern$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "$textBefore<$htmlExpectedTag>$name</$htmlExpectedTag>")
}
// With text before and space
"$textBefore $markdownPattern$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "$textBefore <$htmlExpectedTag>$name</$htmlExpectedTag>")
}
// With sticked text after
"$markdownPattern$name$markdownPattern$textAfter"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag>$textAfter")
}
// With space and text after
"$markdownPattern$name$markdownPattern $textAfter"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag> $textAfter")
}
// With sticked text before and text after
"$textBefore$markdownPattern$name$markdownPattern$textAfter"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "a<$htmlExpectedTag>$name</$htmlExpectedTag>$textAfter")
}
// With text before and after, with spaces
"$textBefore $markdownPattern$name$markdownPattern $textAfter"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "$textBefore <$htmlExpectedTag>$name</$htmlExpectedTag> $textAfter")
}
}
private fun testTypeNewLines(name: String,
markdownPattern: String,
htmlExpectedTag: String) {
// With new line inside the block
"$markdownPattern$name\n$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name<br />$name</$htmlExpectedTag>")
}
// With new line between two blocks
"$markdownPattern$name$markdownPattern\n$markdownPattern$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag><$htmlExpectedTag>$name</$htmlExpectedTag>")
}
}
private fun TextContent.expect(expectedText: String, expectedFormattedText: String?) {
assertEquals("TextContent are not identical", TextContent(expectedText, expectedFormattedText), this)
}
}

View File

@@ -14,10 +14,10 @@
* limitations under the License.
*/
package im.vector.matrix.android.internal.util
package org.matrix.android.sdk.internal.util
import androidx.test.ext.junit.runners.AndroidJUnit4
import im.vector.matrix.android.InstrumentedTest
import org.matrix.android.sdk.InstrumentedTest
import org.junit.Assert.assertEquals
import org.junit.Test
import org.junit.runner.RunWith

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