Merge branch 'release/1.1.0'
This commit is contained in:
commit
bb33a92d27
1
.idea/dictionaries/bmarty.xml
generated
1
.idea/dictionaries/bmarty.xml
generated
@ -26,6 +26,7 @@
|
|||||||
<w>pkcs</w>
|
<w>pkcs</w>
|
||||||
<w>previewable</w>
|
<w>previewable</w>
|
||||||
<w>previewables</w>
|
<w>previewables</w>
|
||||||
|
<w>pstn</w>
|
||||||
<w>riotx</w>
|
<w>riotx</w>
|
||||||
<w>signin</w>
|
<w>signin</w>
|
||||||
<w>signout</w>
|
<w>signout</w>
|
||||||
|
37
CHANGES.md
37
CHANGES.md
@ -1,4 +1,31 @@
|
|||||||
Changes in Element 1.0.17 (2020-02-09)
|
Changes in Element 1.1.0 (2021-02-19)
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
Features ✨:
|
||||||
|
- VoIP : support for VoIP V1 protocol, transfer call and dial-pad
|
||||||
|
|
||||||
|
Improvements 🙌:
|
||||||
|
- VoIP : new tiles in timeline
|
||||||
|
- Improve room profile UX
|
||||||
|
- Upgrade Jitsi library from 2.9.3 to 3.1.0
|
||||||
|
- a11y improvements
|
||||||
|
|
||||||
|
Bugfix 🐛:
|
||||||
|
- VoIP : fix audio devices output
|
||||||
|
- Fix crash after initial sync on Dendrite
|
||||||
|
- Fix crash reported by PlayStore (#2707)
|
||||||
|
- Ignore url override from credential if it is not valid (#2822)
|
||||||
|
- Fix crash when deactivating an account
|
||||||
|
|
||||||
|
SDK API changes ⚠️:
|
||||||
|
- Migrate AuthenticationService API to coroutines (#2449)
|
||||||
|
|
||||||
|
Other changes:
|
||||||
|
- New Dev Tools panel for developers
|
||||||
|
- Fix typos in CHANGES.md (#2811)
|
||||||
|
- Colors rework: first step: merge file `colors_riot.xml` to file `colors_riotx.xml` and rename the file to `colors.xml`
|
||||||
|
|
||||||
|
Changes in Element 1.0.17 (2021-02-09)
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
Improvements 🙌:
|
Improvements 🙌:
|
||||||
@ -20,13 +47,13 @@ Build 🧱:
|
|||||||
Other changes:
|
Other changes:
|
||||||
- Change app name from "Element (Riot.im)" to "Element"
|
- Change app name from "Element (Riot.im)" to "Element"
|
||||||
|
|
||||||
Changes in Element 1.0.16 (2020-02-04)
|
Changes in Element 1.0.16 (2021-02-04)
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
Bugfix 🐛:
|
Bugfix 🐛:
|
||||||
- Fix crash on API < 30 and light theme (#2774)
|
- Fix crash on API < 30 and light theme (#2774)
|
||||||
|
|
||||||
Changes in Element 1.0.15 (2020-02-03)
|
Changes in Element 1.0.15 (2021-02-03)
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
Features ✨:
|
Features ✨:
|
||||||
@ -57,7 +84,7 @@ Build 🧱:
|
|||||||
Other changes:
|
Other changes:
|
||||||
- Update Dagger to 2.31 version so we can use the embedded AssistedInject feature
|
- Update Dagger to 2.31 version so we can use the embedded AssistedInject feature
|
||||||
|
|
||||||
Changes in Element 1.0.14 (2020-01-15)
|
Changes in Element 1.0.14 (2021-01-15)
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
Features ✨:
|
Features ✨:
|
||||||
@ -1169,7 +1196,7 @@ Mode details here: https://medium.com/@RiotChat/introducing-the-riotx-beta-for-a
|
|||||||
=======================================================
|
=======================================================
|
||||||
|
|
||||||
|
|
||||||
Changes in Element 1.X.X (2020-XX-XX)
|
Changes in Element 1.X.X (2021-XX-XX)
|
||||||
===================================================
|
===================================================
|
||||||
|
|
||||||
Features ✨:
|
Features ✨:
|
||||||
|
@ -58,9 +58,9 @@ allprojects {
|
|||||||
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' }
|
||||||
// Jitsi repo
|
// Jitsi repo
|
||||||
maven {
|
maven {
|
||||||
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
|
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-3.1.0"
|
||||||
// Note: to test Jitsi release you can use a local file like this:
|
// 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"
|
// url "file:///Users/bmarty/workspaces/jitsi_libre_maven/android-sdk-3.1.0"
|
||||||
}
|
}
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
@ -18,7 +18,7 @@ The generated maven repository is then host in the project https://github.com/ve
|
|||||||
|
|
||||||
Update the script `./tools/jitsi/build_jisti_libs.sh` with the tag of the project `https://github.com/jitsi/jitsi-meet`.
|
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`.
|
Currently we are building the version with the tag `android-sdk-3.1.0`.
|
||||||
|
|
||||||
### Run the build script
|
### Run the build script
|
||||||
|
|
||||||
@ -35,21 +35,21 @@ It will build the Jitsi Meet Android library and put every generated files in th
|
|||||||
- Update the file `./build.gradle` to use the previously created local Maven repository. Currently we have this line:
|
- Update the file `./build.gradle` to use the previously created local Maven repository. Currently we have this line:
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
|
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-3.1.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
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.
|
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:
|
- Update the dependency of the Jitsi Meet library in the file `./vector/build.gradle`. Currently we have this line:
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
implementation('org.jitsi.react:jitsi-meet-sdk:2.9.3') { transitive = true }
|
implementation('org.jitsi.react:jitsi-meet-sdk:3.1.0')
|
||||||
|
```
|
||||||
|
|
||||||
|
- Update the dependency of the WebRTC library in the file `./vector/build.gradle`. Currently we have this line:
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
implementation('com.facebook.react:react-native-webrtc:1.87.3-jitsi-6624067@aar')
|
||||||
```
|
```
|
||||||
|
|
||||||
- Perform a gradle sync and build the project
|
- Perform a gradle sync and build the project
|
||||||
@ -74,9 +74,9 @@ If all the tests are passed, you can export the generated Jitsi library to our M
|
|||||||
- Update the file `./build.gradle` to use the previously created Maven repository. Currently we have this line:
|
- Update the file `./build.gradle` to use the previously created Maven repository. Currently we have this line:
|
||||||
|
|
||||||
```groovy
|
```groovy
|
||||||
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-2.9.3"
|
url "https://github.com/vector-im/jitsi_libre_maven/raw/master/android-sdk-3.1.0"
|
||||||
```
|
```
|
||||||
|
|
||||||
- Build the project and perform the sanity tests again.
|
- 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.
|
- Update the file `/CHANGES.md` to notify about the library upgrade, and create a regular PR for project Element Android.
|
2
fastlane/metadata/android/ar/changelogs/40100100.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100100.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
يحتوي هذا الإصدار الجديد بشكل أساسي على إصلاحات للأخطاء وتحسينات. إرسال الرسالة أصبح الآن أسرع بكثير.
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.10
|
2
fastlane/metadata/android/ar/changelogs/40100110.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100110.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
يحتوي هذا الإصدار الجديد بشكل أساسي على تحسينات في واجهة المستخدم وتجربة المستخدم. يُمكنك الآن دعوة الأصدقاء وإنشاء رسالة مُباشرة بسرعة كبيرة عن طريق مسح رموز الاستجابة السريعة.
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.11
|
2
fastlane/metadata/android/ar/changelogs/40100120.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100120.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: مُعاينة URL، لوحة مفاتيح Emoji جديدة، إمكانيات جديدة لإعدادات الغرفة والثلج لميلاد المسيح!
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
2
fastlane/metadata/android/ar/changelogs/40100130.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100130.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: مُعاينة URL، لوحة مفاتيح Emoji جديدة، إمكانيات جديدة لإعدادات الغرفة والثلج لميلاد المسيح!
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
2
fastlane/metadata/android/ar/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: تحرير أذونات الغُرفة، السِّمة التلقائية الفاتحة/الداكنة، ومجموعة من إصلاحات الأخطاء.
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/ar/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: دعم تسجيل الدخول الاجتماعي.
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/ar/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: دعم تسجيل الدخول الاجتماعي.
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/ar/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
التغييرات الرئيسة في هذا الإصدار: إصلاحات الأخطاء!
|
||||||
|
سجل التعديل الكامل: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
31
fastlane/metadata/android/ar/full_description.txt
Normal file
31
fastlane/metadata/android/ar/full_description.txt
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
Element هو نوع جديد من تطبيقات المُراسلة والتعاون الذي:
|
||||||
|
|
||||||
|
1. يمنحك التحكم في المُحافضة على خصوصيتك
|
||||||
|
2. يُتيح لك التواصل مع أي شخص على شبكة Matrix ، وحتى خارجها من خلال التكامل مع التطبيقات مثل Slack
|
||||||
|
3. يحميك من الإعلانات والتنقيب عن البيانات وعمليات الحدائق المُسورة
|
||||||
|
4. يؤمنك من خلال تعمية النهاية-إلى-النهاية، مع التوقيع المُتبادل للتحقق من الآخرين
|
||||||
|
|
||||||
|
يختلف Element تمامًا عن تطبيقات المُراسلة والتعاون الأُخرى لأنه لا مركزي ومفتوح المصدر.
|
||||||
|
|
||||||
|
يُتيح لك Element إمكانية الاستضافة الذاتية -أو اختيار مُضيف- بحيث تتمتع بالخصوصية والمُلكية والتحكم في بياناتك ومُحادثاتك. يُتيح لك الوصول إلى شبكة مفتوحة؛ لذلك لا يقتصر الأمر على التحدث إلى مستخدمي Element الآخرين فقط. كما انه آمن للغاية.
|
||||||
|
|
||||||
|
Element قادر على القيام بكل ذلك لأنه يعمل على Matrix -مِعيار التواصل المفتوح اللامركزي.
|
||||||
|
|
||||||
|
Element يمنحك زمام التحكم من خلال السماح لك باختيار من يستضيف المُحادثات الخاصة بك. من تطبيق Element، يُمكنك اختيار الاستضافة بطرق مختلفة:
|
||||||
|
|
||||||
|
1. الحُصول على حساب مجاني على الخادِم العام matrix.org الذي يستضيفه مطورو Matrix، أو اختر من بين آلاف الخوادِم العامة التي يستضيفها متطوعون
|
||||||
|
2. استضافة حسابك بنفسك عن طريق تشغيل خادِم على أجهزتك الخاصة
|
||||||
|
3. التسجيل للحصول على حساب على خادِم مُخصص بمُجرد الاشتراك في منصة استضافة Element Matrix Services
|
||||||
|
|
||||||
|
<b> لماذا تختار Element؟</b>
|
||||||
|
|
||||||
|
<b>تملَّك بياناتك</b>: أنت من تُقرر أين تحتفظ ببياناتك ورسائلك. أنت تمتلكها وتتحكم فيها، وليس بعض الشركات الكُبرى الإحتكارية التي تُنقِّب عن بياناتك أو تُتيح الوصول إلى أطراف ثالثة.
|
||||||
|
|
||||||
|
|
||||||
|
<b>تراسُل وتعاون مفتوح</b>: يُمكنك مُحادثة أي شخص آخر على شبكة Matrix، سواء كانوا يستخدمون Element أو تطبيق Matrix آخر، وحتى إذا كانوا يستخدمون نظام مُراسلة مُختلف مثل Slack أو IRC أو XMPP.
|
||||||
|
|
||||||
|
<b>الأمان-الخارق</b>: تشفير حقيقي من النهاية إلى النهاية (فقط أطراف المُحادثة مَن يُمكنهم فك تشفير الرسائل)، والتوقيع المُتبادل للتحقق من أجهزة المُشاركين في المُحادثة.
|
||||||
|
|
||||||
|
<b>التواصل الكامل</b>: المُراسلة، المُكالمات الصوتية والمرئية، مُشاركة الملفات، مُشاركة الشاشة، مجموعة كاملة وكبيرة من عمليات التكامُل، الروبوتات والأدوات. بناء الغُرف، المُجتمعات، ابق على اتصال وأنجز المهام.
|
||||||
|
|
||||||
|
<b>أين ما كُنت</b>: ابق على اتصال أينما كنت مع سجل الرسائل المتزامن بالكامل عبر جميع أجهزتك وفي الويب على https://app.element.io.
|
1
fastlane/metadata/android/ar/short_description.txt
Normal file
1
fastlane/metadata/android/ar/short_description.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
مُحادثة آمنة لا مركزية و VoIP. حافظ على بياناتك آمنة من الأطراف الثالثة.
|
1
fastlane/metadata/android/ar/title.txt
Normal file
1
fastlane/metadata/android/ar/title.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
Element (سابقاً Riot.im)
|
@ -1,2 +1,2 @@
|
|||||||
Canvis principals d'aquesta versió: previsualització d'URL, nou teclat d'emoticones, noves funcions de configuració de les sales i neu pel Nadal!
|
Canvis principals d'aquesta versió: previsualització d'URL, nou teclat d'emoticones, noves funcions de configuració de les sales i neu pel Nadal!
|
||||||
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/ca/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/ca/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Canvis principals d'aquesta versió: modificació dels permisos de sala, tema clar/fosc automàtic, correcció d'errors.
|
||||||
|
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/ca/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/ca/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Canvis principals d'aquesta versió: inici de sessió amb xarxes socials.
|
||||||
|
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/ca/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/ca/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Canvis principals d'aquesta versió: inici de sessió amb xarxes socials.
|
||||||
|
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.15 i https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/ca/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/ca/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Canvis principals d'aquesta versió: correcció d'errors!
|
||||||
|
Registre de canvis complet: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1 +1 @@
|
|||||||
Xat i VoIP segurs i descentralitzats. Protegeix les teves dades de tercers.
|
Xats i VoIP segurs i descentralitzats. Protegeix les teves dades de tercers.
|
||||||
|
@ -1 +1 @@
|
|||||||
Element (anteriorment Riot.im)
|
Element (abans Riot.im)
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
Hauptänderungen in dieser Version: URL-Vorschau, neue Emoji-Tastatur, neue Raumeinstellungen und Schnee für Weihnachten!
|
Hauptänderungen in dieser Version: URL-Vorschau, neue Emoji-Tastatur, neue Raumeinstellungen und Schnee für Weihnachten!
|
||||||
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/de/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/de/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hauptänderungen in dieser Version: Bearbeiten von Raumberechtigungen, automatisches Hell/Dunkel-Design und eine Reihe von Fehlerkorrekturen.
|
||||||
|
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/de/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/de/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hauptänderungen in dieser Version: Unterstützung für soziale Anmeldungen.
|
||||||
|
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/de/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/de/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hauptänderungen in dieser Version: Unterstützung für soziale Anmeldungen.
|
||||||
|
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/de/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/de/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hauptänderungen in dieser Version: Fehlerkorrekturen
|
||||||
|
Vollständiges Änderungsprotokoll: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
2
fastlane/metadata/android/en-US/changelogs/40101000.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/40101000.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Main changes in this version: VoIP (audio and video calls in DM) improvement and bug fixes!
|
||||||
|
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.1.0
|
@ -1,2 +1,2 @@
|
|||||||
Olulisemad muutused selles versioonis: URLide eelvaade, uus klahvistik emojide jaoks, jututubade uued seadistused ja natuke lund jõuludeks!
|
Olulisemad muutused selles versioonis: URLide eelvaade, uus klahvistik emojide jaoks, jututubade uued seadistused ja natuke lund jõuludeks!
|
||||||
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/et/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/et/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Olulisemad muutused selles versioonis: Jututoa õiguste muutmine, automaatne tumeda ja heleda teema vahetamine ning märgatav kogus veaparandusi.
|
||||||
|
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/et/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/et/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Olulisemad muutused selles versioonis: Sisselogimine sotsiaalmeediakontode abil.
|
||||||
|
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/et/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/et/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Olulisemad muutused selles versioonis: Sisselogimine sotsiaalmeediakontode abil.
|
||||||
|
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.15 ja https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/et/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/et/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Olulisemad muutused selles versioonis: Veaparandused!
|
||||||
|
Muudatuste logi täismahus: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1,2 +1,2 @@
|
|||||||
Modifiche principali in questa versione: anteprima URL, nuova tastiera emoji, nuove impostazioni stanza e neve per Natale!
|
Modifiche principali in questa versione: anteprima URL, nuova tastiera emoji, nuove impostazioni stanza e neve per Natale!
|
||||||
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/it/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/it/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Modifiche principali in questa versione: modifica autorizzazioni stanza, tema chiaro/scuro automatico e varie correzioni di errori.
|
||||||
|
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/it/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/it/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Modifiche principali in questa versione: supporto all'accesso dai social.
|
||||||
|
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/it/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/it/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Modifiche principali in questa versione: supporto all'accesso dai social.
|
||||||
|
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/it/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/it/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Modifiche principali in questa versione: correzioni di errori!
|
||||||
|
Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1,2 +1,2 @@
|
|||||||
Principais mudanças nessa versão: Prévia do endereço URL, novo teclado de Emojis, novos recursos de configuração da sala, e neve para o Natal!
|
Principais mudanças nessa versão: Prévia do endereço URL, novo teclado de Emojis, novos recursos de configuração da sala, e neve para o Natal!
|
||||||
Registro de alterações completo: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Registro de alterações completo: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/pt_BR/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/pt_BR/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Principais mudanças nessa versão: editar permissões da sala, tema automaticamente claro/escuro e várias correções de erros.
|
||||||
|
Registro de alterações completo: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/pt_BR/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/pt_BR/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Principais mudanças nessa versão: suporte para Login Social.
|
||||||
|
Registro de alterações completo: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/pt_BR/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/pt_BR/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Principais mudanças nessa versão: suporte para Login Social.
|
||||||
|
Registro de alterações completo: https://github.com/vector-im/element-android/releases/tag/v1.0.15 e https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
@ -1,2 +1,2 @@
|
|||||||
Основные изменения в этой версии: предварительный просмотр URL, новая клавиатура эмодзи, новые возможности настройки комнаты и снег на Рождество!
|
Основные изменения в этой версии: предварительный просмотр URL, новая клавиатура эмодзи, новые возможности настройки комнаты и снег на Рождество!
|
||||||
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/ru/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/ru/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основные изменения в этой версии: Редактирование разрешений для комнаты, автоматическая светлая/темная тема и множество исправлений ошибок.
|
||||||
|
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/ru/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/ru/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основные изменения в этой версии: Поддержка входа в социальные сети.
|
||||||
|
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/ru/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/ru/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основные изменения в этой версии: Поддержка входа в социальные сети.
|
||||||
|
Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/sk/changelogs/40100120.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100120.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Ukážka URL, nová klávesnica Emoji, nové možnosti nastavenia miestnosti a sneh na Vianoce!
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
2
fastlane/metadata/android/sk/changelogs/40100130.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100130.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Ukážka URL, nová klávesnica Emoji, nové možnosti nastavenia miestnosti a sneh na Vianoce!
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
2
fastlane/metadata/android/sk/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Úpravy povolení miestnosti, automatický svetlý / tmavý motív a veľa opráv chýb.
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/sk/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Podpora sociálneho prihlásenia.
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/sk/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Podpora sociálneho prihlásenia.
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.15 and https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/sk/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/sk/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Hlavné zmeny v tejto verzii: Opravy chýb!
|
||||||
|
Celý zoznam zmien: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1 +1 @@
|
|||||||
Zabezpečené konverzácie a VoIP. Ochráňte vaše údaje pred zhromažďovaním.
|
Zabezpečené konverzácie a VoIP. Ochráňte vaše údaje pred tretími stranami.
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
Главне измене у овој верзији: УРЛ преглед, нова емоџи тастатура, нове могућности у поставкама собе и снег за Божић !
|
Главне измене у овој верзији: УРЛ преглед, нова емоџи тастатура, нове могућности у поставкама собе и снег за Божић!
|
||||||
Дневник свих измена: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Дневник свих измена: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/sr/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/sr/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Главна измена у овој верзији: уређивање дозвола у соби, аутоматска светла/тамна тема и гомила исправљених грешака.
|
||||||
|
Цео дневник измена: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/sr/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/sr/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Главна измена у овој верзији: подршка за пријављивање са друштвених мрежа.
|
||||||
|
Цео дневник измена: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/sr/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/sr/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Главна измена у овој верзији: подршка за пријављивање са друштвених мрежа.
|
||||||
|
Цео дневник измена: https://github.com/vector-im/element-android/releases/tag/v1.0.15 и https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/sr/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/sr/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Главна измена у овој верзији: сређене грешке!
|
||||||
|
Цео дневник измена: https://github.com/vector-im/element-android/releases/tag/v1.0.15 и https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1,2 +1,2 @@
|
|||||||
Huvudsakliga ändringar i den här versionen: URL-förhandsgranskning, nya rumsinställningsförmågor, och en vit jul!
|
Huvudsakliga ändringar i den här versionen: URL-förhandsgranskning, nya rumsinställningsförmågor, och en vit jul!
|
||||||
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/sv/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/sv/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Huvudsakliga ändringar i den här versionen: Redigering av rumsbehörigheter, automatiskt ljust/mörkt tema, och en hög buggfixar.
|
||||||
|
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/sv/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/sv/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Huvudsakliga ändringar i den här versionen: Stöd för social inloggning.
|
||||||
|
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/sv/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/sv/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Huvudsakliga ändringar i den här versionen: Stöd för social inloggning.
|
||||||
|
Full ändringslogg: https://github.com/vector-im/element-android/releases/tag/v1.0.15 och https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
@ -1,2 +1,2 @@
|
|||||||
Основні зміни в цій версії: попередній перегляд URL-адреси, нова клавіатура Emoji, нові можливості налаштування кімнати та сніг на Різдво!
|
Основні зміни в цій версії: попередній перегляд URL-адрес, нова клавіатура Emoji, нові можливості налаштування кімнати та сніг на Різдво!
|
||||||
Повний журнал змін: https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
Повний перелік змін: https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
2
fastlane/metadata/android/uk/changelogs/40100140.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40100140.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основні зміни цієї версії: Керування дозволами кімнати, автоперемикання між світлою/темною темами та виправлення багатьох вад.
|
||||||
|
Повний перелік змін: https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
2
fastlane/metadata/android/uk/changelogs/40100150.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40100150.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основні зміни цієї версії: підтримка входу за допомогою суспільних мереж.
|
||||||
|
Повний перелік змін: https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
2
fastlane/metadata/android/uk/changelogs/40100160.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40100160.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основні зміни цієї версії: підтримка входу за допомогою суспільних мереж.
|
||||||
|
Повний перелік змін: https://github.com/vector-im/element-android/releases/tag/v1.0.15 та https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
2
fastlane/metadata/android/uk/changelogs/40100170.txt
Normal file
2
fastlane/metadata/android/uk/changelogs/40100170.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Основні зміни у цій версії: Виправлення помилок!
|
||||||
|
Повний перелік змін: https://github.com/vector-im/element-android/releases/tag/v1.0.17
|
@ -1,2 +1,2 @@
|
|||||||
此版本中的主要變更:URL 預覽、新的表情符號鍵盤、新的聊天室設定功能以及聖誕節降雪!
|
此版本中的主要變更:URL 預覽、新的表情符號鍵盤、新的聊天室設定功能以及聖誕節降雪!
|
||||||
完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.12
|
完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.13
|
||||||
|
@ -0,0 +1,2 @@
|
|||||||
|
此版本的主要變動:編輯聊天室權限、自動淺色/深色佈景主題與許多臭蟲修復。
|
||||||
|
完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.14
|
@ -0,0 +1,2 @@
|
|||||||
|
此版本的主要變動:社群網路登入支援。
|
||||||
|
完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.15
|
@ -0,0 +1,2 @@
|
|||||||
|
此版本的主要變動:社群網路登入支援。
|
||||||
|
完整變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.0.15 以及 https://github.com/vector-im/element-android/releases/tag/v1.0.16
|
1
gradle/wrapper/gradle-wrapper.properties
vendored
1
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,3 +1,4 @@
|
|||||||
|
#Fri Jan 29 18:05:42 CET 2021
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionSha256Sum=1433372d903ffba27496f8d5af24265310d2da0d78bf6b4e5138831d4fe066e9
|
distributionSha256Sum=1433372d903ffba27496f8d5af24265310d2da0d78bf6b4e5138831d4fe066e9
|
||||||
|
@ -168,12 +168,6 @@ dependencies {
|
|||||||
// Phone number https://github.com/google/libphonenumber
|
// Phone number https://github.com/google/libphonenumber
|
||||||
implementation 'com.googlecode.libphonenumber:libphonenumber:8.10.23'
|
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')
|
|
||||||
|
|
||||||
testImplementation 'junit:junit:4.13'
|
testImplementation 'junit:junit:4.13'
|
||||||
testImplementation 'org.robolectric:robolectric:4.3'
|
testImplementation 'org.robolectric:robolectric:4.3'
|
||||||
//testImplementation 'org.robolectric:shadows-support-v4:3.0'
|
//testImplementation 'org.robolectric:shadows-support-v4:3.0'
|
||||||
|
@ -26,15 +26,12 @@ import org.matrix.android.sdk.InstrumentedTest
|
|||||||
import org.matrix.android.sdk.api.auth.UIABaseAuth
|
import org.matrix.android.sdk.api.auth.UIABaseAuth
|
||||||
import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
|
import org.matrix.android.sdk.api.auth.UserInteractiveAuthInterceptor
|
||||||
import org.matrix.android.sdk.api.auth.UserPasswordAuth
|
import org.matrix.android.sdk.api.auth.UserPasswordAuth
|
||||||
import org.matrix.android.sdk.api.auth.data.LoginFlowResult
|
|
||||||
import org.matrix.android.sdk.api.auth.registration.RegistrationFlowResponse
|
import org.matrix.android.sdk.api.auth.registration.RegistrationFlowResponse
|
||||||
import org.matrix.android.sdk.api.auth.registration.RegistrationResult
|
|
||||||
import org.matrix.android.sdk.api.failure.Failure
|
import org.matrix.android.sdk.api.failure.Failure
|
||||||
import org.matrix.android.sdk.api.failure.MatrixError
|
import org.matrix.android.sdk.api.failure.MatrixError
|
||||||
import org.matrix.android.sdk.common.CommonTestHelper
|
import org.matrix.android.sdk.common.CommonTestHelper
|
||||||
import org.matrix.android.sdk.common.SessionTestParams
|
import org.matrix.android.sdk.common.SessionTestParams
|
||||||
import org.matrix.android.sdk.common.TestConstants
|
import org.matrix.android.sdk.common.TestConstants
|
||||||
import org.matrix.android.sdk.common.TestMatrixCallback
|
|
||||||
import kotlin.coroutines.Continuation
|
import kotlin.coroutines.Continuation
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
|
|
||||||
@ -46,12 +43,13 @@ class DeactivateAccountTest : InstrumentedTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun deactivateAccountTest() {
|
fun deactivateAccountTest() {
|
||||||
val session = commonTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(withInitialSync = false))
|
val session = commonTestHelper.createAccount(TestConstants.USER_ALICE, SessionTestParams(withInitialSync = true))
|
||||||
|
|
||||||
// Deactivate the account
|
// Deactivate the account
|
||||||
commonTestHelper.runBlockingTest {
|
commonTestHelper.runBlockingTest {
|
||||||
session.deactivateAccount(
|
session.deactivateAccount(
|
||||||
object : UserInteractiveAuthInterceptor {
|
eraseAllData = false,
|
||||||
|
userInteractiveAuthInterceptor = object : UserInteractiveAuthInterceptor {
|
||||||
override fun performStage(flowResponse: RegistrationFlowResponse, errCode: String?, promise: Continuation<UIABaseAuth>) {
|
override fun performStage(flowResponse: RegistrationFlowResponse, errCode: String?, promise: Continuation<UIABaseAuth>) {
|
||||||
promise.resume(
|
promise.resume(
|
||||||
UserPasswordAuth(
|
UserPasswordAuth(
|
||||||
@ -61,7 +59,8 @@ class DeactivateAccountTest : InstrumentedTest {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}, false)
|
}
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to login on the previous account, it will fail (M_USER_DEACTIVATED)
|
// Try to login on the previous account, it will fail (M_USER_DEACTIVATED)
|
||||||
@ -75,23 +74,23 @@ class DeactivateAccountTest : InstrumentedTest {
|
|||||||
// Try to create an account with the deactivate account user id, it will fail (M_USER_IN_USE)
|
// Try to create an account with the deactivate account user id, it will fail (M_USER_IN_USE)
|
||||||
val hs = commonTestHelper.createHomeServerConfig()
|
val hs = commonTestHelper.createHomeServerConfig()
|
||||||
|
|
||||||
commonTestHelper.doSync<LoginFlowResult> {
|
commonTestHelper.runBlockingTest {
|
||||||
commonTestHelper.matrix.authenticationService.getLoginFlow(hs, it)
|
commonTestHelper.matrix.authenticationService.getLoginFlow(hs)
|
||||||
}
|
}
|
||||||
|
|
||||||
var accountCreationError: Throwable? = null
|
var accountCreationError: Throwable? = null
|
||||||
commonTestHelper.waitWithLatch {
|
commonTestHelper.runBlockingTest {
|
||||||
|
try {
|
||||||
commonTestHelper.matrix.authenticationService
|
commonTestHelper.matrix.authenticationService
|
||||||
.getRegistrationWizard()
|
.getRegistrationWizard()
|
||||||
.createAccount(session.myUserId.substringAfter("@").substringBefore(":"),
|
.createAccount(
|
||||||
|
session.myUserId.substringAfter("@").substringBefore(":"),
|
||||||
TestConstants.PASSWORD,
|
TestConstants.PASSWORD,
|
||||||
null,
|
null
|
||||||
object : TestMatrixCallback<RegistrationResult>(it, false) {
|
)
|
||||||
override fun onFailure(failure: Throwable) {
|
} catch (failure: Throwable) {
|
||||||
accountCreationError = failure
|
accountCreationError = failure
|
||||||
super.onFailure(failure)
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Test the error
|
// Test the error
|
||||||
|
@ -23,7 +23,6 @@ import org.matrix.android.sdk.api.Matrix
|
|||||||
import org.matrix.android.sdk.api.MatrixCallback
|
import org.matrix.android.sdk.api.MatrixCallback
|
||||||
import org.matrix.android.sdk.api.MatrixConfiguration
|
import org.matrix.android.sdk.api.MatrixConfiguration
|
||||||
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
|
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.auth.registration.RegistrationResult
|
||||||
import org.matrix.android.sdk.api.session.Session
|
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.EventType
|
||||||
@ -210,22 +209,21 @@ class CommonTestHelper(context: Context) {
|
|||||||
sessionTestParams: SessionTestParams): Session {
|
sessionTestParams: SessionTestParams): Session {
|
||||||
val hs = createHomeServerConfig()
|
val hs = createHomeServerConfig()
|
||||||
|
|
||||||
doSync<LoginFlowResult> {
|
runBlockingTest {
|
||||||
matrix.authenticationService
|
matrix.authenticationService.getLoginFlow(hs)
|
||||||
.getLoginFlow(hs, it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
doSync<RegistrationResult>(timeout = 60_000) {
|
runBlockingTest(timeout = 60_000) {
|
||||||
matrix.authenticationService
|
matrix.authenticationService
|
||||||
.getRegistrationWizard()
|
.getRegistrationWizard()
|
||||||
.createAccount(userName, password, null, it)
|
.createAccount(userName, password, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Perform dummy step
|
// Perform dummy step
|
||||||
val registrationResult = doSync<RegistrationResult>(timeout = 60_000) {
|
val registrationResult = runBlockingTest(timeout = 60_000) {
|
||||||
matrix.authenticationService
|
matrix.authenticationService
|
||||||
.getRegistrationWizard()
|
.getRegistrationWizard()
|
||||||
.dummy(it)
|
.dummy()
|
||||||
}
|
}
|
||||||
|
|
||||||
assertTrue(registrationResult is RegistrationResult.Success)
|
assertTrue(registrationResult is RegistrationResult.Success)
|
||||||
@ -249,15 +247,14 @@ class CommonTestHelper(context: Context) {
|
|||||||
sessionTestParams: SessionTestParams): Session {
|
sessionTestParams: SessionTestParams): Session {
|
||||||
val hs = createHomeServerConfig()
|
val hs = createHomeServerConfig()
|
||||||
|
|
||||||
doSync<LoginFlowResult> {
|
runBlockingTest {
|
||||||
matrix.authenticationService
|
matrix.authenticationService.getLoginFlow(hs)
|
||||||
.getLoginFlow(hs, it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
val session = doSync<Session> {
|
val session = runBlockingTest {
|
||||||
matrix.authenticationService
|
matrix.authenticationService
|
||||||
.getLoginWizard()
|
.getLoginWizard()
|
||||||
.login(userName, password, "myDevice", it)
|
.login(userName, password, "myDevice")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sessionTestParams.withInitialSync) {
|
if (sessionTestParams.withInitialSync) {
|
||||||
@ -277,21 +274,19 @@ class CommonTestHelper(context: Context) {
|
|||||||
password: String): Throwable {
|
password: String): Throwable {
|
||||||
val hs = createHomeServerConfig()
|
val hs = createHomeServerConfig()
|
||||||
|
|
||||||
doSync<LoginFlowResult> {
|
runBlockingTest {
|
||||||
matrix.authenticationService
|
matrix.authenticationService.getLoginFlow(hs)
|
||||||
.getLoginFlow(hs, it)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var requestFailure: Throwable? = null
|
var requestFailure: Throwable? = null
|
||||||
waitWithLatch { latch ->
|
runBlockingTest {
|
||||||
|
try {
|
||||||
matrix.authenticationService
|
matrix.authenticationService
|
||||||
.getLoginWizard()
|
.getLoginWizard()
|
||||||
.login(userName, password, "myDevice", object : TestMatrixCallback<Session>(latch, onlySuccessful = false) {
|
.login(userName, password, "myDevice")
|
||||||
override fun onFailure(failure: Throwable) {
|
} catch (failure: Throwable) {
|
||||||
requestFailure = failure
|
requestFailure = failure
|
||||||
super.onFailure(failure)
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assertNotNull(requestFailure)
|
assertNotNull(requestFailure)
|
||||||
|
@ -61,7 +61,7 @@ class SearchMessagesTest : InstrumentedTest {
|
|||||||
2)
|
2)
|
||||||
|
|
||||||
run {
|
run {
|
||||||
var lock = CountDownLatch(1)
|
val lock = CountDownLatch(1)
|
||||||
|
|
||||||
val eventListener = commonTestHelper.createEventListener(lock) { snapshot ->
|
val eventListener = commonTestHelper.createEventListener(lock) { snapshot ->
|
||||||
snapshot.count { it.root.content.toModel<MessageContent>()?.body?.startsWith(MESSAGE).orFalse() } == 2
|
snapshot.count { it.root.content.toModel<MessageContent>()?.body?.startsWith(MESSAGE).orFalse() } == 2
|
||||||
@ -70,7 +70,6 @@ class SearchMessagesTest : InstrumentedTest {
|
|||||||
aliceTimeline.addListener(eventListener)
|
aliceTimeline.addListener(eventListener)
|
||||||
commonTestHelper.await(lock)
|
commonTestHelper.await(lock)
|
||||||
|
|
||||||
lock = CountDownLatch(1)
|
|
||||||
val data = commonTestHelper.runBlockingTest {
|
val data = commonTestHelper.runBlockingTest {
|
||||||
aliceSession
|
aliceSession
|
||||||
.searchService()
|
.searchService()
|
||||||
|
@ -35,7 +35,11 @@ data class MatrixConfiguration(
|
|||||||
* Optional proxy to connect to the matrix servers
|
* Optional proxy to connect to the matrix servers
|
||||||
* You can create one using for instance Proxy(proxyType, InetSocketAddress.createUnresolved(hostname, port)
|
* You can create one using for instance Proxy(proxyType, InetSocketAddress.createUnresolved(hostname, port)
|
||||||
*/
|
*/
|
||||||
val proxy: Proxy? = null
|
val proxy: Proxy? = null,
|
||||||
|
/**
|
||||||
|
* True to advertise support for call transfers to other parties on Matrix calls.
|
||||||
|
*/
|
||||||
|
val supportsCallTransfer: Boolean = false
|
||||||
) {
|
) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.auth
|
package org.matrix.android.sdk.api.auth
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.auth.data.Credentials
|
import org.matrix.android.sdk.api.auth.data.Credentials
|
||||||
import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig
|
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.data.LoginFlowResult
|
||||||
@ -24,7 +23,6 @@ import org.matrix.android.sdk.api.auth.login.LoginWizard
|
|||||||
import org.matrix.android.sdk.api.auth.registration.RegistrationWizard
|
import org.matrix.android.sdk.api.auth.registration.RegistrationWizard
|
||||||
import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
|
import org.matrix.android.sdk.api.auth.wellknown.WellknownResult
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This interface defines methods to authenticate or to create an account to a matrix server.
|
* This interface defines methods to authenticate or to create an account to a matrix server.
|
||||||
@ -32,14 +30,14 @@ import org.matrix.android.sdk.api.util.Cancelable
|
|||||||
interface AuthenticationService {
|
interface AuthenticationService {
|
||||||
/**
|
/**
|
||||||
* Request the supported login flows for this homeserver.
|
* Request the supported login flows for this homeserver.
|
||||||
* This is the first method to call to be able to get a wizard to login or the create an account
|
* This is the first method to call to be able to get a wizard to login or to create an account
|
||||||
*/
|
*/
|
||||||
fun getLoginFlow(homeServerConnectionConfig: HomeServerConnectionConfig, callback: MatrixCallback<LoginFlowResult>): Cancelable
|
suspend fun getLoginFlow(homeServerConnectionConfig: HomeServerConnectionConfig): LoginFlowResult
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Request the supported login flows for the corresponding sessionId.
|
* Request the supported login flows for the corresponding sessionId.
|
||||||
*/
|
*/
|
||||||
fun getLoginFlowOfSession(sessionId: String, callback: MatrixCallback<LoginFlowResult>): Cancelable
|
suspend fun getLoginFlowOfSession(sessionId: String): LoginFlowResult
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a SSO url
|
* Get a SSO url
|
||||||
@ -69,12 +67,12 @@ interface AuthenticationService {
|
|||||||
/**
|
/**
|
||||||
* Cancel pending login or pending registration
|
* Cancel pending login or pending registration
|
||||||
*/
|
*/
|
||||||
fun cancelPendingLoginOrRegistration()
|
suspend fun cancelPendingLoginOrRegistration()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset all pending settings, including current HomeServerConnectionConfig
|
* Reset all pending settings, including current HomeServerConnectionConfig
|
||||||
*/
|
*/
|
||||||
fun reset()
|
suspend fun reset()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if there is an authenticated [Session].
|
* Check if there is an authenticated [Session].
|
||||||
@ -91,24 +89,21 @@ interface AuthenticationService {
|
|||||||
/**
|
/**
|
||||||
* Create a session after a SSO successful login
|
* Create a session after a SSO successful login
|
||||||
*/
|
*/
|
||||||
fun createSessionFromSso(homeServerConnectionConfig: HomeServerConnectionConfig,
|
suspend fun createSessionFromSso(homeServerConnectionConfig: HomeServerConnectionConfig,
|
||||||
credentials: Credentials,
|
credentials: Credentials): Session
|
||||||
callback: MatrixCallback<Session>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform a wellknown request, using the domain from the matrixId
|
* Perform a wellknown request, using the domain from the matrixId
|
||||||
*/
|
*/
|
||||||
fun getWellKnownData(matrixId: String,
|
suspend fun getWellKnownData(matrixId: String,
|
||||||
homeServerConnectionConfig: HomeServerConnectionConfig?,
|
homeServerConnectionConfig: HomeServerConnectionConfig?): WellknownResult
|
||||||
callback: MatrixCallback<WellknownResult>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authenticate with a matrixId and a password
|
* Authenticate with a matrixId and a password
|
||||||
* Usually call this after a successful call to getWellKnownData()
|
* Usually call this after a successful call to getWellKnownData()
|
||||||
*/
|
*/
|
||||||
fun directAuthentication(homeServerConnectionConfig: HomeServerConnectionConfig,
|
suspend fun directAuthentication(homeServerConnectionConfig: HomeServerConnectionConfig,
|
||||||
matrixId: String,
|
matrixId: String,
|
||||||
password: String,
|
password: String,
|
||||||
initialDeviceName: String,
|
initialDeviceName: String): Session
|
||||||
callback: MatrixCallback<Session>): Cancelable
|
|
||||||
}
|
}
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.auth.login
|
package org.matrix.android.sdk.api.auth.login
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.session.Session
|
import org.matrix.android.sdk.api.session.Session
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
import org.matrix.android.sdk.api.util.Cancelable
|
||||||
|
|
||||||
@ -29,26 +28,23 @@ interface LoginWizard {
|
|||||||
* @param callback the matrix callback on which you'll receive the result of authentication.
|
* @param callback the matrix callback on which you'll receive the result of authentication.
|
||||||
* @return a [Cancelable]
|
* @return a [Cancelable]
|
||||||
*/
|
*/
|
||||||
fun login(login: String,
|
suspend fun login(login: String,
|
||||||
password: String,
|
password: String,
|
||||||
deviceName: String,
|
deviceName: String): Session
|
||||||
callback: MatrixCallback<Session>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Exchange a login token to an access token
|
* Exchange a login token to an access token
|
||||||
*/
|
*/
|
||||||
fun loginWithToken(loginToken: String,
|
suspend fun loginWithToken(loginToken: String): Session
|
||||||
callback: MatrixCallback<Session>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reset user password
|
* Reset user password
|
||||||
*/
|
*/
|
||||||
fun resetPassword(email: String,
|
suspend fun resetPassword(email: String,
|
||||||
newPassword: String,
|
newPassword: String)
|
||||||
callback: MatrixCallback<Unit>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm the new password, once the user has checked his email
|
* Confirm the new password, once the user has checked their email
|
||||||
*/
|
*/
|
||||||
fun resetPasswordMailConfirmed(callback: MatrixCallback<Unit>): Cancelable
|
suspend fun resetPasswordMailConfirmed()
|
||||||
}
|
}
|
||||||
|
@ -16,28 +16,25 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.auth.registration
|
package org.matrix.android.sdk.api.auth.registration
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
|
||||||
|
|
||||||
interface RegistrationWizard {
|
interface RegistrationWizard {
|
||||||
|
|
||||||
fun getRegistrationFlow(callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun getRegistrationFlow(): RegistrationResult
|
||||||
|
|
||||||
fun createAccount(userName: String, password: String, initialDeviceDisplayName: String?, callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun createAccount(userName: String, password: String, initialDeviceDisplayName: String?): RegistrationResult
|
||||||
|
|
||||||
fun performReCaptcha(response: String, callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun performReCaptcha(response: String): RegistrationResult
|
||||||
|
|
||||||
fun acceptTerms(callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun acceptTerms(): RegistrationResult
|
||||||
|
|
||||||
fun dummy(callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun dummy(): RegistrationResult
|
||||||
|
|
||||||
fun addThreePid(threePid: RegisterThreePid, callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun addThreePid(threePid: RegisterThreePid): RegistrationResult
|
||||||
|
|
||||||
fun sendAgainThreePid(callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun sendAgainThreePid(): RegistrationResult
|
||||||
|
|
||||||
fun handleValidateThreePid(code: String, callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun handleValidateThreePid(code: String): RegistrationResult
|
||||||
|
|
||||||
fun checkIfEmailHasBeenValidated(delayMillis: Long, callback: MatrixCallback<RegistrationResult>): Cancelable
|
suspend fun checkIfEmailHasBeenValidated(delayMillis: Long): RegistrationResult
|
||||||
|
|
||||||
val currentThreePid: String?
|
val currentThreePid: String?
|
||||||
|
|
||||||
|
@ -53,22 +53,24 @@ fun Throwable.isInvalidUIAAuth(): Boolean {
|
|||||||
* Try to convert to a RegistrationFlowResponse. Return null in the cases it's not possible
|
* Try to convert to a RegistrationFlowResponse. Return null in the cases it's not possible
|
||||||
*/
|
*/
|
||||||
fun Throwable.toRegistrationFlowResponse(): RegistrationFlowResponse? {
|
fun Throwable.toRegistrationFlowResponse(): RegistrationFlowResponse? {
|
||||||
return if (this is Failure.OtherServerError && this.httpCode == 401) {
|
return if (this is Failure.OtherServerError && httpCode == 401) {
|
||||||
tryOrNull {
|
tryOrNull {
|
||||||
MoshiProvider.providesMoshi()
|
MoshiProvider.providesMoshi()
|
||||||
.adapter(RegistrationFlowResponse::class.java)
|
.adapter(RegistrationFlowResponse::class.java)
|
||||||
.fromJson(this.errorBody)
|
.fromJson(errorBody)
|
||||||
}
|
}
|
||||||
} else if (this is Failure.ServerError && this.httpCode == 401 && this.error.code == MatrixError.M_FORBIDDEN) {
|
} else if (this is Failure.ServerError && httpCode == 401 && error.code == MatrixError.M_FORBIDDEN) {
|
||||||
// This happens when the submission for this stage was bad (like bad password)
|
// This happens when the submission for this stage was bad (like bad password)
|
||||||
if (this.error.session != null && this.error.flows != null) {
|
if (error.session != null && error.flows != null) {
|
||||||
RegistrationFlowResponse(
|
RegistrationFlowResponse(
|
||||||
flows = this.error.flows,
|
flows = error.flows,
|
||||||
session = this.error.session,
|
session = error.session,
|
||||||
completedStages = this.error.completedStages,
|
completedStages = error.completedStages,
|
||||||
params = this.error.params
|
params = error.params
|
||||||
)
|
)
|
||||||
} else null
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,7 @@ import org.matrix.android.sdk.api.session.signout.SignOutService
|
|||||||
import org.matrix.android.sdk.api.session.sync.FilterService
|
import org.matrix.android.sdk.api.session.sync.FilterService
|
||||||
import org.matrix.android.sdk.api.session.sync.SyncState
|
import org.matrix.android.sdk.api.session.sync.SyncState
|
||||||
import org.matrix.android.sdk.api.session.terms.TermsService
|
import org.matrix.android.sdk.api.session.terms.TermsService
|
||||||
|
import org.matrix.android.sdk.api.session.thirdparty.ThirdPartyService
|
||||||
import org.matrix.android.sdk.api.session.typing.TypingUsersTracker
|
import org.matrix.android.sdk.api.session.typing.TypingUsersTracker
|
||||||
import org.matrix.android.sdk.api.session.user.UserService
|
import org.matrix.android.sdk.api.session.user.UserService
|
||||||
import org.matrix.android.sdk.api.session.widgets.WidgetService
|
import org.matrix.android.sdk.api.session.widgets.WidgetService
|
||||||
@ -212,6 +213,11 @@ interface Session :
|
|||||||
*/
|
*/
|
||||||
fun searchService(): SearchService
|
fun searchService(): SearchService
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the third party service associated with the session
|
||||||
|
*/
|
||||||
|
fun thirdPartyService(): ThirdPartyService
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a listener to the session.
|
* Add a listener to the session.
|
||||||
* @param listener the listener to add.
|
* @param listener the listener to add.
|
||||||
|
@ -27,7 +27,8 @@ interface AccountService {
|
|||||||
* @param password Current password.
|
* @param password Current password.
|
||||||
* @param newPassword New password
|
* @param newPassword New password
|
||||||
*/
|
*/
|
||||||
suspend fun changePassword(password: String, newPassword: String)
|
suspend fun changePassword(password: String,
|
||||||
|
newPassword: String)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deactivate the account.
|
* Deactivate the account.
|
||||||
@ -41,9 +42,10 @@ interface AccountService {
|
|||||||
* be shared with any new or unregistered users, but registered users who already have access to these messages will still
|
* be shared with any new or unregistered users, but registered users who already have access to these messages will still
|
||||||
* have access to their copy.
|
* have access to their copy.
|
||||||
*
|
*
|
||||||
* @param password the account password
|
|
||||||
* @param eraseAllData set to true to forget all messages that have been sent. Warning: this will cause future users to see
|
* @param eraseAllData set to true to forget all messages that have been sent. Warning: this will cause future users to see
|
||||||
* an incomplete view of conversations
|
* an incomplete view of conversations
|
||||||
|
* @param userInteractiveAuthInterceptor see [UserInteractiveAuthInterceptor]
|
||||||
*/
|
*/
|
||||||
suspend fun deactivateAccount(userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, eraseAllData: Boolean)
|
suspend fun deactivateAccount(eraseAllData: Boolean,
|
||||||
|
userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor)
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,11 @@ import org.matrix.android.sdk.api.session.room.model.call.CallAnswerContent
|
|||||||
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
import org.matrix.android.sdk.api.session.room.model.call.CallCandidatesContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||||
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.call.CallNegotiateContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.call.CallRejectContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.call.CallSelectAnswerContent
|
||||||
|
|
||||||
interface CallsListener {
|
interface CallListener {
|
||||||
/**
|
/**
|
||||||
* Called when there is an incoming call within the room.
|
* Called when there is an incoming call within the room.
|
||||||
*/
|
*/
|
||||||
@ -39,5 +42,23 @@ interface CallsListener {
|
|||||||
*/
|
*/
|
||||||
fun onCallHangupReceived(callHangupContent: CallHangupContent)
|
fun onCallHangupReceived(callHangupContent: CallHangupContent)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a called has been rejected
|
||||||
|
*/
|
||||||
|
fun onCallRejectReceived(callRejectContent: CallRejectContent)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when an answer has been selected
|
||||||
|
*/
|
||||||
|
fun onCallSelectAnswerReceived(callSelectAnswerContent: CallSelectAnswerContent)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when a negotiation is sent
|
||||||
|
*/
|
||||||
|
fun onCallNegotiateReceived(callNegotiateContent: CallNegotiateContent)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called when the call has been managed by an other session
|
||||||
|
*/
|
||||||
fun onCallManagedByOtherSession(callId: String)
|
fun onCallManagedByOtherSession(callId: String)
|
||||||
}
|
}
|
@ -16,21 +16,20 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.session.call
|
package org.matrix.android.sdk.api.session.call
|
||||||
|
|
||||||
import org.matrix.android.sdk.api.MatrixCallback
|
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
|
||||||
|
|
||||||
interface CallSignalingService {
|
interface CallSignalingService {
|
||||||
|
|
||||||
fun getTurnServer(callback: MatrixCallback<TurnServerResponse>): Cancelable
|
suspend fun getTurnServer(): TurnServerResponse
|
||||||
|
|
||||||
|
fun getPSTNProtocolChecker(): PSTNProtocolChecker
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an outgoing call
|
* Create an outgoing call
|
||||||
*/
|
*/
|
||||||
fun createOutgoingCall(roomId: String, otherUserId: String, isVideoCall: Boolean): MxCall
|
fun createOutgoingCall(roomId: String, otherUserId: String, isVideoCall: Boolean): MxCall
|
||||||
|
|
||||||
fun addCallListener(listener: CallsListener)
|
fun addCallListener(listener: CallListener)
|
||||||
|
|
||||||
fun removeCallListener(listener: CallsListener)
|
fun removeCallListener(listener: CallListener)
|
||||||
|
|
||||||
fun getCallWithId(callId: String): MxCall?
|
fun getCallWithId(callId: String): MxCall?
|
||||||
|
|
||||||
|
@ -16,13 +16,16 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.session.call
|
package org.matrix.android.sdk.api.session.call
|
||||||
|
|
||||||
import org.webrtc.PeerConnection
|
|
||||||
|
|
||||||
sealed class CallState {
|
sealed class CallState {
|
||||||
|
|
||||||
/** Idle, setting up objects */
|
/** Idle, setting up objects */
|
||||||
object Idle : CallState()
|
object Idle : CallState()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CreateOffer. Intermediate state between Idle and Dialing.
|
||||||
|
*/
|
||||||
|
object CreateOffer: CallState()
|
||||||
|
|
||||||
/** Dialing. Outgoing call is signaling the remote peer */
|
/** Dialing. Outgoing call is signaling the remote peer */
|
||||||
object Dialing : CallState()
|
object Dialing : CallState()
|
||||||
|
|
||||||
@ -36,8 +39,8 @@ sealed class CallState {
|
|||||||
* Connected. Incoming/Outgoing call, ice layer connecting or connected
|
* Connected. Incoming/Outgoing call, ice layer connecting or connected
|
||||||
* Notice that the PeerState failed is not always final, if you switch network, new ice candidtates
|
* Notice that the PeerState failed is not always final, if you switch network, new ice candidtates
|
||||||
* could be exchanged, and the connection could go back to connected
|
* could be exchanged, and the connection could go back to connected
|
||||||
*/
|
* */
|
||||||
data class Connected(val iceConnectionState: PeerConnection.PeerConnectionState) : CallState()
|
data class Connected(val iceConnectionState: MxPeerConnectionState) : CallState()
|
||||||
|
|
||||||
/** Terminated. Incoming/Outgoing call, the call is terminated */
|
/** Terminated. Incoming/Outgoing call, the call is terminated */
|
||||||
object Terminated : CallState()
|
object Terminated : CallState()
|
||||||
|
@ -16,14 +16,17 @@
|
|||||||
|
|
||||||
package org.matrix.android.sdk.api.session.call
|
package org.matrix.android.sdk.api.session.call
|
||||||
|
|
||||||
import org.webrtc.IceCandidate
|
import org.matrix.android.sdk.api.session.room.model.call.CallCandidate
|
||||||
import org.webrtc.SessionDescription
|
import org.matrix.android.sdk.api.session.room.model.call.CallCapabilities
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.call.CallHangupContent
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.call.SdpType
|
||||||
|
import org.matrix.android.sdk.api.util.Optional
|
||||||
|
|
||||||
interface MxCallDetail {
|
interface MxCallDetail {
|
||||||
val callId: String
|
val callId: String
|
||||||
val isOutgoing: Boolean
|
val isOutgoing: Boolean
|
||||||
val roomId: String
|
val roomId: String
|
||||||
val otherUserId: String
|
val opponentUserId: String
|
||||||
val isVideoCall: Boolean
|
val isVideoCall: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,40 +35,64 @@ interface MxCallDetail {
|
|||||||
*/
|
*/
|
||||||
interface MxCall : MxCallDetail {
|
interface MxCall : MxCallDetail {
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val VOIP_PROTO_VERSION = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
val ourPartyId: String
|
||||||
|
var opponentPartyId: Optional<String>?
|
||||||
|
var opponentVersion: Int
|
||||||
|
|
||||||
|
var capabilities: CallCapabilities?
|
||||||
|
|
||||||
var state: CallState
|
var state: CallState
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pick Up the incoming call
|
* Pick Up the incoming call
|
||||||
* It has no effect on outgoing call
|
* It has no effect on outgoing call
|
||||||
*/
|
*/
|
||||||
fun accept(sdp: SessionDescription)
|
fun accept(sdpString: String)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SDP negotiation for media pause, hold/resume, ICE restarts and voice/video call up/downgrading
|
||||||
|
*/
|
||||||
|
fun negotiate(sdpString: String, type: SdpType)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This has to be sent by the caller's client once it has chosen an answer.
|
||||||
|
*/
|
||||||
|
fun selectAnswer()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reject an incoming call
|
* Reject an incoming call
|
||||||
* It's an alias to hangUp
|
|
||||||
*/
|
*/
|
||||||
fun reject() = hangUp()
|
fun reject()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* End the call
|
* End the call
|
||||||
*/
|
*/
|
||||||
fun hangUp()
|
fun hangUp(reason: CallHangupContent.Reason? = null)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start a call
|
* Start a call
|
||||||
* Send offer SDP to the other participant.
|
* Send offer SDP to the other participant.
|
||||||
*/
|
*/
|
||||||
fun offerSdp(sdp: SessionDescription)
|
fun offerSdp(sdpString: String)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send Ice candidate to the other participant.
|
* Send Call candidate to the other participant.
|
||||||
*/
|
*/
|
||||||
fun sendLocalIceCandidates(candidates: List<IceCandidate>)
|
fun sendLocalCallCandidates(candidates: List<CallCandidate>)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send removed ICE candidates to the other participant.
|
* Send removed ICE candidates to the other participant.
|
||||||
*/
|
*/
|
||||||
fun sendLocalIceCandidateRemovals(candidates: List<IceCandidate>)
|
fun sendLocalIceCandidateRemovals(candidates: List<CallCandidate>)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a m.call.replaces event to initiate call transfer.
|
||||||
|
*/
|
||||||
|
suspend fun transfer(targetUserId: String, targetRoomId: String?)
|
||||||
|
|
||||||
fun addListener(listener: StateListener)
|
fun addListener(listener: StateListener)
|
||||||
fun removeListener(listener: StateListener)
|
fun removeListener(listener: StateListener)
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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.api.session.call;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is a copy of https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/connectionState
|
||||||
|
* to avoid having the dependency over WebRtc library on sdk.
|
||||||
|
*/
|
||||||
|
public enum MxPeerConnectionState {
|
||||||
|
NEW,
|
||||||
|
CONNECTING,
|
||||||
|
CONNECTED,
|
||||||
|
DISCONNECTED,
|
||||||
|
FAILED,
|
||||||
|
CLOSED
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The Matrix.org Foundation C.I.C.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.matrix.android.sdk.api.session.call
|
||||||
|
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
|
import org.matrix.android.sdk.api.extensions.tryOrNull
|
||||||
|
import org.matrix.android.sdk.api.session.room.model.thirdparty.ThirdPartyProtocol
|
||||||
|
import org.matrix.android.sdk.internal.session.SessionScope
|
||||||
|
import org.matrix.android.sdk.internal.session.thirdparty.GetThirdPartyProtocolsTask
|
||||||
|
import org.matrix.android.sdk.internal.task.TaskExecutor
|
||||||
|
import timber.log.Timber
|
||||||
|
import java.util.concurrent.atomic.AtomicBoolean
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
private const val PSTN_VECTOR_KEY = "im.vector.protocol.pstn"
|
||||||
|
private const val PSTN_MATRIX_KEY = "m.protocol.pstn"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is responsible for checking if the HS support the PSTN protocol.
|
||||||
|
* As long as the request succeed, it'll check only once by session.
|
||||||
|
*/
|
||||||
|
@SessionScope
|
||||||
|
class PSTNProtocolChecker @Inject internal constructor(private val taskExecutor: TaskExecutor,
|
||||||
|
private val getThirdPartyProtocolsTask: GetThirdPartyProtocolsTask) {
|
||||||
|
|
||||||
|
interface Listener {
|
||||||
|
fun onPSTNSupportUpdated()
|
||||||
|
}
|
||||||
|
|
||||||
|
private var alreadyChecked = AtomicBoolean(false)
|
||||||
|
|
||||||
|
private val pstnSupportListeners = mutableListOf<Listener>()
|
||||||
|
|
||||||
|
fun addListener(listener: Listener) {
|
||||||
|
pstnSupportListeners.add(listener)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun removeListener(listener: Listener) {
|
||||||
|
pstnSupportListeners.remove(listener)
|
||||||
|
}
|
||||||
|
|
||||||
|
var supportedPSTNProtocol: String? = null
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun checkForPSTNSupportIfNeeded() {
|
||||||
|
if (alreadyChecked.get()) return
|
||||||
|
taskExecutor.executorScope.checkForPSTNSupport()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun CoroutineScope.checkForPSTNSupport() = launch {
|
||||||
|
try {
|
||||||
|
supportedPSTNProtocol = getSupportedPSTN(3)
|
||||||
|
alreadyChecked.set(true)
|
||||||
|
if (supportedPSTNProtocol != null) {
|
||||||
|
pstnSupportListeners.forEach {
|
||||||
|
tryOrNull { it.onPSTNSupportUpdated() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (failure: Throwable) {
|
||||||
|
Timber.v("Fail to get supported PSTN, will check again next time.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun getSupportedPSTN(maxTries: Int): String? {
|
||||||
|
val thirdPartyProtocols: Map<String, ThirdPartyProtocol> = try {
|
||||||
|
getThirdPartyProtocolsTask.execute(Unit)
|
||||||
|
} catch (failure: Throwable) {
|
||||||
|
if (maxTries == 1) {
|
||||||
|
throw failure
|
||||||
|
} else {
|
||||||
|
// Wait for 10s before trying again
|
||||||
|
delay(10_000L)
|
||||||
|
return getSupportedPSTN(maxTries - 1)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return when {
|
||||||
|
thirdPartyProtocols.containsKey(PSTN_VECTOR_KEY) -> PSTN_VECTOR_KEY
|
||||||
|
thirdPartyProtocols.containsKey(PSTN_MATRIX_KEY) -> PSTN_MATRIX_KEY
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -56,8 +56,6 @@ interface CryptoService {
|
|||||||
|
|
||||||
fun deleteDevice(deviceId: String, userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, callback: MatrixCallback<Unit>)
|
fun deleteDevice(deviceId: String, userInteractiveAuthInterceptor: UserInteractiveAuthInterceptor, callback: MatrixCallback<Unit>)
|
||||||
|
|
||||||
fun deleteDeviceWithUserPassword(deviceId: String, authSession: String?, password: String, callback: MatrixCallback<Unit>)
|
|
||||||
|
|
||||||
fun getCryptoVersion(context: Context, longFormat: Boolean): String
|
fun getCryptoVersion(context: Context, longFormat: Boolean): String
|
||||||
|
|
||||||
fun isCryptoEnabled(): Boolean
|
fun isCryptoEnabled(): Boolean
|
||||||
|
@ -68,7 +68,12 @@ object EventType {
|
|||||||
const val CALL_INVITE = "m.call.invite"
|
const val CALL_INVITE = "m.call.invite"
|
||||||
const val CALL_CANDIDATES = "m.call.candidates"
|
const val CALL_CANDIDATES = "m.call.candidates"
|
||||||
const val CALL_ANSWER = "m.call.answer"
|
const val CALL_ANSWER = "m.call.answer"
|
||||||
|
const val CALL_SELECT_ANSWER = "m.call.select_answer"
|
||||||
|
const val CALL_NEGOTIATE = "m.call.negotiate"
|
||||||
|
const val CALL_REJECT = "m.call.reject"
|
||||||
const val CALL_HANGUP = "m.call.hangup"
|
const val CALL_HANGUP = "m.call.hangup"
|
||||||
|
// This type is not processed by the client, just sent to the server
|
||||||
|
const val CALL_REPLACES = "m.call.replaces"
|
||||||
|
|
||||||
// Key share events
|
// Key share events
|
||||||
const val ROOM_KEY_REQUEST = "m.room_key_request"
|
const val ROOM_KEY_REQUEST = "m.room_key_request"
|
||||||
@ -98,5 +103,9 @@ object EventType {
|
|||||||
|| type == CALL_CANDIDATES
|
|| type == CALL_CANDIDATES
|
||||||
|| type == CALL_ANSWER
|
|| type == CALL_ANSWER
|
||||||
|| type == CALL_HANGUP
|
|| type == CALL_HANGUP
|
||||||
|
|| type == CALL_SELECT_ANSWER
|
||||||
|
|| type == CALL_NEGOTIATE
|
||||||
|
|| type == CALL_REJECT
|
||||||
|
|| type == CALL_REPLACES
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ import org.matrix.android.sdk.api.MatrixCallback
|
|||||||
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
import org.matrix.android.sdk.api.session.room.model.RoomDirectoryVisibility
|
||||||
import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoomsParams
|
import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoomsParams
|
||||||
import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoomsResponse
|
import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoomsResponse
|
||||||
import org.matrix.android.sdk.api.session.room.model.thirdparty.ThirdPartyProtocol
|
|
||||||
import org.matrix.android.sdk.api.util.Cancelable
|
import org.matrix.android.sdk.api.util.Cancelable
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -35,12 +34,6 @@ interface RoomDirectoryService {
|
|||||||
publicRoomsParams: PublicRoomsParams,
|
publicRoomsParams: PublicRoomsParams,
|
||||||
callback: MatrixCallback<PublicRoomsResponse>): Cancelable
|
callback: MatrixCallback<PublicRoomsResponse>): Cancelable
|
||||||
|
|
||||||
/**
|
|
||||||
* Fetches the overall metadata about protocols supported by the homeserver.
|
|
||||||
* Includes both the available protocols and all fields required for queries against each protocol.
|
|
||||||
*/
|
|
||||||
fun getThirdPartyProtocol(callback: MatrixCallback<Map<String, ThirdPartyProtocol>>): Cancelable
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the visibility of a room in the directory
|
* Get the visibility of a room in the directory
|
||||||
*/
|
*/
|
||||||
|
@ -30,24 +30,24 @@ data class RoomThirdPartyInviteContent(
|
|||||||
* This should not contain the user's third party ID, as otherwise when the invite
|
* This should not contain the user's third party ID, as otherwise when the invite
|
||||||
* is accepted it would leak the association between the matrix ID and the third party ID.
|
* is accepted it would leak the association between the matrix ID and the third party ID.
|
||||||
*/
|
*/
|
||||||
@Json(name = "display_name") val displayName: String,
|
@Json(name = "display_name") val displayName: String?,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required. A URL which can be fetched, with querystring public_key=public_key, to validate
|
* Required. A URL which can be fetched, with querystring public_key=public_key, to validate
|
||||||
* whether the key has been revoked. The URL must return a JSON object containing a boolean property named 'valid'.
|
* whether the key has been revoked. The URL must return a JSON object containing a boolean property named 'valid'.
|
||||||
*/
|
*/
|
||||||
@Json(name = "key_validity_url") val keyValidityUrl: String,
|
@Json(name = "key_validity_url") val keyValidityUrl: String?,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Required. A base64-encoded ed25519 key with which token must be signed (though a signature from any entry in
|
* Required. A base64-encoded ed25519 key with which token must be signed (though a signature from any entry in
|
||||||
* public_keys is also sufficient). This exists for backwards compatibility.
|
* public_keys is also sufficient). This exists for backwards compatibility.
|
||||||
*/
|
*/
|
||||||
@Json(name = "public_key") val publicKey: String,
|
@Json(name = "public_key") val publicKey: String?,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Keys with which the token may be signed.
|
* Keys with which the token may be signed.
|
||||||
*/
|
*/
|
||||||
@Json(name = "public_keys") val publicKeys: List<PublicKeys> = emptyList()
|
@Json(name = "public_keys") val publicKeys: List<PublicKeys>? = emptyList()
|
||||||
)
|
)
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
|
@ -27,16 +27,24 @@ data class CallAnswerContent(
|
|||||||
/**
|
/**
|
||||||
* Required. The ID of the call this event relates to.
|
* Required. The ID of the call this event relates to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "call_id") val callId: String,
|
@Json(name = "call_id") override val callId: String,
|
||||||
|
/**
|
||||||
|
* Required. ID to let user identify remote echo of their own events
|
||||||
|
*/
|
||||||
|
@Json(name = "party_id") override val partyId: String? = null,
|
||||||
/**
|
/**
|
||||||
* Required. The session description object
|
* Required. The session description object
|
||||||
*/
|
*/
|
||||||
@Json(name = "answer") val answer: Answer,
|
@Json(name = "answer") val answer: Answer,
|
||||||
/**
|
/**
|
||||||
* Required. The version of the VoIP specification this messages adheres to. This specification is version 0.
|
* Required. The version of the VoIP specification this messages adheres to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "version") val version: Int = 0
|
@Json(name = "version") override val version: String?,
|
||||||
) {
|
/**
|
||||||
|
* Capability advertisement.
|
||||||
|
*/
|
||||||
|
@Json(name = "capabilities") val capabilities: CallCapabilities? = null
|
||||||
|
): CallSignallingContent {
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class Answer(
|
data class Answer(
|
||||||
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 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.api.session.room.model.call
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class CallCandidate(
|
||||||
|
/**
|
||||||
|
* Required. The SDP media type this candidate is intended for.
|
||||||
|
*/
|
||||||
|
@Json(name = "sdpMid") val sdpMid: String? = null,
|
||||||
|
/**
|
||||||
|
* Required. The index of the SDP 'm' line this candidate is intended for.
|
||||||
|
*/
|
||||||
|
@Json(name = "sdpMLineIndex") val sdpMLineIndex: Int = 0,
|
||||||
|
/**
|
||||||
|
* Required. The SDP 'a' line of the candidate.
|
||||||
|
*/
|
||||||
|
@Json(name = "candidate") val candidate: String? = null
|
||||||
|
)
|
@ -28,30 +28,17 @@ data class CallCandidatesContent(
|
|||||||
/**
|
/**
|
||||||
* Required. The ID of the call this event relates to.
|
* Required. The ID of the call this event relates to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "call_id") val callId: String,
|
@Json(name = "call_id") override val callId: String,
|
||||||
|
/**
|
||||||
|
* Required. ID to let user identify remote echo of their own events
|
||||||
|
*/
|
||||||
|
@Json(name = "party_id") override val partyId: String? = null,
|
||||||
/**
|
/**
|
||||||
* Required. Array of objects describing the candidates.
|
* Required. Array of objects describing the candidates.
|
||||||
*/
|
*/
|
||||||
@Json(name = "candidates") val candidates: List<Candidate> = emptyList(),
|
@Json(name = "candidates") val candidates: List<CallCandidate> = emptyList(),
|
||||||
/**
|
/**
|
||||||
* Required. The version of the VoIP specification this messages adheres to. This specification is version 0.
|
* Required. The version of the VoIP specification this messages adheres to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "version") val version: Int = 0
|
@Json(name = "version") override val version: String?
|
||||||
) {
|
): CallSignallingContent
|
||||||
|
|
||||||
@JsonClass(generateAdapter = true)
|
|
||||||
data class Candidate(
|
|
||||||
/**
|
|
||||||
* Required. The SDP media type this candidate is intended for.
|
|
||||||
*/
|
|
||||||
@Json(name = "sdpMid") val sdpMid: String,
|
|
||||||
/**
|
|
||||||
* Required. The index of the SDP 'm' line this candidate is intended for.
|
|
||||||
*/
|
|
||||||
@Json(name = "sdpMLineIndex") val sdpMLineIndex: Int,
|
|
||||||
/**
|
|
||||||
* Required. The SDP 'a' line of the candidate.
|
|
||||||
*/
|
|
||||||
@Json(name = "candidate") val candidate: String
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
/*
|
||||||
|
* 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.api.session.room.model.call
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
import org.matrix.android.sdk.api.extensions.orFalse
|
||||||
|
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class CallCapabilities(
|
||||||
|
/**
|
||||||
|
* If set to true, states that the sender of the event supports the m.call.replaces event and therefore supports
|
||||||
|
* being transferred to another destination
|
||||||
|
*/
|
||||||
|
@Json(name = "m.call.transferee") val transferee: Boolean? = null
|
||||||
|
)
|
||||||
|
|
||||||
|
fun CallCapabilities?.supportCallTransfer() = this?.transferee.orFalse()
|
@ -28,24 +28,41 @@ data class CallHangupContent(
|
|||||||
/**
|
/**
|
||||||
* Required. The ID of the call this event relates to.
|
* Required. The ID of the call this event relates to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "call_id") val callId: String,
|
@Json(name = "call_id") override val callId: String,
|
||||||
/**
|
/**
|
||||||
* Required. The version of the VoIP specification this message adheres to. This specification is version 0.
|
* Required. ID to let user identify remote echo of their own events
|
||||||
*/
|
*/
|
||||||
@Json(name = "version") val version: Int = 0,
|
@Json(name = "party_id") override val partyId: String? = null,
|
||||||
|
/**
|
||||||
|
* Required. The version of the VoIP specification this message adheres to.
|
||||||
|
*/
|
||||||
|
@Json(name = "version") override val version: String?,
|
||||||
/**
|
/**
|
||||||
* Optional error reason for the hangup. This should not be provided when the user naturally ends or rejects the call.
|
* Optional error reason for the hangup. This should not be provided when the user naturally ends or rejects the call.
|
||||||
* When there was an error in the call negotiation, this should be `ice_failed` for when ICE negotiation fails
|
* When there was an error in the call negotiation, this should be `ice_failed` for when ICE negotiation fails
|
||||||
* or `invite_timeout` for when the other party did not answer in time. One of: ["ice_failed", "invite_timeout"]
|
* or `invite_timeout` for when the other party did not answer in time.
|
||||||
|
* One of: ["ice_failed", "invite_timeout"]
|
||||||
*/
|
*/
|
||||||
@Json(name = "reason") val reason: Reason? = null
|
@Json(name = "reason") val reason: Reason? = null
|
||||||
) {
|
) : CallSignallingContent {
|
||||||
@JsonClass(generateAdapter = false)
|
@JsonClass(generateAdapter = false)
|
||||||
enum class Reason {
|
enum class Reason {
|
||||||
@Json(name = "ice_failed")
|
@Json(name = "ice_failed")
|
||||||
ICE_FAILED,
|
ICE_FAILED,
|
||||||
|
|
||||||
|
@Json(name = "ice_timeout")
|
||||||
|
ICE_TIMEOUT,
|
||||||
|
|
||||||
|
@Json(name = "user_hangup")
|
||||||
|
USER_HANGUP,
|
||||||
|
|
||||||
|
@Json(name = "user_media_failed")
|
||||||
|
USER_MEDIA_FAILED,
|
||||||
|
|
||||||
@Json(name = "invite_timeout")
|
@Json(name = "invite_timeout")
|
||||||
INVITE_TIMEOUT
|
INVITE_TIMEOUT,
|
||||||
|
|
||||||
|
@Json(name = "unknown_error")
|
||||||
|
UNKWOWN_ERROR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,22 +27,35 @@ data class CallInviteContent(
|
|||||||
/**
|
/**
|
||||||
* Required. A unique identifier for the call.
|
* Required. A unique identifier for the call.
|
||||||
*/
|
*/
|
||||||
@Json(name = "call_id") val callId: String?,
|
@Json(name = "call_id") override val callId: String?,
|
||||||
|
/**
|
||||||
|
* Required. ID to let user identify remote echo of their own events
|
||||||
|
*/
|
||||||
|
@Json(name = "party_id") override val partyId: String? = null,
|
||||||
/**
|
/**
|
||||||
* Required. The session description object
|
* Required. The session description object
|
||||||
*/
|
*/
|
||||||
@Json(name = "offer") val offer: Offer?,
|
@Json(name = "offer") val offer: Offer?,
|
||||||
/**
|
/**
|
||||||
* Required. The version of the VoIP specification this message adheres to. This specification is version 0.
|
* Required. The version of the VoIP specification this message adheres to.
|
||||||
*/
|
*/
|
||||||
@Json(name = "version") val version: Int? = 0,
|
@Json(name = "version") override val version: String?,
|
||||||
/**
|
/**
|
||||||
* Required. The time in milliseconds that the invite is valid for.
|
* Required. The time in milliseconds that the invite is valid for.
|
||||||
* Once the invite age exceeds this value, clients should discard it.
|
* Once the invite age exceeds this value, clients should discard it.
|
||||||
* They should also no longer show the call as awaiting an answer in the UI.
|
* They should also no longer show the call as awaiting an answer in the UI.
|
||||||
*/
|
*/
|
||||||
@Json(name = "lifetime") val lifetime: Int?
|
@Json(name = "lifetime") val lifetime: Int?,
|
||||||
) {
|
/**
|
||||||
|
* The field should be added for all invites where the target is a specific user
|
||||||
|
*/
|
||||||
|
@Json(name = "invitee") val invitee: String? = null,
|
||||||
|
/**
|
||||||
|
* Capability advertisement.
|
||||||
|
*/
|
||||||
|
@Json(name = "capabilities") val capabilities: CallCapabilities? = null
|
||||||
|
|
||||||
|
): CallSignallingContent {
|
||||||
@JsonClass(generateAdapter = true)
|
@JsonClass(generateAdapter = true)
|
||||||
data class Offer(
|
data class Offer(
|
||||||
/**
|
/**
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* 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.api.session.room.model.call
|
||||||
|
|
||||||
|
import com.squareup.moshi.Json
|
||||||
|
import com.squareup.moshi.JsonClass
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This introduces SDP negotiation semantics for media pause, hold/resume, ICE restarts and voice/video call up/downgrading.
|
||||||
|
*/
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class CallNegotiateContent(
|
||||||
|
/**
|
||||||
|
* Required. The ID of the call this event relates to.
|
||||||
|
*/
|
||||||
|
@Json(name = "call_id") override val callId: String,
|
||||||
|
/**
|
||||||
|
* Required. ID to let user identify remote echo of their own events
|
||||||
|
*/
|
||||||
|
@Json(name = "party_id") override val partyId: String? = null,
|
||||||
|
/**
|
||||||
|
* Required. The time in milliseconds that the negotiation is valid for. Once exceeded the sender
|
||||||
|
* of the negotiate event should consider the negotiation failed (timed out) and the recipient should ignore it.
|
||||||
|
**/
|
||||||
|
@Json(name = "lifetime") val lifetime: Int?,
|
||||||
|
/**
|
||||||
|
* Required. The session description object
|
||||||
|
*/
|
||||||
|
@Json(name = "description") val description: Description? = null,
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Required. The version of the VoIP specification this message adheres to.
|
||||||
|
*/
|
||||||
|
@Json(name = "version") override val version: String?
|
||||||
|
|
||||||
|
): CallSignallingContent {
|
||||||
|
@JsonClass(generateAdapter = true)
|
||||||
|
data class Description(
|
||||||
|
/**
|
||||||
|
* Required. The type of session description.
|
||||||
|
*/
|
||||||
|
@Json(name = "type") val type: SdpType?,
|
||||||
|
/**
|
||||||
|
* Required. The SDP text of the session description.
|
||||||
|
*/
|
||||||
|
@Json(name = "sdp") val sdp: String?
|
||||||
|
)
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user