diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6f331a4b8..e74dcbf00c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: - name: Assemble ${{ matrix.target }} debug apk run: ./gradlew assemble${{ matrix.target }}Debug $CI_GRADLE_ARG_PROPERTIES - name: Upload ${{ matrix.target }} debug APKs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }}-debug path: | @@ -81,7 +81,7 @@ jobs: - name: Assemble ${{ matrix.target }} unsigned apk run: ./gradlew clean assemble${{ matrix.target }}Release $CI_GRADLE_ARG_PROPERTIES - name: Upload ${{ matrix.target }} unsigned APKs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.target }}-release-unsigned path: | @@ -97,7 +97,7 @@ jobs: steps: - name: Obtain apk from artifact id: download - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: ${{ env.TARGET_NAME }}-release-unsigned - name: Show apks in artifact @@ -112,7 +112,7 @@ jobs: # Don't fail when finding trackers so they can be reported later args: /github/workspace/${{ env.TARGET_FOLDER }}/release/${{ steps.list-apks.outputs.FIRST_APK_NAME }} -j -o /github/workspace/exodus.json -e 0 - name: Upload exodus json report - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: exodus.json path: | diff --git a/.github/workflows/post-pr.yml b/.github/workflows/post-pr.yml index 413352d542..1de3cb8972 100644 --- a/.github/workflows/post-pr.yml +++ b/.github/workflows/post-pr.yml @@ -79,7 +79,7 @@ jobs: adb logcat >> emulator.log & ./gradlew $CI_GRADLE_ARG_PROPERTIES connectedGplayRustCryptoDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=im.vector.app.ui.UiAllScreensSanityTest || (adb pull storage/emulated/0/Pictures/failure_screenshots && exit 1 ) - name: Upload Test Report Log - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: uitest-error-results diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 491748c53f..d2d8c21380 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -77,7 +77,7 @@ jobs: ./gradlew vector-app:lintFdroidBtchapWithdmvoipWithoutpinningRelease $CI_GRADLE_ARG_PROPERTIES - name: Upload reports if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: linting-report path: | @@ -120,7 +120,7 @@ jobs: run: ./gradlew dependencyCheckAnalyze $CI_GRADLE_ARG_PROPERTIES - name: Upload dependency analysis if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: dependency-analysis path: build/reports/dependency-check-report.html diff --git a/.github/workflows/tests-rust.yml b/.github/workflows/tests-rust.yml index ef7dc0fb5f..367d4574e5 100644 --- a/.github/workflows/tests-rust.yml +++ b/.github/workflows/tests-rust.yml @@ -25,11 +25,11 @@ jobs: group: ${{ github.ref == 'refs/heads/main' && format('unit-tests-main-rust-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('unit-tests-develop-rust-{0}', github.sha) || format('unit-tests-rust-{0}', github.ref) }} cancel-in-progress: true steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: lfs: true fetch-depth: 0 - - uses: actions/setup-java@v3 + - uses: actions/setup-java@v4 with: distribution: 'adopt' java-version: '11' @@ -78,7 +78,7 @@ jobs: ### # ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES - name: Upload Rust Integration Test Report Log - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: integration-test-rust-error-results diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index ea12a2f170..986def8362 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -46,7 +46,7 @@ jobs: #- name: Archive Screenshot Results on Error # if: failure() - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: screenshot-results # path: | @@ -99,7 +99,7 @@ jobs: ### ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES - name: Upload Integration Test Report Log - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 if: always() with: name: integration-test-error-results diff --git a/ELEMENT_CHANGES.md b/ELEMENT_CHANGES.md index a7dd26bb9a..195008a0c2 100644 --- a/ELEMENT_CHANGES.md +++ b/ELEMENT_CHANGES.md @@ -1,3 +1,11 @@ +Changes in Element v1.6.32 (2025-02-18) +======================================= + +Other changes +------------- + - Add action to report room. ([#8998](https://github.com/element-hq/element-android/issues/8998)) + + Changes in Element v1.6.30 (2025-02-04) ======================================= diff --git a/build.gradle b/build.gradle index 6f6635d303..0d5e1493a2 100644 --- a/build.gradle +++ b/build.gradle @@ -29,9 +29,9 @@ buildscript { classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:4.0.0.2929' classpath 'com.google.android.gms:oss-licenses-plugin:0.10.6' classpath "com.likethesalad.android:stem-plugin:2.9.0" - classpath 'org.owasp:dependency-check-gradle:11.1.0' + classpath 'org.owasp:dependency-check-gradle:12.1.0' classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.8.10" - classpath "org.jetbrains.kotlinx:kotlinx-knit:0.4.0" + classpath "org.jetbrains.kotlinx:kotlinx-knit:0.5.0" classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3' classpath libs.squareup.paparazziPlugin // NOTE: Do not place your application dependencies here; they belong diff --git a/changelog.d/1150.improvements b/changelog.d/1150.improvements new file mode 100644 index 0000000000..269f5fe825 --- /dev/null +++ b/changelog.d/1150.improvements @@ -0,0 +1 @@ +Rebase against Element-Android v1.6.32 \ No newline at end of file diff --git a/docs/identity_server.md b/docs/identity_server.md index a1ee86cb19..eb833d9472 100644 --- a/docs/identity_server.md +++ b/docs/identity_server.md @@ -10,7 +10,7 @@ * [Settings](#settings) * [Discovery screen](#discovery-screen) * [Set identity server screen](#set-identity-server-screen) -* [Ref:](#ref:) +* [Ref:](#ref) diff --git a/docs/integration_tests.md b/docs/integration_tests.md index b5a830e7ff..dbd3ce2b68 100644 --- a/docs/integration_tests.md +++ b/docs/integration_tests.md @@ -8,7 +8,7 @@ * [Stop Synapse](#stop-synapse) * [Troubleshoot](#troubleshoot) * [Android Emulator does cannot reach the homeserver](#android-emulator-does-cannot-reach-the-homeserver) - * [Tests partially run but some fail with "Unable to contact localhost:8080"](#tests-partially-run-but-some-fail-with-"unable-to-contact-localhost:8080") + * [Tests partially run but some fail with "Unable to contact localhost:8080"](#tests-partially-run-but-some-fail-with-"unable-to-contact-localhost8080") * [virtualenv command fails](#virtualenv-command-fails) diff --git a/docs/signin.md b/docs/signin.md index 65e305389f..901e32becc 100644 --- a/docs/signin.md +++ b/docs/signin.md @@ -8,7 +8,7 @@ This document describes the flow of signin to a homeserver, and also the flow wh * [Get the flow](#get-the-flow) * [Login with username](#login-with-username) * [Incorrect password](#incorrect-password) - * [Correct password:](#correct-password:) + * [Correct password](#correct-password) * [Login with email](#login-with-email) * [Unknown email](#unknown-email) * [Known email, wrong password](#known-email-wrong-password) @@ -76,7 +76,7 @@ curl -X POST --data $'{"identifier":{"type":"m.id.user","user":"alice"},"passwor } ``` -#### Correct password: +#### Correct password We get credential (200) diff --git a/docs/signup.md b/docs/signup.md index 0b01338965..1fae477523 100644 --- a/docs/signup.md +++ b/docs/signup.md @@ -8,13 +8,13 @@ This document describes the flow of registration to a homeserver. Examples come * [Sign up flows](#sign-up-flows) * [First step](#first-step) - * [Step 1: entering user name and password](#step-1:-entering-user-name-and-password) + * [Step 1: entering user name and password](#step-1-entering-user-name-and-password) * [If username already exists](#if-username-already-exists) - * [Step 2: entering email](#step-2:-entering-email) - * [Step 2 bis: user enters an email](#step-2-bis:-user-enters-an-email) - * [Step 3: Accepting T&C](#step-3:-accepting-t&c) - * [Step 4: Captcha](#step-4:-captcha) - * [Step 5: MSISDN](#step-5:-msisdn) + * [Step 2: entering email](#step-2-entering-email) + * [Step 2 bis: user enters an email](#step-2-bis-user-enters-an-email) + * [Step 3: Accepting T&C](#step-3-accepting-t&c) + * [Step 4: Captcha](#step-4-captcha) + * [Step 5: MSISDN](#step-5-msisdn) diff --git a/docs/ui-tests.md b/docs/ui-tests.md index f0bcf68ecf..bf5b1a37e2 100644 --- a/docs/ui-tests.md +++ b/docs/ui-tests.md @@ -12,7 +12,7 @@ Currently the test are covering a small set of application flows: -* [Prerequisites:](#prerequisites:) +* [Prerequisites:](#prerequisites) * [Run the tests](#run-the-tests) * [From the source code](#from-the-source-code) * [From command line](#from-command-line) diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40106280.txt b/fastlane/metadata/android/cs-CZ/changelogs/40106280.txt new file mode 100644 index 0000000000..d830a1417e --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Přesměrování uživatele na Element X, když chce vytvořit účty na serveru s podporou MAS. +Úplný seznam změn: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40106300.txt b/fastlane/metadata/android/cs-CZ/changelogs/40106300.txt new file mode 100644 index 0000000000..d17dcc20d4 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Oprava pádu příchozího hovoru na Androidu 14+. +Úplný seznam změn: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/en-US/changelogs/40106320.txt b/fastlane/metadata/android/en-US/changelogs/40106320.txt new file mode 100644 index 0000000000..022db853cf --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40106320.txt @@ -0,0 +1,2 @@ +Main changes in this version: Add action to report room. +Full changelog: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/es-ES/changelogs/40103120.txt b/fastlane/metadata/android/es-ES/changelogs/40103120.txt new file mode 100644 index 0000000000..9d36b62d3e --- /dev/null +++ b/fastlane/metadata/android/es-ES/changelogs/40103120.txt @@ -0,0 +1,2 @@ +Principales cambios en esta versión: mejora del rendimiento y corrección de errores. +Registro de cambios completo: https://github.com/element-hq/element-android/releases/tag/v1.1.1 diff --git a/fastlane/metadata/android/et/changelogs/40106280.txt b/fastlane/metadata/android/et/changelogs/40106280.txt new file mode 100644 index 0000000000..82cf1afbe0 --- /dev/null +++ b/fastlane/metadata/android/et/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Põhilised muutused selles versioonis: kui kasutaja soovib lisada kontot MASi toega serverisse, siis suuname ta Element Xi juurde. +Kogu ingliskeelne muudatuste logi: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/et/changelogs/40106300.txt b/fastlane/metadata/android/et/changelogs/40106300.txt new file mode 100644 index 0000000000..131920c593 --- /dev/null +++ b/fastlane/metadata/android/et/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Põhilised muutused selles versioonis: vastuvõetava kõne kokkujooksmine Androidi versioonis 14 ja uuemas. +Kogu ingliskeelne muudatuste logi: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/fa/changelogs/40106280.txt b/fastlane/metadata/android/fa/changelogs/40106280.txt new file mode 100644 index 0000000000..8e1b11f5a2 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/40106280.txt @@ -0,0 +1,2 @@ +تغییرات عمده در این نگارش: هدایت کاربران به المنت اکس هنگام تلاش برای ساختن حساب روی کارسازی با پشتیبانی از MAS. +گزارش دگرگونی کامل: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/fa/changelogs/40106300.txt b/fastlane/metadata/android/fa/changelogs/40106300.txt new file mode 100644 index 0000000000..c83779027b --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/40106300.txt @@ -0,0 +1,2 @@ +تغییرات عمده در این نگارش: تعمیر فروپاشی تماس ورودی روی اندروید ۱۴+. +گزارش دگرگونی کامل: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/fr-FR/changelogs/40106300.txt b/fastlane/metadata/android/fr-FR/changelogs/40106300.txt new file mode 100644 index 0000000000..108cef0661 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Principaux changements pour cette version : Correction du plantage lors des appels entrants sur Android 14+. +Intégralité des changements : https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/id/changelogs/40106280.txt b/fastlane/metadata/android/id/changelogs/40106280.txt new file mode 100644 index 0000000000..84f05c1a79 --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Perubahan utama dalam versi ini: Alihkan pengguna ke Element X ketika ingin membuat akun di server dengan dukungan MAS. +Catatan perubahan lanjutan: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/id/changelogs/40106300.txt b/fastlane/metadata/android/id/changelogs/40106300.txt new file mode 100644 index 0000000000..2eca870fa8 --- /dev/null +++ b/fastlane/metadata/android/id/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Perubahan utama dalam versi ini: Perbaikan kemogokan panggilan masuk di Android 14+. +Catatan perubahan lanjutan: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sk/changelogs/40106260.txt b/fastlane/metadata/android/sk/changelogs/40106260.txt new file mode 100644 index 0000000000..18d36fe1f7 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/40106260.txt @@ -0,0 +1,2 @@ +Hlavné zmeny v tejto verzii: aktualizácia crypto sdk. +Úplný zoznam zmien: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sk/changelogs/40106280.txt b/fastlane/metadata/android/sk/changelogs/40106280.txt new file mode 100644 index 0000000000..f3620f3a05 --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Hlavné zmeny v tejto verzii: Presmerovanie používateľa na Element X, keď chce vytvoriť účty na serveri s podporou MAS. +Úplný zoznam zmien: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sk/changelogs/40106300.txt b/fastlane/metadata/android/sk/changelogs/40106300.txt new file mode 100644 index 0000000000..174b03accf --- /dev/null +++ b/fastlane/metadata/android/sk/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Hlavné zmeny v tejto verzii: Oprava pádu prichádzajúceho hovoru v systéme Android 14+. +Úplný zoznam zmien: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sq/changelogs/40106280.txt b/fastlane/metadata/android/sq/changelogs/40106280.txt new file mode 100644 index 0000000000..09d3e6d03b --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Ridrejto përdoruesit te Element X, kur duan të krijojnë llogari në shërbyes që mbulojnë MAS. +Regjistër i plotë ndryshimesh: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sv-SE/changelogs/40106280.txt b/fastlane/metadata/android/sv-SE/changelogs/40106280.txt new file mode 100644 index 0000000000..bda6849891 --- /dev/null +++ b/fastlane/metadata/android/sv-SE/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Huvudsakliga ändringar i den här versionen: Omdirigera användare till Element X när de vill skapa konton på server med MAS-stöd. +Full ändringslogg: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/sv-SE/changelogs/40106300.txt b/fastlane/metadata/android/sv-SE/changelogs/40106300.txt new file mode 100644 index 0000000000..7249c0ccae --- /dev/null +++ b/fastlane/metadata/android/sv-SE/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Huvudsakliga ändringar i den här versionen: Fixa crash vid inkommande samtal på Android 14+ +Full ändringslogg: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/uk/changelogs/40106280.txt b/fastlane/metadata/android/uk/changelogs/40106280.txt new file mode 100644 index 0000000000..ac33502e85 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/40106280.txt @@ -0,0 +1,2 @@ +Основні зміни в цій версії: Переспрямування користувачів до Element X, коли вони хочуть створити облікові записи на сервері з підтримкою MAS. +Список усіх змін: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/uk/changelogs/40106300.txt b/fastlane/metadata/android/uk/changelogs/40106300.txt new file mode 100644 index 0000000000..6d559e5525 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/40106300.txt @@ -0,0 +1,2 @@ +Основні зміни в цій версії: Виправлено збій вхідних викликів на Android 14+. +Перелік усіх змін: https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/zh-TW/changelogs/40106220.txt b/fastlane/metadata/android/zh-TW/changelogs/40106220.txt new file mode 100644 index 0000000000..ee25082a4b --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40106220.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:crypto SDK 更新。 +完整的變更紀錄:https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/zh-TW/changelogs/40106240.txt b/fastlane/metadata/android/zh-TW/changelogs/40106240.txt new file mode 100644 index 0000000000..a509b096cc --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40106240.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:通知使用者不支援 Element Call。 +完整的變更紀錄:https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/zh-TW/changelogs/40106260.txt b/fastlane/metadata/android/zh-TW/changelogs/40106260.txt new file mode 100644 index 0000000000..ee25082a4b --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40106260.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:crypto SDK 更新。 +完整的變更紀錄:https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/zh-TW/changelogs/40106280.txt b/fastlane/metadata/android/zh-TW/changelogs/40106280.txt new file mode 100644 index 0000000000..ed52bbfe02 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40106280.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:當使用者想要在有 MAS 支援的伺服器上建立帳號時,將使用者重新導向到 Element X。 +完整的變更紀錄:https://github.com/element-hq/element-android/releases diff --git a/fastlane/metadata/android/zh-TW/changelogs/40106300.txt b/fastlane/metadata/android/zh-TW/changelogs/40106300.txt new file mode 100644 index 0000000000..bc02971682 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40106300.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:修復 Android 14 或更新版本上的來電當機問題。 +完整的變更紀錄:https://github.com/element-hq/element-android/releases diff --git a/library/ui-strings/src/main/res/values-cs/strings.xml b/library/ui-strings/src/main/res/values-cs/strings.xml index f17e0bec1e..488b3017e5 100644 --- a/library/ui-strings/src/main/res/values-cs/strings.xml +++ b/library/ui-strings/src/main/res/values-cs/strings.xml @@ -3035,4 +3035,8 @@ Nepodporované volání Nepodporované volání. Pro připojení k tomuto volání je nutná nová aplikace Element X. Mikrofon se používá + Stáhněte si %1$s a používejte %2$s se svým účetem nebo si vyberte jiný domovský server. + Stáhnout %1$s + Pomocí této aplikace již nelze vytvořit účet na %1$s + Rychlejší, bezpečnější a s výkonnými nástroji pro spolupráci. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-et/strings.xml b/library/ui-strings/src/main/res/values-et/strings.xml index d00895765e..80fd7474c4 100644 --- a/library/ui-strings/src/main/res/values-et/strings.xml +++ b/library/ui-strings/src/main/res/values-et/strings.xml @@ -2975,4 +2975,10 @@ Mikrofon on kasutusel See kõne pole toetatud See kõne pole toetatud. Kõnega liitumiseks palun kasuta uut Element X rakendust. + Laadi alla %1$s + Kiirem, turvalisem ja sisaldab palju võimsaid ühistöövahendeid. + Selle rakendusega enam ei saa luua kasutajakontot teenuses %1$s + %2$s teenuse kasutamiseks võta kasutusele %1$s või vali mõni muu koduserver. + Teata jututoast + Jututoast teatamine õnnestus. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-fa/strings.xml b/library/ui-strings/src/main/res/values-fa/strings.xml index 8ba6d2a2ec..f98270dd6c 100644 --- a/library/ui-strings/src/main/res/values-fa/strings.xml +++ b/library/ui-strings/src/main/res/values-fa/strings.xml @@ -2975,4 +2975,10 @@ تماس پشتیبانی نشده. برای پیوستن به این تماس نیاز به کارهٔ جدید المنت اکس است. صدابَر در حال استفاده تماس پشتیبانی نشده + برای استفاده از %2$s برای حسابتان %1$s را گرفته یا کارساز خانگی دیگری را برگزینید. + بارگیری %1$s + دیگر نمی‌توانید با این کاره حسابی روی %1$s بسازید + سریع‌تر، امن‌تر و دارای ابزارهای همکاری قدرتمند. + گزارش اتاق + اتاق با موفّقیت گزارش شد. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-fr/strings.xml b/library/ui-strings/src/main/res/values-fr/strings.xml index 4c0aa90827..bc51ac5549 100644 --- a/library/ui-strings/src/main/res/values-fr/strings.xml +++ b/library/ui-strings/src/main/res/values-fr/strings.xml @@ -2977,4 +2977,8 @@ Appel non pris en charge Appel non pris en charge. Microphone en service + Vous ne pouvez plus créer de compte sur %1$s avec cette application + Téléchargez %1$s pour utiliser %2$s avec votre compte, ou choisissez un autre serveur d’accueil. + Télécharger %1$s + Plus rapide, plus sécurisé et fourni avec des outils de collaboration efficaces. diff --git a/library/ui-strings/src/main/res/values-in/strings.xml b/library/ui-strings/src/main/res/values-in/strings.xml index 9426589abe..ba3667b66c 100644 --- a/library/ui-strings/src/main/res/values-in/strings.xml +++ b/library/ui-strings/src/main/res/values-in/strings.xml @@ -2917,4 +2917,8 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan. Mikrofon digunakan Panggilan tidak didukung Panggilan tidak didukung. Aplikasi Element X yang baru diperlukan untuk bergabung ke panggilan ini. + Unduh %1$s + Lebih cepat, lebih aman, dan lengkap dengan peralatan kolaborasi yang lebih berdaya. + Anda sudah tidak bisa lagi membuat akun dengan %1$s menggunakan aplikasi ini + Unduh %1$s untuk menggunakan %2$s untuk Akun Anda atau pilih homeserver yang lain. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-sk/strings.xml b/library/ui-strings/src/main/res/values-sk/strings.xml index f3b5ef1dfa..6bb12dde1d 100644 --- a/library/ui-strings/src/main/res/values-sk/strings.xml +++ b/library/ui-strings/src/main/res/values-sk/strings.xml @@ -3035,4 +3035,8 @@ Mikrofón v prevádzke Nepodporovaný hovor Nepodporovaný hovor. Na pripojenie k tomuto hovoru je potrebná nová aplikácia Element X. + Stiahnite si %1$s a používajte %2$s pre svoje konto alebo si vyberte iný domovský server. + Stiahnuť %1$s + Pomocou tejto aplikácie si už nemôžete vytvoriť účet %1$s + Rýchlejší, bezpečnejší a vybavený výkonnými nástrojmi na spoluprácu. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-sq/strings.xml b/library/ui-strings/src/main/res/values-sq/strings.xml index 0c7f74b2ff..b85c60d37e 100644 --- a/library/ui-strings/src/main/res/values-sq/strings.xml +++ b/library/ui-strings/src/main/res/values-sq/strings.xml @@ -2963,4 +2963,10 @@ Mikrofon në përdorim Thirrje që s’mbulohet. Për të marrë pjesë në këtë thirrje lypset aplikacioni i ri Element X. Thirrje që s’mbulohet + Shkarkoni %1$s, që të përdorni %2$s për llogarinë tuaj, ose zgjidhni një tjetër shërbyes Home. + Shkarko %1$s + S’mund të krijoni më një llogari te %1$s duke përdorur këtë aplikacion + I shpejtë, më i siguruar dhe plot mjete të fuqishme bashkëpunimi. + Raportojeni Dhomën + Dhoma u raportua me sukses. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-sv/strings.xml b/library/ui-strings/src/main/res/values-sv/strings.xml index 6358aedf7a..6352c01e76 100644 --- a/library/ui-strings/src/main/res/values-sv/strings.xml +++ b/library/ui-strings/src/main/res/values-sv/strings.xml @@ -2975,4 +2975,8 @@ Mikrofon används Samtal stöds inte Samtal stöds inte. Nya Element X-appen behövs för att gå med i det här samtalet. + Ladda ner %1$s + Snabbare, säkrare och fullproppad med kraftfulla samarbetsverktyg. + Du kan inte längre skapa ett konto med %1$s med den här appen + Ladda ner %1$s för att använda %2$s för ditt konto eller välj en annan hemserver. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-uk/strings.xml b/library/ui-strings/src/main/res/values-uk/strings.xml index 839251523f..f5cad9e016 100644 --- a/library/ui-strings/src/main/res/values-uk/strings.xml +++ b/library/ui-strings/src/main/res/values-uk/strings.xml @@ -3095,4 +3095,8 @@ Мікрофон використовується Непідтримуваний виклик Непідтримуваний виклик. Потрібен застосунок Element X, щоб приєднатися до цього виклику. + Ви більше не можете створити обліковий запис з %1$s за допомогою цього застосунку + Завантажте %1$s, щоб використовувати %2$s для свого облікового запису або виберіть інший домашній сервер. + Завантажити %1$s + Швидший, безпечніший і з потужними інструментами для спільної роботи. \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-zh-rCN/strings.xml b/library/ui-strings/src/main/res/values-zh-rCN/strings.xml index 6d2752b2e5..61f5a8ead2 100644 --- a/library/ui-strings/src/main/res/values-zh-rCN/strings.xml +++ b/library/ui-strings/src/main/res/values-zh-rCN/strings.xml @@ -1889,7 +1889,7 @@ 暂且略过 加入我的空间 %1$s %2$s 他们不会成为 %s 的一部分 - 刚到此房间 + 仅到此房间 他们将可以探索 %s 邀请至 %s 共享链接 @@ -2915,4 +2915,8 @@ 麦克风正在使用 不支持的通话 不支持的通话。需要新的Element X应用来加入此通话。 + 下载%1$s + 更快、更安全,并配备了强大的协作工具。 + 下载%1$s以将%2$s用于您的帐户或选择不同的主服务器。 + 您无法再使用此应用程序创建%1$s的帐户 \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values-zh-rTW/strings.xml b/library/ui-strings/src/main/res/values-zh-rTW/strings.xml index 79257f87ff..f1b00f2613 100644 --- a/library/ui-strings/src/main/res/values-zh-rTW/strings.xml +++ b/library/ui-strings/src/main/res/values-zh-rTW/strings.xml @@ -2912,4 +2912,13 @@ \n \n若您不想要看到來自此使用者的任何內容,您可以忽略他們以隱藏他們的訊息。 回報使用者 + 下載 %1$s + 麥克風使用中 + 不支援的通話。需要新的 Element X 應用程式才能加入此通話。 + 不支援的通話 + 您無法再使用此應用程式建立 %1$s 的帳號 + 下載 %1$s 以將 %2$s 用於您的帳號或選擇其他家伺服器。 + 更快、更安全,並配備了強大的協作工具。 + 回報聊天室 + 已成功回報聊天室。 \ No newline at end of file diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml index 5acc316172..5679ddf2f4 100644 --- a/library/ui-strings/src/main/res/values/strings.xml +++ b/library/ui-strings/src/main/res/values/strings.xml @@ -2370,6 +2370,8 @@ Poll history Uploads + Report Room + The room has been successfully reported. Leave Room Leave "Leaving the room…" diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 738247152d..60f755a395 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -62,7 +62,7 @@ android { // that the app's state is completely cleared between tests. testInstrumentationRunnerArguments clearPackageData: 'true' - buildConfigField "String", "SDK_VERSION", "\"1.6.30\"" + buildConfigField "String", "SDK_VERSION", "\"1.6.32\"" buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\"" buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\"" diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt index a444e2346e..c3ee5d75c1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt @@ -26,4 +26,9 @@ interface ReportingService { * Ref: https://matrix.org/docs/spec/client_server/latest#post-matrix-client-r0-rooms-roomid-report-eventid */ suspend fun reportContent(eventId: String, score: Int, reason: String) + + /** + * Report a room. + */ + suspend fun reportRoom(reason: String) } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index aa4bdb1dd4..33fa1d8ce0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -36,6 +36,7 @@ import org.matrix.android.sdk.internal.session.room.read.ReadBody import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse import org.matrix.android.sdk.internal.session.room.relation.threads.ThreadSummariesResponse import org.matrix.android.sdk.internal.session.room.reporting.ReportContentBody +import org.matrix.android.sdk.internal.session.room.reporting.ReportRoomBody import org.matrix.android.sdk.internal.session.room.send.SendResponse import org.matrix.android.sdk.internal.session.room.send.model.EventRedactBody import org.matrix.android.sdk.internal.session.room.tags.TagBody @@ -375,6 +376,18 @@ internal interface RoomAPI { @Body body: ReportContentBody, ) + /** + * Reports a room as inappropriate to the server, which may then notify the appropriate people. + * + * @param roomId the room id + * @param body body containing the reason + */ + @POST(NetworkConstants.URI_API_PREFIX_PATH_V3 + "rooms/{roomId}/report") + suspend fun reportRoom( + @Path("roomId") roomId: String, + @Body body: ReportRoomBody, + ) + /** * Get a list of aliases maintained by the local server for the given room. * Ref: https://matrix.org/docs/spec/client_server/r0.6.1#get-matrix-client-r0-rooms-roomid-aliases diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index edea32523d..4d77ef5a7d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -115,7 +115,9 @@ import org.matrix.android.sdk.internal.session.room.relation.threads.DefaultFetc import org.matrix.android.sdk.internal.session.room.relation.threads.FetchThreadSummariesTask import org.matrix.android.sdk.internal.session.room.relation.threads.FetchThreadTimelineTask import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportContentTask +import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportRoomTask import org.matrix.android.sdk.internal.session.room.reporting.ReportContentTask +import org.matrix.android.sdk.internal.session.room.reporting.ReportRoomTask import org.matrix.android.sdk.internal.session.room.state.DefaultSendStateTask import org.matrix.android.sdk.internal.session.room.state.SendStateTask import org.matrix.android.sdk.internal.session.room.tags.AddTagToRoomTask @@ -282,6 +284,9 @@ internal abstract class RoomModule { @Binds abstract fun bindReportContentTask(task: DefaultReportContentTask): ReportContentTask + @Binds + abstract fun bindReportRoomTask(task: DefaultReportRoomTask): ReportRoomTask + @Binds abstract fun bindGetContextOfEventTask(task: DefaultGetContextOfEventTask): GetContextOfEventTask diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt index 1e32bf5e16..ba8a6cb453 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt @@ -23,7 +23,8 @@ import org.matrix.android.sdk.api.session.room.reporting.ReportingService internal class DefaultReportingService @AssistedInject constructor( @Assisted private val roomId: String, - private val reportContentTask: ReportContentTask + private val reportContentTask: ReportContentTask, + private val reportRoomTask: ReportRoomTask, ) : ReportingService { @AssistedFactory @@ -35,4 +36,9 @@ internal class DefaultReportingService @AssistedInject constructor( val params = ReportContentTask.Params(roomId, eventId, score, reason) reportContentTask.execute(params) } + + override suspend fun reportRoom(reason: String) { + val params = ReportRoomTask.Params(roomId, reason) + reportRoomTask.execute(params) + } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomBody.kt new file mode 100644 index 0000000000..8e21132063 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomBody.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2025 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.internal.session.room.reporting + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class ReportRoomBody( + /** + * Required. The reason the content is being reported. May be blank. + */ + @Json(name = "reason") val reason: String +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomTask.kt new file mode 100644 index 0000000000..54b0efd207 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportRoomTask.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2025 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.internal.session.room.reporting + +import org.matrix.android.sdk.internal.network.GlobalErrorReceiver +import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.session.room.RoomAPI +import org.matrix.android.sdk.internal.task.Task +import javax.inject.Inject + +internal interface ReportRoomTask : Task { + data class Params( + val roomId: String, + val reason: String, + ) +} + +internal class DefaultReportRoomTask @Inject constructor( + private val roomAPI: RoomAPI, + private val globalErrorReceiver: GlobalErrorReceiver +) : ReportRoomTask { + + override suspend fun execute(params: ReportRoomTask.Params) { + return executeRequest(globalErrorReceiver) { + roomAPI.reportRoom(params.roomId, ReportRoomBody(params.reason)) + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt index 5830468fcf..ce8131d94b 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthLoginFragment.kt @@ -7,6 +7,7 @@ package im.vector.app.features.onboarding.ftueauth +import android.annotation.SuppressLint import android.os.Build import android.os.Bundle import android.view.LayoutInflater @@ -14,6 +15,7 @@ import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import androidx.autofill.HintConstants +import androidx.core.content.ContextCompat import androidx.core.text.isDigitsOnly import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope @@ -23,7 +25,6 @@ import dagger.hilt.android.AndroidEntryPoint import im.vector.app.R import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.hidePassword -import im.vector.app.core.extensions.setLeftDrawable import im.vector.app.core.extensions.toReducedUrl import im.vector.app.core.resources.BuildMeta import im.vector.app.core.utils.openUrlInExternalBrowser @@ -355,6 +356,8 @@ class FtueAuthLoginFragment : private inner class Tchap { + // TCHAP Add SuppressLint to fix a false positive + @SuppressLint("StringFormatInvalid") fun setupUi(state: OnboardingViewState) { this@FtueAuthLoginFragment.setupUi(state) // call "super" method @@ -364,7 +367,7 @@ class FtueAuthLoginFragment : views.tchapPasswordConfirmationFieldTil.isVisible = isSignUpMode views.loginSocialLoginContainer.isVisible = isSignUpMode && vectorFeatures.tchapIsSSOEnabled() - when(state.signMode) { + when (state.signMode) { SignMode.TchapSignUp -> { views.loginSSOSubmit.text = getString(CommonStrings.login_signin_sso, TCHAP_SSO_PROVIDER) views.loginSSOSubmit.debouncedClicks { @@ -376,7 +379,9 @@ class FtueAuthLoginFragment : } } SignMode.TchapSignInWithSSO -> { - views.loginSubmit.setLeftDrawable(im.vector.lib.ui.styles.R.drawable.ic_tchap_proconnect) + views.loginSubmit.setCompoundDrawablesWithIntrinsicBounds( + ContextCompat.getDrawable(requireContext(), im.vector.lib.ui.styles.R.drawable.ic_tchap_proconnect), null, null, null + ) views.loginSSOHelp.text = getString(CommonStrings.tchap_connection_sso_help, TCHAP_SSO_PROVIDER) views.loginSSODescription.text = getString(CommonStrings.tchap_connection_sso_description, TCHAP_SSO_PROVIDER) views.loginSSOHelp.debouncedClicks { openUrlInExternalBrowser(requireContext(), TCHAP_SSO_URL) } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashFragment.kt index a6c5158a0e..9b39d53ad6 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthSplashFragment.kt @@ -16,6 +16,7 @@ import android.text.style.StyleSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.core.content.ContextCompat import androidx.core.view.isVisible import dagger.hilt.android.AndroidEntryPoint import im.vector.app.core.resources.BuildMeta @@ -57,6 +58,9 @@ class FtueAuthSplashFragment : text = spannable isVisible = isAlreadyHaveAccountEnabled && vectorFeatures.tchapIsSSOEnabled() + setCompoundDrawablesWithIntrinsicBounds( + ContextCompat.getDrawable(requireContext(), im.vector.lib.ui.styles.R.drawable.ic_tchap_proconnect), null, null, null + ) debouncedClicks { alreadyHaveAnAccountWithSSO() } } views.loginSplashSSOHelp.apply { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt index 9ac76f6d1e..b0ced12706 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt @@ -17,6 +17,8 @@ sealed class RoomProfileAction : VectorViewModelAction { object ShareRoomProfile : RoomProfileAction() object CreateShortcut : RoomProfileAction() object RestoreEncryptionState : RoomProfileAction() + // TCHAP force to false to deactivate "Never send messages to unverified devices in room" // data class SetEncryptToVerifiedDeviceOnly(val enabled: Boolean) : RoomProfileAction() + data class ReportRoom(val reason: String) : RoomProfileAction() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 44f819b1fc..22378b10c1 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -53,6 +53,7 @@ class RoomProfileController @Inject constructor( fun onUploadsClicked() fun createShortcut() fun onSettingsClicked() + fun onReportRoomClicked() fun onLeaveRoomClicked(isLastAdmin: Boolean) fun onRoomAliasesClicked() fun onRoomPermissionsClicked() @@ -293,6 +294,15 @@ class RoomProfileController @Inject constructor( action = { callback?.createShortcut() } ) } + + // TCHAP Hidden in Tchap +// buildProfileAction( +// id = "Report", +// title = stringProvider.getString(CommonStrings.room_profile_section_more_report), +// icon = R.drawable.ic_report_spam, +// editable = false, +// action = { callback?.onReportRoomClicked() } +// ) buildProfileAction( id = "leave", title = stringProvider.getString( diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 609ffea0bc..241269e1f2 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -32,6 +32,7 @@ import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.platform.VectorMenuProvider import im.vector.app.core.utils.copyToClipboard import im.vector.app.core.utils.startSharePlainTextIntent +import im.vector.app.databinding.DialogReportContentBinding import im.vector.app.databinding.FragmentMatrixProfileBinding import im.vector.app.databinding.ViewStubRoomProfileHeaderBinding import im.vector.app.features.analytics.plan.Interaction @@ -122,6 +123,7 @@ class RoomProfileFragment : is RoomProfileViewEvents.ShareRoomProfile -> onShareRoomProfile(it.permalink) is RoomProfileViewEvents.OnShortcutReady -> addShortcut(it) RoomProfileViewEvents.DismissLoading -> dismissLoadingDialog() + is RoomProfileViewEvents.Success -> dismissSuccessDialog(it.message) } } roomListQuickActionsSharedActionViewModel @@ -132,6 +134,17 @@ class RoomProfileFragment : setupLongClicks() } + private fun dismissSuccessDialog(message: CharSequence) { + MaterialAlertDialogBuilder( + requireActivity(), + im.vector.lib.ui.styles.R.style.ThemeOverlay_Vector_MaterialAlertDialog_NegativeDestructive + ) + .setTitle(CommonStrings.room_profile_section_more_report) + .setMessage(message) + .setPositiveButton(CommonStrings.ok, null) + .show() + } + private fun setupWaitingView() { views.waitingView.waitingStatusText.setText(CommonStrings.please_wait) views.waitingView.waitingStatusText.isVisible = true @@ -288,6 +301,26 @@ class RoomProfileFragment : ShortcutManagerCompat.requestPinShortcut(requireContext(), onShortcutReady.shortcutInfo, null) } + override fun onReportRoomClicked() { + promptReasonToReportRoom() + } + + private fun promptReasonToReportRoom() { + val inflater = requireActivity().layoutInflater + val layout = inflater.inflate(R.layout.dialog_report_content, null) + val views = DialogReportContentBinding.bind(layout) + + MaterialAlertDialogBuilder(requireActivity()) + .setTitle(CommonStrings.room_profile_section_more_report) + .setView(layout) + .setPositiveButton(CommonStrings.report_content_custom_submit) { _, _ -> + val reason = views.dialogReportContentInput.text.toString() + roomProfileViewModel.handle(RoomProfileAction.ReportRoom(reason)) + } + .setNegativeButton(CommonStrings.action_cancel, null) + .show() + } + override fun onLeaveRoomClicked(isLastAdmin: Boolean) { val isPublicRoom = roomProfileViewModel.isPublicRoom() val message = buildString { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt index 12a0b327d2..1b12085663 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt @@ -17,6 +17,7 @@ sealed class RoomProfileViewEvents : VectorViewEvents { data class Loading(val message: CharSequence? = null) : RoomProfileViewEvents() object DismissLoading : RoomProfileViewEvents() data class Failure(val throwable: Throwable) : RoomProfileViewEvents() + data class Success(val message: CharSequence) : RoomProfileViewEvents() data class ShareRoomProfile(val permalink: String) : RoomProfileViewEvents() data class OnShortcutReady(val shortcutInfo: ShortcutInfoCompat) : RoomProfileViewEvents() diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt index 35945132b1..7e2b468781 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt @@ -210,6 +210,26 @@ class RoomProfileViewModel @AssistedInject constructor( RoomProfileAction.RestoreEncryptionState -> restoreEncryptionState() // TCHAP force to false to deactivate "Never send messages to unverified devices in room" // is RoomProfileAction.SetEncryptToVerifiedDeviceOnly -> setEncryptToVerifiedDeviceOnly(action.enabled) + is RoomProfileAction.ReportRoom -> handleReportRoom(action.reason) + } + } + + private fun handleReportRoom(reason: String) { + _viewEvents.post(RoomProfileViewEvents.Loading()) + session.coroutineScope.launch { + try { + room.reportingService().reportRoom(reason = reason) + _viewEvents.post( + RoomProfileViewEvents.Success( + stringProvider.getString(CommonStrings.room_profile_section_more_report_success_content) + ) + ) + } catch (failure: Throwable) { + Timber.e(failure, "Failed to report room ${room.roomId}") + _viewEvents.post(RoomProfileViewEvents.Failure(failure)) + } finally { + _viewEvents.post(RoomProfileViewEvents.DismissLoading) + } } } diff --git a/vector/src/main/res/layout/fragment_login.xml b/vector/src/main/res/layout/fragment_login.xml index 600a121391..bef7929520 100644 --- a/vector/src/main/res/layout/fragment_login.xml +++ b/vector/src/main/res/layout/fragment_login.xml @@ -57,11 +57,11 @@