diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 1c0491fda4..933c442501 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -7,10 +7,8 @@ on:
# Enrich gradle.properties for CI/CD
env:
- CI_GRADLE_ARG_PROPERTIES: >
- -Porg.gradle.jvmargs=-Xmx4g
- -Porg.gradle.parallel=false
- --no-daemon
+ GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
+ CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
jobs:
debug:
@@ -36,7 +34,7 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Assemble ${{ matrix.target }} debug apk
- run: ./gradlew assemble${{ matrix.target }}Debug $CI_GRADLE_ARG_PROPERTIES --stacktrace
+ run: ./gradlew assemble${{ matrix.target }}Debug $CI_GRADLE_ARG_PROPERTIES
- name: Upload ${{ matrix.target }} debug APKs
uses: actions/upload-artifact@v3
with:
@@ -61,7 +59,7 @@ jobs:
restore-keys: |
${{ runner.os }}-gradle-
- name: Assemble GPlay unsigned apk
- run: ./gradlew clean assembleGplayRelease $CI_GRADLE_ARG_PROPERTIES --stacktrace
+ run: ./gradlew clean assembleGplayRelease $CI_GRADLE_ARG_PROPERTIES
- name: Upload Gplay unsigned APKs
uses: actions/upload-artifact@v3
with:
diff --git a/.github/workflows/danger.yml b/.github/workflows/danger.yml
new file mode 100644
index 0000000000..a1d754b4de
--- /dev/null
+++ b/.github/workflows/danger.yml
@@ -0,0 +1,18 @@
+name: Danger CI
+
+on: [pull_request]
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ name: Danger
+ steps:
+ - uses: actions/checkout@v3
+ - run: |
+ npm install --save-dev @babel/plugin-transform-flow-strip-types
+ - name: Danger
+ uses: danger/danger-js@11.1.1
+ with:
+ args: "--dangerfile tools/danger/dangerfile.js"
+ env:
+ DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }}
diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml
index 4e701faa44..7b68c0077d 100644
--- a/.github/workflows/gradle-wrapper-validation.yml
+++ b/.github/workflows/gradle-wrapper-validation.yml
@@ -1,5 +1,8 @@
name: "Validate Gradle Wrapper"
-on: [push, pull_request]
+on:
+ pull_request: { }
+ push:
+ branches: [ main, develop ]
jobs:
validation:
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 36fd225674..51c1b32e82 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -6,10 +6,8 @@ on:
- cron: "0 4 * * *"
env:
- CI_GRADLE_ARG_PROPERTIES: >
- -Porg.gradle.jvmargs=-Xmx4g
- -Porg.gradle.parallel=false
- --no-daemon
+ GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
+ CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
jobs:
nightly:
@@ -40,7 +38,7 @@ jobs:
yes n | towncrier build --version nightly
- name: Build and upload Gplay Nightly APK
run: |
- ./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES --stacktrace
+ ./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES
env:
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
diff --git a/.github/workflows/post-pr.yml b/.github/workflows/post-pr.yml
index a7f1d6f204..5cde95e625 100644
--- a/.github/workflows/post-pr.yml
+++ b/.github/workflows/post-pr.yml
@@ -10,10 +10,8 @@ on:
# Enrich gradle.properties for CI/CD
env:
- CI_GRADLE_ARG_PROPERTIES: >
- -Porg.gradle.jvmargs=-Xmx4g
- -Porg.gradle.parallel=false
- --no-daemon
+ GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
+ CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
jobs:
diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml
index 8bc5efe860..6e5e2e4d67 100644
--- a/.github/workflows/quality.yml
+++ b/.github/workflows/quality.yml
@@ -7,10 +7,8 @@ on:
# Enrich gradle.properties for CI/CD
env:
- CI_GRADLE_ARG_PROPERTIES: >
- -Porg.gradle.jvmargs=-Xmx4g
- -Porg.gradle.parallel=false
- --no-daemon
+ GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
+ CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
jobs:
check:
@@ -29,80 +27,50 @@ jobs:
- uses: actions/checkout@v3
- name: Run knit
run: |
- ./gradlew knit
+ ./gradlew knitCheck
- # ktlint for all the modules
- ktlint:
- name: Kotlin Linter
+ # Check the project: ktlint, detekt, lint
+ lint:
+ name: Android Linter
runs-on: ubuntu-latest
# Allow all jobs on main and develop. Just one per PR.
concurrency:
- group: ${{ github.ref == 'refs/heads/main' && format('ktlint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('ktlint-develop-{0}', github.sha) || format('ktlint-{0}', github.ref) }}
+ group: ${{ github.ref == 'refs/heads/main' && format('lint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('lint-develop-{0}', github.sha) || format('lint-{0}', github.ref) }}
cancel-in-progress: true
steps:
- uses: actions/checkout@v3
- name: Run ktlint
run: |
./gradlew ktlintCheck --continue
+ - name: Run detekt
+ if: always()
+ run: |
+ ./gradlew detekt $CI_GRADLE_ARG_PROPERTIES
+ - name: Run lint
+ # Not always, if ktlint or detekt fail, avoid running the long lint check.
+ run: |
+ ./gradlew lintGplayRelease $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew lintFdroidRelease $CI_GRADLE_ARG_PROPERTIES
- name: Upload reports
if: always()
uses: actions/upload-artifact@v3
with:
- name: ktlinting-report
+ name: linting-report
path: |
- */build/reports/ktlint/ktlint*/ktlint*.txt
- - name: Handle Results
+ */build/reports/**/*.*
+ - name: Prepare Danger
if: always()
- id: ktlint-results
run: |
- results="$(cat */*/build/reports/ktlint/ktlint*/ktlint*.txt */build/reports/ktlint/ktlint*/ktlint*.txt | sed -r "s/\x1B\[([0-9]{1,3}(;[0-9]{1,2})?)?[mGK]//g")"
- if [ -z "$results" ]; then
- echo "::set-output name=add_comment::false"
- else
- body="👎\`Failed${results}\`"
- body="${body//'%'/'%25'}"
- body="${body//$'\n'/'%0A'}"
- body="${body//$'\r'/'%0D'}"
- body="$( echo $body | sed 's/\/home\/runner\/work\/element-android\/element-android\//\` \`/g')"
- body="$( echo $body | sed 's/\/src\/main\/java\// 🔸 /g')"
- body="$( echo $body | sed 's/im\/vector\/app\///g')"
- body="$( echo $body | sed 's/im\/vector\/lib\/attachmentviewer\///g')"
- body="$( echo $body | sed 's/im\/vector\/lib\/multipicker\///g')"
- body="$( echo $body | sed 's/im\/vector\/lib\///g')"
- body="$( echo $body | sed 's/org\/matrix\/android\/sdk\///g')"
- body="$( echo $body | sed 's/\/src\/androidTest\/java\// 🔸 /g')"
- echo "::set-output name=add_comment::true"
- echo "::set-output name=body::$body"
- fi
- - name: Find Comment
- if: always() && github.event_name == 'pull_request'
- uses: peter-evans/find-comment@v2
- id: fc
+ npm install --save-dev @babel/core
+ npm install --save-dev @babel/plugin-transform-flow-strip-types
+ yarn add danger-plugin-lint-report --dev
+ - name: Danger lint
+ if: always()
+ uses: danger/danger-js@11.1.1
with:
- issue-number: ${{ github.event.pull_request.number }}
- comment-author: 'github-actions[bot]'
- body-includes: Ktlint Results
- - name: Add comment if needed
- if: always() && github.event_name == 'pull_request' && steps.ktlint-results.outputs.add_comment == 'true'
- uses: peter-evans/create-or-update-comment@v2
- with:
- comment-id: ${{ steps.fc.outputs.comment-id }}
- issue-number: ${{ github.event.pull_request.number }}
- body: |
- ### Ktlint Results
-
- ${{ steps.ktlint-results.outputs.body }}
- edit-mode: replace
- - name: Delete comment if needed
- if: always() && github.event_name == 'pull_request' && steps.fc.outputs.comment-id != '' && steps.ktlint-results.outputs.add_comment == 'false'
- uses: actions/github-script@v3
- with:
- script: |
- github.issues.deleteComment({
- owner: context.repo.owner,
- repo: context.repo.repo,
- comment_id: ${{ steps.fc.outputs.comment-id }}
- })
+ args: "--dangerfile tools/danger/dangerfile-lint.js"
+ env:
+ DANGER_GITHUB_API_TOKEN: ${{ secrets.DANGER_GITHUB_API_TOKEN }}
# Gradle dependency analysis using https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin
dependency-analysis:
@@ -122,107 +90,3 @@ jobs:
with:
name: dependency-analysis
path: build/reports/dependency-check-report.html
-
- # Lint for main module
- android-lint:
- name: Android Linter
- runs-on: ubuntu-latest
- # Allow all jobs on main and develop. Just one per PR.
- concurrency:
- group: ${{ github.ref == 'refs/heads/main' && format('android-lint-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('android-lint-develop-{0}', github.sha) || format('android-lint-{0}', github.ref) }}
- cancel-in-progress: true
- steps:
- - uses: actions/checkout@v3
- - uses: actions/cache@v3
- with:
- path: |
- ~/.gradle/caches
- ~/.gradle/wrapper
- key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
- restore-keys: |
- ${{ runner.os }}-gradle-
- - name: Lint analysis
- run: ./gradlew clean :vector:lint --stacktrace $CI_GRADLE_ARG_PROPERTIES
- - name: Upload reports
- if: always()
- uses: actions/upload-artifact@v3
- with:
- name: lint-report
- path: |
- vector/build/reports/*.*
-
- # Lint for Gplay and Fdroid release APK
- apk-lint:
- name: Lint APK (${{ matrix.target }})
- runs-on: ubuntu-latest
- if: github.ref != 'refs/heads/main'
- strategy:
- fail-fast: false
- matrix:
- target: [ Gplay, Fdroid ]
- # Allow all jobs on develop. Just one per PR.
- concurrency:
- group: ${{ github.ref == 'refs/heads/develop' && format('apk-lint-develop-{0}-{1}', matrix.target, github.sha) || format('apk-lint-{0}-{1}', matrix.target, github.ref) }}
- cancel-in-progress: true
- steps:
- - uses: actions/checkout@v3
- - uses: actions/cache@v3
- with:
- path: |
- ~/.gradle/caches
- ~/.gradle/wrapper
- key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
- restore-keys: |
- ${{ runner.os }}-gradle-
- - name: Lint ${{ matrix.target }} release
- run: ./gradlew clean lint${{ matrix.target }}Release --stacktrace $CI_GRADLE_ARG_PROPERTIES
- - name: Upload ${{ matrix.target }} linting report
- if: always()
- uses: actions/upload-artifact@v3
- with:
- name: release-lint-report-${{ matrix.target }}
- path: |
- vector/build/reports/*.*
-
- detekt:
- name: Detekt Analysis
- runs-on: ubuntu-latest
- # Allow all jobs on main and develop. Just one per PR.
- concurrency:
- group: ${{ github.ref == 'refs/heads/main' && format('detekt-main-{0}', github.sha) || github.ref == 'refs/heads/develop' && format('detekt-develop-{0}', github.sha) || format('detekt-{0}', github.ref) }}
- cancel-in-progress: true
- steps:
- - uses: actions/checkout@v3
- - name: Run detekt
- run: |
- ./gradlew detekt $CI_GRADLE_ARG_PROPERTIES
- - name: Upload reports
- if: always()
- uses: actions/upload-artifact@v3
- with:
- name: detekt-report
- path: |
- */build/reports/detekt/detekt.html
-
-# towncrier:
-# name: Towncrier check
-# runs-on: ubuntu-latest
-# if: github.event_name == 'pull_request' && github.head_ref == 'develop'
-# steps:
-# - uses: actions/checkout@v3
-# - name: Set up Python 3.8
-# uses: actions/setup-python@v4
-# with:
-# python-version: 3.8
-# - name: Install towncrier
-# run: |
-# python3 -m pip install towncrier
-# - name: Run towncrier
-# # Fetch the pull request' base branch so towncrier will be able to
-# # compare the current branch with the base branch.
-# # Source: https://github.com/actions/checkout/#fetch-all-branches.
-# run: |
-# git fetch --no-tags origin +refs/heads/${BASE_BRANCH}:refs/remotes/origin/${BASE_BRANCH}
-# towncrier check --compare-with origin/${BASE_BRANCH}
-# env:
-# BASE_BRANCH: ${{ github.base_ref }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 1a9cc5c239..2a89ed3040 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -7,10 +7,8 @@ on:
# Enrich gradle.properties for CI/CD
env:
- CI_GRADLE_ARG_PROPERTIES: >
- -Porg.gradle.jvmargs=-Xmx4g
- -Porg.gradle.parallel=false
- --no-daemon
+ GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError" -Dkotlin.daemon.jvm.options="-Xmx2560m" -Dkotlin.incremental=false
+ CI_GRADLE_ARG_PROPERTIES: --stacktrace -PpreDexEnable=false --max-workers 2 --no-daemon
jobs:
tests:
@@ -51,9 +49,9 @@ jobs:
disable-animations: true
emulator-build: 7425822
script: |
- ./gradlew unitTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES
- ./gradlew instrumentationTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES
- ./gradlew generateCoverageReport --stacktrace $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew unitTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew instrumentationTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES
# NB: continue-on-error marks steps.tests.conclusion = 'success' but leaves stes.tests.outcome = 'failure'
- name: Run all the codecoverage tests at once (retry if emulator failed)
uses: reactivecircus/android-emulator-runner@v2
@@ -67,13 +65,13 @@ jobs:
disable-animations: true
emulator-build: 7425822
script: |
- ./gradlew unitTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES
- ./gradlew instrumentationTestsWithCoverage --stacktrace $CI_GRADLE_ARG_PROPERTIES
- ./gradlew generateCoverageReport --stacktrace $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew unitTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew instrumentationTestsWithCoverage $CI_GRADLE_ARG_PROPERTIES
+ ./gradlew generateCoverageReport $CI_GRADLE_ARG_PROPERTIES
- run: ./gradlew sonarqube $CI_GRADLE_ARG_PROPERTIES
if: always() # we may have failed a previous step and retried, that's OK
env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any
+ GITHUB_TOKEN: ${{ secrets.SONARQUBE_GITHUB_API_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
ORG_GRADLE_PROJECT_SONAR_LOGIN: ${{ secrets.SONAR_TOKEN }}
@@ -114,5 +112,5 @@ jobs:
# restore-keys: |
# ${{ runner.os }}-gradle-
# - name: Build Android Tests
-# run: ./gradlew clean assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES --stacktrace
+# run: ./gradlew clean assembleAndroidTest $CI_GRADLE_ARG_PROPERTIES
diff --git a/.gitignore b/.gitignore
index 8313fb5c63..f1c0b99b58 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,8 @@
/fastlane/report.xml
/**/build
+
+# Added by yarn
+/package.json
+/yarn.lock
+/node_modules
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 6e67639284..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-# FTR: Configuration on https://travis-ci.org/github/vector-im/element-android/settings
-#
-# - Build only if .travis.yml is present -> On
-# - Limit concurrent jobs -> Off
-# - Build pushed branches -> On (build the branch)
-# - Build pushed pull request -> On (build the PR after auto-merge)
-#
-# - Auto cancel branch builds -> On
-# - Auto cancel pull request builds -> On
-
-sudo: false
-
-notifications:
- email: false
-
-# Just run a simple script here
-script:
- - ./tools/travis/check_pr.sh
diff --git a/CHANGES.md b/CHANGES.md
index fd78aa0f96..2bddbef133 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,70 @@
+Changes in Element v1.4.31 (2022-08-01)
+=======================================
+
+Bugfixes 🐛
+----------
+ - Fixes crash when returning to the app after backgrounding ([#6709](https://github.com/vector-im/element-android/issues/6709))
+ - Fix message content sometimes appearing in the log ([#6706](https://github.com/vector-im/element-android/issues/6706))
+
+
+Changes in Element v1.4.30 (2022-07-29)
+=======================================
+
+Features ✨
+----------
+ - [FTUE] - Enable improved login and register onboarding flows ([#2585](https://github.com/vector-im/element-android/issues/2585))
+ - Adds settings screen to change app font scale or enable using system setting ([#5687](https://github.com/vector-im/element-android/issues/5687))
+ - [Location sharing] - Delete action on a live message ([#6437](https://github.com/vector-im/element-android/issues/6437))
+ - [Timeline] - Collapse redacted events ([#6487](https://github.com/vector-im/element-android/issues/6487))
+ - Improve lock screen implementation with extra security measures ([#6522](https://github.com/vector-im/element-android/issues/6522))
+ - Move initialization of the Session to a background thread. MainActivity is restoring the session now, instead of VectorApplication. Useful when for instance a long migration of a database is required. ([#6548](https://github.com/vector-im/element-android/issues/6548))
+ - Share location with other apps ([#6567](https://github.com/vector-im/element-android/issues/6567))
+ - Support element call widget ([#6616](https://github.com/vector-im/element-android/issues/6616))
+ - [FTUE] Updates FTUE registration to include username availability check and update copy ([#6546](https://github.com/vector-im/element-android/issues/6546))
+ - [FTUE] - Allows the email address to be changed during the verification process ([#6622](https://github.com/vector-im/element-android/issues/6622))
+ - [FTUE] Updates the copy within the FTUE onboarding ([#6547](https://github.com/vector-im/element-android/issues/6547))
+ - [FTUE] Test session feedback ([#6620](https://github.com/vector-im/element-android/issues/6620))
+ - [FTUE] - Improved reset password error message ([#6621](https://github.com/vector-im/element-android/issues/6621))
+
+Bugfixes 🐛
+----------
+ - Fixes wrong voice message being displayed and played on the timeline. ([#6213](https://github.com/vector-im/element-android/issues/6213))
+ - Fixes the room list not taking into account the Show all rooms in Home preference ([#6665](https://github.com/vector-im/element-android/issues/6665))
+ - Stop using unstable names for withheld codes ([#5115](https://github.com/vector-im/element-android/issues/5115))
+ - Fixes room not being in space after upgrade ([#6200](https://github.com/vector-im/element-android/issues/6200))
+ - Fixed issues with reporting sync state events from different threads ([#6341](https://github.com/vector-im/element-android/issues/6341))
+ - Display specific message when verification QR code is malformed ([#6395](https://github.com/vector-im/element-android/issues/6395))
+ - When there is no way to verify a device (no 4S nor other device) propose to reset verification keys ([#6466](https://github.com/vector-im/element-android/issues/6466))
+ - Unwedging could cause the SDK to force creating a new olm session every hour ([#6534](https://github.com/vector-im/element-android/issues/6534))
+ - [Location Share] - Wrong room live location status bar visibility in timeline ([#6537](https://github.com/vector-im/element-android/issues/6537))
+ - Fix infinite loading when opening a DM when the current room is the same DM. ([#6549](https://github.com/vector-im/element-android/issues/6549))
+ - Do not log the live location of the user ([#6579](https://github.com/vector-im/element-android/issues/6579))
+ - Fix backup saving several times the same keys ([#6585](https://github.com/vector-im/element-android/issues/6585))
+ - Check user power level before sharing live location ([#6587](https://github.com/vector-im/element-android/issues/6587))
+ - [Location Share] - Live is considered as ended while still active ([#6596](https://github.com/vector-im/element-android/issues/6596))
+ - Put EC permission shortcuts behind labs flag (PSG-630) ([#6634](https://github.com/vector-im/element-android/issues/6634))
+ - ObjectAnimators are not canceled in TypingMessageDotsView ([#6663](https://github.com/vector-im/element-android/issues/6663))
+
+SDK API changes ⚠️
+------------------
+ - Communities/Groups are removed completely ([#5733](https://github.com/vector-im/element-android/issues/5733))
+ - SDK - The SpaceFilter is query parameter is no longer nullable, use SpaceFilter.NoFilter instead ([#6666](https://github.com/vector-im/element-android/issues/6666))
+
+Other changes
+-------------
+ - Nightly build publication on Firebase ([#6478](https://github.com/vector-im/element-android/issues/6478))
+ - Communities/Groups are removed completely ([#5733](https://github.com/vector-im/element-android/issues/5733))
+ - Improves performance on search screen by replacing flattenParents with directParentName in RoomSummary ([#6314](https://github.com/vector-im/element-android/issues/6314))
+ - Log durations of DB migration and migration steps. ([#6538](https://github.com/vector-im/element-android/issues/6538))
+ - [Location Share] - Standardise "Stop" texts for live ([#6541](https://github.com/vector-im/element-android/issues/6541))
+ - Adds NewAppLayoutEnabled feature flag ([#6584](https://github.com/vector-im/element-android/issues/6584))
+ - [Location sharing] - Small improvements of UI for live ([#6607](https://github.com/vector-im/element-android/issues/6607))
+ - Live Location Sharing - Reset zoom level while focusing a user ([#6609](https://github.com/vector-im/element-android/issues/6609))
+ - Fix a typo in the terms and conditions step during registration. ([#6612](https://github.com/vector-im/element-android/issues/6612))
+ - [Location sharing] - OnTap on the top live status bar, display the expanded map view ([#6625](https://github.com/vector-im/element-android/issues/6625))
+ - [Location Share] - Expanded map state when no more live location shares ([#6635](https://github.com/vector-im/element-android/issues/6635))
+
+
Changes in Element v1.4.28 (2022-07-13)
=======================================
diff --git a/Gemfile b/Gemfile
index 7a118b49be..c90138ee44 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,3 +1,4 @@
source "https://rubygems.org"
gem "fastlane"
+gem 'danger'
diff --git a/Gemfile.lock b/Gemfile.lock
index 345b4c1502..90e846860e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -24,10 +24,29 @@ GEM
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
+ claide-plugins (0.9.2)
+ cork
+ nap
+ open4 (~> 1.3)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
+ cork (0.3.0)
+ colored2 (~> 3.1)
+ danger (8.6.1)
+ claide (~> 1.0)
+ claide-plugins (>= 0.9.2)
+ colored2 (~> 3.1)
+ cork (~> 0.1)
+ faraday (>= 0.9.0, < 2.0)
+ faraday-http-cache (~> 2.0)
+ git (~> 1.7)
+ kramdown (~> 2.3)
+ kramdown-parser-gfm (~> 1.0)
+ no_proxy_fix
+ octokit (~> 4.7)
+ terminal-table (>= 1, < 4)
declarative (0.0.20)
digest-crc (0.6.3)
rake (>= 12.0.0, < 14.0.0)
@@ -52,6 +71,8 @@ GEM
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
+ faraday-http-cache (2.4.0)
+ faraday (>= 0.8)
faraday-httpclient (1.0.1)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
@@ -98,6 +119,8 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
+ git (1.11.0)
+ rchardet (~> 1.8)
google-apis-androidpublisher_v3 (0.8.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.0)
@@ -143,17 +166,28 @@ GEM
jmespath (1.4.0)
json (2.5.1)
jwt (2.2.3)
+ kramdown (2.4.0)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
memoist (0.16.2)
mini_magick (4.11.0)
mini_mime (1.1.0)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
+ nap (1.1.0)
naturally (2.2.1)
+ no_proxy_fix (0.1.2)
+ octokit (4.25.1)
+ faraday (>= 1, < 3)
+ sawyer (~> 0.9)
+ open4 (1.3.4)
os (1.1.1)
plist (3.6.0)
public_suffix (4.0.6)
rake (13.0.6)
+ rchardet (1.8.0)
representable (3.1.1)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
@@ -163,6 +197,9 @@ GEM
rouge (2.0.7)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
+ sawyer (0.9.2)
+ addressable (>= 2.3.5)
+ faraday (>= 0.17.3, < 3)
security (0.1.3)
signet (0.15.0)
addressable (~> 2.3)
@@ -200,9 +237,11 @@ GEM
xcpretty (~> 0.2, >= 0.0.7)
PLATFORMS
+ universal-darwin-21
x86_64-darwin-20
DEPENDENCIES
+ danger
fastlane
BUNDLED WITH
diff --git a/build.gradle b/build.gradle
index e8472097d5..afe51cc734 100644
--- a/build.gradle
+++ b/build.gradle
@@ -30,7 +30,7 @@ buildscript {
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.5'
classpath "com.likethesalad.android:stem-plugin:2.1.1"
classpath 'org.owasp:dependency-check-gradle:7.1.1'
- classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.0"
+ classpath "org.jetbrains.dokka:dokka-gradle-plugin:1.7.10"
classpath "org.jetbrains.kotlinx:kotlinx-knit:0.4.0"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -41,10 +41,10 @@ plugins {
// ktlint Plugin
id "org.jlleitschuh.gradle.ktlint" version "10.3.0"
// Detekt
- id "io.gitlab.arturbosch.detekt" version "1.20.0"
+ id "io.gitlab.arturbosch.detekt" version "1.21.0"
// Dependency Analysis
- id 'com.autonomousapps.dependency-analysis' version "1.9.0"
+ id 'com.autonomousapps.dependency-analysis' version "1.11.2"
}
// https://github.com/jeremylong/DependencyCheck
@@ -126,6 +126,11 @@ allprojects {
enableExperimentalRules = true
// display the corresponding rule
verbose = true
+ reporters {
+ reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN)
+ // To have XML report for Danger
+ reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE)
+ }
disabledRules = [
// TODO Re-enable these 4 rules after reformatting project
"indent",
diff --git a/changelog.d/2585.feature b/changelog.d/2585.feature
deleted file mode 100644
index eedbac1e88..0000000000
--- a/changelog.d/2585.feature
+++ /dev/null
@@ -1 +0,0 @@
-FTUE - Enable improved login and register onboarding flows
diff --git a/changelog.d/5115.bugfix b/changelog.d/5115.bugfix
deleted file mode 100644
index 6b3ca4a7b4..0000000000
--- a/changelog.d/5115.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Stop using unstable names for withheld codes
diff --git a/changelog.d/5687.feature b/changelog.d/5687.feature
deleted file mode 100644
index 4450b4e457..0000000000
--- a/changelog.d/5687.feature
+++ /dev/null
@@ -1 +0,0 @@
-Adds settings screen to change app font scale or enable using system setting
diff --git a/changelog.d/5733.misc b/changelog.d/5733.misc
deleted file mode 100644
index 0dc1ef881c..0000000000
--- a/changelog.d/5733.misc
+++ /dev/null
@@ -1 +0,0 @@
-Communities/Groups are removed completely
diff --git a/changelog.d/5733.sdk b/changelog.d/5733.sdk
deleted file mode 100644
index 0dc1ef881c..0000000000
--- a/changelog.d/5733.sdk
+++ /dev/null
@@ -1 +0,0 @@
-Communities/Groups are removed completely
diff --git a/changelog.d/6200.bugfix b/changelog.d/6200.bugfix
deleted file mode 100644
index ee204b4567..0000000000
--- a/changelog.d/6200.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fixes room not being in space after upgrade
diff --git a/changelog.d/6213.bugfix b/changelog.d/6213.bugfix
deleted file mode 100644
index af0ec928d7..0000000000
--- a/changelog.d/6213.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fixes wrong voice message being displayed and played on the timeline.
diff --git a/changelog.d/6314.misc b/changelog.d/6314.misc
deleted file mode 100644
index 865d965d33..0000000000
--- a/changelog.d/6314.misc
+++ /dev/null
@@ -1 +0,0 @@
-Improves performance on search screen by replacing flattenParents with directParentName in RoomSummary
diff --git a/changelog.d/6341.bugfix b/changelog.d/6341.bugfix
deleted file mode 100644
index 6866d8c89d..0000000000
--- a/changelog.d/6341.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fixed issues with reporting sync state events from different threads
diff --git a/changelog.d/6395.bugfix b/changelog.d/6395.bugfix
deleted file mode 100644
index ebc22dc41a..0000000000
--- a/changelog.d/6395.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Display specific message when verification QR code is malformed
diff --git a/changelog.d/6406.misc b/changelog.d/6406.misc
new file mode 100644
index 0000000000..27cf3c6493
--- /dev/null
+++ b/changelog.d/6406.misc
@@ -0,0 +1 @@
+[Modularization] Provides abstraction to avoids direct usages of BuildConfig
diff --git a/changelog.d/6437.feature b/changelog.d/6437.feature
deleted file mode 100644
index fb24819daf..0000000000
--- a/changelog.d/6437.feature
+++ /dev/null
@@ -1 +0,0 @@
-[Location sharing] - Delete action on a live message
diff --git a/changelog.d/6466.bugfix b/changelog.d/6466.bugfix
deleted file mode 100644
index 31fef9f69d..0000000000
--- a/changelog.d/6466.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-When there is no way to verify a device (no 4S nor other device) propose to reset verification keys
diff --git a/changelog.d/6478.misc b/changelog.d/6478.misc
deleted file mode 100644
index 52bc4a011d..0000000000
--- a/changelog.d/6478.misc
+++ /dev/null
@@ -1 +0,0 @@
-Nightly build publication on Firebase
diff --git a/changelog.d/6487.feature b/changelog.d/6487.feature
deleted file mode 100644
index 3d58e80bd5..0000000000
--- a/changelog.d/6487.feature
+++ /dev/null
@@ -1 +0,0 @@
-[Timeline] - Collapse redacted events
diff --git a/changelog.d/6522.feature b/changelog.d/6522.feature
deleted file mode 100644
index fb5e535108..0000000000
--- a/changelog.d/6522.feature
+++ /dev/null
@@ -1 +0,0 @@
-Improve lock screen implementation with extra security measures
diff --git a/changelog.d/6534.bugfix b/changelog.d/6534.bugfix
deleted file mode 100644
index 721b61a2d5..0000000000
--- a/changelog.d/6534.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Unwedging could cause the SDK to force creating a new olm session every hour
diff --git a/changelog.d/6537.bugfix b/changelog.d/6537.bugfix
deleted file mode 100644
index 688fd5104c..0000000000
--- a/changelog.d/6537.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-[Location Share] - Wrong room live location status bar visibility in timeline
diff --git a/changelog.d/6538.misc b/changelog.d/6538.misc
deleted file mode 100644
index ba6d4485b6..0000000000
--- a/changelog.d/6538.misc
+++ /dev/null
@@ -1 +0,0 @@
-Log durations of DB migration and migration steps.
diff --git a/changelog.d/6541.misc b/changelog.d/6541.misc
deleted file mode 100644
index 452079dc9f..0000000000
--- a/changelog.d/6541.misc
+++ /dev/null
@@ -1 +0,0 @@
-[Location Share] - Standardise "Stop" texts for live
diff --git a/changelog.d/6546.feature b/changelog.d/6546.feature
deleted file mode 100644
index 988963b038..0000000000
--- a/changelog.d/6546.feature
+++ /dev/null
@@ -1 +0,0 @@
-Updates FTUE registration to include username availability check and update copy
diff --git a/changelog.d/6547.feature b/changelog.d/6547.feature
deleted file mode 100644
index 8086957a30..0000000000
--- a/changelog.d/6547.feature
+++ /dev/null
@@ -1 +0,0 @@
-Updates the copy within the FTUE onboarding
diff --git a/changelog.d/6548.feature b/changelog.d/6548.feature
deleted file mode 100644
index 8c40a37063..0000000000
--- a/changelog.d/6548.feature
+++ /dev/null
@@ -1 +0,0 @@
-Move initialization of the Session to a background thread. MainActivity is restoring the session now, instead of VectorApplication. Useful when for instance a long migration of a database is required.
diff --git a/changelog.d/6549.bugfix b/changelog.d/6549.bugfix
deleted file mode 100644
index eb6e5bcfb7..0000000000
--- a/changelog.d/6549.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix infinite loading when opening a DM when the current room is the same DM.
diff --git a/changelog.d/6567.feature b/changelog.d/6567.feature
deleted file mode 100644
index 9624c57a66..0000000000
--- a/changelog.d/6567.feature
+++ /dev/null
@@ -1 +0,0 @@
-Share location with other apps
diff --git a/changelog.d/6579.bugfix b/changelog.d/6579.bugfix
deleted file mode 100644
index 331115d5cc..0000000000
--- a/changelog.d/6579.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Do not log the live location of the user
diff --git a/changelog.d/6584.misc b/changelog.d/6584.misc
deleted file mode 100644
index 1b53a8d755..0000000000
--- a/changelog.d/6584.misc
+++ /dev/null
@@ -1 +0,0 @@
-Adds NewAppLayoutEnabled feature flag
diff --git a/changelog.d/6585.bugfix b/changelog.d/6585.bugfix
deleted file mode 100644
index 63bf5a0af6..0000000000
--- a/changelog.d/6585.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix backup saving several times the same keys
diff --git a/changelog.d/6587.bugfix b/changelog.d/6587.bugfix
deleted file mode 100644
index 0273689cfd..0000000000
--- a/changelog.d/6587.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Check user power level before sharing live location
diff --git a/changelog.d/6596.bugfix b/changelog.d/6596.bugfix
deleted file mode 100644
index 8cf97778c8..0000000000
--- a/changelog.d/6596.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-[Location Share] - Live is considered as ended while still active
diff --git a/changelog.d/6598.misc b/changelog.d/6598.misc
new file mode 100644
index 0000000000..db65a30bdc
--- /dev/null
+++ b/changelog.d/6598.misc
@@ -0,0 +1 @@
+Refactors SpaceStateHandler (previously AppStateHandler) and adds unit tests for it
diff --git a/changelog.d/6607.misc b/changelog.d/6607.misc
deleted file mode 100644
index c56c3fca92..0000000000
--- a/changelog.d/6607.misc
+++ /dev/null
@@ -1 +0,0 @@
-[Location sharing] - Small improvements of UI for live
diff --git a/changelog.d/6609.misc b/changelog.d/6609.misc
deleted file mode 100644
index bf1a9efe14..0000000000
--- a/changelog.d/6609.misc
+++ /dev/null
@@ -1 +0,0 @@
-Live Location Sharing - Reset zoom level while focusing a user
diff --git a/changelog.d/6612.misc b/changelog.d/6612.misc
deleted file mode 100644
index ba80ff3e9d..0000000000
--- a/changelog.d/6612.misc
+++ /dev/null
@@ -1 +0,0 @@
-Fix a typo in the terms and conditions step during registration.
diff --git a/changelog.d/6616.feature b/changelog.d/6616.feature
deleted file mode 100644
index d013771764..0000000000
--- a/changelog.d/6616.feature
+++ /dev/null
@@ -1 +0,0 @@
-Support element call widget
diff --git a/changelog.d/6620.feature b/changelog.d/6620.feature
deleted file mode 100644
index ad192edd5c..0000000000
--- a/changelog.d/6620.feature
+++ /dev/null
@@ -1 +0,0 @@
-FTUE - Test session feedback
diff --git a/changelog.d/6621.feature b/changelog.d/6621.feature
deleted file mode 100644
index b893c968b4..0000000000
--- a/changelog.d/6621.feature
+++ /dev/null
@@ -1 +0,0 @@
-FTUE - Improved reset password error message
diff --git a/changelog.d/6622.feature b/changelog.d/6622.feature
deleted file mode 100644
index b3c8791ff0..0000000000
--- a/changelog.d/6622.feature
+++ /dev/null
@@ -1 +0,0 @@
-FTUE - Allows the email address to be changed during the verification process
diff --git a/changelog.d/6625.misc b/changelog.d/6625.misc
deleted file mode 100644
index 68a58c38fa..0000000000
--- a/changelog.d/6625.misc
+++ /dev/null
@@ -1 +0,0 @@
-[Location sharing] - OnTap on the top live status bar, display the expanded map view
diff --git a/changelog.d/6634.bugfix b/changelog.d/6634.bugfix
deleted file mode 100644
index e135795ec2..0000000000
--- a/changelog.d/6634.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Put EC permission shortcuts behind labs flag (PSG-630)
diff --git a/changelog.d/6635.misc b/changelog.d/6635.misc
deleted file mode 100644
index 6546659d11..0000000000
--- a/changelog.d/6635.misc
+++ /dev/null
@@ -1 +0,0 @@
-[Location Share] - Expanded map state when no more live location shares
diff --git a/changelog.d/6637.misc b/changelog.d/6637.misc
new file mode 100644
index 0000000000..7fc5ffad98
--- /dev/null
+++ b/changelog.d/6637.misc
@@ -0,0 +1 @@
+Setup Danger to the project
diff --git a/changelog.d/6642.misc b/changelog.d/6642.misc
new file mode 100644
index 0000000000..a32b20716a
--- /dev/null
+++ b/changelog.d/6642.misc
@@ -0,0 +1 @@
+[Location Share] Open maximized map on tapping on live sharing notification
diff --git a/changelog.d/6647.misc b/changelog.d/6647.misc
new file mode 100644
index 0000000000..e183cac57a
--- /dev/null
+++ b/changelog.d/6647.misc
@@ -0,0 +1 @@
+[Location sharing] Align naming of components for live location feature
diff --git a/changelog.d/6653.misc b/changelog.d/6653.misc
new file mode 100644
index 0000000000..1b5be1b83f
--- /dev/null
+++ b/changelog.d/6653.misc
@@ -0,0 +1 @@
+[Location share] Update minimum sending period to 5 seconds for a live
diff --git a/changelog.d/6655.feature b/changelog.d/6655.feature
new file mode 100644
index 0000000000..13a4c6d572
--- /dev/null
+++ b/changelog.d/6655.feature
@@ -0,0 +1 @@
+Adds new app layout toolbar (feature flagged)
diff --git a/changelog.d/6674.misc b/changelog.d/6674.misc
new file mode 100644
index 0000000000..830d528e27
--- /dev/null
+++ b/changelog.d/6674.misc
@@ -0,0 +1 @@
+[Location sharing] - Fix the memory leaks
diff --git a/changelog.d/6678.misc b/changelog.d/6678.misc
new file mode 100644
index 0000000000..a7a53257d8
--- /dev/null
+++ b/changelog.d/6678.misc
@@ -0,0 +1 @@
+[Timeline] Memory leak in audio message playback tracker
diff --git a/changelog.d/6680.misc b/changelog.d/6680.misc
new file mode 100644
index 0000000000..f42160fbba
--- /dev/null
+++ b/changelog.d/6680.misc
@@ -0,0 +1 @@
+[FTUE] Memory leak on FtueAuthSplashCarouselFragment
diff --git a/changelog.d/6687.bugfix b/changelog.d/6687.bugfix
new file mode 100644
index 0000000000..9b92efdffe
--- /dev/null
+++ b/changelog.d/6687.bugfix
@@ -0,0 +1 @@
+[Location sharing] Invisible text on map symbol
diff --git a/changelog.d/6706.bugfix b/changelog.d/6706.bugfix
new file mode 100644
index 0000000000..51d5248374
--- /dev/null
+++ b/changelog.d/6706.bugfix
@@ -0,0 +1 @@
+Fix message content sometimes appearing in the log
diff --git a/changelog.d/6711.feature b/changelog.d/6711.feature
new file mode 100644
index 0000000000..cff718affd
--- /dev/null
+++ b/changelog.d/6711.feature
@@ -0,0 +1 @@
+[Location Share] Render fallback UI when map fails to load
diff --git a/changelog.d/6713.bugfix b/changelog.d/6713.bugfix
new file mode 100644
index 0000000000..6a9926aa13
--- /dev/null
+++ b/changelog.d/6713.bugfix
@@ -0,0 +1 @@
+Disable 'Enable biometrics' option if there are not biometric authenticators enrolled.
diff --git a/changelog.d/6737.bugfix b/changelog.d/6737.bugfix
new file mode 100644
index 0000000000..6568e9ff31
--- /dev/null
+++ b/changelog.d/6737.bugfix
@@ -0,0 +1 @@
+Fixes onboarding login/account creation errors showing after navigation
diff --git a/changelog.d/6739.misc b/changelog.d/6739.misc
new file mode 100644
index 0000000000..5e5de00831
--- /dev/null
+++ b/changelog.d/6739.misc
@@ -0,0 +1 @@
+Link directly to DCO docs from danger message.
diff --git a/dependencies.gradle b/dependencies.gradle
index e8e39dc5f7..93a62a548e 100644
--- a/dependencies.gradle
+++ b/dependencies.gradle
@@ -20,9 +20,9 @@ def retrofit = "2.9.0"
def arrow = "0.8.2"
def markwon = "4.6.2"
def moshi = "1.13.0"
-def lifecycle = "2.5.0"
+def lifecycle = "2.5.1"
def flowBinding = "1.2.0"
-def flipper = "0.154.0"
+def flipper = "0.156.0"
def epoxy = "4.6.2"
def mavericks = "2.7.0"
def glide = "4.13.2"
@@ -30,7 +30,7 @@ def bigImageViewer = "1.8.1"
def jjwt = "0.11.5"
def vanniktechEmoji = "0.15.0"
-def fragment = "1.5.0"
+def fragment = "1.5.1"
// Testing
def mockk = "1.12.3" // We need to use 1.12.3 to have mocking in androidTest until a new version is released: https://github.com/mockk/mockk/issues/819
@@ -50,7 +50,7 @@ ext.libs = [
'coroutinesTest' : "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinCoroutines"
],
androidx : [
- 'activity' : "androidx.activity:activity:1.5.0",
+ 'activity' : "androidx.activity:activity:1.5.1",
'appCompat' : "androidx.appcompat:appcompat:1.4.2",
'biometric' : "androidx.biometric:biometric:1.1.0",
'core' : "androidx.core:core-ktx:1.8.0",
diff --git a/dependencies_groups.gradle b/dependencies_groups.gradle
index e89c69a594..f60a77a92d 100644
--- a/dependencies_groups.gradle
+++ b/dependencies_groups.gradle
@@ -125,6 +125,7 @@ ext.groups = [
'info.picocli',
'io.arrow-kt',
'io.element.android',
+ 'io.github.davidburstrom.contester',
'io.github.detekt.sarif4k',
'io.github.microutils',
'io.github.reactivecircus.flowbinding',
diff --git a/docs/danger.md b/docs/danger.md
new file mode 100644
index 0000000000..19728f00e9
--- /dev/null
+++ b/docs/danger.md
@@ -0,0 +1,102 @@
+## Danger
+
+
+
+* [What does danger checks](#what-does-danger-checks)
+ * [PR check](#pr-check)
+ * [Quality check](#quality-check)
+* [Setup](#setup)
+* [Run danger locally](#run-danger-locally)
+* [Danger user](#danger-user)
+* [Useful links](#useful-links)
+
+
+
+## What does danger checks
+
+### PR check
+
+See the [dangerfile](../tools/danger/dangerfile.js). If you add rules in the dangerfile, please update the list below!
+
+Here are the checks that Danger does so far:
+
+- PR description is not empty
+- Big PR got a warning to recommend to split
+- PR contains a file for towncrier and extension is checked
+- PR contains a Sign-Off, with exception for Element employee contributors
+- PR with change on layout should include screenshot in the description
+- PR which adds png file warn about the usage of vector drawables
+- non draft PR should have a reviewer
+
+### Quality check
+
+After all the checks that generate checkstyle XML report, such as Ktlint, lint, or Detekt, Danger is run with this [dangerfile](../tools/danger/dangerfile-lint.js), in order to post comments to the PR with the detected error and warnings.
+
+To run locally, you will have to install the plugin `danger-plugin-lint-report` using:
+
+```shell
+yarn add danger-plugin-lint-report --dev
+```
+
+## Setup
+
+This operation should not be necessary, since Danger is already setup for the project.
+
+To setup danger to the project, run:
+
+```shell
+bundle exec danger init
+```
+
+## Run danger locally
+
+When modifying the [dangerfile](../tools/danger/dangerfile.js), you can check it by running Danger locally.
+
+To run danger locally, install it and run:
+
+```shell
+bundle exec danger pr --dangerfile=./tools/danger/dangerfile.js
+```
+
+For instance:
+
+```shell
+bundle exec danger pr https://github.com/vector-im/element-android/pull/6637 --dangerfile=./tools/danger/dangerfile.js
+```
+
+We may need to create a GitHub token to have less API rate limiting, and then set the env var:
+
+```shell
+export DANGER_GITHUB_API_TOKEN='YOUR_TOKEN'
+```
+
+Swift and Kotlin (just in case)
+
+```shell
+bundle exec danger-swift pr --dangerfile=./tools/danger/dangerfile.js
+bundle exec danger-kotlin pr --dangerfile=./tools/danger/dangerfile.js
+```
+
+## Danger user
+
+To let Danger check all the PRs, including PRs form forks, a GitHub account have been created:
+- login: ElementBot
+- password: Stored on Passbolt
+- GitHub token: A token with limited access has been created and added to the repository https://github.com/vector-im/element-android as secret DANGER_GITHUB_API_TOKEN. This token is not saved anywhere else. In case of problem, just delete it and create a new one, then update the secret.
+
+## Useful links
+
+- https://danger.systems/
+- https://danger.systems/js/
+- https://danger.systems/js/guides/getting_started.html
+- https://danger.systems/js/reference.html
+- https://github.com/danger/awesome-danger
+
+Some danger files to get inspired from
+
+- https://github.com/artsy/emission/blob/master/dangerfile.ts
+- https://github.com/facebook/react-native/blob/master/bots/dangerfile.js
+- https://github.com/apollographql/apollo-client/blob/master/config/dangerfile.ts
+- https://github.com/styleguidist/react-styleguidist/blob/master/dangerfile.js
+- https://github.com/storybooks/storybook/blob/master/dangerfile.js
+- https://github.com/ReactiveX/rxjs/blob/master/dangerfile.js
diff --git a/docs/nightly_build.md b/docs/nightly_build.md
index 91f18214c4..7750e0466a 100644
--- a/docs/nightly_build.md
+++ b/docs/nightly_build.md
@@ -48,7 +48,7 @@ mv towncrier.toml towncrier.toml.bak
sed 's/CHANGES\.md/CHANGES_NIGHTLY\.md/' towncrier.toml.bak > towncrier.toml
rm towncrier.toml.bak
yes n | towncrier --version nightly
-./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES --stacktrace
+./gradlew assembleGplayNightly appDistributionUploadGplayNightly $CI_GRADLE_ARG_PROPERTIES
```
Then you can reset the change on the codebase.
diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40104280.txt b/fastlane/metadata/android/cs-CZ/changelogs/40104280.txt
new file mode 100644
index 0000000000..578549ce6c
--- /dev/null
+++ b/fastlane/metadata/android/cs-CZ/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Hlavní změny v této verzi: Opravy různých chyb a vylepšení stability.
+Úplný seznam změn: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/en-US/changelogs/40104300.txt b/fastlane/metadata/android/en-US/changelogs/40104300.txt
new file mode 100644
index 0000000000..c0b3284c4f
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40104300.txt
@@ -0,0 +1,2 @@
+Main changes in this version: Enables the improved sign in and sign up journeys.
+Full changelog: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/en-US/changelogs/40104310.txt b/fastlane/metadata/android/en-US/changelogs/40104310.txt
new file mode 100644
index 0000000000..c0b3284c4f
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/40104310.txt
@@ -0,0 +1,2 @@
+Main changes in this version: Enables the improved sign in and sign up journeys.
+Full changelog: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/et/changelogs/40104280.txt b/fastlane/metadata/android/et/changelogs/40104280.txt
new file mode 100644
index 0000000000..1df5ac4176
--- /dev/null
+++ b/fastlane/metadata/android/et/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Põhilised muutused selles versioonis: erinevate vigade parandused ja stabiilsust edendavad kohendused.
+Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/fa/changelogs/40104280.txt b/fastlane/metadata/android/fa/changelogs/40104280.txt
new file mode 100644
index 0000000000..29efb95925
--- /dev/null
+++ b/fastlane/metadata/android/fa/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+تغییرات عمده در این نگارش: رفع اشکالهای مختلف و بهبودهای پایداری.
+گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/fr-FR/changelogs/40104280.txt b/fastlane/metadata/android/fr-FR/changelogs/40104280.txt
new file mode 100644
index 0000000000..fe61fd021c
--- /dev/null
+++ b/fastlane/metadata/android/fr-FR/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Principaux changements pour cette version : Plusieurs corrections de bogues et d’améliorations de stabilité.
+Intégralité des changements : https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/id/changelogs/40104280.txt b/fastlane/metadata/android/id/changelogs/40104280.txt
new file mode 100644
index 0000000000..1017951d47
--- /dev/null
+++ b/fastlane/metadata/android/id/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Perubahan utama dalam versi ini: Banyak perbaikan kutu dan perbaikan stabilitas.
+Catatan perubahan lanjutan: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/it-IT/changelogs/40104280.txt b/fastlane/metadata/android/it-IT/changelogs/40104280.txt
new file mode 100644
index 0000000000..556a6fc7ea
--- /dev/null
+++ b/fastlane/metadata/android/it-IT/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Modifiche principali in questa versione: varie correzioni di errori e miglioramenti della stabilità.
+Cronologia completa: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40100170.txt b/fastlane/metadata/android/pl-PL/changelogs/40100170.txt
new file mode 100644
index 0000000000..1105b2c190
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40100170.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.0.17
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101000.txt b/fastlane/metadata/android/pl-PL/changelogs/40101000.txt
new file mode 100644
index 0000000000..7dac243a08
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101000.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: zwiększenie wydajności i poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.0
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101010.txt b/fastlane/metadata/android/pl-PL/changelogs/40101010.txt
new file mode 100644
index 0000000000..54e9c04a20
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101010.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: zwiększenie wydajności i poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.1
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101020.txt b/fastlane/metadata/android/pl-PL/changelogs/40101020.txt
new file mode 100644
index 0000000000..b17faea32a
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101020.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: zwiększenie wydajności i poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.2
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101030.txt b/fastlane/metadata/android/pl-PL/changelogs/40101030.txt
new file mode 100644
index 0000000000..12fc681102
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101030.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: zwiększenie wydajności i poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.3
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101040.txt b/fastlane/metadata/android/pl-PL/changelogs/40101040.txt
new file mode 100644
index 0000000000..19edf73b7b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101040.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: zwiększenie wydajności i poprawki błędów!
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.4
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40101050.txt b/fastlane/metadata/android/pl-PL/changelogs/40101050.txt
new file mode 100644
index 0000000000..a51a43ab70
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40101050.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: poprawki dla wersji 1.1.4.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases/tag/v1.1.5
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104180.txt b/fastlane/metadata/android/pl-PL/changelogs/40104180.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104180.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104190.txt b/fastlane/metadata/android/pl-PL/changelogs/40104190.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104190.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104200.txt b/fastlane/metadata/android/pl-PL/changelogs/40104200.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104200.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104220.txt b/fastlane/metadata/android/pl-PL/changelogs/40104220.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104220.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104230.txt b/fastlane/metadata/android/pl-PL/changelogs/40104230.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104230.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104240.txt b/fastlane/metadata/android/pl-PL/changelogs/40104240.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104240.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104250.txt b/fastlane/metadata/android/pl-PL/changelogs/40104250.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104250.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104260.txt b/fastlane/metadata/android/pl-PL/changelogs/40104260.txt
new file mode 100644
index 0000000000..f24649b992
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104260.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Dodanie UnifiedPush aby umożliwić działanie powiadomień push bez FCM.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104270.txt b/fastlane/metadata/android/pl-PL/changelogs/40104270.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104270.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pl-PL/changelogs/40104280.txt b/fastlane/metadata/android/pl-PL/changelogs/40104280.txt
new file mode 100644
index 0000000000..5077ae400b
--- /dev/null
+++ b/fastlane/metadata/android/pl-PL/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Główne zmiany w tej wersji: Poprawki rozmaitych błędów i usprawnienia stabilności.
+Pełna lista zmian: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104220.txt b/fastlane/metadata/android/pt-BR/changelogs/40104220.txt
index 5c0d610ddd..6e11e92579 100644
--- a/fastlane/metadata/android/pt-BR/changelogs/40104220.txt
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104220.txt
@@ -1,2 +1,2 @@
-Principais mudanças nesta versão: Várias correções de bugs e melhorias de estabilidade.
-Registro de mudanças completo: https://github.com/vector-im/element-android/releases
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104230.txt b/fastlane/metadata/android/pt-BR/changelogs/40104230.txt
index 5c0d610ddd..6e11e92579 100644
--- a/fastlane/metadata/android/pt-BR/changelogs/40104230.txt
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104230.txt
@@ -1,2 +1,2 @@
-Principais mudanças nesta versão: Várias correções de bugs e melhorias de estabilidade.
-Registro de mudanças completo: https://github.com/vector-im/element-android/releases
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104240.txt b/fastlane/metadata/android/pt-BR/changelogs/40104240.txt
index 5c0d610ddd..6e11e92579 100644
--- a/fastlane/metadata/android/pt-BR/changelogs/40104240.txt
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104240.txt
@@ -1,2 +1,2 @@
-Principais mudanças nesta versão: Várias correções de bugs e melhorias de estabilidade.
-Registro de mudanças completo: https://github.com/vector-im/element-android/releases
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104250.txt b/fastlane/metadata/android/pt-BR/changelogs/40104250.txt
index 5c0d610ddd..6e11e92579 100644
--- a/fastlane/metadata/android/pt-BR/changelogs/40104250.txt
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104250.txt
@@ -1,2 +1,2 @@
-Principais mudanças nesta versão: Várias correções de bugs e melhorias de estabilidade.
-Registro de mudanças completo: https://github.com/vector-im/element-android/releases
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104260.txt b/fastlane/metadata/android/pt-BR/changelogs/40104260.txt
new file mode 100644
index 0000000000..25d02aee8b
--- /dev/null
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104260.txt
@@ -0,0 +1,2 @@
+Principais mudanças nesta versão: Usar UnifiedPush e permite usuária(o) ter push sem FCM.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104270.txt b/fastlane/metadata/android/pt-BR/changelogs/40104270.txt
new file mode 100644
index 0000000000..6e11e92579
--- /dev/null
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104270.txt
@@ -0,0 +1,2 @@
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/pt-BR/changelogs/40104280.txt b/fastlane/metadata/android/pt-BR/changelogs/40104280.txt
new file mode 100644
index 0000000000..6e11e92579
--- /dev/null
+++ b/fastlane/metadata/android/pt-BR/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Principais mudanças nesta versão: Vários consertos de bugs e melhorias de estabilidade.
+Changelog completo: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/sk/changelogs/40104280.txt b/fastlane/metadata/android/sk/changelogs/40104280.txt
new file mode 100644
index 0000000000..50670f18c2
--- /dev/null
+++ b/fastlane/metadata/android/sk/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Hlavné zmeny v tejto verzii: Rôzne opravy chýb a vylepšenia stability.
+Úplný zoznam zmien: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/sv-SE/changelogs/40104280.txt b/fastlane/metadata/android/sv-SE/changelogs/40104280.txt
new file mode 100644
index 0000000000..d8db452b51
--- /dev/null
+++ b/fastlane/metadata/android/sv-SE/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Huvudsakliga ändringar i den här versionen: Diverse buggfixar och stabilitetsförbättringar.
+Full ändringslogg: https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/uk/changelogs/40104280.txt b/fastlane/metadata/android/uk/changelogs/40104280.txt
new file mode 100644
index 0000000000..82eef725e0
--- /dev/null
+++ b/fastlane/metadata/android/uk/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+Основні зміни в цій версії: Усунуто різні вади й поліпшено стабільність.
+Перелік усіх змін://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40100120.txt b/fastlane/metadata/android/zh-CN/changelogs/40100120.txt
index 67d69a3834..10c251531d 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40100120.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40100120.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:链接预览,全新 Emoji 键盘,全新聊天室设置功能,以及圣诞节雪花!
+此版本的主要变化:链接预览,全新 Emoji 键盘,全新房间设置功能,以及圣诞节雪花!
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.0.12
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40100130.txt b/fastlane/metadata/android/zh-CN/changelogs/40100130.txt
index 5a2ba4256f..18c8d466e5 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40100130.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40100130.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:链接预览,全新 Emoji 键盘,全新聊天室设置功能,以及圣诞节雪花!
+此版本的主要变化:链接预览,全新 Emoji 键盘,全新房间设置功能,以及圣诞节雪花!
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.0.13
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40100140.txt b/fastlane/metadata/android/zh-CN/changelogs/40100140.txt
index dc25b5094b..82726e22c3 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40100140.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40100140.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:支持编辑聊天室权限,自动切换浅色/深色主题,修复大量错误。
+此版本的主要变化:支持编辑房间权限,自动切换浅色/深色主题,修复大量错误。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.0.14
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40101160.txt b/fastlane/metadata/android/zh-CN/changelogs/40101160.txt
index 98357b0dc5..16f38a0d49 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40101160.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40101160.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:修复聊天室中有人登出时发送加密消息所遇到的错误。
+此版本的主要变化:修复房间中有人登出时发送加密消息所遇到的错误。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.1.16
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103000.txt b/fastlane/metadata/android/zh-CN/changelogs/40103000.txt
index 96ec8b3322..6d0917a3f0 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40103000.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103000.txt
@@ -1,2 +1,2 @@
-此版本主要更改:使用空间组织你的聊天室!
+此版本主要更改:使用空间组织你的房间!
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.0
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103010.txt b/fastlane/metadata/android/zh-CN/changelogs/40103010.txt
index 98b506fb6e..0c36f40e1d 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40103010.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103010.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:使用空间组织您的聊天室! v1.3.1 正在修复 v1.3.0 中可能发生的崩溃。
+此版本的主要变化:使用空间组织您的房间! v1.3.1 正在修复 v1.3.0 中可能发生的崩溃。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.1
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103040.txt b/fastlane/metadata/android/zh-CN/changelogs/40103040.txt
index c879c3d036..a11c32b773 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40103040.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103040.txt
@@ -1,2 +1,2 @@
-此版本主要变化:为 Direct Message 聊天室添加 Presence 支持 (注意:presence 在 matrix.org 上是禁用的)。再次添加 Android Auto 支持。
+此版本主要变化:为 Direct Message 房间添加 Presence 支持 (注意:presence 在 matrix.org 上是禁用的)。再次添加 Android Auto 支持。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.4
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103050.txt b/fastlane/metadata/android/zh-CN/changelogs/40103050.txt
index 7343ae0b9f..537964320a 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40103050.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103050.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:为私信聊天室添加 Presence 支持 (注意:在 matrix.org 上 Presence 是禁用的)。再次添加 Android Auto 支持。
+此版本的主要变化:为私信房间添加 Presence 支持 (注意:在 matrix.org 上 Presence 是禁用的)。再次添加 Android Auto 支持。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.5
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103060.txt b/fastlane/metadata/android/zh-CN/changelogs/40103060.txt
index 8322539927..7621ec3870 100644
--- a/fastlane/metadata/android/zh-CN/changelogs/40103060.txt
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103060.txt
@@ -1,2 +1,2 @@
-此版本的主要变化:为私信聊天室添加 Presence 支持(注意:在 matrix.org 上 Presence 是禁用的)。再次添加 Android Auto 支持。
+此版本的主要变化:为私信房间添加 Presence 支持(注意:在 matrix.org 上 Presence 是禁用的)。再次添加 Android Auto 支持。
完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.6
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103100.txt b/fastlane/metadata/android/zh-CN/changelogs/40103100.txt
new file mode 100644
index 0000000000..7f17f68a1d
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103100.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:新增对投票(在实验室中)的支持。新的URL预览设计。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.10
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103110.txt b/fastlane/metadata/android/zh-CN/changelogs/40103110.txt
new file mode 100644
index 0000000000..cfa0ae74be
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103110.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:bug修复!
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.11
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103120.txt b/fastlane/metadata/android/zh-CN/changelogs/40103120.txt
new file mode 100644
index 0000000000..c0b5935928
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103120.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:bug修复!
+完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.3.12
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103130.txt b/fastlane/metadata/android/zh-CN/changelogs/40103130.txt
new file mode 100644
index 0000000000..f8fff1b33d
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103130.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:First change in onboarding screens, including Analytics opt-in. 对添加在实验中带有数学的事件的支持。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.13
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103140.txt b/fastlane/metadata/android/zh-CN/changelogs/40103140.txt
new file mode 100644
index 0000000000..c035e13025
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103140.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:First change in onboarding screens, including Analytics opt-in. 对添加在实验中带有数学的事件的支持。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.14
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103150.txt b/fastlane/metadata/android/zh-CN/changelogs/40103150.txt
new file mode 100644
index 0000000000..f5edd7ab4d
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103150.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:对新用户引导画面的首次更改,包括选择加入分析的功能。对添加在实验中带有数学的事件的支持。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.15
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103160.txt b/fastlane/metadata/android/zh-CN/changelogs/40103160.txt
new file mode 100644
index 0000000000..8bed014719
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103160.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:给任何房间发送你的位置。编辑投票。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.16
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103170.txt b/fastlane/metadata/android/zh-CN/changelogs/40103170.txt
new file mode 100644
index 0000000000..ad6c6c8702
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103170.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:给任何房间发送你的位置。编辑投票。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.17
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40103180.txt b/fastlane/metadata/android/zh-CN/changelogs/40103180.txt
new file mode 100644
index 0000000000..1db4de49c3
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40103180.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:给任何房间发送你的位置。编辑投票。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.3.18
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104000.txt b/fastlane/metadata/android/zh-CN/changelogs/40104000.txt
new file mode 100644
index 0000000000..6a93e2b20b
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104000.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:消息列的初始实现。消息气泡。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.4.0
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104020.txt b/fastlane/metadata/android/zh-CN/changelogs/40104020.txt
new file mode 100644
index 0000000000..785c09f02a
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104020.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:新增对@room和未公开的投票的支持,还有许多其它小改动。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.4.2
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104040.txt b/fastlane/metadata/android/zh-CN/changelogs/40104040.txt
new file mode 100644
index 0000000000..aafaad4a7c
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104040.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:输入指示器UI更新。多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.4.4
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104060.txt b/fastlane/metadata/android/zh-CN/changelogs/40104060.txt
new file mode 100644
index 0000000000..5c57abccbd
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104060.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:Thread timeline are now live and faster. 多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.4.6
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104070.txt b/fastlane/metadata/android/zh-CN/changelogs/40104070.txt
new file mode 100644
index 0000000000..c7b363a320
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104070.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases/tag/v1.4.7
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104080.txt b/fastlane/metadata/android/zh-CN/changelogs/40104080.txt
new file mode 100644
index 0000000000..44d178cfce
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104080.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:Thread timeline are now live and faster. 多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104100.txt b/fastlane/metadata/android/zh-CN/changelogs/40104100.txt
new file mode 100644
index 0000000000..0c51c9325a
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104100.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:在语音消息中拖动。多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104110.txt b/fastlane/metadata/android/zh-CN/changelogs/40104110.txt
new file mode 100644
index 0000000000..b2c236dc31
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104110.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104120.txt b/fastlane/metadata/android/zh-CN/changelogs/40104120.txt
new file mode 100644
index 0000000000..c0b39f3f92
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104120.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:允许用户显示为离线并为音频附件添加音频播放器
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104130.txt b/fastlane/metadata/android/zh-CN/changelogs/40104130.txt
new file mode 100644
index 0000000000..c0b39f3f92
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104130.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:允许用户显示为离线并为音频附件添加音频播放器
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104140.txt b/fastlane/metadata/android/zh-CN/changelogs/40104140.txt
new file mode 100644
index 0000000000..c9fa249346
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104140.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:改进忽略用户的管理。多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104160.txt b/fastlane/metadata/android/zh-CN/changelogs/40104160.txt
new file mode 100644
index 0000000000..ef4a94f819
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104160.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:更好的加密消息管理。多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104180.txt b/fastlane/metadata/android/zh-CN/changelogs/40104180.txt
new file mode 100644
index 0000000000..b2c236dc31
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104180.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104190.txt b/fastlane/metadata/android/zh-CN/changelogs/40104190.txt
new file mode 100644
index 0000000000..b2c236dc31
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104190.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104200.txt b/fastlane/metadata/android/zh-CN/changelogs/40104200.txt
new file mode 100644
index 0000000000..9dd588cfed
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104200.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:Various bug fixes and stability improvements.
+完整更新日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104220.txt b/fastlane/metadata/android/zh-CN/changelogs/40104220.txt
new file mode 100644
index 0000000000..b2c236dc31
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104220.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:多个bug修复及稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104230.txt b/fastlane/metadata/android/zh-CN/changelogs/40104230.txt
new file mode 100644
index 0000000000..bc5705d3e8
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104230.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:各种bug修复和稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104240.txt b/fastlane/metadata/android/zh-CN/changelogs/40104240.txt
new file mode 100644
index 0000000000..bc5705d3e8
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104240.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:各种bug修复和稳定性改进。
+完整更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104250.txt b/fastlane/metadata/android/zh-CN/changelogs/40104250.txt
new file mode 100644
index 0000000000..1e7bec47dd
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104250.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:各种bug修复和稳定性改进。
+完整的更改日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104260.txt b/fastlane/metadata/android/zh-CN/changelogs/40104260.txt
new file mode 100644
index 0000000000..ce1efba74b
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104260.txt
@@ -0,0 +1,2 @@
+此版本的主要变化:使用UnifiedPush,允许用户在没有FCM的情况下拥有推送。
+完整更新日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104270.txt b/fastlane/metadata/android/zh-CN/changelogs/40104270.txt
new file mode 100644
index 0000000000..5a3edcf1a8
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104270.txt
@@ -0,0 +1,2 @@
+此版本的主要变更:多个bug修复和稳定性改善。
+完整的变更日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/changelogs/40104280.txt b/fastlane/metadata/android/zh-CN/changelogs/40104280.txt
new file mode 100644
index 0000000000..5a3edcf1a8
--- /dev/null
+++ b/fastlane/metadata/android/zh-CN/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+此版本的主要变更:多个bug修复和稳定性改善。
+完整的变更日志:https://github.com/vector-im/element-android/releases
diff --git a/fastlane/metadata/android/zh-CN/full_description.txt b/fastlane/metadata/android/zh-CN/full_description.txt
index 3dae8deb67..9b60098c34 100644
--- a/fastlane/metadata/android/zh-CN/full_description.txt
+++ b/fastlane/metadata/android/zh-CN/full_description.txt
@@ -22,9 +22,9 @@ Element 通过与其他商业协作工具,如 Slack 等应用整合,让你
你可以决定将你的资料与信息储存在何处。没有信息泄露或被第三方爬取的风险。
Element 透过不同的方式让你掌控一切:
-1. 在 Matrix 开发者架设的 matrix.org 公开服务器上取得免费帐号,或是从数千个由志愿者架设的公开服务器中选择
-2. 在你自己的 IT 基础架构上的服务器自行托管你的帐号
-3. 只要订阅 Element Matrix Services 托管平台就可以在自定义的服务器上注册帐号
+1. 在 Matrix 开发者架设的 matrix.org 公开服务器上取得免费账户,或是从数千个由志愿者架设的公开服务器中选择
+2. 在你自己的 IT 基础架构上的服务器自行托管你的账户
+3. 只要订阅 Element Matrix Services 托管平台就可以在自定义的服务器上注册账户
开放信息传递与协作
你可以与 Matrix 网络上的任何人聊天,不论他们是使用 Element、其他 Matrix 应用或其他通讯应用。
@@ -33,7 +33,7 @@ Element 透过不同的方式让你掌控一切:
真正的端到端加密(仅有那些在对话中的可以解密讯息)以及交叉签章装置验证。
完整的通讯与整合
-信息传递、语音与视频通话、文件分享、画面分享与超多的整合、机器人与挂件。建构聊天室、社群、保持联络并完成工作。
+信息传递、语音与视频通话、文件分享、画面分享与超多的整合、机器人与挂件。建构房间、社群、保持联络并完成工作。
从上次离开的地方开始
无论你身在何处,都可以透过在你所有设备与网页 https://app.element.io 间完全同步的信息历史保持联络
diff --git a/fastlane/metadata/android/zh-TW/changelogs/40104280.txt b/fastlane/metadata/android/zh-TW/changelogs/40104280.txt
new file mode 100644
index 0000000000..4bcca9a0b8
--- /dev/null
+++ b/fastlane/metadata/android/zh-TW/changelogs/40104280.txt
@@ -0,0 +1,2 @@
+此版本中的主要變動:多個臭蟲修復與穩定性改善。
+完整的變更紀錄:https://github.com/vector-im/element-android/releases
diff --git a/library/ui-styles/src/main/res/drawable/ic_home_search.xml b/library/ui-styles/src/main/res/drawable/ic_home_search.xml
new file mode 100644
index 0000000000..5cb88ba1e4
--- /dev/null
+++ b/library/ui-styles/src/main/res/drawable/ic_home_search.xml
@@ -0,0 +1,4 @@
+
+
+
diff --git a/library/ui-styles/src/main/res/values/dimens.xml b/library/ui-styles/src/main/res/values/dimens.xml
index 70d051b457..53f1044a12 100644
--- a/library/ui-styles/src/main/res/values/dimens.xml
+++ b/library/ui-styles/src/main/res/values/dimens.xml
@@ -71,4 +71,7 @@
8dp12dp22dp
+
+
+ 112dp
diff --git a/library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml b/library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml
similarity index 79%
rename from library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml
rename to library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml
index 81e377d39b..30ac6229c5 100644
--- a/library/ui-styles/src/main/res/values/stylable_location_live_ended_banner_view.xml
+++ b/library/ui-styles/src/main/res/values/stylable_live_location_ended_banner_view.xml
@@ -1,7 +1,7 @@
-
+
diff --git a/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml b/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml
new file mode 100644
index 0000000000..911167e52a
--- /dev/null
+++ b/library/ui-styles/src/main/res/values/stylable_map_loading_error_view.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/styles_location.xml b/library/ui-styles/src/main/res/values/styles_location.xml
index 41ddbc73ca..ee893046ba 100644
--- a/library/ui-styles/src/main/res/values/styles_location.xml
+++ b/library/ui-styles/src/main/res/values/styles_location.xml
@@ -1,7 +1,7 @@
-
-
-
\ No newline at end of file
+
+
+
+
+
+
+
diff --git a/library/ui-styles/src/main/res/values/text_appearances.xml b/library/ui-styles/src/main/res/values/text_appearances.xml
index 1e60e05acf..570d26fdfd 100644
--- a/library/ui-styles/src/main/res/values/text_appearances.xml
+++ b/library/ui-styles/src/main/res/values/text_appearances.xml
@@ -32,6 +32,15 @@
?vctr_content_primary
+
+
-
\ No newline at end of file
+
diff --git a/library/ui-styles/src/main/res/values/theme_dark.xml b/library/ui-styles/src/main/res/values/theme_dark.xml
index f86a05ed66..9f4e5c1e28 100644
--- a/library/ui-styles/src/main/res/values/theme_dark.xml
+++ b/library/ui-styles/src/main/res/values/theme_dark.xml
@@ -149,6 +149,9 @@
@color/vctr_live_location_dark
+
+
+ @dimen/collapsing_toolbar_layout_medium_size
diff --git a/library/ui-styles/src/main/res/values/theme_light.xml b/library/ui-styles/src/main/res/values/theme_light.xml
index 173b502dcd..c8182abecc 100644
--- a/library/ui-styles/src/main/res/values/theme_light.xml
+++ b/library/ui-styles/src/main/res/values/theme_light.xml
@@ -150,8 +150,12 @@
@color/vctr_live_location_light
+
+
+ @dimen/collapsing_toolbar_layout_medium_size
+
diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle
index ee58db748c..45a962f12c 100644
--- a/matrix-sdk-android/build.gradle
+++ b/matrix-sdk-android/build.gradle
@@ -60,7 +60,7 @@ android {
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'
- buildConfigField "String", "SDK_VERSION", "\"1.4.30\""
+ buildConfigField "String", "SDK_VERSION", "\"1.4.32\""
buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\""
@@ -199,7 +199,7 @@ dependencies {
implementation libs.apache.commonsImaging
// Phone number https://github.com/google/libphonenumber
- implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.52'
+ implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.53'
testImplementation libs.tests.junit
// Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt
index 6383412ffb..ccefd5855f 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/SpaceFilter.kt
@@ -35,9 +35,19 @@ sealed interface SpaceFilter {
* Used to get all the rooms that do not have the provided space in their parent hierarchy.
*/
data class ExcludeSpace(val spaceId: String) : SpaceFilter
+
+ /**
+ * Used to apply no filtering to the space.
+ */
+ object NoFilter : SpaceFilter
}
/**
* Return a [SpaceFilter.ActiveSpace] if the String is not null, or [SpaceFilter.OrphanRooms].
*/
fun String?.toActiveSpaceOrOrphanRooms(): SpaceFilter = this?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.OrphanRooms
+
+/**
+ * Return a [SpaceFilter.ActiveSpace] if the String is not null, or [SpaceFilter.NoFilter].
+ */
+fun String?.toActiveSpaceOrNoFilter(): SpaceFilter = this?.let { SpaceFilter.ActiveSpace(it) } ?: SpaceFilter.NoFilter
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt
index 00c6da00b7..60963ef25a 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt
@@ -86,7 +86,7 @@ data class RoomSummaryQueryParams(
/**
* Used to filter room using the current space.
*/
- val spaceFilter: SpaceFilter?,
+ val spaceFilter: SpaceFilter,
) {
/**
@@ -101,7 +101,7 @@ data class RoomSummaryQueryParams(
var roomTagQueryFilter: RoomTagQueryFilter? = null
var excludeType: List? = listOf(RoomType.SPACE)
var includeType: List? = null
- var spaceFilter: SpaceFilter? = null
+ var spaceFilter: SpaceFilter = SpaceFilter.NoFilter
fun build() = RoomSummaryQueryParams(
displayName = displayName,
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/StringOrderUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/StringOrderUtils.kt
index 83c8585941..1de0a36034 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/StringOrderUtils.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/StringOrderUtils.kt
@@ -76,7 +76,7 @@ object StringOrderUtils {
}
fun stringToBase(x: String, alphabet: CharArray): BigInteger {
- if (x.isEmpty()) throw IllegalArgumentException()
+ require(x.isNotEmpty())
val len = alphabet.size.toBigInteger()
var result = BigInteger("0")
x.reversed().forEachIndexed { index, c ->
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt
index 96d97a41d7..771b5f9a62 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt
@@ -535,7 +535,7 @@ internal class MXMegolmEncryption(
@Throws
override suspend fun shareHistoryKeysWithDevice(inboundSessionWrapper: InboundGroupSessionHolder, deviceInfo: CryptoDeviceInfo) {
- if (!inboundSessionWrapper.wrapper.sessionData.sharedHistory) throw IllegalArgumentException("This key can't be shared")
+ require(inboundSessionWrapper.wrapper.sessionData.sharedHistory) { "This key can't be shared" }
Timber.tag(loggerTag.value).i("process shareHistoryKeys for ${inboundSessionWrapper.wrapper.safeSessionId} to ${deviceInfo.shortDebugString()}")
val userId = deviceInfo.userId
val deviceId = deviceInfo.deviceId
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt
index 821663bcff..8a805a5588 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt
@@ -63,7 +63,7 @@ internal class VerificationMessageProcessor @Inject constructor(
// the message should be ignored by the receiver.
if (!VerificationService.isValidRequest(event.ageLocalTs, clock.epochMillis())) return Unit.also {
- Timber.d("## SAS Verification live observer: msgId: ${event.eventId} is outdated age:$event.ageLocalTs ms")
+ Timber.d("## SAS Verification live observer: msgId: ${event.eventId} is outdated age:${event.ageLocalTs} ms")
}
Timber.v("## SAS Verification live observer: received msgId: ${event.eventId} type: ${event.getClearType()}")
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/queue/EventSenderProcessorThread.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/queue/EventSenderProcessorThread.kt
index c5b13043d7..51107c9655 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/queue/EventSenderProcessorThread.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/queue/EventSenderProcessorThread.kt
@@ -119,7 +119,7 @@ internal class EventSenderProcessorThread @Inject constructor(
override fun cancel(eventId: String, roomId: String) {
(currentTask as? SendEventQueuedTask)
- ?.takeIf { it -> it.event.eventId == eventId && it.event.roomId == roomId }
+ ?.takeIf { it.event.eventId == eventId && it.event.roomId == roomId }
?.cancel()
}
diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt
index 9d14ebffdd..82fc94df7c 100644
--- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt
+++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt
@@ -317,7 +317,7 @@ internal class RoomSummaryDataSource @Inject constructor(
is SpaceFilter.ExcludeSpace -> {
query.not().contains(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, queryParams.spaceFilter.spaceId)
}
- null -> Unit // nop
+ SpaceFilter.NoFilter -> Unit // nop
}
return query
diff --git a/tools/danger/dangerfile-lint.js b/tools/danger/dangerfile-lint.js
new file mode 100644
index 0000000000..b0531fef9b
--- /dev/null
+++ b/tools/danger/dangerfile-lint.js
@@ -0,0 +1,29 @@
+import { schedule } from 'danger'
+
+/**
+ * Ref and documentation: https://github.com/damian-burke/danger-plugin-lint-report
+ * This file will check all the error in XML Checkstyle format.
+ * It covers, lint, ktlint, and detekt errors
+ */
+
+const reporter = require("danger-plugin-lint-report")
+schedule(reporter.scan({
+ /**
+ * File mask used to find XML checkstyle reports.
+ */
+ fileMask: "**/reports/**/**.xml",
+ /**
+ * If set to true, the severity will be used to switch between the different message formats (message, warn, fail).
+ */
+ reportSeverity: true,
+ /**
+ * If set to true, only issues will be reported that are contained in the current changeset (line comparison).
+ * If set to false, all issues that are in modified files will be reported.
+ */
+ requireLineModification: false,
+ /**
+ * Optional: Sets a prefix foreach violation message.
+ * This can be useful if there are multiple reports being parsed to make them distinguishable.
+ */
+ // outputPrefix?: ""
+}))
diff --git a/tools/danger/dangerfile.js b/tools/danger/dangerfile.js
new file mode 100644
index 0000000000..4efd236419
--- /dev/null
+++ b/tools/danger/dangerfile.js
@@ -0,0 +1,107 @@
+const {danger, warn} = require('danger')
+
+/**
+ * Note: if you update the checks in this file, please also update the file ./docs/danger.md
+ */
+
+// Useful to see what we got in danger object
+// warn(JSON.stringify(danger))
+
+const pr = danger.github.pr
+const github = danger.github
+// User who has created the PR.
+const user = pr.user.login
+const modified = danger.git.modified_files
+const created = danger.git.created_files
+const editedFiles = [...modified, ...created]
+
+// Check that the PR has a description
+if (pr.body.length == 0) {
+ warn("Please provide a description for this PR.")
+}
+
+// Warn when there is a big PR
+if (editedFiles.length > 50) {
+ message("This pull request seems relatively large. Please consider splitting it into multiple smaller ones.")
+}
+
+// Request a changelog for each PR
+const changelogAllowList = [
+ "dependabot[bot]",
+]
+
+const requiresChangelog = !changelogAllowList.includes(user)
+
+if (requiresChangelog) {
+ const changelogFiles = editedFiles.filter(file => file.startsWith("changelog.d/"))
+
+ if (changelogFiles.length == 0) {
+ warn("Please add a changelog. See instructions [here](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md#changelog)")
+ } else {
+ const validTowncrierExtensions = [
+ "bugfix",
+ "doc",
+ "feature",
+ "misc",
+ "sdk",
+ "wip",
+ ]
+ if (!changelogFiles.every(file => validTowncrierExtensions.includes(file.split(".").pop()))) {
+ fail("Invalid extension for changelog. See instructions [here](https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md#changelog)")
+ }
+ }
+}
+
+// Check for a sign-off
+const signOff = "Signed-off-by:"
+
+// Please add new names following the alphabetical order.
+const allowList = [
+ "aringenbach",
+ "BillCarsonFr",
+ "bmarty",
+ "Claire1817",
+ "dependabot[bot]",
+ "ericdecanini",
+ "fedrunov",
+ "Florian14",
+ "ganfra",
+ "jmartinesp",
+ "langleyd",
+ "MadLittleMods",
+ "manuroe",
+ "mnaturel",
+ "onurays",
+ "ouchadam",
+ "stefanceriu",
+ "yostyle",
+]
+
+const requiresSignOff = !allowList.includes(user)
+
+if (requiresSignOff) {
+ const hasPRBodySignOff = pr.body.includes(signOff)
+ const hasCommitSignOff = danger.git.commits.every(commit => commit.message.includes(signOff))
+ if (!hasPRBodySignOff && !hasCommitSignOff) {
+ fail("Please add a sign-off to either the PR description or to the commits themselves. See instructions [here](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#sign-off).")
+ }
+}
+
+// Check for screenshots on view changes
+const hasChangedViews = editedFiles.filter(file => file.includes("/layout")).length > 0
+if (hasChangedViews) {
+ if (!pr.body.includes("user-images")) {
+ warn("You seem to have made changes to views. Please consider adding screenshots.")
+ }
+}
+
+// Check for pngs on resources
+const hasPngs = editedFiles.filter(file => file.toLowerCase().endsWith(".png")).length > 0
+if (hasPngs) {
+ warn("You seem to have made changes to some images. Please consider using an vector drawable.")
+}
+
+// Check for reviewers
+if (github.requested_reviewers.users.length == 0 && !pr.draft) {
+ warn("Please add a reviewer to your PR.")
+}
diff --git a/tools/detekt/detekt.yml b/tools/detekt/detekt.yml
index a836edc47a..96adb3d117 100644
--- a/tools/detekt/detekt.yml
+++ b/tools/detekt/detekt.yml
@@ -23,6 +23,8 @@ style:
active: false
ProtectedMemberInFinalClass:
active: false
+ UseCheckOrError:
+ active: false
empty-blocks:
EmptyFunctionBlock:
@@ -43,6 +45,8 @@ exceptions:
active: false
TooGenericExceptionThrown:
active: false
+ InstanceOfCheckForException:
+ active: false
complexity:
TooManyFunctions:
diff --git a/tools/travis/check_pr.sh b/tools/travis/check_pr.sh
deleted file mode 100755
index d8d95879e2..0000000000
--- a/tools/travis/check_pr.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env bash
-
-#
-# Copyright 2018 New Vector Ltd
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-branch=${TRAVIS_BRANCH}
-
-# echo ${TRAVIS_BRANCH}
-
-# If not on develop, exit, else we cannot get the list of modified files
-# It is ok to check only when on develop branch
-if [[ "${branch}" -eq 'develop' ]]; then
- echo "Check that a file has been added to /changelog.d"
-else
- echo "Not on develop branch"
- exit 0
-fi
-
-# git status
-
-listOfModifiedFiles=`git diff --name-only HEAD ${branch}`
-
-# echo "List of modified files by this PR:"
-# echo ${listOfModifiedFiles}
-
-
-if [[ ${listOfModifiedFiles} = *"changelog.d"* ]]; then
- echo "A file has been added to /changelog.d!"
-else
- echo "❌ Please add a file describing your changes in /changelog.d. See https://github.com/vector-im/element-android/blob/develop/CONTRIBUTING.md#changelog"
- exit 1
-fi
diff --git a/vector-config/src/main/java/im/vector/app/config/Analytics.kt b/vector-config/src/main/java/im/vector/app/config/Analytics.kt
new file mode 100644
index 0000000000..7fdc78dc8a
--- /dev/null
+++ b/vector-config/src/main/java/im/vector/app/config/Analytics.kt
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.config
+
+/**
+ * The types of analytics Element currently supports.
+ */
+sealed interface Analytics {
+
+ /**
+ * Disables the analytics integrations.
+ */
+ object Disabled : Analytics
+
+ /**
+ * Analytics integration via PostHog.
+ */
+ data class PostHog(
+ /**
+ * The PostHog instance url.
+ */
+ val postHogHost: String,
+
+ /**
+ * The PostHog instance API key.
+ */
+ val postHogApiKey: String,
+
+ /**
+ * A URL to more information about the analytics collection.
+ */
+ val policyLink: String,
+ ) : Analytics
+}
diff --git a/vector-config/src/main/java/im/vector/app/config/Config.kt b/vector-config/src/main/java/im/vector/app/config/Config.kt
index 7577e6dba5..f660799d06 100644
--- a/vector-config/src/main/java/im/vector/app/config/Config.kt
+++ b/vector-config/src/main/java/im/vector/app/config/Config.kt
@@ -36,4 +36,57 @@ object Config {
* - Changing the value from `true` to `false` will force the app to return to the background sync / Firebase Push.
*/
const val ALLOW_EXTERNAL_UNIFIED_PUSH_DISTRIBUTORS = true
+
+ const val ENABLE_LOCATION_SHARING = true
+ const val LOCATION_MAP_TILER_KEY = "fU3vlMsMn4Jb6dnEIFsx"
+
+ /**
+ * The maximum length of voice messages in milliseconds.
+ */
+ const val VOICE_MESSAGE_LIMIT_MS = 120_000L
+
+ /**
+ * The strategy for sharing device keys.
+ */
+ val KEY_SHARING_STRATEGY = KeySharingStrategy.WhenTyping
+
+ /**
+ * The onboarding flow.
+ */
+ val ONBOARDING_VARIANT = OnboardingVariant.FTUE_AUTH
+
+ /**
+ * If set, MSC3086 asserted identity messages sent on VoIP calls will cause the call to appear in the room corresponding to the asserted identity.
+ * This *must* only be set in trusted environments.
+ */
+ const val HANDLE_CALL_ASSERTED_IDENTITY_EVENTS = false
+
+ const val LOW_PRIVACY_LOG_ENABLE = false
+ const val ENABLE_STRICT_MODE_LOGS = false
+
+ /**
+ * The analytics configuration to use for the Debug build type.
+ * Can be disabled by providing Analytics.Disabled
+ */
+ val DEBUG_ANALYTICS_CONFIG = Analytics.PostHog(
+ postHogHost = "https://posthog.element.dev",
+ postHogApiKey = "phc_VtA1L35nw3aeAtHIx1ayrGdzGkss7k1xINeXcoIQzXN",
+ policyLink = "https://element.io/cookie-policy",
+ )
+
+ /**
+ * The analytics configuration to use for the Release build type.
+ * Can be disabled by providing Analytics.Disabled
+ */
+ val RELEASE_ANALYTICS_CONFIG = Analytics.PostHog(
+ postHogHost = "https://posthog.hss.element.io",
+ postHogApiKey = "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
+ policyLink = "https://element.io/cookie-policy",
+ )
+
+ /**
+ * The analytics configuration to use for the Nightly build type.
+ * Can be disabled by providing Analytics.Disabled
+ */
+ val NIGHTLY_ANALYTICS_CONFIG = RELEASE_ANALYTICS_CONFIG
}
diff --git a/vector/src/release/java/im/vector/app/config/AnalyticsConfig.kt b/vector-config/src/main/java/im/vector/app/config/KeySharingStrategy.kt
similarity index 50%
rename from vector/src/release/java/im/vector/app/config/AnalyticsConfig.kt
rename to vector-config/src/main/java/im/vector/app/config/KeySharingStrategy.kt
index e1427338b2..51f3d81151 100644
--- a/vector/src/release/java/im/vector/app/config/AnalyticsConfig.kt
+++ b/vector-config/src/main/java/im/vector/app/config/KeySharingStrategy.kt
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 New Vector Ltd
+ * Copyright (c) 2022 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,17 +16,20 @@
package im.vector.app.config
-import im.vector.app.BuildConfig
-import im.vector.app.features.analytics.AnalyticsConfig
+enum class KeySharingStrategy {
+ /**
+ * Keys will be sent for the first time when the first message is sent.
+ * This is handled by the Matrix SDK so there's no need to do it in Vector.
+ */
+ WhenSendingEvent,
-private val allowedPackageList = listOf(
- "im.vector.app",
- "im.vector.app.nightly",
-)
+ /**
+ * Keys will be sent for the first time when the timeline displayed.
+ */
+ WhenEnteringRoom,
-val analyticsConfig: AnalyticsConfig = object : AnalyticsConfig {
- override val isEnabled = BuildConfig.APPLICATION_ID in allowedPackageList
- override val postHogHost = "https://posthog.hss.element.io"
- override val postHogApiKey = "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO"
- override val policyLink = "https://element.io/cookie-policy"
+ /**
+ * Keys will be sent for the first time when a typing started.
+ */
+ WhenTyping
}
diff --git a/vector-config/src/main/java/im/vector/app/config/OnboardingVariant.kt b/vector-config/src/main/java/im/vector/app/config/OnboardingVariant.kt
new file mode 100644
index 0000000000..ae8cfd1172
--- /dev/null
+++ b/vector-config/src/main/java/im/vector/app/config/OnboardingVariant.kt
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.config
+
+enum class OnboardingVariant {
+ LEGACY,
+ LOGIN_2,
+ FTUE_AUTH
+}
diff --git a/vector/build.gradle b/vector/build.gradle
index 0f65da4c2e..dc0a2da35d 100644
--- a/vector/build.gradle
+++ b/vector/build.gradle
@@ -27,6 +27,7 @@ knit {
exclude '**/.gradle/**'
exclude '**/towncrier/template.md'
exclude '**/CHANGES.md'
+ exclude '/node_modules'
}
}
@@ -36,7 +37,7 @@ ext.versionMinor = 4
// Note: even values are reserved for regular release, odd values for hotfix release.
// When creating a hotfix, you should decrease the value, since the current value
// is the value for the next regular release.
-ext.versionPatch = 30
+ext.versionPatch = 32
static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct'
@@ -155,19 +156,6 @@ android {
buildConfigField "String", "GIT_BRANCH_NAME", "\"${gitBranchName()}\""
buildConfigField "String", "BUILD_NUMBER", "\"${buildNumber}\""
- buildConfigField "im.vector.app.features.VectorFeatures.OnboardingVariant", "ONBOARDING_VARIANT", "im.vector.app.features.VectorFeatures.OnboardingVariant.FTUE_AUTH"
-
- buildConfigField "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy", "outboundSessionKeySharingStrategy", "im.vector.app.features.crypto.keysrequest.OutboundSessionKeySharingStrategy.WhenTyping"
-
- buildConfigField "Long", "VOICE_MESSAGE_DURATION_LIMIT_MS", "120_000L"
-
- // If set, MSC3086 asserted identity messages sent on VoIP calls will cause the call to appear in the room corresponding to the asserted identity.
- // This *must* only be set in trusted environments.
- buildConfigField "Boolean", "handleCallAssertedIdentityEvents", "false"
-
- buildConfigField "Boolean", "enableLocationSharing", "true"
- buildConfigField "String", "mapTilerKey", "\"fU3vlMsMn4Jb6dnEIFsx\""
-
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
// Keep abiFilter for the universalApk
@@ -249,10 +237,6 @@ android {
resValue "string", "app_name", "Element dbg"
resValue "color", "launcher_background", "#0DBD8B"
- buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
- // Set to true if you want to enable strict mode in debug
- buildConfigField "boolean", "ENABLE_STRICT_MODE_LOGS", "false"
-
signingConfig signingConfigs.debug
if (project.hasProperty("coverage")) {
@@ -264,10 +248,6 @@ android {
resValue "string", "app_name", "Element"
resValue "color", "launcher_background", "#0DBD8B"
- buildConfigField "boolean", "LOW_PRIVACY_LOG_ENABLE", "false"
- buildConfigField "boolean", "ENABLE_STRICT_MODE_LOGS", "false"
-
- // When updating this block, please also update the same block in the `nightly` buildType below
postprocessing {
removeUnusedCode true
removeUnusedResources true
@@ -328,7 +308,6 @@ android {
versionName "${versionMajor}.${versionMinor}.${versionPatch}${getGplayVersionSuffix()}"
resValue "bool", "isGplay", "true"
- buildConfigField "boolean", "ALLOW_FCM_USE", "true"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"G\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"GooglePlay\""
}
@@ -339,7 +318,6 @@ android {
versionName "${versionMajor}.${versionMinor}.${versionPatch}${getFdroidVersionSuffix()}"
resValue "bool", "isGplay", "false"
- buildConfigField "boolean", "ALLOW_FCM_USE", "false"
buildConfigField "String", "SHORT_FLAVOR_DESCRIPTION", "\"F\""
buildConfigField "String", "FLAVOR_DESCRIPTION", "\"FDroid\""
}
@@ -437,7 +415,7 @@ dependencies {
implementation 'com.facebook.stetho:stetho:1.6.0'
// Phone number https://github.com/google/libphonenumber
- implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.52'
+ implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.53'
// FlowBinding
implementation libs.github.flowBinding
diff --git a/vector/lint.xml b/vector/lint.xml
index d9ca761e7a..b4b6ebc12f 100644
--- a/vector/lint.xml
+++ b/vector/lint.xml
@@ -102,6 +102,7 @@
+
diff --git a/vector/src/androidTest/java/im/vector/app/features/pin/lockscreen/crypto/KeyStoreCryptoTests.kt b/vector/src/androidTest/java/im/vector/app/features/pin/lockscreen/crypto/KeyStoreCryptoTests.kt
index 6e02cc0262..1712ec889e 100644
--- a/vector/src/androidTest/java/im/vector/app/features/pin/lockscreen/crypto/KeyStoreCryptoTests.kt
+++ b/vector/src/androidTest/java/im/vector/app/features/pin/lockscreen/crypto/KeyStoreCryptoTests.kt
@@ -18,6 +18,7 @@ package im.vector.app.features.pin.lockscreen.crypto
import android.os.Build
import android.security.keystore.KeyPermanentlyInvalidatedException
+import android.security.keystore.UserNotAuthenticatedException
import androidx.test.platform.app.InstrumentationRegistry
import im.vector.app.TestBuildVersionSdkIntProvider
import io.mockk.every
@@ -69,10 +70,12 @@ class KeyStoreCryptoTests {
runCatching { keyStoreCrypto.ensureKey() }
keyStoreCrypto.hasValidKey() shouldBe true
- val exception = KeyPermanentlyInvalidatedException()
- every { secretStoringUtils.getEncryptCipher(any()) } throws exception
+ val keyInvalidatedException = KeyPermanentlyInvalidatedException()
+ every { secretStoringUtils.getEncryptCipher(any()) } throws keyInvalidatedException
+ keyStoreCrypto.hasValidKey() shouldBe false
- runCatching { keyStoreCrypto.ensureKey() }
+ val userNotAuthenticatedException = UserNotAuthenticatedException()
+ every { secretStoringUtils.getEncryptCipher(any()) } throws userNotAuthenticatedException
keyStoreCrypto.hasValidKey() shouldBe false
}
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
index 8fe65bd387..d7e402c4dc 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugFeaturesStateFactory.kt
@@ -70,6 +70,11 @@ class DebugFeaturesStateFactory @Inject constructor(
key = DebugFeatureKeys.allowExternalUnifiedPushDistributors,
factory = VectorFeatures::allowExternalUnifiedPushDistributors
),
+ createBooleanFeature(
+ label = "Enable Live Location Sharing",
+ key = DebugFeatureKeys.liveLocationSharing,
+ factory = VectorFeatures::isLocationSharingEnabled
+ ),
createBooleanFeature(
label = "Force usage of OpusEncoder library",
key = DebugFeatureKeys.forceUsageOfOpusEncoder,
diff --git a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
index 23aad65653..031ff11d59 100644
--- a/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
+++ b/vector/src/debug/java/im/vector/app/features/debug/features/DebugVectorFeatures.kt
@@ -24,6 +24,7 @@ import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import androidx.datastore.preferences.core.stringPreferencesKey
import androidx.datastore.preferences.preferencesDataStore
+import im.vector.app.config.OnboardingVariant
import im.vector.app.features.DefaultVectorFeatures
import im.vector.app.features.VectorFeatures
import kotlinx.coroutines.flow.first
@@ -39,8 +40,8 @@ class DebugVectorFeatures(
private val dataStore = context.dataStore
- override fun onboardingVariant(): VectorFeatures.OnboardingVariant {
- return readPreferences().getEnum() ?: vectorFeatures.onboardingVariant()
+ override fun onboardingVariant(): OnboardingVariant {
+ return readPreferences().getEnum() ?: vectorFeatures.onboardingVariant()
}
override fun isOnboardingAlreadyHaveAccountSplashEnabled(): Boolean = read(DebugFeatureKeys.onboardingAlreadyHaveAnAccount)
@@ -66,6 +67,9 @@ class DebugVectorFeatures(
override fun isScreenSharingEnabled(): Boolean = read(DebugFeatureKeys.screenSharing)
?: vectorFeatures.isScreenSharingEnabled()
+ override fun isLocationSharingEnabled(): Boolean = read(DebugFeatureKeys.liveLocationSharing)
+ ?: vectorFeatures.isLocationSharingEnabled()
+
override fun forceUsageOfOpusEncoder(): Boolean = read(DebugFeatureKeys.forceUsageOfOpusEncoder)
?: vectorFeatures.forceUsageOfOpusEncoder()
diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml
index fa89013707..b8cb22e72d 100644
--- a/vector/src/main/AndroidManifest.xml
+++ b/vector/src/main/AndroidManifest.xml
@@ -347,7 +347,7 @@
-
+
@@ -377,7 +377,7 @@
diff --git a/vector/src/main/java/im/vector/app/SpaceStateHandler.kt b/vector/src/main/java/im/vector/app/SpaceStateHandler.kt
new file mode 100644
index 0000000000..d9f002be37
--- /dev/null
+++ b/vector/src/main/java/im/vector/app/SpaceStateHandler.kt
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app
+
+import androidx.lifecycle.DefaultLifecycleObserver
+import arrow.core.Option
+import kotlinx.coroutines.flow.Flow
+import org.matrix.android.sdk.api.session.Session
+import org.matrix.android.sdk.api.session.room.model.RoomSummary
+
+/**
+ * Gets info about the current space the user has navigated to, any space backstack they may have
+ * and handles switching to different spaces.
+ */
+interface SpaceStateHandler : DefaultLifecycleObserver {
+
+ /**
+ * Gets the current space the current user has navigated to.
+ *
+ * @return null if the user is not in
+ */
+ fun getCurrentSpace(): RoomSummary?
+
+ /**
+ * Sets the new space the current user is navigating to.
+ *
+ * @param spaceId the id of the space being navigated to
+ * @param session the current active session
+ * @param persistNow if true, the current space will immediately be persisted in shared prefs
+ * @param isForwardNavigation whether this navigation is a forward action to properly handle backstack
+ */
+ fun setCurrentSpace(
+ spaceId: String?,
+ session: Session? = null,
+ persistNow: Boolean = false,
+ isForwardNavigation: Boolean = true,
+ )
+
+ /**
+ * Gets the current backstack of spaces (via their id).
+ *
+ * null may be an entry in the ArrayDeque to indicate the root space (All Chats)
+ */
+ fun getSpaceBackstack(): ArrayDeque
+
+ /**
+ * Gets a flow of the selected space for clients to react immediately to space changes.
+ */
+ fun getSelectedSpaceFlow(): FlowKe laporan dibaca${app_name} tidak mendukung peristiwa dengan tipe \'%1$s\'Pesan langsung
- Bawaan di %1$s
+ Standar di %1$sKustom (%1$d) di %2$sAdmin di %1$sModerator di %1$s
@@ -1579,7 +1579,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.Bersihkan data personalKata sandiMasuk
- Masuk untuk memulihkan kunci enkripsi yang disimpan khusus di perangkat ini. Anda memerlukannya untuk melihat semua pesan di perangkat apapun secara aman.
+ Masuk untuk memulihkan kunci enkripsi yang disimpan khusus di perangkat ini. Anda memerlukannya untuk melihat semua pesan di perangkat apa pun secara aman.MasukAnda telah keluarMasuk lagi
@@ -1651,7 +1651,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.Ketuk tautan untuk mengkonfirmasi kata sandi baru Anda. Setelah Anda mengikuti petunjuk yang ada di tautan, klik bawahnya.Email verifikasi terkirim ke %1$s.Cek kotak masuk Anda
- Email ini tidak tertaut dengan akun apapun
+ Email ini tidak tertaut dengan akun apa punLanjutMengubah kata sandi Anda akan mengatur ulang kunci enkripsi ujung-ke-ujung pada semua sesi Anda, yang akan membuat riwayat obrolan terenkripsi tidak dapat dibaca. Atur Cadangan Kunci atau ekspor kunci ruangan Anda dari sesi lain sebelum mengatur ulang kata sandi Anda.Peringatan!
@@ -2265,7 +2265,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Kebijakan ${app_name}Anda dapat mematikannya kapan saja di pengaturanKami tidak membagikan informasi ini dengan pihak ketiga
- Kami tidak merekam atau memprofil data akun apapun
+ Kami tidak merekam atau memprofil data akun apa pundi siniBantu kami mengidentifikasi masalah-masalah dan membuat ${app_name} lebih baik dengan membagikan data penggunaan anonim. Untuk memahami bagaimana orang-orang menggunakan beberapa perangkat-perangkat, kami akan membuat pengenal acak, yang dibagikan oleh perangkat Anda.
\n
@@ -2314,7 +2314,7 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.LokasiEnkripsi telah dikonfigurasi dengan salah sehingga Anda tidak dapat mengirim pesan. Klik untuk membuka pengaturan.Enkripsi telah dikonfigurasi dengan salah sehingga Anda tidak dapat mengirim pesan. Mohon hubungi sebuah admin untuk memulihkan enkripsi ke status yang valid.
- Belum yakin\? Anda dapat %s
+ Belum yakin\? %sTampilkan gelembung pesanGagal untuk memuat petaPeta
@@ -2322,11 +2322,11 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Aktifkan Pesan UtasanHubungkan ke serverIngin bergabung ke server yang sudah ada\?
- melewati pertanyaan ini
+ Lewati pertanyaan iniKomunitasTimTeman dan keluarga
- Kami akan membantu Anda untuk terhubung.
+ Kami akan membantu Anda untuk terhubungSiapa saja yang sering Anda chat\?Anda sudah menampilkan utasan ini!Tampilkan Di Ruangan
@@ -2380,16 +2380,16 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Homeserver tidak menerima nama pengguna dengan hanya angka.LewatiSimpan dan lanjutkan
- Preferensi Anda telah disimpan.
- Anda siap!
+ Pergi ke pengaturan kapan saja untuk memperbarui profil Anda
+ Kelihatan bagus!Ayo
- Anda dapat mengubahnya kapan saja.
+ Saatnya pasang wajah pada namaTambahkan sebuah foto profilAnda dapat mengubahnya nantiNama TampilanIni akan ditampilkan ketika Anda mengirim pesan.Pilih nama tampilan
- Akun %s Anda telah dibuat.
+ Akun %s Anda telah dibuatSelamat!Kembalikan saya ke berandaUbah profil
@@ -2489,4 +2489,56 @@ Di masa mendatang proses verifikasi ini akan dimutakhirkan.
Kirim pesan pertama Anda untuk mengundang %s ke obrolanPesan di obrolan ini akan dienkripsi secara ujung-ke-ujung.Mulai
+ Ikuti petunjuk yang terkirim ke %s
+ Untuk mengonfirmasi email Anda, ketuk tombol dalam email yang kami kirim ke %s
+
+ %d pesan dihapus
+
+ Bagikan lokasi
+ Anda harus mempunyai izin yang diperlukan untuk membagikan lokasi di ruangan ini.
+ Anda tidak memiliki izin untuk membagikan lokasi
+ Tidak dapat membuka tautan ini: komunitas telah digantikan dengan space
+ Nama Pengguna / Email / Telepon
+ Apakah Anda seorang manusia\?
+ Atur ulang kata sandi
+ Lupa kata sandi
+ Kirim ulang email
+ Belum menerima email\?
+ Periksa email Anda untuk memverifikasi.
+ Kirim ulang kode
+ Sebuah kode terkirim ke %s
+ Konfirmasi nomor telepon Anda
+ Keluarkan semua perangkat
+ Atur ulang kata sandi
+ Pastikan itu 8 karakter atau lebih.
+ Pilih kata sandi baru
+ Kata Sandi Baru
+ Periksa email Anda.
+ %s akan mengirim Anda sebuah tautan verifikasi
+ Kode konfirmasi
+ Nomor Telepon
+ %s harus memverifikasi akun Anda
+ Masukkan nomor telepon Anda
+ Email
+ %s harus memverifikasi akun Anda
+ Masukkan email Anda
+ Mohon baca ketentuan dan kebijakan %s
+ Kebijakan server
+ Hubungi kami
+ Element Matrix Services (EMS) adalah layanan kokoh dan dapat diandalkan untuk komunikasi waktu nyata aman dan cepat. Pelajari lebih lanjut di element.io/ems
+ Ingin menghost server Anda sendiri\?
+ URL Server
+ Apa alamat server Anda\? Ini seperti rumah untuk semua data Anda
+ Pilih server Anda
+ Selamat datang kembali!
+ Edit
+ Atau
+ Di mana percakapan Anda akan tinggal
+ Harus 8 karakter atau lebih
+ Orang lain dapat menemukan Anda %s
+ Buat akun Anda
+ Gunakan bawaan sistem
+ Pilih secara manual
+ Atur secara otomatis
+ Pilih ukuran font
\ No newline at end of file
diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml
index 140b63e4c8..6dbdffd27e 100644
--- a/vector/src/main/res/values-it/strings.xml
+++ b/vector/src/main/res/values-it/strings.xml
@@ -1450,7 +1450,7 @@
Inviti spediti a %1$s e ad altri %2$dImpossibile invitare gli utenti. Controlla gli utenti che vuoi invitare e riprova.
- Messaggio eliminato
+ Messaggio rimossoMostra messaggi rimossiMostra un segnaposto per i messaggi rimossiTi abbiamo inviato un\'email di conferma a %s, controlla la tua posta e clicca il link di conferma
@@ -2355,12 +2355,12 @@
Attiva messaggi in conversazioniConnetti al serverVuoi unirti ad un server esistente\?
- saltare questa domanda
- Ancora non lo sai\? Puoi %s
+ Salta questa domanda
+ Ancora non lo sai\? %sComunitàSquadreAmici e famiglia
- Vi aiuteremo a connettervi.
+ Vi aiuteremo a connetterviCon chi parlerai di più\?Stai già visualizzando questa conversazione!Vedi nella stanza
@@ -2417,16 +2417,16 @@
L\'homeserver non accetta nomi utente con solo numeri.Salta questo passoSalva e continua
- Le tue preferenze sono state salvate.
- Tutto pronto!
+ Vai nelle impostazioni quando vuoi per aggiornare il tuo profilo
+ Stai bene!Andiamo
- Puoi cambiarla in qualsiasi momento.
+ È ora di dare una faccia al nomeAggiungi un\'immagine del profiloPuoi cambiarlo in seguitoNome da mostrareVerrà mostrato quando invii messaggi.Scegli un nome da mostrare
- Il tuo account %s è stato creato.
+ Il tuo account %s è stato creatoCongratulazioni!Personalizza profiloDisattiva
@@ -2526,4 +2526,57 @@
Invia il primo messaggio per invitare %s a parlareI messaggi in questa conversazione saranno cifrati end-to-end.Vai
+
+ %d messaggio rimosso
+ %d messaggi rimossi
+
+ Condividi posizione
+ Devi avere le giuste autorizzazioni per potere condividere la posizione in tempo reale in questa stanza.
+ Non hai l\'autorizzazione di condividere la posizione in tempo reale
+ Impossibile aprire questo link: le comunità sono state sostituite dagli spazi
+ Nome utente / Email / Telefono
+ Sei un umano\?
+ Segui le istruzioni inviate a %s
+ Password reimpostata
+ Password dimenticata
+ Reinvia email
+ Non hai ricevuto un\'email\?
+ Per confermare l\'email, tocca il pulsante nell\'email che abbiamo appena inviato a %s
+ Controlla l\'email per verificare.
+ Reinvia codice
+ È stato inviato un codice a %s
+ Conferma il tuo numero di telefono
+ Disconnetti tutti i dispositivi
+ Reimposta la password
+ Assicurati che sia almeno di 8 caratteri.
+ Scegli una nuova password
+ Nuova password
+ Controlla la tua email.
+ %s ti invierà un link di verifica
+ Codice di conferma
+ Numero di telefono
+ %s deve verificare il tuo account
+ Inserisci il tuo numero di telefono
+ Email
+ %s deve verificare il tuo account
+ Inserisci la tua email
+ Leggi i termini e le condizioni di %s
+ Politiche del server
+ Mettiti in contatto
+ Element Matrix Services (EMS) è un servizio di hosting robusto e affidabile per comunicazioni veloci, sicure e in tempo reale. Scopri come su element.io/ems
+ Vuoi ospitare un tuo server\?
+ URL server
+ Qual è l\'indirizzo del tuo server\? È come una casa per tutti i tuoi dati
+ Seleziona il tuo server
+ Bentornato/a!
+ Modifica
+ O
+ Dove vivranno le tue conversazioni
+ Deve essere di almeno 8 caratteri
+ Gli altri ti possono trovare come %s
+ Crea il tuo account
+ Usa la predefinita di sistema
+ Scegli manualmente
+ Imposta automaticamente
+ Scegli dimensione caratteri
\ No newline at end of file
diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml
index a9d9dd3658..2c66e51960 100644
--- a/vector/src/main/res/values-nl/strings.xml
+++ b/vector/src/main/res/values-nl/strings.xml
@@ -2364,12 +2364,12 @@
Discussieberichten inschakelenVerbinding maken met serverWilt u lid worden van een bestaande server\?
- sla deze vraag over
- Nog niet zeker\? U kunt %s
+ Sla deze vraag over
+ Nog niet zeker\? %sGemeenschappenTeamsVrienden en familie
- We helpen u om verbinding te maken.
+ We helpen u om verbinding te makenMet wie gaat u het meest chatten\?U bekijkt deze discussie al!Bekijk in kamer
@@ -2413,16 +2413,16 @@
Pin van geselecteerde locatie op kaartSla deze stap overOpslaan en doorgaan
- Je voorkeuren zijn opgeslagen.
- Alles gereed!
+ U kunt op elk moment bij de instellingen uw profiel bijwerken
+ Ziet er goed uit!Laten we beginnen
- U kunt dit op elk moment wijzigen.
+ Tijd om een gezicht bij uw naam te voegenVoeg een profielfoto toeU kunt dit later wijzigenWeergavenaamDit wordt weergegeven wanneer u berichten verzendt.Kies een weergavenaam
- Uw account %s is aangemaakt.
+ Uw account %s is aangemaaktGefeliciteerd!Breng me naar het beginPersonaliseer profiel
@@ -2535,4 +2535,57 @@
Stuur uw eerste bericht om %s uit te nodigen om te chattenBerichten in deze chat worden eind-tot-eind versleuteld.Ga
+
+ %d bericht verwijderd
+ %d berichten verwijderd
+
+ Deel locatie
+ U moet de juiste rechten hebben om de live locatie in deze kamer te delen.
+ U heeft geen toestemming om de live locatie te delen
+ Kan deze link niet openen: communities zijn vervangen door spaces
+ Gebruikersnaam / E-mailadres / Telefoonnummer
+ Bent u een mens\?
+ Volg de instructies die naar %s zijn verstuurd
+ Wachtwoord reset
+ Wachtwoord vergeten
+ Email opnieuw verzenden
+ Geen e-mail ontvangen\?
+ Om uw e-mailadres te bevestigen, tikt u op de knop in de e-mail die we zojuist naar %s hebben gestuurd
+ Controleer uw e-mail om te verifiëren.
+ Code nogmaals versturen
+ Er is een code verzonden naar %s
+ Bevestig uw telefoonnummer
+ Alle apparaten uitloggen
+ Reset wachtwoord
+ Zorg ervoor dat het 8 tekens of meer zijn.
+ Kies een nieuw wachtwoord
+ Nieuw wachtwoord
+ Controleer uw e-mail.
+ %s stuurt u een verificatielink
+ Bevestigingscode
+ Telefoonnummer
+ %s moet uw account verifiëren
+ Vul uw telefoonnummer in
+ E-mail
+ %s moet uw account verifiëren
+ Vul uw e-mailadres in
+ Lees de voorwaarden en het beleid van %s door
+ Serverbeleid
+ Neem contact op
+ Element Matrix Services (EMS) is een robuuste en betrouwbare hostingservice voor snelle, veilige en realtime communicatie. Ontdek hoe op element.io/ems
+ Wilt u uw eigen server hosten\?
+ Server URL
+ Wat is het adres van uw server\? Dit is als uw huis voor al uw data
+ Selecteer uw server
+ Welkom terug!
+ Bewerk
+ Of
+ Waar uw gesprekken zijn opgeslagen
+ Moet 8 tekens of meer zijn
+ Anderen kunnen u ontdekken %s
+ Maak een account aan
+ Systeemstandaard gebruiken
+ Handmatig kiezen
+ Automatisch instellen
+ Kies lettergrootte
\ No newline at end of file
diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml
index a9d1df49d8..421de65bce 100644
--- a/vector/src/main/res/values-pl/strings.xml
+++ b/vector/src/main/res/values-pl/strings.xml
@@ -2605,4 +2605,71 @@
Dostępni dostawcyDostawca powiadomieńWybierz, którego dostawcy powiadomień push chcesz używać
+
+ %d wiadomość usunięta
+ %d wiadomości usunięte
+ %d wiadomości usuniętych
+ %d wiadomości usuniętych
+
+ Włącz udostępnianie lokalizacji
+ Skontaktuj się z nami
+ Zresetuj metodę powiadomień
+ Tag profilu:
+ Kontynuuj
+ Udostępnianie lokalizacji na żywo
+ Obecnie używane: %s.
+ Synchronizacja w tle
+ Usługi Google
+ Udostępnij lokalizację
+ Musisz mieć poprawne uprawnienia, aby udostępniać lokalizację na żywo w tym pokoju.
+ Nie masz uprawnień by udostępniać lokalizację na żywo
+ Wyniki będą widoczne po zakończeniu ankiety
+ Nie udało się włączyć uwierzytelniania biometrycznego.
+ Uwierzytelnianie biometryczne zostało wyłączone, gdyż niedawno została dodana nowa metoda uwierzytelniania biometrycznego. Możesz włączyć je ponownie w ustawieniach.
+ Wyślij pierwszą wiadomość aby zaprosić %s do czatu
+ Wiadomości w tym czacie będą szyfrowane end-to-end.
+ Otworzenie tego linku nie jest możliwe: społeczności zostały zastąpione przestrzeniami
+ Nazwa użytkownika / Email / Telefon
+ Czy jesteś człowiekiem\?
+ Podążaj za instrukcjami wysłanymi na %s
+ Reset hasła
+ Zapomniane hasło
+ Wyślij wiadomość ponownie
+ Email nie dotarł\?
+ Aby potwierdzić swój email, dotknij przycisk we wiadomości wysłanej na %s
+ Sprawdź swoją skrzynkę email aby dokończyć weryfikację.
+ Wyślij kod ponownie
+ Kod został wysłany do %s
+ Potwierdź swój numer telefonu
+ Wyloguj wszystkie urządzenia
+ Zresetuj hasło
+ Upewnij się, że ma 8 lub więcej znaków.
+ Wybierz nowe hasło
+ Nowe hasło
+ Sprawdź swoją skrzynkę email.
+ %s wyśle ci link weryfikujący
+ Kod potwierdzenia
+ Numer telefonu
+ %s potrzebuje zweryfikować twoje konto
+ Podaj swój numer telefonu
+ Email
+ %s potrzebuje zweryfikować twoje konto
+ Podaj swój email
+ Reguły serwera
+ Element Matrix Services (EMS) to solidny i niezawodny hosting zapewniający szybką, bezpieczną i natychmiastową komunikację. Dowiedz się więcej na <a href=\"${ftue_ems_url}\">element.io/ems</a>
+ Chcesz hostować swój własny serwer\?
+ URL serwera
+ Jaki jest adres twojego serwera\? To miejsce, gdzie przechowywane będą twoje dane
+ Wybierz swój serwer
+ Witamy ponownie!
+ Edytuj
+ Albo
+ Miejsce, w którym przechowywane będą twoje rozmowy
+ Musi mieć przynajmniej 8 znaków
+ Inni będą mogli znaleźć twoje konto jako %s
+ Utwórz konto
+ Używaj domyślnego z systemu
+ Ustaw ręcznie
+ Ustaw automatycznie
+ Wybierz rozmiar czcionki
\ No newline at end of file
diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml
index 00651ada32..26218a509a 100644
--- a/vector/src/main/res/values-pt-rBR/strings.xml
+++ b/vector/src/main/res/values-pt-rBR/strings.xml
@@ -3,32 +3,32 @@
convite de %s%1$s convidou %2$s%1$s convidou você
- %1$s entrou na sala
+ %1$s juntou-se à sala%1$s saiu da sala
- %1$s recusou o convite
- %1$s expulsou %2$s
+ %1$s rejeitou o convite
+ %1$s removeu %2$s%1$s desbaniu %2$s%1$s baniu %2$s
- %1$s desfez o convite de %2$s
- %1$s mudou seu avatar
- %1$s definiu seu nome de exibição para %2$s
- %1$s mudou seu nome de exibição de %2$s para %3$s
- %1$s removeu seu nome de exibição (era %2$s)
+ %1$s retirou o convite de %2$s
+ %1$s mudou o avatar dela(e)
+ %1$s definiu o nome de exibição dela(e) para %2$s
+ %1$s mudou o nome de exibição dela(e) de %2$s para %3$s
+ %1$s removeu o nome de exibição dela(e) (era %2$s)%1$s mudou o tópico para: %2$s%1$s mudou o nome da sala para: %2$s%s começou uma chamada de vídeo.%s começou uma chamada de voz.%s atendeu a chamada.
- %s encerrou a chamada.
- %1$s deixou o histórico futuro da sala visível para %2$s
- todos os membros da sala, desde quando foram convidadas/os.
- todos os membros da sala, a partir de quando entraram.
+ %s terminou a chamada.
+ %1$s fez histórico futuro da sala visível para %2$s
+ todos os membros da sala, do ponto que foram convidados.
+ todos os membros da sala, do ponto que se juntaram.todos os membros da sala.qualquer pessoa.(avatar mudou também)%1$s removeu o nome da sala%1$s removeu o tópico da sala
- %1$s enviou um convite para %2$s para entrar na sala
+ %1$s enviou um convite para %2$s para se juntar à sala%1$s aceitou o convite para %2$s** Incapaz de decriptar: %s **O dispositivo do/da enviador(a) não nos enviou as chaves para esta mensagem.
@@ -43,13 +43,13 @@
%1$s criou a salaVocê criou a salaVocê convidou %1$s
- Você entrou na sala
+ Você juntou-se à salaVocê saiu da sala
- Você recusou o convite
- Você expulsou %1$s
+ Você rejeitou o convite
+ Você removeu %1$sVocê desbaniu %1$sVocê baniu %1$s
- Você desfez o convite de %1$s
+ Você retirou o convite de %1$sVocê mudou seu avatarVocê definiu seu nome de exibição para %1$sVocê mudou seu nome de exibição de %1$s para %2$s
@@ -63,17 +63,17 @@
%s enviou dados para configurar a chamada.Você enviou dados para configurar a chamada.Você atendeu a chamada.
- Você encerrou a chamada.
- Você deixou o histórico futuro da sala visível para %1$s
+ Você terminou a chamada.
+ Você fez histórico futuro da sala visível para %1$s%s fez o upgrade desta sala.Você fez o upgrade desta sala.Você removeu o nome da salaVocê removeu o tópico da sala%1$s removeu o avatar da salaVocê removeu o avatar da sala
- Você enviou um convite para %1$s para entrar na sala
- %1$s revogou o convite para %2$s para entrar na sala
- Você revogou o convite para %1$s para entrar na sala
+ Você enviou um convite para %1$s para se juntar à sala
+ %1$s revogou o convite para %2$s para se juntar à sala
+ Você revogou o convite para %1$s para se juntar à salaVocê aceitou o convite para %1$s%1$s adicionou widget %2$sVocê adicionou widget %1$s
@@ -92,12 +92,12 @@
Sinc inicial:
\nImportando conta…Sinc inicial:
-\nImportando criptografia
+\nImportando crypto
Sinc inicial:
-\nImportando Salas
+\nImportando salas
Sinc inicial:
\nCarregando suas conversas
-\nSe você entrou em muitas salas, isso pode demorar
+\nSe você tem se juntado a muitas salas, isto podia levar um tempo
Sinc inicial:
\nImportando salas convidadasSinc inicial:
@@ -112,8 +112,8 @@
%1$s convidou %2$s. Razão: %3$sVocê convidou %1$s. Razão: %2$s%1$s convidou você. Razão: %2$s
- %1$s entrou na sala. Razão: %2$s
- Você entrou na sala. Razão: %1$s
+ %1$s juntou-se à sala. Razão: %2$s
+ Você juntou-se à sala. Razão: %1$s%1$s saiu da sala. Razão: %2$sVocê saiu da sala. Razão: %1$s%1$s rejeitou o convite. Razão: %2$s
@@ -164,20 +164,20 @@
%1$s tem permitido visitantes se juntarem aqui.Você saiu. Razão: %1$s%1$s saiu. Razão: %2$s
- Você entrou. Razão: %1$s
- %1$s entrou. Razão: %2$s
+ Você juntou-se. Razão: %1$s
+ %1$s juntou-se. Razão: %2$sVocê revogou o convite para %1$s%1$s revogou o convite para %2$sVocê convidou %1$s%1$s convidou %2$sVocê fez o upgrade aqui.%s fez o upgrade aqui.
- Você deixou as mensagens futuras visíveis para %1$s
- %1$s deixou as mensagens futuras visíveis para %2$s
+ Você fez mensagens futuras visíveis para %1$s
+ %1$s fez mensagens futuras visíveis para %2$sVocê saiu da sala%1$s saiu da sala
- Você entrou
- %1$s entrou
+ Você juntou-se
+ %1$s juntou-seVocê criou a discussão%1$s criou a discussãoSala vazia (era %s)
@@ -411,7 +411,7 @@
Qualquer pessoaMembros somente (desde o ponto no tempo de seleção desta opção)Membros somente (desde que eles foram convidados)
- Somente membros (desde que eles entraram)
+ Membros somente (desde que eles se juntaram)Usuárias(os) banidas(os)AvançadasID interno desta sala
@@ -981,7 +981,7 @@
Adicionar ReaçãoVisualizar ReaçõesReações
- Mensagem deletada
+ Mensagem removidaMostrar mensagens removidasMostrar um placeholder para mensagens removidasEvento deletado por usuária(o)
@@ -1012,7 +1012,7 @@
Regras de PushNenhuma regra de push definidaNenhum gateway de push registrado
-
+ app_id:push_key:app_display_name:session_name:
@@ -1703,8 +1703,8 @@
Somente faça isto se você não tem nenhum outro dispositivo com o qual você pode verificar este dispositivo.Resettar tudoEsqueceu ou perdeu todas as opções de recuperação\? Resette tudo
- Você entrou.
- Mensagens nesta sala são encriptadas ponta-a-ponta.
+ Você juntou-se.
+ Mensagens neste chat são encriptadas ponta-a-ponta.SairConfiguraçõesMensagens aqui são encriptadas ponta-a-ponta.
@@ -1727,7 +1727,7 @@
Resettar%1$s fez isto somente convite.Você fez isto somente convite.
- %s entrou.
+ %s juntou-se.Filtrar usuárias(os) banidas(os)Testar Push
@@ -1906,7 +1906,7 @@
Sinc inicial:
\nFazendo download de dados…Sinc inicial:
-\nEsperando pela resposta do servidor…
+\nEsperando por resposta de servidor…Nível de confiança confiadoNível de confiança alertaVocê tem certeza que você quer deletar todas as mensagens não-enviadas nesta sala\?
@@ -1954,7 +1954,7 @@
Somente pessoas convidadas podem achar e se juntarPrivadaConfiguração de acesso desconhecida (%s)
- Qualquer pessoa pode tocar na sala, membros podem então aceitar ou rejeitar
+ Qualquer pessoa pode bater na porta na sala, membros podem então aceitar ou rejeitarPermitir visitantes se juntaremUsar como default e não perguntar de novoSempre perguntar
@@ -2014,8 +2014,8 @@
Adicionar salasExplorar salas
- %d pessoa que você conhece já entrou
- %d pessoas que você conhece já entraram
+ %d pessoa que você conhece já tem se juntado
+ %d pessoas que você conhece já têm se juntadoJuntar-Se a EspaçoCriar espaço
@@ -2112,7 +2112,7 @@
Não dá para gravar uma mensagem de vozNão dá para tocar esta mensagem de vozToque em sua gravação para parar ou escutar
- %1$ds restantes
+ %1$ds restandoSegure para gravar, solte para enviarDeletar gravaçãoGravando mensagem de voz
@@ -2266,7 +2266,7 @@
Enviar emails e números de telefone para %sSeus contatos são privados. Para descobrir usuárias(os) de seus contatos, você precisa de permissão para enviar info de contato a seu servidor de identidade.O signout desta sessão tem sido feito!
- Saiu da sala!
+ Esta sala tem sido saída!Você concorda em enviar esta info\?Para descobrir contatos existentes, você precisa enviar info de contato (emails e números de telefone) para seu servidor de identidade. Nós hashamos seus dados antes de enviar por privacidade.Não agora
@@ -2317,7 +2317,7 @@
HabilitarRecomece o aplicativo para a mudançar tomar efeito.Habilitar matemática LaTeX
- Você não tem permissão pra entrar nesta sala
+ Você não é permitida(o) se juntar a esta salaCriar sondagemAbrir contatosEnviar sticker
@@ -2364,12 +2364,12 @@
Habilitar Mensagens de ThreadConectar a servidorProcurando se juntar a um servidor existente\?
- pular esta pergunta
- Não tem certeza ainda\? Você pode %s
+ Pular esta pergunta
+ Não tem certeza ainda\? %sComunidadesTimesAmigas(os) e família
- Nós vamos ajudá-la(o) a ficar conectada(o).
+ Nós vamos ajudá-la(o) a ficar conectada(o)Com quem você vai fazer chat mais\?Você já está visualizando esta thread!Visualizar Em Sala
@@ -2425,16 +2425,16 @@
O servidorcasa não aceita nome de usuária(o) com somente dígitos.Pular este passoSalvar e continuar
- Suas preferências têm sido salvas.
- Você está pronta(o)!
+ Passe em configurações a qualquer momento para atualizar seu perfil
+ Tá com uma cara boa!Vamo lá
- Você pode mudar isto a qualquer hora.
+ Hora de colocar um rosto ao nomeAdicione uma imagem de perfilVocê pode mudar isto mais tardeNome de ExibiçãoIsto vai ser mostrado quando você enviar mensagens.Escolha um nome de exibição
- Sua conta %s tem sido criada.
+ Sua conta %s tem sido criadaParabéns!Me leve para casaPersonalizar perfil
@@ -2471,11 +2471,11 @@
${app_name} Compartilhamento de TelaParar compartilhamento de telaCompartilhar tela
- - Alguns usuários foram designorados
- ${app_name} precisa limpar o cache para estar atualizado, pelo seguinte motivo:
+ - Algumas(ns) usuárias(os) têm sido designoradas(os)
+ ${app_name} precisa performar uma limpa de cache para estar atualizado, pela seguinte razão:
\n%s
\n
-\nNote que esta ação vai reiniciar o app e pode levar algum tempo.
+\nNote que esta ação vai recomeçar o app e pode levar algum tempo.Requisição de sinc inicialMostrar a info de perfil mais recente (avatar e nome de exibição) para todas as mensagens.Mostrar info de usuária(o) mais recente
@@ -2485,7 +2485,7 @@
Parar de compartilharImplementação tempoária: locais persistem em histórico de salaHabilitar Compartilhament de Localização Ao Vivo
- %1$s restantes
+ %1$s restandoAo vivo até %1$sVer localização ao vivoLocalização ao vivo terminou
@@ -2503,8 +2503,8 @@
Tag do perfil:Falhou ao registrar o token do endpoint ao servidorcasa:
\n%1$s
-
-
+ Endpoint
+ GatewayAtivar compartilhamento de localizaçãoCompartilhamento de localização em tempo realGateway atual: %s
@@ -2529,4 +2529,63 @@
Endpoint registrado com sucesso ao servidor casa.Registro de EndpointPróximo
-
+
+ %d mensagem removida
+ %d mensagens removidas
+
+ Compartilhar localização
+ Você precisa ter as permissões certas a fim de compartilhar localização ao vivo nesta sala.
+ Você não tem permissão para compartilhar localização ao vivo
+ Resultados vão ser visíveis quando a sondagem estiver terminada
+ Quando convidando numa sala encriptada que está compartilhando histórico, histórico encriptada vai estar visível.
+ MSC3061: Compartilhando chaves de sala para mensagens passadas
+ Envie sua primeira mensagem para convidar %s a fazer chat
+ Mensagens neste chat vão ser encriptadas ponta-a-ponta.
+ Não dá para abrir este link: comunidades têm sido substituídas por espaços
+ Nome de Usuária(o) / Email / Telefone
+ Você é um/uma humano(a)\?
+ Siga as instruções enviadas para %s
+ Reset de senha
+ Esqueceu senha
+ Reenviar email
+ Não recebeu um email\?
+ Para confirmar seu email, toque no botão no email que nós acabamos de enviar para %s
+ Checar seu email para verificar.
+ Reenviar código
+ Um código foi enviado para %s
+ Confirmar seu número de telefone
+ Fazer signout de todos os dispositivos
+ Resettar senha
+ Garanta que seja 8 caracteres ou mais.
+ Escolher uma senha nova
+ Senha Nova
+ Checar seu email.
+ %s vai enviar para você um link de verificação
+ Código de confirmação
+ Número de Telefone
+ %s precisa verificar sua conta
+ Entrar seu número de telefone
+ Email
+ %s precisa verificar sua conta
+ Entrar seu email
+ Por favor leia todos os termos e políticas de %s
+ Políticas de servidor
+ Entrar em contato
+ Element Matrix Services (EMS) é um serviço de hospedagem robusto e confiável para comunicação rápida, segura e em tempo real. Descubra como em element.io/ems
+ Quer hospedar seu próprio servidor\?
+ URL de servidor
+ Qual é o endereço de seu servidor\? Isto é como uma casa para todos os seus dados
+ Selecionar seu servidor
+ Boas-vindas de volta!
+ Editar
+ Ou
+ Onde suas conversas vão viver
+ Deve ser 8 caracteres ou mais
+ Outras(os) podem descobrir você %s
+ Criar sua conta
+ Ir
+ Usar default de sistema
+ Escolher manualmente
+ Definir automaticamente
+ Encolher tamanho de fonte
+
\ No newline at end of file
diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml
index 9ddfa08aa4..f0cf54953e 100644
--- a/vector/src/main/res/values-sk/strings.xml
+++ b/vector/src/main/res/values-sk/strings.xml
@@ -2269,12 +2269,12 @@
Zobraziť v miestnostiToto vlákno si už prezeráte!S kým budete komunikovať najčastejšie\?
- Pomôžeme vám pripojiť sa.
+ Pomôžeme vám pripojiť saPriatelia a rodinaTímyKomunity
- Ešte si nie ste istí\? Môžete %s
- preskočiť túto otázku
+ Ešte si nie ste istí\? %s
+ Preskočiť túto otázkuPripojiť sa k serveruPovoliť správy vo vláknachPoznámka: aplikácia sa reštartuje
@@ -2467,16 +2467,16 @@
\n
\nPôjde o jednorazový prechod, keďže vlákna sú teraz súčasťou špecifikácie Matrix.Vlákna sa blížia k beta verzii 🎉
- Váš účet %s bol vytvorený.
+ Váš účet %s bol vytvorenýPrebieha zdieľanie polohy${app_name} Poloha v reálnom časeDomovský server neakceptuje používateľské meno obsahujúce iba číslice.Vynechať tento krokUložiť a pokračovať
- Vaše nastavenia boli uložené.
- Všetko je pripravené!
+ Kedykoľvek prejdite do nastavení a aktualizujte svoj profil
+ Vyzerá to dobre!Poďme na to
- Toto môžete kedykoľvek zmeniť.
+ Je čas priradiť k menu aj tvárPridať profilový obrázokNeskôr to môžete zmeniťZobrazované meno
@@ -2583,4 +2583,58 @@
Odošlite svoju prvú správu a pozvite %s do konverzácieSprávy v tejto miestnosti sú šifrované od vás až k príjemcovi.Spustiť
+ %s vám pošle overovací odkaz
+
+ %d správa odstránená
+ %d správy odstránené
+ %d správ odstránených
+
+ Zdieľať polohu
+ Musíte mať príslušné oprávnenia na zdieľanie polôh v reálnom čase v tejto miestnosti.
+ Nemáte oprávnenie na zdieľanie polohy v reálnom čase
+ Nie je možné otvoriť tento odkaz: komunity boli nahradené priestormi
+ Meno používateľa / Email / Telefón
+ Ste človek\?
+ Postupujte podľa pokynov zaslaných na adresu %s
+ Zmena hesla
+ Zabudnuté heslo
+ Opätovne odoslať e-mail
+ Nedostali ste e-mail\?
+ Ak chcete potvrdiť svoj e-mail, ťuknite na tlačidlo v e-maile, ktorý sme práve poslali na adresu %s
+ Pre overenie skontrolujte svoj e-mail.
+ Znovu odoslať kód
+ Kód bol odoslaný na %s
+ Potvrďte svoje telefónne číslo
+ Odhlásiť sa zo všetkých zariadení
+ Znovu nastaviť heslo
+ Uistite sa, že má 8 alebo viac znakov.
+ Vyberte si nové heslo
+ Nové heslo
+ Skontrolujte si e-mail.
+ Potvrdzovací kód
+ Telefónne číslo
+ %s potrebuje overiť vaše konto
+ Zadajte svoje telefónne číslo
+ Email
+ %s potrebuje overiť vaše konto
+ Zadajte svoj email
+ Prečítajte si prosím podmienky a zásady servera %s
+ Zásady používania servera
+ Kontaktujte nás
+ Element Matrix Services (EMS) je robustná a spoľahlivá hostingová služba na rýchlu, bezpečnú komunikáciu v reálnom čase. Zistite, ako na element.io/ems
+ Chcete hosťovať svoj vlastný server\?
+ URL adresa servera
+ Aká je adresa vášho servera\? Je to ako domov pre všetky vaše údaje
+ Vyberte svoj server
+ Vitajte späť!
+ Upraviť
+ alebo
+ Kde vaše rozhovory žijú
+ Musí obsahovať 8 alebo viac znakov
+ Ostatní vás môžu objaviť %s
+ Vytvorte si účet
+ Použiť predvolené nastavenie systému
+ Vybrať manuálne
+ Nastaviť automaticky
+ Vyberte veľkosť písma
\ No newline at end of file
diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml
index 29ecdfe895..f797974e87 100644
--- a/vector/src/main/res/values-sv/strings.xml
+++ b/vector/src/main/res/values-sv/strings.xml
@@ -757,7 +757,7 @@
Skydda dig mot att tappa åtkomst till krypterade meddelanden och dataNya säkra meddelandenycklarDina direktmeddelandekonversationer kommer att visas här. Tryck på + nere till höger för att starta några.
- Meddelande raderat
+ Meddelande borttagetImportera krypteringsnycklar från filen \"%1$s\".Krypterar fil…Skickar fil (%1$s / %2$s)
@@ -2364,12 +2364,12 @@
Aktivera trådade meddelandenAnslut till serverVill du gå med i en existerande server\?
- hoppa över frågan
- Inte säker än\? Du kan %s
+ Hoppa över frågan
+ Inte säker än\? %sGemenskaperTeamVänner och familj
- Vi kommer att hjälpa dig att få kontakt.
+ Vi kommer att hjälpa dig att få kontaktVem kommer du chatta med mest\?Du visar redan den här tråden!Visa i rum
@@ -2425,16 +2425,16 @@
Hemservern accepterar inte användarnamn med bara siffror.Hoppa över det här stegetSpara och fortsätt
- Dina inställningar har sparats.
- Du är redo!
+ Gå till inställningar när som helst för att uppdatera din profil
+ Ser bra ut!Nu kör vi
- Du kan ändra detta när som helst.
+ Dags att lägga till ett ansikte till namnetLägg till en profilbildDu kan ändra detta senareVisningsnamnDet här kommer att visas när du skickar meddelanden.Välj ett visningsnamn
- Ditt konto %s har skapats.
+ Ditt konto %s har skapatsGrattis!För mig hemAnpassa profil
@@ -2535,4 +2535,57 @@
Skicka ditt första meddelande för att bjuda in %s att chattaMeddelanden i den här chatten kommer att vara totalsträckskrypterade.Gå
+
+ %d meddelande borttaget
+ %d meddelanden borttagna
+
+ Dela plats
+ Du behöver rätt behörighet för att dela realtidsplats i det här utrymmet.
+ Du är inte behörig att dela realtidsplats
+ Kan inte öppna den här länken: gemenskaper har ersatts med utrymmen
+ Användarnamn / e-postadress / telefonnummer
+ Är du en människa\?
+ Följ instruktionerna skickade till %s
+ Lösenordsåterställning
+ Glömt lösenord
+ Skicka e-brev igen
+ Fick du inget e-brev\?
+ För att bekräfta din e-post, tryck på knappen i e-brevet vi just skickade till %s
+ Kolla din e-post för att verifiera.
+ Skicka kod igen
+ En kod skickades till %s
+ Bekräfta ditt telefonnummer
+ Logga ut alla enheter
+ Återställ lösenord
+ Se till att det innehåller minst 8 tecken.
+ Välj ett nytt lösenord
+ Nytt lösenord
+ Kolla din e-post.
+ %s kommer att skicka en verifieringslänk
+ Bekräftelsekod
+ Telefonnummer
+ %s behöver verifiera ditt konto
+ Ange ditt telefonnummer
+ E-post
+ %s behöver verifiera ditt konto
+ Ange din e-postadress
+ Vänligen läs villkor och policyer för %s
+ Serverpolicyer
+ Kom i kontakt
+ Element Matrix Services (EMS) är en robust och pålitlig värdtjänst för snabb och säker realtidskommunikation. Lär dig hur på element.io/ems
+ Vill du driva din egen server\?
+ Server-URL
+ Vad är adressen för din server\? Det är som ett hem för all din data
+ Välj din server
+ Välkommen tillbaka!
+ Redigera
+ Eller
+ Där dina konversationer kommer bo
+ Måste vara 8 tecken eller fler
+ Andra kan hitta dig %s
+ Skapa ditt konto
+ Använd systemförval
+ Välj manuellt
+ Ställ in automatiskt
+ Välj teckenstorlek
\ No newline at end of file
diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml
index ed7a2c7438..45a057dd5f 100644
--- a/vector/src/main/res/values-uk/strings.xml
+++ b/vector/src/main/res/values-uk/strings.xml
@@ -564,7 +564,7 @@
Резервна копія ключаВикористати резервну копію ключаТут з\'явиться список бесід з вашими особистими повідомленнями. Торкніться + внизу праворуч щоб розпочати бесіду.
- Повідомлення видалено
+ Повідомлення вилученоОсобисті повідомленняОсобисті повідомленняНадіслати нове особисте повідомлення
@@ -2421,12 +2421,12 @@
Захищене спілкування.Ви контролюєте все.Володійте своїми розмовами.
- Поділитися місцеперебуванням
+ Поділитися місцем перебуванняВідкрити за допомогою${app_name} не може отримати доступ до вашого місцеперебування. Спробуйте пізніше.${app_name} не може отримати доступ до вашого місцеперебування
- Місцеперебування
- Поділитися місцеперебуванням
+ Місце перебування
+ Поділитися місцем перебуванняРезультати можна переглянути лише після завершення опитуванняЗакрите опитуванняУсі, хто проголосує, побачать результати одразу після голосування
@@ -2454,12 +2454,12 @@
Увімкнути гілки повідомленьПід\'єднатися до сервераБажаєте приєднання до наявного сервера\?
- пропустити це питання
- Досі не впевнені\? Ви можете %s
+ Пропустити це запитання
+ Досі не впевнені\? %sСпільнотиКомандиДрузі й сім\'я
- Ми допоможемо вам з\'єднатися.
+ Ми допоможемо вам з\'єднатисяЗ ким ви спілкуватиметеся найчастіше\?Ви вже переглядаєте цю гілку!Переглянути у кімнаті
@@ -2519,16 +2519,16 @@
Домашній сервер не приймає ім\'я користувача лише з цифр.Пропустити цей крокЗберегти й продовжити
- Ваші налаштування збережено.
- Усе налаштовано!
+ Будь-коли оновіть свій профіль у налаштуваннях
+ Все чудово!Поїхали
- Ви можете змінити його будь-коли.
+ Час вказати ім’яДодати зображення профілюВи можете змінити його пізнішеПоказуване ім\'яЙого буде показано у надісланих повідомленнях.Виберіть показуване ім\'я
- Ваш обліковий запис %s створено.
+ Ваш обліковий запис %s створенийВітаємо!На головнуПерсоналізувати профіль
@@ -2631,4 +2631,59 @@
Надішліть своє перше повідомлення, щоб запросити %s до бесідиПовідомлення в цій бесіді будуть захищені наскрізним шифруванням.Уперед
+
+ %d повідомлення вилучене
+ %d повідомлення вилучені
+ %d повідомлень вилучені
+ %d повідомлень вилучені
+
+ Поділитися місцем перебування
+ Ви повинні мати відповідні дозволи, щоб ділитися місцем перебування наживо в цій кімнаті.
+ Ви не маєте дозволу ділитися поточним місцем перебування
+ Неможливо відкрити це посилання: спільноти замінено просторами
+ Ім\'я користувача / Е-пошта / Телефон
+ Ви людина\?
+ Виконайте вказівки, надіслані на %s
+ Скидання пароля
+ Забули пароль
+ Не отримали лист\?
+ Повторно надіслати електронний лист
+ Щоб підтвердити свою електронну адресу, торкніться кнопки в електронному листі, який ми щойно надіслали на адресу %s
+ Перейдіть до своєї електронної пошти для підтвердження.
+ Повторно надіслати код
+ Код було надіслано на %s
+ Підтвердьте свій номер телефону
+ Вийти на всіх пристроях
+ Скинути пароль
+ Переконайтеся, що він складається з 8 або більше символів.
+ Виберіть новий пароль
+ Новий пароль
+ Перегляньте свою електронну пошту.
+ %s надішле вам посилання для підтвердження
+ Код підтвердження
+ Введіть свій номер телефону
+ Е-пошта
+ %s потребує підтвердження вашого облікового запису
+ %s потребує підтвердження вашого облікового запису
+ Номер телефону
+ Введіть адресу електронної пошти
+ Ознайомтеся з умовами та правилами %s
+ Правила сервера
+ Будьте в курсі
+ Element Matrix Services (EMS) — це надійна служба розміщення для швидкого, безпечного зв’язку в реальному часі. Дізнайтеся, як на element.io/ems
+ Хочете розмістити власний сервер\?
+ URL-адреса сервера
+ Яка адреса вашого сервера\? Це як домівка всіх ваших даних
+ Виберіть свій сервер
+ З поверненням!
+ Редагувати
+ Або
+ Де відбуватимуться ваші розмови
+ Має бути 8 або більше символів
+ Інші бачитимуть вашим іменем %s
+ Створіть свій обліковий запис
+ Використовувати типовий для системи
+ Вибрати вручну
+ Установити автоматично
+ Виберіть розмір шрифту
\ No newline at end of file
diff --git a/vector/src/main/res/values-ur/strings.xml b/vector/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000000..a6b3daec93
--- /dev/null
+++ b/vector/src/main/res/values-ur/strings.xml
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/vector/src/main/res/values-vi/strings.xml b/vector/src/main/res/values-vi/strings.xml
index 8b15f779d1..dca5645f1d 100644
--- a/vector/src/main/res/values-vi/strings.xml
+++ b/vector/src/main/res/values-vi/strings.xml
@@ -1494,14 +1494,14 @@
Sử dụng Khóa Khôi phụcDùng %1$s của bạn hoặc dùng %2$s của bạn để tiếp tục.Chỉ được hỗ trợ trong các phòng được mã hóa
- Buộc nhóm phiên hướng ra hiện tại trong một căn phòng được mã hóa phải bị loại bỏ
+ Buộc nhóm phiên hướng ra hiện tại trong một phòng được mã hóa phải bị loại bỏSử dụng ${app_name mới nhất} trên các thiết bị khác của bạn:
- hoặc một máy khách Matrix có khả năng xác thực chéo khác
+ hoặc một máy khách Matrix khác có khả năng xác thực chéo${app_name} iOS
\n${app_name} Android${app_name} Web
\n${app_name} Desktop
- Sử dụng ${app_name} mới nhất trên các thiết bị khác của bạn, Web ${app_name}, Máy tính để bàn ${app_name}, iOS ${app_name}, ${app_name} cho Android hoặc một máy khách Matrix có khả năng xác thực chéo khác
+ Sử dụng ${app_name} mới nhất trên các thiết bị khác của bạn, Web ${app_name}, Máy tính để bàn ${app_name}, iOS ${app_name}, Android ${app_name} hoặc một máy khách Matrix khác có khả năng xác thực chéoĐặt mật khẩu tài khoản mới…Không thể lưu tệp MediaBật thiết đặt này thêm FLAG_SECURE cho tất cả các Hoạt động. Khởi động lại ứng dụng để thay đổi có hiệu lực.
@@ -1590,11 +1590,11 @@
Hiện Tất cả PhiênPhiên Hoạt độngNgười quản trị máy chủ của bạn đã vô hiệu hóa mã hóa đầu cuối theo mặc định trong phòng riêng và Tin nhắn trực tiếp.
- Xác thực chéo không được bật
+ Xác thực chéo không được kích hoạtXác thực chéo được kích hoạt.
\nCác khóa không đáng tin cậyXác thực chéo được kích hoạt
-\nCác mã khóa là đáng tin cậy.
+\nCác khóa là đáng tin cậy.
\nCác khóa riêng tư không xác địnhXác thực chéo được kích hoạt
\nKhóa riêng trên thiết bị.
@@ -2258,7 +2258,7 @@
Trợ giúpPháp lýTrợ giúp & Giới thiệu
- Voice & Video
+ Âm thanh & Hình ảnhFormat:Url:session_name:
@@ -2270,4 +2270,8 @@
Gửi ảnh với kích thước gốc
-
+ Nếu được bật, bạn sẽ luôn hiển thị ngoại tuyến với các người dùng khác, ngay cả thi sử dụng ứng dụng.
+ Chế độ ngoại tuyến
+ Sự hiện diện
+ Hiển thị bong bóng tin nhắn
+
\ No newline at end of file
diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml
index 7227da69d8..0fae38bf6e 100644
--- a/vector/src/main/res/values-zh-rCN/strings.xml
+++ b/vector/src/main/res/values-zh-rCN/strings.xml
@@ -1,31 +1,31 @@
-
+%s 的邀请%1$s 邀请了 %2$s%1$s 邀请了你
- %1$s 加入了聊天室
- %1$s 离开了聊天室
+ %1$s 加入了房间
+ %1$s 离开了房间%1$s 拒绝了邀请%1$s 移除了 %2$s%1$s 解封了 %2$s%1$s 封禁了 %2$s%1$s 更换了他们的头像
- %1$s 将他们的昵称设置为 %2$s
- %1$s 把他们的昵称从 %2$s 改为 %3$s
- %1$s 移除了他们的昵称 (%2$s)
+ %1$s 将他们的显示名称设置为 %2$s
+ %1$s 把他们的显示名称从 %2$s 改为 %3$s
+ %1$s 移除了他们的显示名称 (%2$s)%1$s 把主题改为: %2$s
- %1$s 把聊天室名称改为: %2$s
+ %1$s 把房间名称改为: %2$s%s 发起了一次视频通话。%s 发起了一次语音通话。%s 已接听通话。%s 已结束通话。
- 所有聊天室成员,从他们被邀请开始。
- 所有聊天室成员,从他们加入开始。
- 所有聊天室成员。
+ 所有房间成员,从他们被邀请开始。
+ 所有房间成员,从他们加入开始。
+ 所有房间成员。任何人。(头像也被更改)
- %1$s 移除了聊天室名称
- %1$s 移除了聊天室主题
+ %1$s 移除了房间名称
+ %1$s 移除了房间主题** 无法解密:%s **发送者的设备没有向我们发送此消息的密钥。无法发送消息
@@ -33,37 +33,37 @@
电子邮箱地址手机号码%1$s 撤回了对 %2$s 的邀请
- %1$s 让未来的聊天室历史记录对 %2$s 可见
- %1$s 向 %2$s 发送了加入聊天室的邀请
+ %1$s 让未来的房间历史记录对 %2$s 可见
+ %1$s 向 %2$s 发送了加入房间的邀请%1$s 接受了 %2$s 的邀请
- 空聊天室
- 聊天室邀请
+ 空房间
+ 房间邀请%1$s 和 %2$s初始化同步:
-\n正在导入账号…
+\n正在导入账户…
初始化同步:
\n正在导入加密数据初始化同步:
-\n正在导入聊天室
+\n正在导入房间
初始化同步:
\n正在加载对话
-\n如果你加入了很多论聊天室,这可能需要一段时间
+\n如果你加入了很多论房间,这可能需要一段时间
初始化同步:
-\n正在导入已邀请的聊天室
+\n正在导入已邀请的房间
初始化同步:
-\n正在导入已离开的聊天室
+\n正在导入已离开的房间
初始化同步:
\n正在导入社区初始化同步:
-\n正在导入账号数据
- %s 升级了此聊天室。
+\n正在导入账户数据
+ %s 升级了此房间。正在发送消息…
- %1$s 撤回了对 %2$s 加入聊天室的邀请
+ %1$s 撤回了对 %2$s 加入房间的邀请%1$s 的邀请。理由:%2$s%1$s 邀请了 %2$s。理由:%3$s%1$s 邀请了你。理由:%2$s
- %1$s 加入了聊天室。理由:%2$s
- %1$s 离开了聊天室。理由:%2$s
+ %1$s 加入了房间。理由:%2$s
+ %1$s 离开了房间。理由:%2$s%1$s 已拒绝邀请。理由:%2$s%1$s 踢走了 %2$s。理由:%3$s%1$s 解封了 %2$s。理由:%3$s
@@ -71,51 +71,51 @@
%1$s 接受 %2$s 的邀請。理由:%3$s%1$s 撤回了对 %2$s 的邀请。理由:%3$s
- %1$s 新增了 %2$s 为此聊天室的地址。
+ %1$s 新增了 %2$s 为此房间的地址。
- %1$s 移除了 %2$s 作为此聊天室额地址。
+ %1$s 移除了 %2$s 作为此房间额地址。
- %1$s 为此聊天室新增了 %2$s 并移除 %3$s 地址。
- %1$s 将此聊天室的主要地址设为了 %2$s。
- %1$s 为此聊天室移除了主要地址。
- %1$s 已允许访客加入聊天室。
- %1$s 已禁止访客加入聊天室。
+ %1$s 为此房间新增了 %2$s 并移除 %3$s 地址。
+ %1$s 将此房间的主要地址设为了 %2$s。
+ %1$s 为此房间移除了主要地址。
+ %1$s 已允许访客加入房间。
+ %1$s 已禁止访客加入房间。%1$s 已开启端对端加密。%1$s 已开启端对端加密(无法识别的演算法 %2$s)。
- %1$s 创建了这个聊天室
+ %1$s 创建了这个房间你的邀请
- 你创建了这个聊天室
+ 你创建了这个房间你邀请了 %1$s
- 你加入了聊天室
- 你离开了聊天室
+ 你加入了房间
+ 你离开了房间你拒绝了邀请你移除了 %1$s你解封了 %1$s你封禁了 %1$s你撤回了对 %1$s 的邀请你更换了你的头像
- 你将你的昵称设置为 %1$s
- 你将你的昵称从 %1$s 改为 %2$s
- 你移除了你的昵称 (%1$s)
+ 你将你的显示名称设置为 %1$s
+ 你将你的显示名称从 %1$s 改为 %2$s
+ 你移除了你的显示名称 (%1$s)你把主题改为:%1$s
- %1$s 更改了聊天室头像
- 你更改了聊天室头像
- 你把聊天室名称改为:%1$s
+ %1$s 更改了房间头像
+ 你更改了房间头像
+ 你把房间名称改为:%1$s你发起了一次视频通话。你发起了一次语音通话。%s 发送了数据以建立通话。你发送了数据以建立通话。你接听了通话。你结束了通话。
- 你已让未来的聊天室记录对 %1$s 可见
- 你升级了此聊天室。
- 你移除了聊天室名称
- 你移除了聊天室主题
- %1$s 移除了聊天室头像
- 你移除了聊天室头像
- 你向 %1$s 发送了加入聊天室的邀请
- 你已撤回了对 %1$s 加入聊天室的邀请
+ 你已让未来的房间记录对%1$s可见
+ 你升级了此房间。
+ 你移除了房间名称
+ 你移除了房间主题
+ %1$s 移除了房间头像
+ 你移除了房间头像
+ 你向 %1$s 发送了加入房间的邀请
+ 你已撤回了对 %1$s 加入房间的邀请你接受了 %1$s 的邀请%1$s 添加了 %2$s 挂件你添加了 %1$s 挂件
@@ -124,17 +124,17 @@
%1$s 修改了 %2$s 挂件你修改了 %1$s 挂件管理员
- 审核员
+ 协管员默认自定义(%1$d)自定义
- 你更改了%1$s 的权力等级。
- %1$s 更改了 %2$s 的权力等级。
+ 你更改了%1$s的权力级别。
+ %1$s更改了%2$s的权力级别。%1$s 从 %2$s 到 %3$s你的邀请。理由:%1$s你邀请了 %1$s。理由:%2$s
- 你加入了聊天室。理由:%1$s
- 你离开了聊天室。理由:%1$s
+ 你加入了房间。理由:%1$s
+ 你离开了房间。理由:%1$s你拒绝了邀请。理由:%1$s你踢走了 %1$s。理由:%2$s你解封了 %1$s。理由:%2$s
@@ -142,16 +142,16 @@
你接受了 %1$s 的邀请。理由:%2$s你撤回了 %1$s 的邀请。理由:%2$s
- 你新增了 %1$s 为此聊天室的地址。
+ 你新增了 %1$s 为此房间的地址。
- 你移除了此聊天室的 %1$s 地址。
+ 你移除了此房间的 %1$s 地址。
- 你为此聊天室新增了 %1$s 并移除了 %2$s 地址。
- 你将此聊天室的主要地址设为了 %1$s。
- 你移除了此聊天室的主要地址。
- 你已允许访客加入聊天室。
- 你已禁止访客加入聊天室。
+ 你为此房间新增了 %1$s 并移除了 %2$s 地址。
+ 你将此房间的主要地址设为了 %1$s。
+ 你移除了此房间的主要地址。
+ 你已允许访客加入房间。
+ 你已禁止访客加入房间。你已开启端对端加密。你已开启端对端加密(无法识别的算法 %1$s)。你已离开。理由:%1$s
@@ -166,8 +166,8 @@
%s 在此处升级。你使未来的消息对 %1$s 可见%1$s 使未来的消息对 %2$s 可见
- 你离开了聊天室
- %1$s 离开了聊天室
+ 你离开了房间
+ %1$s 离开了房间你已加入%1$s 已加入你创建了讨论
@@ -188,7 +188,7 @@
已复制到剪贴板发送日志发送屏幕截图
- 进入聊天室
+ 加入房间用户名登出搜索
@@ -197,9 +197,9 @@
继续加入拒绝
- 退出聊天室
- 你确定要退出聊天室吗?
- %s 正在输入…
+ 离开房间
+ 确定要离开房间吗?
+ %s正在输入……设置保存离开
@@ -215,11 +215,11 @@
主服务器 URL登录提交
- 用户名和/或密码错误
+ 错误的用户名和/或密码此电子邮箱地址似乎无效此电子邮箱地址已被使用。忘记密码?
- 必须输入与你账号关联的电子邮箱地址。
+ 必须输入与你账户关联的电子邮箱地址。请输入有效的 URL没有包含有效的 JSON发送了过多的请求
@@ -229,7 +229,7 @@
是否搜索
- 过滤聊天室成员
+ 过滤房间成员没有结果添加电子邮箱地址添加手机号码
@@ -238,7 +238,7 @@
高级加密本地联系人
- 设备名称
+ 更新公开名称修改密码新密码密码更新失败
@@ -262,30 +262,30 @@
此主服务器想确认你不是机器人电子邮箱地址验证失败:请确保你已点击邮件中的链接原始
- 通话正在连接…
+ 通话正在连接……${app_name} 需要权限以访问你的麦克风来进行语音通话。私聊邀请封禁解除封禁
- 隐藏所有来自这个用户的消息
- 显示所有来自这个用户的消息
+ 忽略
+ 取消忽略提及
- %1$s 和 %2$s 正在输入…
- %1$s 和 %2$s 及其他人正在输入…
- 你没有在这个聊天室发帖的权限。
+ %1$s和%2$s正在输入……
+ %1$s和 %2$s及其他人正在输入……
+ 你没有在这个房间发帖的权限。信任不信任
- 注销
+ 登出忽略指纹(%s):无法验证远程服务器的身份。应用信息
- 启用这个账号的通知
- 启用这个设备的通知
+ 启用这个账户的通知
+ 启用这个会话的通知来自私聊的消息来自群聊的消息
- 当我被邀请加入聊天室时
+ 当我被邀请加入房间时来自机器人的消息后台同步同步请求超时
@@ -299,32 +299,30 @@
通讯录权限身份认证当前密码
- 是否重新显示所有来自 %s 的消息?
-\n
-\n注意,此操作会重启应用并将花费一些时间。
+ 显示所有来自 %s 的消息?选择国家主题
- 聊天室历史可见性
+ 房间历史可见性谁可以阅读历史消息?任何人
- 仅本群成员(自选中此项后开始)
- 只有成员(从他们被邀请开始)
- 只有成员(从他们加入开始)
+ 仅成员(从选中此项的时间点开始)
+ 仅成员(从他们被邀请开始)
+ 仅成员(从他们加入开始)被封禁的用户高级
- 此聊天室的内部 ID
+ 此房间的内部 ID这些是实验性功能,可能会出现不可预料的错误。请谨慎使用。
- 导出端对端聊天室密钥
- 导出聊天室密钥
+ 导出端对端房间密钥
+ 导出房间密钥导出密钥到本地文件导出输入密语确认密语
- 导入端对端聊天室密钥
- 导入聊天室密钥
+ 导入端对端房间密钥
+ 导入房间密钥从本地文件导入密钥
- 仅向已验证的设备发送加密消息
- 使用本设备时,从不向未验证的设备发送加密消息。
+ 仅向已验证的会话发送加密消息
+ 从不从此会话向未验证的会话发送加密消息。未验证验证稍后再说
@@ -338,18 +336,18 @@
异常的 JSON呼入的视频通话呼入的语音通话
- 通话中…
- 通话未被接听。
+ 通话中……
+ 远端未能接听。信息${app_name} 需要权限以访问你的摄像机和麦克风来进行视频通话。
\n
\n请在接下来的弹出窗口中授权允许访问,以便进行通话。移除
- 你将不能撤销这个修改,因为你正在让这个用户和你拥有相同的特权级别。
+ 你将不能撤销这个修改,因为你正在让这个用户和你拥有相同的权力级别。
\n你确定吗?这可能意味着有人正在恶意劫持你的流量,或者你的手机不信任远程服务器提供的数字证书。如果服务器管理员说这是预期的情况,请确保下面的指纹与管理员提供的指纹相匹配。
- 昵称
+ 显示名称显示系统设置中的应用程序信息。通话请求使用条款
@@ -363,40 +361,40 @@
取消设置为主要地址确认你似乎沮丧地摇了摇手机。你想打开问题反馈界面吗?
- 证书已从一个先前受你的设备信任的证书更改为另一个。这非常反常!建议你不要接受此新证书。
+ 证书已从一个先前受你的手机信任的证书更改为另一个。这高度反常。建议你不要接受此新证书。证书已从曾受信任的证书更改为不受信任的证书。服务器可能已更新其证书,请联系管理员并核对服务器的指纹。请仅在服务器管理员发布了与上述指纹匹配的指纹的情况下接受该证书。
- 头像
+ 用户资料图片第三方通知通讯录国家ID
- 名称
+ 公开名称最近一次上线%1$s @ %2$s主服务器身份服务器实验室
- 为验证此设备是否可信,请通过其他方式(例如面对面交换或拨打电话)与其拥有者联系,并询问他们该设备的用户设置中的密钥是否与以下密钥匹配:
+ 通过和你其它会话里的用户设置对比以下内容来确认:如果它们不匹配,你通讯的安全性可能会受到影响。邀请收藏夹联系人
- 聊天室
- 按聊天室名称过滤
+ 房间
+ 按房间名称过滤邀请低优先级对话只显示 Matrix 联系人没有结果
- 聊天室
- 选择一个聊天室目录
+ 房间
+ 选择一个房间目录服务器名称
- %s 服务器上的所有聊天室
- 所有本地 %s 聊天室
+ %s 服务器上的所有房间
+ 所有本地 %s 房间跳到未读主页显示
- 固定含错过通知的聊天室
- 置顶含有未读消息的聊天室
+ 固定含错过通知的房间
+ 置顶含有未读消息的房间用户界面语言请选择语言
@@ -425,21 +423,21 @@
你确定要删除这个挂件吗?无法创建挂件。发送请求失败。
- 特权级别必须是正整数。
- 你不在这个聊天室。
- 你没有在当前聊天室中执行此操作的权限。
+ 权力级别必须是正整数。
+ 你不在这个房间。
+ 你没有在当前房间中执行此操作的权限。请求中缺失 room_id。请求中缺失 user_id。
- 聊天室 %s 不可见。
+ 房间 %s 不可见。添加 Matrix 应用
- 监听事件更新
+ 监听事件通话
- 包含我昵称的消息
+ 包含我显示名称的消息包含我用户名的消息
- 你添加了一个新设备 “%s”,它正在请求加密密钥。
- 你有一台未验证设备 “%s” 正在请求加密密钥。
+ 你添加了一个新会话“%s”,它正在请求加密密钥。
+ 你的未验证会话“%s”正在请求加密密钥。开始验证
- 反馈问题
+ bug报告拍摄照片拍摄视频使用原生相机
@@ -451,14 +449,14 @@
静默通知数据收集响铃
- 正在加载…
+ 正在加载……你确定要发起语音通话吗?你确定要发起视频通话吗?
- 封禁踢掉将从聊天室中踢掉他们并阻止他们再次加入。
+ 封禁用户会把他们移出此房间并阻止他们再次加入。全部消息添加到主屏幕启用链接预览
- 使用 @ 时震动
+ 提及用户时震动创建%d 条新消息
@@ -466,41 +464,41 @@
社群摇一摇快捷反馈问题
- %d 位成员的状态发生了变化
+ %d个成员状态变动
- %d 位成员
+ %d个成员%d 条未读消息
- 显示成员
+ 成员
- %d 个聊天室
+ %d 个房间已启用 %d 个挂件主页
- 聊天室
+ 房间已邀请你已被 %2$s 从 %1$s 中移除你已被 %2$s 从 %1$s 中封禁理由:%1$s头像%1$s 条在 %2$s 中
- 停用账号
- 停用我的账号
+ 停用账户
+ 停用我的账户发送统计分析数据${app_name} 会收集匿名统计数据来帮助我们改进程序。
- 停用账号
- 这将使你的账号永远不再可用。你将无法登录,也不能使用相同的用户 ID 重新注册。你的账号将退出所有已加入的聊天室,你在身份服务器上的账号信息也会被删除。此操作是不可逆的。
+ 停用账户
+ 这将使你的账户永远不再可用。你将无法登录,也不能使用相同的用户 ID 重新注册。你的账户将退出所有已加入的房间,你在身份服务器上的账户信息也会被删除。<b>此操作是不可逆的。</b>
\n
-\n停用你的账号不会默认忘记你已发送的消息。如果你希望我们忘记你发送的消息,请勾选下面的选择框。
+\n停用你的账户<b>不会默认忘记你已发送的消息</b>。如果你希望我们忘记你发送的消息,请勾选下面的选择框。
\n
\nMatrix 中的消息可见性类似于电子邮件。我们忘记你的消息意味着你发送的消息不会被发给新注册或未注册的用户,但是已收到你的消息的注册用户依旧可以看到这些消息的副本。
- 请在我停用账号的同时忘记我发送的所有消息(警告:这将导致未来的用户看到残缺的对话)
- 停用账号
+ 请在我停用账户的同时忘记我发送的所有消息(警告:这将导致未来的用户看到残缺的对话)
+ 停用账户发送贴纸发送贴纸你目前没有启用任何贴纸包。
@@ -512,27 +510,27 @@
下载发送语音消息对不起,没有可完成此操作的外部应用。
- 从其他设备上 重新请求密钥。
- 请在其他可解密此消息的设备上启动 ${app_name},以便其将密钥发送至当前设备。
+ 从你的其他会话上重新请求加密密钥。
+ 请在其他可解密此消息的设备上启动 ${app_name},以便其将密钥发送至当前会话。请输入你的密码。如果可能的话,请使用英文撰写问题描述。发送前预览媒体文件显示动作按照 ID 封禁用户按照 ID 解禁用户
- 设置用户的权限等级
+ 定义用户的权力级别按照 ID 取消用户管理员权限
- 按照 ID 邀请用户进入当前聊天室
- 用给定地址加入聊天室
- 离开聊天室
- 设置聊天室主题
+ 按照 ID 邀请用户进入当前房间
+ 用给定地址加入房间
+ 离开房间
+ 设置房间主题按照 ID 踢出用户
- 更改你显示的昵称
+ 更改你显示的显示名称打开/关闭 markdown修复 Matrix Apps 管理
- 这个聊天室已经被替换并且不再活跃。
+ 这个房间已经被替换并且不再活跃。对话在此继续
- 这个聊天室是另一个对话的延续
+ 这个房间是另一个对话的延续点击此处查看更早的消息已选择 %d 个
@@ -551,13 +549,13 @@
通话为来电使用 ${app_name} 的默认铃声来电铃声
- 请选择来电铃声:
- 移除
+ 选择来电铃声:
+ 从聊天移除通知故障排除故障排除诊断运行测试
- 正在测试…(%2$d 中的 %1$d)
- 基本诊断结果正常。若你还是沒有收到通知,请提交错误报告以协助我们调查此问题。
+ 正在测试……(%2$d 中的 %1$d)
+ 基本诊断结果正常。若你还是没有收到通知,请提交错误报告以协助我们调查此问题。一个或多个测试没有通过,请尝试建议的修复方法。一个或多个测试没有通过,请提交错误反馈以协助我们调查此问题。系统设置。
@@ -565,13 +563,13 @@
通知已在系统设置中禁用。
\n请检查系统设置。打开设置
- 账号设置。
- 你的账号已启用通知。
- 你的账号已禁用通知。
-\n请检查账号设置。
+ 账户设置。
+ 你的账户已启用通知。
+ 你的账户已禁用通知。
+\n请检查账户设置。启用
- 设备设置。
- 已为此设备启用通知。
+ 会话设置。
+ 已为此会话启用通知。此会话未启用通知。
\n请检查 ${app_name} 设置。启用
@@ -581,13 +579,13 @@
\n%1$s修复 Play 服务Firebase 令牌
- 成功获取 FCM Token:
+ 成功获取FCM令牌:
\n%1$s
- FCM Token 获取失败:
+ FCM令牌获取失败:
\n%1$s
- 注册 Token
- FCM Token 已成功注册至主服务器。
- 未能将FCM Token 注册到主服务器:
+ 注册令牌
+ FCM令牌已成功注册至主服务器。
+ 未能将FCM令牌注册到主服务器:
\n %1$s调用系统相机应用而非使用 ${app_name} 内置的相机界面。开机时启动
@@ -596,24 +594,24 @@
电池优化若主服务器支持此功能,在聊天中预览链接内容。发送正在输入通知
- 让聊天室中的其他用户知道你正在输入。
+ 让房间中的其他用户知道你正在输入。Markdown 格式化在消息发出之前使用 Markdown 语法格式化消息。这允许你使用高级的文字格式,例如使用星号显示斜体文字。显示已阅回执点击已阅回执以显示所有已经阅读过某条消息的用户。显示加入与离开事件
- 邀请、移除与封禁事件不受影响。
- 显示账号变动事件
+ 邀请、移除与封禁不受影响。
+ 显示账户变动事件包括头像与显示名称的变动。密码
- %d+
+ +%d%1$s:%2$s收起展开抱歉,发生了一个错误Markdown 已禁用。Markdown 已启用。
- 视频通话中…
+ 视频通话中……服务将在设备重启后启动。服务不会在设备重启后启动,在你打开 ${app_name} 一次之前你将不会收到消息通知。已禁用对 ${app_name} 的后台限制。此测试应使用移动数据(非Wi-Fi)进行。
@@ -623,7 +621,7 @@
\n%1$s关闭后台限制${app_name} 未被电池优化影响。
- 如果设备在未充电的情况下关屏静置一段时间,其将进入打盹模式(Doze)。这将阻止应用访问网络并延后其运行、同步、与响铃。
+ 如果设备在未充电的情况下关屏静置一段时间,其将进入低电耗模式(Doze)。这将阻止应用访问网络并延后其运行、同步与响铃。忽略电池优化请输入用于加密被导出密钥的密语。恢复此备份时,必须输入相同的密语才能导入密钥。创建密语
@@ -631,18 +629,18 @@
指令 %s 需要更多参数,或者有些参数不正确。没有可用的 Google Play Services APK。消息通知可能不能正常工作。密钥备份
- 使用备份密钥
- 如果你此时登出账号,你将会失去你的已加密消息
- 密钥备份进行中。如果你此时登出账号将无法再访问你的已加密消息。
- 你的所有设备都应当启用安全密钥备份以确保你不会失去你的已加密消息的访问权。
+ 使用密钥备份
+ 如果你此时登出账户,你将会失去你的已加密消息
+ 密钥备份进行中。如果你此时登出账户将无法再访问你的已加密消息。
+ 你的所有会话都应当启用安全密钥备份以避免失去对你的已加密消息的访问权。我不想要我的已加密消息
- 正在备份密钥…
+ 正在备份密钥……确定吗?备份
- 如果你在登出账号之前不备份密钥,你将失去你的已加密消息的访问权。
+ 如果你在登出账户之前不备份密钥,你将失去你的已加密消息的访问权。跳过完成
- 你确定要登出账号吗?
+ 你确定要登出账户吗?高级通知设置事件的通知重要程度自定义设置。
@@ -653,8 +651,8 @@
[%1$s]
\n此错误不受 ${app_name} 控制。它的发生可能有几个原因。也许你稍后重试就有效了,你也可以检查一下 Google Play 服务是否被系统设置限制了数据使用,或者你的设备时钟是否正确,或者可能发生在自定义的 ROM 中。[%1$s]
-\n此错误不受 ${app_name} 控制。此设备上没有登录 Google 账号。请打开账号管理器并添加一个 Google 账号。
- 添加账号
+\n此错误不受 ${app_name} 控制。此设备上没有登录 Google 账户。请打开账户管理器并添加一个 Google 账户。
+ 添加账户设置响铃通知设置电话通知设置静音通知
@@ -668,7 +666,7 @@
密语太弱了如果你想要 ${app_name} 生成一个恢复密钥,请删除密语。永不丢失已加密消息
- 加密聊天室中的信息会被端对端加密以确保安全。只有你和拥有密钥的接收方可以读取这些信息。
+ 加密房间中的信息会被端对端加密以确保安全。只有你和拥有密钥的接收方可以读取这些信息。
\n
\n安全地备份你的密钥以免丢失信息。开始使用备份密钥
@@ -677,7 +675,7 @@
使用密语保护你的备份。我们将会在主服务器上为你的密钥保存一份加密拷贝。设置一个密语来保护你的备份的安全。
\n
-\n为了最大的安全性,此密语应当与你的账号密码不同。
+\n为了最大的安全性,此密语应当与你的账户密码不同。设置密语正在创建备份或者用一个恢复密钥来保护你的备份,将其保存到另一个安全的地方。
@@ -698,7 +696,7 @@
恢复密钥意外错误你确定吗?
- 如果你登出账号或者丢失此设备,你可能再也无法访问你的信息。
+ 如果你登出账户或者丢失此设备,你可能再也无法访问你的信息。正在获取备份的版本 …使用恢复密语解锁你的已加密历史消息使用你的恢复密钥
@@ -719,20 +717,20 @@
恢复了一个包含 %d 个密钥的备份。
- %d 个新密钥已被添加到此设备中。
+ %d个新密钥已被添加到此会话中。无法获取最新的恢复密钥版本 (%s) 。从备份恢复删除备份
- 已为此设备正确设置密钥备份。
- 密钥备份在此设备上未激活。
- 你的密钥未从此设备备份。
- 备份含有一个来自 ID 为 %s 的未知设备的签名。
- 备份具有此设备的有效签名。
- 备份具有已验证设备 %s 的有效签名。
- 备份具有未验证设备 %s 的有效签名
- 备份具有已验证设备 %s 的无效签名
- 备份具有未验证设备 %s 的无效签名
+ 已为此会话正确设置密钥备份。
+ 密钥备份在此会话上未激活。
+ 你的密钥未从此会话备份。
+ 备份含有来自ID为%s的未知会话的一个签名。
+ 备份具有来自此会话的有效签名。
+ 备份具有来自已验证会话%s的有效签名。
+ 备份具有来自未验证会话%s的有效签名
+ 备份具有来自已验证会话%s的无效签名
+ 备份具有来自未验证会话%s的无效签名要在此会话中使用密钥备份,请立即使用密语或恢复密钥进行恢复。正在删除备份…删除备份
@@ -768,21 +766,21 @@
%d 条通知新活动
- 聊天室
+ 房间新消息新邀请我
- ** 发送失败 - 请打开聊天室
+ ** 发送失败 - 请打开房间抱歉,旧设备(Android 系统版本低于 6.0)不支持使用 Jitsi 创建电话会议未知 IP
- 一个新设备正在请求加密密钥。
-\n设备名称:%1$s
+ 一个新会话正在请求加密密钥。
+\n会话名称:%1$s
\n最近上线于:%2$s
-\n若你未曾在另一个设备上登录,请忽略此请求。
- 一个未验证的设备正在请求加密密钥。
-\n设备名称:%1$s
+\n若你未曾在另一个会话上登录,则忽略此请求。
+ 一个未验证的会话正在请求加密密钥。
+\n会话名称:%1$s
\n最近上线于:%2$s
-\n若你未曾在另一个设备上登录,请忽略此请求。
+\n若你未曾在另一个会话上登录,则忽略此请求。分享密钥分享请求忽略
@@ -800,21 +798,21 @@
向你发送邀请由 %s 邀请对话
- 聊天室
- 响应
+ 房间
+ 反应同意
- 响应
- 查看响应
- 响应
+ 添加反应
+ 查看反应
+ 反应由用户删除的事件
- 创建新聊天室
+ 创建新房间修改
- 请稍候…
+ 请稍候……所有社群
- 无法预览此聊天室
- 聊天室
+ 无法预览此房间
+ 房间创建
- 聊天室名称
+ 房间名称Matrix SDK 版本通用选项
@@ -835,7 +833,7 @@
撤消断开连接拒绝
- 這不是有效的 Matrix 服务器位置
+ 这不是有效的Matrix服务器地址无法在此 URL 找到主服务器,请检查播放忽略
@@ -859,27 +857,25 @@
SSL 错误。取消邀请降低你自己的级别?
- 你正在降低你的级别,此操作无法撤销。如果你是聊天室中最后一个特权用户,你将无法恢复特权。
+ 你正在降低你的级别,此操作无法撤销。如果你是房间中最后一个特权用户,你将无法恢复特权。降级忽略用户
- 忽略此用户将从你共享的聊天室移除他们的消息。
+ 忽略此用户将从你共享的房间移除他们的消息。
\n
\n你随时可以在通用设置中反转此操作。取消忽略用户
- 取消忽略此用户将重新显示来自他们的全部消息。
-\n
-\n请注意:此操作将重新启动应用程序,并且可能需要一些时间。
+ 取消忽略此用户将重新显示来自他们的全部消息。取消邀请你确定想要取消邀请此用户吗?踢掉用户踢掉理由
- 踢掉用户将从此聊天室移除他们。
+ 用户将从此房间移除。
\n
-\n为防止他们再次加入,你应当封禁他们。
+\n为防止他们再次加入,你应改为封禁他们。封禁用户封禁理由取消封禁用户
- 取消封禁用户将允许他们再次加入聊天室。
+ 取消封禁用户将允许他们再次加入房间。后台同步模式电池优化${app_name} 将在后台以保留设备有限资源(电池)的方式同步。
@@ -891,7 +887,7 @@
应用在后台时你不会收到消息通知。集成使用集成管理器管理机器人、桥接、部件和贴纸包。
-\n集成管理器接收配置数据,可以代表你修改部件、发送聊天室邀请及设置特权等级。
+\n集成管理器接收配置数据,可以代表你修改部件、发送房间邀请及设置权力级别。安全备份设置安全备份重置安全备份
@@ -923,12 +919,12 @@
重载挂件在浏览器中打开撤消我的访问权限
- 你的昵称
+ 你的显示名称你的头像 URL你的用户 ID你的主题挂件 ID
- 聊天室 ID
+ 房间 ID挂件想使用以下资源:允许阻止全部
@@ -947,22 +943,22 @@
你已经跟上了!你没有未读消息你的私聊消息将显示在此处。点击右下角的 + 开始一些对话。
- 你的聊天室将显示在此处。点击右下角的 + 来找到现有的聊天室或者创建你自己的聊天室。
- 消息已删除
+ 你的房间将显示在此处。点击右下角的 + 来找到现有的房间或者创建你自己的房间。
+ 消息已移除显示已移除消息对已移除消息显示占位符
- 聊天室管理员主持的事件
+ 房间管理员主持的事件格式错误事件,无法显示无网络。请检查你的网络连接。更改网络私聊消息公开
- 任何人都可以加入此聊天室
+ 任何人都可以加入此房间获取信任信息时发生错误获取密钥备份数据时发生错误从文件 \"%1$s\" 导入端对端密钥。其他第三方通知
- 你已经在查看此聊天室!
+ 你已经在查看此房间!注册令牌提出建议请在下方写下你的建议。
@@ -981,14 +977,14 @@
未找到编辑过滤对话…找不到你要找的?
- 创建新聊天室
+ 创建新房间发送新私聊消息
- 查看聊天室目录
+ 查看房间目录名称或 ID (#example:matrix.org)启用在时间线中滑动回复在主屏幕上添加未读通知选项卡。链接已复制到剪贴板
- 正在创建聊天室…
+ 正在创建房间…查看编辑历史服务条款可被其他人发现
@@ -1018,13 +1014,13 @@
启用详细日志。当你发送 RageShake 时详细日志将帮助开发者提供更多日志。即使启用,应用也不会记录消息内容或任何其他私有数据。接收你的主服务器条款和条件后请重试。
- 服务器似乎响应时间太长,这可能是由于连接不良或服务器错误引起的。 请稍后再试。
+ 服务器似乎响应时间太长,这可能是由于连接不良或服务器错误引起的。请稍后再试。发送附件打开导航菜单
- 打开创建聊天室菜单
- 关闭创建聊天室菜单…
+ 打开创建房间菜单
+ 关闭创建房间菜单…创建新的私聊对话
- 创建新聊天室
+ 创建新房间关闭密钥备份横幅跳到底部%1$s,%2$s 和 %3$s 已读
@@ -1040,10 +1036,10 @@
贴纸无法处理共享数据媒体
- 此聊天室中暂无媒体
+ 此房间中暂无媒体文件%1$s 于 %2$s
- 此聊天室中暂无文件
+ 此房间中暂无文件垃圾信息不合适的内容自定义报告……
@@ -1071,15 +1067,15 @@
设置添加到收藏从收藏中移除
- 离开聊天室
+ 离开房间%1$s 未做更改你未做更改你未忽略任何用户
- 长按聊天室查看更多选项
- %1$s 将聊天室设为对任何知道链接的用户公开。
- 你将聊天室设为对任何知道链接的用户公开。
- %1$s 将聊天室设为仅限邀请。
- 你将聊天室设为仅限邀请。
+ 长按房间查看更多选项
+ %1$s 将房间设为对任何知道链接的用户公开。
+ 你将房间设为对任何知道链接的用户公开。
+ %1$s 将房间设为仅限邀请。
+ 你将房间设为仅限邀请。未读消息这是你的对话。它只属于你。与人们私聊或群聊
@@ -1087,7 +1083,7 @@
扩展 & 自定义你的体验开始吧选择服务器
- 就像电子邮件,账号有一个家,尽管你可以与任何人聊天
+ 就像电子邮件,账户有一个家,尽管你可以与任何人聊天在最大的公共服务器上免费加入数百万用户面向组织的高级托管了解更多
@@ -1110,20 +1106,20 @@
应用无法登录到此主服务器。主服务器支持以下登录类型:%1$s。
\n
\n你想要通过网页客户端登录吗?
- 抱歉,此服务器不接受新账号。
- 应用无法在此服务器上创建账号。
+ 抱歉,此服务器不接受新账户。
+ 应用无法在此服务器上创建账户。
\n
\n你想要通过网页客户端注册吗?
- 电子邮件未关联到任何账号。
+ 电子邮件未关联到任何账户。在 %1$s 上重置密码验证邮件将发送到你的收件箱以确认设置你的新密码。下一个电子邮件新密码注意!
- 更改你的密码将重置所有会话上的端对端加密密钥,从而使加密聊天记录无法读取。在重设密码之前,请设置“密钥备份”或从另一个会话中导出聊天室密钥。
+ 更改你的密码将重置所有会话上的端对端加密密钥,从而使加密聊天记录无法读取。在重设密码之前,请设置“密钥备份”或从另一个会话中导出房间密钥。继续
- 电子邮件未链接到任何账号
+ 电子邮件未链接到任何账户检查你的收件箱验证电子邮件已发送到 %1$s。点击链接以确认你的新密码。跟随包含的链接验证后,请点击下方。
@@ -1137,7 +1133,7 @@
\n
\n是否中止密码更改过程?设置电子邮件地址
- 设置电子邮件用于恢复你的账号。之后,你可以选择允许你认识的人通过电子邮件发现你。
+ 设置电子邮件用于恢复你的账户。之后,你可以选择允许你认识的人通过电子邮件发现你。电子邮件电子邮件(可选)下一个
@@ -1161,9 +1157,7 @@
下一个用户名已占用注意
- 你的账号尚未创建。
-\n
-\n是否中止注册过程?
+ 你的账户尚未创建。是否中止注册过程?选择 matrix.org选择 Element Matrix Services选择自定义主服务器
@@ -1171,7 +1165,7 @@
接受条款以继续请检查你的电子邮件我们向 %1$s 发送了电子邮件。
-\n请点击其中包含的链接继续账号创建。
+\n请点击其中包含的链接继续账户创建。输入的验证码不正确。请检查。过时的主服务器
@@ -1179,7 +1173,7 @@
使用 Matrix ID 登录使用 Matrix ID 登录
- 如果你在主服务器上设置了账号,在下方使用你的 Matrix ID(例 @user:domain.com)和密码。
+ 如果你在主服务器上设置了账户,在下方使用你的 Matrix ID(例 @user:domain.com)和密码。Matrix ID如果你不知道你的密码,返回并重置。这不是一个有效的用户标识符。期望的格式:\'@user:homeserver.org\'
@@ -1195,21 +1189,21 @@
重新登录你已登出登录
- 你的主服务器 (%1$s) 管理员将你从你的账号 %2$s (%3$s) 登出。
+ 你的主服务器 (%1$s) 管理员将你从你的账户 %2$s (%3$s) 登出。登录以恢复仅存储在此设备上的加密密钥。 你需要使用它们在任何设备上阅读所有安全消息。登录密码清除个人数据注意:你的个人数据(包括加密密钥)仍存储在此设备上。
\n
-\n如果你不再使用此设备,或想登录另一个账号,请清除它。
+\n如果你不再使用此设备,或想登录另一个账户,请清除它。清除全部数据清除数据是否清除当前存储在此设备上的全部数据?
-\n再次登录以访问你的账号数据和消息。
+\n再次登录以访问你的账户数据和消息。
除非你登录以恢复加密密钥,否则你将无法访问安全消息。当前会话用于用户 %1$s 而你提供了用户 %2$s 的凭证。${app_name} 不支持此功能。
-\n请先清除数据,然后重新登录另一个账号。
+\n请先清除数据,然后重新登录另一个账户。
你的 matrix.to 链接更是不正确描述太短初始同步…
@@ -1261,43 +1255,43 @@
验证 %s已验证 %s正在等待 %s…
- 此聊天室的消息未经端对端加密。
- 该聊天室的消息已被端对端加密。
+ 此房间的消息未经端对端加密。
+ 该房间的消息已被端对端加密。
\n
\n你的消息受加密保护,并且只有你和消息接收者拥有唯一解密密钥。安全了解更多更多管理员操作
- 聊天室设置
+ 房间设置通知%1$d 人上传
- 离开聊天室
- 正在离开聊天室…
+ 离开房间
+ 正在离开房间…管理员协管员自定义邀请用户
- %1$s 管理员
- %1$s 的协管员
- %1$s 默认权限
- %2$s 自定义权限 (%1$d)
+ %1$s里的管理员
+ %1$s里的协管员
+ %1$s里的默认
+ %2$s里的自定义(%1$d)${app_name} 无法处理类型为 \'%1$s\' 的事件${app_name} 在渲染 id 为 \'%1$s\' 的事件内容时遇到了一个问题取消忽略该会话无法与你的其他会话共享此验证。
\n验证将保存在本地,并在此应用的未来版本中共享。
- 发送彩虹色给定消息
- 发送彩虹色给定表情
+ 给给定的消息和彩虹一样上色后发送
+ 和彩虹一样给给定的表情上色后发送时间线消息编辑器启用端对端加密…是否启用加密?
- 聊天室加密一经启用,便无法禁用。在加密聊天室中,发送的消息无法被服务器看到,只能被聊天室的参与者看到。启用加密可能会使许多机器人和桥接无法正常运作。
+ 房间加密一经启用,便无法禁用。在加密房间中,发送的消息无法被服务器看到,只能被房间的参与者看到。启用加密可能会使许多机器人和桥接无法正常运作。启用加密为保证安全,请核对一次性代码以验证 %s。为保证安全,请当面验证,或者使用其他通讯方式验证。
@@ -1314,14 +1308,14 @@
交叉签名已启用。
\n密钥未信任交叉签名未启用
- 你的服务器管理员已默认禁用私有聊天室和私聊消息端对端加密。
- 激活会话
+ 你的服务器管理员已默认禁用私有房间和私聊消息端对端加密。
+ 活跃的会话显示全部会话管理会话登出此会话加密信息不可用此会话对安全消息可信因为你已验证它:
- 验证此会话以将其标记为可信,并授予其访问加密消息的权限。如果你未登录此会话,则你的账号可能已被盗:
+ 验证此会话以将其标记为可信,并授予其访问加密消息的权限。如果你未登录此会话,则你的账户可能已被盗:%d 个活动会话
@@ -1346,7 +1340,7 @@
到服务器的连接已丢失飞行模式已打开开发工具
- 账号数据
+ 账户数据使用恢复密语或密钥如果你无法访问已有会话无法在存储中找到秘密
@@ -1356,7 +1350,7 @@
发送原始尺寸图片确认移除
- 你确实想要移除(删除)此事件吗?注意如果你删除聊天室名或话题更改,可以撤销更改。
+ 你确实想要移除(删除)此事件吗?注意如果你删除房间名或话题更改,可以撤销更改。附加理由编辑理由事件被用户删除,理由:%1$s
@@ -1367,7 +1361,7 @@
新登录。是你吗?使用此会话验证新的会话,授权访问加密消息。这不是我
- 你的账号可能已被盗用
+ 你的账户可能已被盗用如果你取消,你将无法在此设备上读取加密消息,其他用户不会信任它如果你取消,你将无法在新设备上读取加密消息,其他用户不会信任它如果你现在取消将不会验证 %1$s (%2$s)。在他们的用户个人档案中重新开始。
@@ -1384,7 +1378,7 @@
恢复密语消息密钥输入你的 %s 以继续。
- 不要使用你的账号密码。
+ 不要使用你的账户密码。输入只有你知道的安全口令,用于保护服务器上的秘密。这可能会花费数秒,请耐心等待。设置恢复。
@@ -1402,24 +1396,24 @@
\n
\n请安全地保管它。如果你丢失了全部活动会话你将需要使用它们解锁加密消息和安全信息。将它打印出来并存放在安全的地方
- 发送爆雷信息
- 爆雷
- 输入关键字以查找表情。
+ 将给定信息作为剧透发送
+ 剧透
+ 输入关键字以查找反应。已阅跳至已读回执
- 事件被聊天室管理员调整,理由:%1$s
+ 事件被房间管理员调整,理由:%1$s密钥已是最新!保存到优盘或者备份盘复制到你的个人云存储如果你现在取消,那么当你失去登录权限时也会丢失加密的信息和数据。
\n
\n你也可以通过设置菜单来建立保护备份以及管理你的密钥。
- 加密开启
- 本聊天室信息已经端对端加密。验证成员时,请查看其个人档案以了解更多信息。
+ 加密已开启
+ 本房间信息已经端对端加密。验证成员时,请查看其个人档案以了解更多信息。加密未开启
- 不支持本聊天室使用的加密方式
- %s 创建并配置了聊天室。
- 你创建并配置了聊天室。
+ 不支持本房间使用的加密方式
+ %s 创建并配置了房间。
+ 你创建并配置了房间。接近完成!另外的设备是否正显示对勾?接近完成!等候确认……正在等候 %s…
@@ -1428,11 +1422,11 @@
一对一聊天的加密信息群聊的加密信息消息包含 @room
- 当聊天室升级
+ 当房间升级故障诊断以纯文本形式发送消息,而不将其解释为 markdown用户名和/或密码不正确。输入的密码以空格开头或结尾,请检查。
- 此账号已停用。
+ 此账户已停用。消息…加密升级可用验证你自己和其他人以保证你的聊天安全
@@ -1454,7 +1448,7 @@
阻止应用内屏幕截图启用此设置添加 FLAG_SECURE 到所有活动。重启应用使更改生效。无法保存媒体文件
- 选择新的账号密码…
+ 选择新的账户密码…在你的其他设备上使用最新的${app_name} 网页版、${app_name} 桌面版、${app_name} iOS 版、${app_name} 安卓版,或其他能够交叉签名的 Matrix 客户端${app_name} Web
\n${app_name} Desktop
@@ -1462,8 +1456,8 @@
\n${app_name} Android
或其他能够交叉签名的 Matrix 客户端在你的其他设备上使用最新的 ${app_name}:
- 强制丢弃加密聊天室中的当前出站群组会话
- 仅在加密聊天室中支持
+ 强制丢弃加密房间中的当前出站群组会话
+ 仅在加密房间中支持使用你的 %1$s 或使用你的 %2$s 继续。使用恢复密钥选择你的恢复密钥,或手动输入或从剪贴板粘贴
@@ -1471,8 +1465,8 @@
未加密由未验证设备加密查看你的登录位置
- 验证你的全部会话确保你的账号和消息安全
- 验证访问你的账号的新登录:%1$s
+ 验证你的全部会话确保你的账户和消息安全
+ 验证访问你的账户的新登录:%1$s使用文本手动验证验证登录使用表情交互式验证
@@ -1531,9 +1525,9 @@
输入只有你知道的安全口令,用于保护你的服务器上的秘密。安全口令再次输入你的安全口令以确认。
- 聊天室名称
+ 房间名称主题
- 你已成功更改聊天室设置
+ 你已成功更改房间设置你无法访问此消息正在等待此消息,可能会花费一些时间由于端对端加密,你可能需要等待某人的消息到达因为加密密钥未正确发送给你。
@@ -1542,7 +1536,7 @@
你无法访问此消息因为发送者有意不发送密钥正在等待加密历史Riot 现已成为 Element!
- 我们很高兴地宣布我们改名了!你的应用已经更新到最新版本,并且你已登录你的账号。
+ 我们很高兴地宣布我们改名了!你的应用已经更新到最新版本,并且你已登录你的账户。明白了了解更多将恢复密钥保存到
@@ -1567,10 +1561,10 @@
如果你想要重置你的 PIN,点按忘记 PIN 登出并重置。防止意外通话发起通话之前要求确认
- 你没有权限在此聊天室发起会议通话
+ 你没有权限在此房间发起会议通话发起视频会议发起音频会议
- 会议使用 Jitsi 安全与许可政策。你的会议进行期间当前聊天室内的所有人将看到加入邀请。
+ 会议使用 Jitsi 安全与许可政策。你的会议进行期间当前房间内的所有人将看到加入邀请。你无法呼叫你自己你无法与自己通话,请等待参与者接受邀请添加挂件失败
@@ -1580,7 +1574,7 @@
管理集成无活动挂件
- 聊天室已创建,但由于以下原因一些邀请尚未发送:
+ 房间已创建,但由于以下原因一些邀请尚未发送:
\n
\n%s
@@ -1592,27 +1586,27 @@
注意!登出前最后一次尝试!错误次数过多,你已被登出此电话号码已定义。
- 你的账号尚未添加电话号码
+ 你的账户尚未添加电话号码电子邮件地址
- 你的账号尚未添加电子邮件
+ 你的账户尚未添加电子邮件电话号码移除 %s?请确认你已点击我们向你发送的电子邮件中的链接。电子邮件和电话号码
- 管理链接到你的 Matrix 账号的电子邮件和电话号码
+ 管理链接到你的 Matrix 账户的电子邮件和电话号码代码请使用国际格式(电话号码必须以 ‘+’ 开始)通过验证此登录确认你的身份,授权它访问加密信息。
- 无法打开你被封禁的聊天室。
- 无法找到此聊天室。请确认它存在。
- 你没有权限在此聊天室发起通话
+ 无法打开你被封禁的房间。
+ 无法找到此房间。请确认它存在。
+ 你没有权限在此房间发起通话%d 秒轮询
- 回应:%s
+ 用%s反应验证结果
- 是否删除类型 %1$s 的账号数据?
+ 是否删除类型 %1$s 的账户数据?
\n
\n小心使用,它可能导致意外行为。链接格式不正确
@@ -1620,7 +1614,7 @@
在 2 分钟未使用 ${app_name} 后要求 PIN 码。2 分钟后要求 PIN仅在一个简单通知中显示未读消息内容数量。
- 显示细节如聊天室名称和消息内容。
+ 显示细节如房间名称和消息内容。在通知中显示内容PIN 码是解锁 ${app_name} 的唯一方式。启用设备特定的生物特征识别,如指纹和面部识别。
@@ -1638,7 +1632,7 @@
忘记或丢失了所有的恢复选项?重置一切你已加入。%s 已加入。
- 此聊天室的消息是端对端加密的。
+ 此聊天的消息是端对端加密的。离开设置此处的消息已被端对端加密。
@@ -1648,7 +1642,7 @@
此主服务器正在运行较旧版本。要求你的主服务器管理员升级。你可以继续,但一些功能可能无法正确工作。你仅发出此邀请。%1$s 仅发出此邀请。
- 在加密聊天室显示完整历史
+ 在加密房间显示完整历史%1$s 和 %2$s%1$s 条在 %2$s 和 %3$s 中
@@ -1676,35 +1670,35 @@
手动发布新地址其它发布的地址:这是主要地址
- 发布的地址可以被任何服务器上的任何人用来加入你的聊天室。要发布一个地址,它必须先被设为一个本地地址。
+ 发布的地址可以被任何服务器上的任何人用来加入你的房间。要发布一个地址,它必须先被设为一个本地地址。发布的地址
- 查看和管理此聊天室的地址,以及它在聊天室目录中的可见性。
- 聊天室地址
- 聊天室访问权限
- 改成谁都可以阅读历史只会应用于此聊天室未来的消息。已经存在的历史消息的可见性将不会改变。
+ 查看和管理此房间的地址,以及它在房间目录中的可见性。
+ 房间地址
+ 房间访问权限
+ 对谁可以阅读历史消息的变更只会应用于此房间未来的消息。已经存在的历史消息的可见性将不会改变。发送密钥共享请求历史记录取消发布添加设置交叉签名失败
- 发送雪花 ❄️
- 发送撒花 🎉
- 发送带有雪花的给定消息
- 使用 confetti 发送给定消息
+ 发送落雪 ❄️
+ 发送五彩纸屑 🎉
+ 将下雪效果和给定消息一起发送
+ 将给定的消息和五彩纸屑一起发送"话题: "添加一个话题
- %s 使人们知道此聊天室关于什么。
+ %s让人们知道此房间是关于什么的。这是你和 %s 的私聊消息历史记录的开始。这是此对话的开始。这是 %s 的开始。导出审计
- 你没有权限在此聊天室启用加密。
+ 你没有权限在此房间启用加密。私聊消息
- 正在创建聊天室…
+ 正在创建房间…一些字符不被允许
- 请提供一个聊天室地址
+ 请提供一个房间地址此地址已被使用
- 你可以启用此选项如果此聊天室将仅用于你的主服务器上的内部团队协作。此选项之后无法更改。
- 屏蔽不是 %s 一部分的任何人加入此聊天室
+ 你可以启用此选项如果此房间将仅用于你的主服务器上的内部团队协作。此选项之后无法更改。
+ 屏蔽不是 %s 一部分的任何人加入此房间隐藏高级显示高级清除历史记录
@@ -1726,37 +1720,37 @@
已知用户二维码通过二维码添加
- 聊天室设置
+ 房间设置主题
- 聊天室话题(可选)
- 聊天室名称
- 此聊天室无法预览。你想加入吗?
- 目前无法访问此聊天室。
-\n请稍候重试,或询问聊天室管理员以确认你是否拥有访问权限。
- 无法获取当前聊天室目录可见性(%1$s)。
- 是否将此聊天室发布至 %1$s 的聊天室目录中?
+ 房间话题(可选)
+ 房间名称
+ 此房间无法预览。你想加入吗?
+ 目前无法访问此房间。
+\n请稍后重试,或询问房间管理员以确认你是否拥有访问权限。
+ 无法获取当前房间目录可见性(%1$s)。
+ 是否将此房间发布至 %1$s 的房间目录中?取消发布此地址发布此地址添加本地地址
- 此聊天室没有本地地址
- 为此聊天室设置地址以便用户通过你的主服务器(%1$s)找到此聊天室
+ 此房间没有本地地址
+ 为此房间设置地址以便用户通过你的主服务器(%1$s)找到此房间本地地址新的发布的地址(例如 #alias:server)尚无其他已发布地址。还没有别的发布的地址,可在下方添加。
- 在消息框添加打开表情键盘的按钮
- 显示表情键盘
+ 在消息框添加打开emoji键盘的按钮
+ 显示emoji键盘使用 /confetti 命令或发送包含 ❄️ 或 🎉 的消息显示聊天效果更改话题
- 更新聊天室
+ 更新房间发送 m.room.server_acl 事件更改权限
- 更改聊天室名称
+ 更改房间名称更改历史记录可见性
- 启用聊天室加密
- 更改聊天室主要地址
- 更改聊天室头像
+ 启用房间加密
+ 更改房间主要地址
+ 更改房间头像修改挂件通知每个人移除其他人发送的消息
@@ -1766,12 +1760,12 @@
邀请用户发送消息默认角色
- 你没有权限更新更改聊天室多个部分所需角色
- 选择更改聊天室各个部分所需的角色
+ 你没有权限更新更改房间多个部分所需角色
+ 选择更改房间各个部分所需的角色权限
- 需要查看和更新角色以更改聊天室多个部分。
- 聊天室权限
- 此聊天室不公开。你没有邀请将无法重新加入。
+ 需要查看和更新角色以更改房间多个部分。
+ 房间权限
+ 此房间不公开。你没有邀请将无法重新加入。你保持通话%s 保持通话保持
@@ -1791,7 +1785,7 @@
你确定要取消发送消息吗?消息发送失败删除未发送的消息
- 你确定要删除此聊天室中所有未发送的消息吗?
+ 你确定要删除此房间中所有未发送的消息吗?失败状态事件已发送!事件已发送!
@@ -1826,15 +1820,15 @@
\n正在下载数据…初始化同步:
\n正在等待服务器响应…
- 空聊天室(曾为 %s)
+ 空房间(曾为 %s)%1$s,%2$s,%3$s 和 %4$d 位其他成员%1$s,%2$s,%3$s 和 %4$s%1$s,%2$s 和 %3$s设置头像
- 聊天室设置
- 聊天室版本
+ 房间设置
+ 房间版本放弃修改拨号键盘转移
@@ -1847,17 +1841,17 @@
可信信任等级警告信任等级默认信任等级
- 你修改了此聊天室的服务器访问控制列表。
- %s 修改了此聊天室的服务器访问控制列表。
- %s 为此聊天室设置了服务器访问控制列表。
- 你为此聊天室设置了服务器访问控制列表。
+ 你修改了此房间的服务器访问控制列表。
+ %s 修改了此房间的服务器访问控制列表。
+ %s 为此房间设置了服务器访问控制列表。
+ 你为此房间设置了服务器访问控制列表。在 Matrix 上查找联系人用户尚未同意条款。分享此二维码,其他人扫描后即可添加你,并开始聊天。我的二维码分享我的二维码消息类型缺失
- 检查聊天室状态
+ 检查房间状态查看已读回执关闭通知无声通知
@@ -1867,35 +1861,35 @@
从文件中导入密钥发生错误,消息未能发送状态键
- 有些聊天室可能被隐藏,因为其为私有聊天室,你需要得到邀请。
- 有些聊天室可能被隐藏,因为其为私有聊天室,你需要得到邀请。
-\n你没有权限添加聊天室。
- 此空间没有聊天室
+ 有些房间可能被隐藏,因为其为私有房间,你需要得到邀请。
+ 有些房间可能被隐藏,因为其为私有房间,你需要得到邀请。
+\n你没有权限添加房间。
+ 此空间没有房间请联系你的主服务器管理员以取得进一步资讯看来你的主服务器尚未支持空间想要做点实验?
\n你可以将现有的空间添加到其他空间中。
- 管理聊天室和空间
+ 管理房间和空间标记为不建议标记为建议建议
- 管理聊天室
+ 管理房间正在寻找不在 %s 中的人?%s 邀请了你你被邀请
- 空间是一种将聊天室和人们进行重新分组的新方式。
- 添加现有聊天室和空间
+ 空间是一种将房间和人们进行重新分组的新方式。
+ 添加现有房间和空间你是此空间唯一的管理员。离开就意味着没人能控制它。除非你被重新邀请,否则你将无法重新加入。你是这唯一的人。如果你离开,包括你在内的所有人都将无法加入此空间。
- 离开空间
- 添加聊天室
- 探索聊天室
+ 离开
+ 添加房间
+ 探索房间你认识的 %d 个人已加入此别名当前无法被访问。
-\n请稍后再试,或询问聊天室管理员你身份有权访问。
+\n请稍后再试,或询问房间管理员你身份有权访问。无论以何种方式加入加入空间创建空间
@@ -1915,9 +1909,9 @@
正在创建空间……随机一般性
- 让我们为每个主题创建一个聊天室。你也可以稍后再进行增加,包括现有聊天室。
+ 让我们为每个主题创建一个房间。你也可以稍后再进行增加,包括现有房间。你在做些什么?
- 我们将会为此创建聊天室。你也可以在稍后增加更多。
+ 我们将会为此创建房间。你也可以在稍后增加更多。你希望在 %s 中进行哪些讨论?为它取名以继续。增加一些详细信息以帮助人们识别。你可以随时更改这些信息。
@@ -1929,9 +1923,9 @@
公开供你和你的伙伴使用的私有空间我和伙伴
- 用于整理你聊天室的私有空间
+ 用于整理你房间的私有空间仅我
- 确保对的人可以访问 %s。你可以稍后进行更改。
+ 确保对的人可以访问 %s。你与谁一同工作?要加入现有空间,你需要获得邀请。你可以稍后更改
@@ -1939,10 +1933,10 @@
你的私有空间你的公开空间添加空间
- 离开指定 id 的聊天室(如果为空值则为当前所处的聊天室)
- 使用指定的 id 加入空间
+ 离开给定id的房间(如果为null则为当前所处的房间)
+ 使用给定的id加入空间创建空间
- 公开聊天室
+ 公开房间未检查开启挂件屏幕截图
@@ -1953,7 +1947,7 @@
此通话已结束%1$s 拒绝了此通话有未保存的更改。要放弃更改吗?
- 聊天室尚未创建。取消创建聊天室?
+ 房间尚未创建。取消创建房间?未扫描二维码!无效的二维码(无效的 URI)!无法向你自己发送私聊消息!
@@ -1973,7 +1967,7 @@
搜索名称正在压缩视频 %d%%正在压缩图片……
- 意见反馈
+ 提供反馈反馈发送失败(%s)感谢,你的反馈已成功送达如果你后续有任何问题,欢迎联系我
@@ -1982,57 +1976,57 @@
空间反馈离开当前的回忆并切换至其他会议?抱歉,在尝试加入会议时发生了错误
- 所有在此空间中的人都可以找到并加入它。仅有此聊天室的管理员可以将其添加到空间中。
+ 所有在此空间中的人都可以找到并加入它。仅有此房间的管理员可以将其添加到空间中。仅空间成员
- 任何人都能找到聊天室并加入
+ 任何人都能找到房间并加入公开仅有被邀请的人才能找到并加入私有未知的访问设置(%s)
- 任何人都可以要求加入聊天室,成员可以接受或拒绝
+ 任何人都可以要求加入房间,成员可以接受或拒绝允许访客加入设置为默认值,并不再询问总是询问空间
- 显示聊天室目录中的所有聊天室,包括带有脏标的聊天室。
- 显示带有脏标的聊天室
- 聊天室目录
- 推荐的聊天室
+ 显示房间目录中的所有房间,包括带有脏标的房间。
+ 显示带有脏标的房间
+ 房间目录
+ 推荐的房间新值
- 你更改了此聊天室的地址。
- %1$s 更改了此聊天室的地址。
- 你为此聊天室更改了主要和备用地址。
- %1$s 已为此聊天室更改了主要和备用地址。
- %1$s 更改了此聊天室的备用地址。
- 你已为此聊天室更改了备用地址。
+ 你更改了此房间的地址。
+ %1$s 更改了此房间的地址。
+ 你为此房间更改了主要和备用地址。
+ %1$s 已为此房间更改了主要和备用地址。
+ %1$s 更改了此房间的备用地址。
+ 你已为此房间更改了备用地址。
- 你已为此聊天室移除了备用地址 %1$s。
+ 你已为此房间移除了备用地址 %1$s。
- %1$s 已为此聊天室移除了备用地址 %2$s。
+ %1$s 已为此房间移除了备用地址 %2$s。
- 你已为此聊天室添加了备用地址 %1$s。
+ 你已为此房间添加了备用地址 %1$s。
- %1$s 已为此聊天室添加了备用地址 %2$s。
+ %1$s 已为此房间添加了备用地址 %2$s。消息已发送
- 🎉 所有服务器都被禁止参与!此聊天室已无法再使用。
+ 🎉 所有服务器都被禁止参与!此房间已无法再使用。无更改。• 已封禁匹配 IP 地址的服务器。• 现已允许匹配 IP 地址的服务器。• 已从允许列表中移除匹配 %s 的服务器。• 已允许匹配 %s 的服务器。• 已从封禁列表中移除匹配 %s 的服务器。
- 未命名的聊天室
+ 未命名的房间私有空间公开空间陌生人转移给 %1$s与 %1$s 商量该服务器已经存在于列表中
- 找不到此服务器或它的聊天室列表
+ 找不到此服务器或它的房间列表输入你想要探索的新服务器的名称。添加一个新的服务器你的服务器
@@ -2040,24 +2034,24 @@
空间地址查看和管理这个空间的地址。空间地址
- 升级到推荐的聊天室版本
- 这个聊天室运行聊天室版本 %s,此主服务器已将其标记为不稳定。
- 您需要权限才能升级聊天室
+ 升级到推荐的房间版本
+ 这个房间运行房间版本 %s,此主服务器已将其标记为不稳定。
+ 您需要权限才能升级房间自动更新空间父级自动邀请用户
- 你将把此聊天室从 %1$s 升级到 %2$s。
- 升级聊天室是一项高级操作,通常建议在由于错误、缺少功能或安全漏洞造成聊天室不稳定时进行此操作。
-\n这通常只会影响此服务器如何处理该聊天室。
- 升级私人聊天室
- 升级公共聊天室
+ 你将把此房间从 %1$s 升级到 %2$s。
+ 升级房间是一项高级操作,通常建议在由于错误、缺少功能或安全漏洞造成房间不稳定时进行此操作。
+\n这通常只会影响此服务器如何处理该房间。
+ 升级私人房间
+ 升级公共房间升级请耐心等待,这可能需要一些时间。
- 加入替换聊天室
- 将聊天室升级到新版本
+ 加入替换房间
+ 将房间升级到新版本不稳定稳定默认版本
- 聊天室版本 👓
+ 房间版本 👓通过比较表情符号来验证使用此设备扫描使用您的其他设备扫描代码或切换并使用此设备扫描
@@ -2071,9 +2065,9 @@
%d 个未接音频电话
- 请注意,升级将使聊天室焕然一新。 所有当前消息都将保留在此存档的聊天室中。
- 主空间中的任何人都可以找到并加入此房间 - 无需手动邀请所有人。 您可以随时在聊天室设置中更改此设置。
- %s 中的任何人将可以查找并加入此房间 - 无需手动邀请所有人。 您可以随时在聊天室设置中更改此设置。
+ 请注意,升级将使房间焕然一新。 所有当前消息都将保留在此存档的房间中。
+ 主空间中的任何人都可以找到并加入此房间 - 无需手动邀请所有人。 您可以随时在房间设置中更改此设置。
+ %s 中的任何人将可以查找并加入此房间 - 无需手动邀请所有人。 您可以随时在房间设置中更改此设置。语音消息 (%1$s)语音消息处于活动状态时无法回复或编辑无法录制语音消息
@@ -2089,9 +2083,9 @@
录制语音消息需要升级语音
- 您可能不知道的其他空间或聊天室
- 你知道的包含这个聊天室的空间
- 决定谁能找到并加入这个聊天室。
+ 您可能不知道的其他空间或房间
+ 你知道的包含这个房间的空间
+ 决定谁能找到并加入这个房间。点按即可编辑空间选择空间决定哪些空间可以进入这个房间。 如果选择了一个空间,其成员将能够找到并加入房间名称。
@@ -2100,9 +2094,9 @@
%s 空间的成员可找到、预览和加入。私人(仅限邀请)要发送语音消息,请授予麦克风权限。
- 聊天室升级
+ 房间升级机器人消息
- 聊天室邀请
+ 房间邀请加密的群组消息群组消息加密的私信
@@ -2118,9 +2112,9 @@
在 ${app_name} 中直接接收邀请的设置 %s。将此邮箱与您的账户相链接加入这个空间的邀请被发送至 %s,此邮箱未与您的账户相关联
- 加入这个聊天室的邀请被发送至 %s,此邮箱未与您的账户相关联
- 你所在的全部聊天室将显示在主页上。
- 在主页上显示所有聊天室
+ 加入这个房间的邀请被发送至 %s,此邮箱未与您的账户相关联
+ 你所在的全部房间将显示在主页上。
+ 在主页上显示所有房间滑动结束通话%1$s 轻按返回活跃通话 (%1$s) ·
@@ -2132,18 +2126,18 @@
未接语音通话视频通话被拒绝语音通话被拒绝
- 视频通话结束了 • %1$s
+ 视频通话已结束 • %1$s语音通话结束了 • %1$s视频来电语音来电你拒绝了此通话账户设置你可以管理 %1$s 中的通知。
- 请注意,提及和关键字通知在移动端的加密聊天室中不可用。
+ 请注意,提及和关键字通知在移动端的加密房间中不可用。通知事项在移动端的加密房间里,你不会收到提及和关键字的通知。关键词
- \@聊天室
+ \@房间关键词不能包含 \'%s\'关键词不能以 \'.\' 开头添加新关键词
@@ -2160,17 +2154,17 @@
空间将一个空间添加到您管理的任何空间。添加现有空间
- 添加现有聊天室
+ 添加现有房间你确定要离开 %s 吗?发现 (%s)完成设置通过电子邮件邀请、寻找联系人和更多…设置“发现”已毕。
- 您目前没有使用身份服务器。为了邀请队友并被他们发现,请在下方配置一个这样的服务器。
+ 你目前没有使用身份服务器。为了邀请队友并能让他们发现,在下方配置一个。通过用户名或邮件邀请确保只有合适的人能访问 %s 空间。稍后你可以邀请更多的人加入。谁是你的队友?
- 添加至规定的空间
+ 添加至给定的空间创建空间中…显示一些有用的信息以帮助调试应用程序在屏幕商显示调试信息
@@ -2194,23 +2188,23 @@
查看和更新更改空间的各个部分所需的角色。空间权限解除禁令将允许被封禁的用户再次加入空间。
- 封禁用户将把他们踢出这个空间,并阻止他们再次加入。
- 把用户踢出也会从这个空间删除他们。
+ 封禁用户会把他们移出此空间并阻止他们再次加入。
+ 用户将从此空间移除。
\n
-\n为了防止他们再次加入,你应该封禁他们。
+\n为了防止他们再次加入,你应改为封禁他们。停止录制预置 ( ͡° ͜ʖ ͡°) 到纯文本消息身份服务器未提供政策隐藏身份服务器政策显示身份服务器策略显示用户信息
- 仅更改您在当前聊天室的头像
- 更改当前聊天室的头像
- 仅在当前聊天室更改您的显示昵称
- 设置聊天室名称
+ 仅更改您在当前房间的头像
+ 更改当前房间的头像
+ 仅在当前房间更改您的显示昵称
+ 设置房间名称停止忽略用户,继续显示他们的消息忽略用户,隐藏他们的消息
- 不可用
+ 离开离线在线选择主服务器
@@ -2231,7 +2225,7 @@
向 %s 发送电子邮件和电话号码您的联系人是私密的。 要从您的联系人中发现用户,我们需要您的许可才能将联系信息发送到您的身份服务器。已退出此会话!
- 已离开此聊天室!
+ 已离开此房间!你同意发送此信息吗?要发现现有的联系人,您需要将联系人信息(电子邮件和电话号码)发送到您的身份服务器。出乎隐私考量,我们会在发送前对您的数据进行散列处理。不是现在
@@ -2248,7 +2242,7 @@
基于 %1$d 票的最终结果
- 已投了 %1$d 票。投票查看结果
+ 已投了 %1$d 票。投票以查看结果基于 %1$d 票
@@ -2280,7 +2274,7 @@
修改服务器 %d 的 ACLs
- 子区有助于保持您的对话主题并易于跟踪
+ Thread帮助你的对话不离题且易于跟踪。显示当前房间的所有子区所有子区筛选器
@@ -2289,4 +2283,260 @@
复制子区的链接在房间中查看群组通知
-
+ 我们越来越接近将消息列发布为公开Beta版。
+\n
+\n在我们为此准备时,我们需要做一些变动:在此之前创建的消息列将会被显示为普通回复。
+\n
+\n这会是一次性的过渡,因为消息列现在是Matrix规范的一部分了。
+
+ 还有%1$d个
+
+ 请注意:这是一个使用临时实现的实验室功能。这意味着你将无法删除你的位置历史,并且在你停止与这个房间分享你的实时位置后,高级用户仍能看到你的位置历史。
+ 当前网关:%s
+ 网关
+ 提供反馈
+ 为你的团队传递消息。
+ 消息列beta
+ 消息列
+ 为所有消息显示最新资料信息(头像和显示名称)。
+ 显示名称
+ 选择显示名称
+ 覆盖显示名称颜色
+ 检查你的电子邮件。
+ 电子邮件
+ 你已掌控你的资料。
+ BETA
+ 分享你的实时位置
+ 缩放到当前位置
+ 地图上选定位置的图钉
+ 无投票
+ 检查你的电子邮件以验证。
+
+ %d条消息已移除
+
+ 启用位置分享
+ 实时位置共享
+ 找不到端点。
+ 目前端点:%s
+ 端点
+ 目前正在使用%s。
+ 方式
+
+ 找到%d种方式。
+
+ 除了后台同步,没有发现其他方法。
+ 找不到除了Google Play服务以外的方式。
+ 可用方式
+ 通知方式
+ 后台同步
+ Google服务
+ 选择如何接收通知
+ 屏幕共享进行中
+ ${app_name}屏幕共享
+ 用户
+ 通知整个房间
+ 显示更少
+ 分享位置
+ 显示消息气泡
+ 分享位置
+ 你需要有正确的权限,才能在这个房间里分享实时位置。
+ 你没有权限分享实时位置
+ %1$s前已更新
+ 停止分享
+ 临时执行:地点在房间历史中持续存在
+ 启用实时位置共享
+ 位置共享正在进行中
+ ${app_name}实时位置
+ 剩余%1$s
+ 停止
+ 实时分享直到%1$s
+ 查看实时位置
+ 实时位置已结束
+ 正在加载实时位置……
+ 实时位置已启用
+ 加载地图失败
+ 打开,用
+ ${app_name}无法访问你的位置。请稍后再试。
+ ${app_name}无法访问你的位置
+ 在房间中查看
+ MSC3061:为过去的消息分享房间密钥
+ 当在分享历史的加密的房间中邀请时,加密的历史将总是可见。
+ 8小时
+ 1小时
+ 15分钟
+ 分享此位置
+ 分享此位置
+ 分享实时位置
+ 分享实时位置
+ 分享我目前的位置
+ 分享我目前的位置
+ 地图
+ 位置
+ 分享位置
+ 结果仅在你结束投票后展示
+ 已关闭的投票
+ 投票者一投票就能看到结果
+ 开启投票
+ 投票类型
+ 编辑投票
+ 结果将在投票结束时可见
+ 跳过此步
+ 随时前往设置以更新你的用户资料
+ 是时候给名称加一张脸了
+ 添加用户资料图片
+ 重发电子邮件
+ 没有收到电子邮件?
+ 要确认你的电子邮件地址,点击我们刚刚寄到%s的电子邮件里的按钮
+ 重新发送验证码
+ 代码已发送到%s
+ 确认你的电话号码
+ 登出所有设备
+ 重设密码
+ 确认其为8个字符或更多。
+ 选择新密码
+ 新密码
+ %s会给你发送验证链接
+ 确认码
+ 电话号码
+ %s需要验证你的账户
+ 输入你的电话号码
+ %s需要验证你的账户
+ 输入你的email
+ 请仔细阅读%s的条款和政策
+ 取得联系
+ 你的服务器地址是什么?这就像你所有数据的家
+ 个性化用户资料
+ 端到端加密,不需要电话号码。没有广告和数据挖掘。
+ Threads是一项正在进行中的工作,包含了新的、令人兴奋的即将推出的功能,例如改进的通知。我们乐意听到你的反馈!
+ 创建投票
+ 打开联系人
+ 发送贴纸
+ 上传文件
+ 发送图片和视频
+ 打开相机
+ 服务器政策
+ Element Matrix Services(EMS)是一个健壮且可靠的主机托管服务,可实现快速、安全和实时的通信。在<a href=\"${ftue_ems_url}\">element.io/ems</a>上了解如何使用
+ 想架设自己的服务器?
+ 服务器URL
+ 选择你的服务器
+ 还不确定?%s
+ 社群
+ 团队
+ 我们会帮你建立连接
+ 你会与谁聊最多?
+ ${app_name}也非常适合工作场所。受到世界上最安全的组织信任。
+ 选择保存你的对话的位置,给你控制权和独立性。通过Matrix连接。
+ 安全且独立的通信,为你提供和在家中面对面对话同样等级的隐私。
+ 安全传送消息。
+ 向主服务器注册端点token失败:
+\n%1$s
+ Threads帮助保持你的对话不离题且易于跟踪。%s启用thread会刷新应用。这对一些账户可能需要更长时间。
+ 重启应用以使更改生效。
+ 启用LaTeX数学
+ (%1$s)
+ %1$s(%2$s)
+ 无法播放%1$s
+ 暂停%1$s
+ 播放%1$s
+ %1$d分钟%2$d秒
+ %1$s、%2$s、%3$s
+ 显示最新用户信息
+ 注意:应用将重启
+ 启用thread消息
+ 当无法解密的错误出现时,你的系统会自动发送日志
+ 自动报告解密错误。
+ 一些结果可能被隐藏,因为它们是私有的,你需要它们的邀请。
+ 找不到结果
+ 不离开
+ 离开全部
+ 此空间里的东西
+ 忙
+ 无法启用生物验证。
+ 生物验证被停用了,因为最近新增了新的生物验证方式。你可以在设置里重新启用。
+ 主服务器不接收仅有数字的用户名。
+ 发送你的第一条消息邀请%s聊天
+ 加密配置错误
+ 此聊天中的消息会被端对端加密。
+ 还原加密
+ 请联系管理员将加密还原到有效状态。
+ 加密被错误地配置了。
+ 分享了他们的实时位置
+ 分享了他们的位置
+ 无法打开此链接:社群已被空间取代
+ 我已经有账户了
+ 创建账户
+ 保存并继续
+ 看起来不错!
+ 走吧
+ 你可以稍后更改这个
+ 这会在你发送消息时显示。
+ 用户名/电子邮件/电话号码
+ 你是人类吗?
+ 按照发送到%s的操作说明
+ 密码重设
+ 忘记密码
+ 欢迎回来!
+ 编辑
+ 或
+ 你的对话将进行的地方
+ 必须有8个及以上的字符
+ 其他人可以通过%s发现你
+ 创建你的账户
+ 恭喜!
+ 你的账户%s已创建
+ 带我回家
+ 连接服务器
+ 想要加入已有的服务器?
+ 跳过此问题
+ 朋友和家人
+ 拥有你的对话。
+ 位置
+ Threads Beta反馈
+ BETA
+ 重设通知方式
+ 资料标签:
+ 你已经在查看这个thread了!
+ 出发
+ 在thread中回复
+ 备份具有来自该用户的有效签名。
+ 命令“%s”可被识别但在threads中不被支持。
+ 使用系统默认值
+ 手动选择
+ 自动设置
+ 选择字体大小
+ 若启用,即使正在使用应用,你也会对其他用户显示为离线状态。
+ 离线模式
+ 在场
+ 动画图片一出现就在时间轴中播放
+ Threads Beta
+ ${app_name} needs to perform a clear cache to be up to date, 原因如下:
+\n%s
+\n
+\n注意,此操作会重启应用并可能需要一些时间。
+ 自动播放动画图片
+ 端点成功注册到主服务器。
+ 端点注册
+ 你的主服务器当前不支持threads,所以此功能可能不可靠。Some threaded messages may not be reliably available. %s你仍要启用threads吗?
+ Threads接近Beta了 🎉
+ 来自thread
+ 实用提示:长按消息并使用“%s”。
+ 使用threads来保持讨论的条理性
+ 显示你参与的所有threads
+ 我的threads
+ 加密被错误地配置了,所以你无法发送消息。点击以打开设置。
+ 加密被错误地配置了,所以你无法发送消息。请联系管理员将加密还原到有效的状态。
+ %1$s、%2$s与其他人
+ %1$s与%2$s
+ 共享屏幕
+ 停止共享屏幕
+ 下一步
+ 进一步了解
+ 试试看
+ 停用
+ 查看Threads
+ 秒
+ 分钟
+ 小时
+ - 一些用户已被取消忽略
+ 初始同步请求
+
\ No newline at end of file
diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml
index c04e293787..ee96ee6063 100644
--- a/vector/src/main/res/values-zh-rTW/strings.xml
+++ b/vector/src/main/res/values-zh-rTW/strings.xml
@@ -251,7 +251,7 @@
快速回覆開啟關閉
- 複製到剪貼簿
+ 已複製到剪貼簿確認警告最愛
@@ -337,8 +337,8 @@
邀請封鎖封禁
- 隱藏所有來自此使用者的訊息
- 顯示所有來自此使用者的訊息
+ 忽略
+ 取消忽略提及封鎖使用者將會把他們從此聊天室中移除,並避免他們再次加入。%s 正在打字…
@@ -370,7 +370,7 @@
\n
\n要現在新增一些貼圖嗎?
對不起,沒有應用程式可以完成此操作。
- 從其他工作階段重新請求金鑰。重新請求金鑰。
+ 從其他工作階段重新請求加密金鑰。請在另一個可以解密訊息的裝置上啟動 ${app_name},以便它將金鑰發送到此工作階段。憑證已從以前受信任的更改為不受信任的憑證。伺服器可能已續訂其憑證。請與伺服器管理員聯繫以尋找所需的指紋。僅當伺服器管理員發佈的指紋與上面的指紋匹配時才接受此憑證。
@@ -590,7 +590,7 @@
密語必須符合展開摺疊
- 踢出
+ 從聊天移除當您的家伺服器支援此功能時在聊天中預覽連結。傳送輸入通知讓其他使用者知道您正在輸入。
@@ -1034,8 +1034,8 @@
設定離開聊天室%1$s 未做出任何變更
- 傳送為擾亂者指定的訊息
- 擾亂者
+ 將指定的訊息作為劇透傳送
+ 劇透輸入關鍵字以尋找反應。您未忽略任何使用者長按聊天室以檢視更多選項
@@ -1432,7 +1432,7 @@
邀請已傳送給 %1$s 與其他 %2$d 個人我們無法邀請使用者。請檢查您想要邀請的使用者並再試一次。
- 訊息已刪除
+ 訊息已移除顯示已移除的訊息為已移除的訊息顯示佔位符我們已傳送確認電子郵件給 %s,請先檢查您的電子郵件並點擊確認連結
@@ -2320,11 +2320,11 @@
連線至伺服器想要加入現有的伺服器?略過此問題
- 還不確定?您可以 %s
+ 還不確定?%s社群團隊朋友與家人
- 我們將會協助您建立聯繫。
+ 我們將會協助您建立聯繫您與誰聊最多?您已經在檢視此討論串了!在聊天室中檢視
@@ -2349,7 +2349,7 @@
使用者通知整個聊天室
- %1$d 更多
+ 還有%1$d個顯示較少
@@ -2378,16 +2378,16 @@
家伺服器不接受僅有數字的使用者名稱。略過此步驟儲存並繼續
- 您的偏好設定已儲存。
- 準備好了!
+ 隨時前往設定以更新您的個人資料
+ 看起來不錯!走吧
- 您可以在任何時候變更這個。
+ 是時候為名字加上臉了新增個人資訊照片您可以在稍後變更這個顯示名稱這將會在您傳送訊息時顯示。選擇顯示名稱
- 您的帳號 %s 已建立。
+ 您的帳號 %s 已建立恭喜!帶我回家個人化檔案
@@ -2487,4 +2487,56 @@
傳送您的第一則訊息以邀請 %s 來聊天此聊天中的訊息將會是端到端加密。到
+
+ 已移除 %d 則訊息
+
+ 分享位置
+ 您必須擁有正確的權限才能在此聊天室中分享即時位置。
+ 您無權分享即時位置
+ 無法開啟此連結:社群已被空間取代
+ 使用者名稱 / 電子郵件 / 電話
+ 您是人類嗎?
+ 按照寄送到 %s 的說明操作
+ 密碼重設
+ 忘記密碼
+ 重新傳送電子郵件
+ 沒有收到電子郵件?
+ 要確認您的電子郵件,請點擊我們剛剛寄給 %s 的電子郵件中的按鈕
+ 檢查您的電子郵件以驗證。
+ 重新傳送驗證碼
+ 驗證碼已傳送至 %s
+ 確認您的電話號碼
+ 登出所有裝置
+ 重設密碼
+ 確認其為 8 個字元或更多。
+ 選擇新密碼
+ 新密碼
+ 檢查您的電子郵件。
+ %s 將會傳送給您驗證連結
+ 確認代碼
+ 電話號碼
+ %s 必須驗證您的帳號
+ 輸入您的電話號碼
+ 電子郵件
+ %s 必須驗證您的帳號
+ 輸入您的電子郵件
+ 請仔細閱讀 %s 的條款與政策
+ 伺服器政策
+ 保持聯絡
+ Element Matrix Services (EMS) 是一個強大且可靠的主機託管服務,可實現快速、安全且即時的通訊。可在 element.io/ems 上了解如何使用
+ 想要架設自己的伺服器?
+ 伺服器 URL
+ 您的伺服器位置是什麼?這就像您所有資料的家
+ 選取您的伺服器
+ 歡迎回來!
+ 編輯
+ 或
+ 您的對話將在哪裡進行
+ 必須是 8 個字元或更多
+ 其他人可以探索您 %s
+ 建立您的帳號
+ 使用系統預設值
+ 手動選擇
+ 自動設定
+ 選擇字型大小
\ No newline at end of file
diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml
index 4157f173c2..bd4f032d0e 100644
--- a/vector/src/main/res/values/strings.xml
+++ b/vector/src/main/res/values/strings.xml
@@ -136,6 +136,7 @@
Matrix error
+ All Chats
@@ -2809,6 +2810,7 @@
ScreenshotOpen widgets
+ Open settingsImport key from fileImageChange avatar
@@ -3019,7 +3021,7 @@
Voice Message (%1$s)%1$s, %2$s, %3$s
- %1$d minutes %2$d seconds
+ %1$d minutes %2$d secondsPlay %1$sPause %1$sUnable to play %1$s
@@ -3113,6 +3115,7 @@
${app_name} could not access your location. Please try again later.Open withFailed to load map
+ Unable to load map\nThis home server may not be configured to display maps.Live location enabledLoading live location…Live location ended
diff --git a/vector/src/test/java/im/vector/app/SpaceStateHandlerImplTest.kt b/vector/src/test/java/im/vector/app/SpaceStateHandlerImplTest.kt
new file mode 100644
index 0000000000..36d372cfac
--- /dev/null
+++ b/vector/src/test/java/im/vector/app/SpaceStateHandlerImplTest.kt
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app
+
+import im.vector.app.test.fakes.FakeActiveSessionDataSource
+import im.vector.app.test.fakes.FakeActiveSessionHolder
+import im.vector.app.test.fakes.FakeAnalyticsTracker
+import im.vector.app.test.fakes.FakeSession
+import im.vector.app.test.fakes.FakeUiStateRepository
+import im.vector.app.test.fixtures.RoomSummaryFixture.aRoomSummary
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.test.runTest
+import org.amshove.kluent.shouldBe
+import org.amshove.kluent.shouldBeEqualTo
+import org.junit.Test
+
+internal class SpaceStateHandlerImplTest {
+
+ private val spaceId = "spaceId"
+ private val spaceSummary = aRoomSummary(spaceId)
+ private val session = FakeSession.withRoomSummary(spaceSummary)
+
+ private val sessionDataSource = FakeActiveSessionDataSource()
+ private val uiStateRepository = FakeUiStateRepository()
+ private val activeSessionHolder = FakeActiveSessionHolder(session)
+ private val analyticsTracker = FakeAnalyticsTracker()
+
+ private val spaceStateHandler = SpaceStateHandlerImpl(
+ sessionDataSource.instance,
+ uiStateRepository,
+ activeSessionHolder.instance,
+ analyticsTracker,
+ )
+
+ @Test
+ fun `given selected space doesn't exist, when getCurrentSpace, then return null`() {
+ val currentSpace = spaceStateHandler.getCurrentSpace()
+
+ currentSpace shouldBe null
+ }
+
+ @Test
+ fun `given selected space exists, when getCurrentSpace, then return selected space`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session)
+
+ val currentSpace = spaceStateHandler.getCurrentSpace()
+
+ currentSpace shouldBe spaceSummary
+ }
+
+ @Test
+ fun `given persistNow is true, when setCurrentSpace, then immediately persist to ui state`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session, persistNow = true)
+
+ uiStateRepository.verifyStoreSelectedSpace(spaceId, session)
+ }
+
+ @Test
+ fun `given persistNow is false, when setCurrentSpace, then don't immediately persist to ui state`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session, persistNow = false)
+
+ uiStateRepository.verifyStoreSelectedSpace(spaceId, session, inverse = true)
+ }
+
+ @Test
+ fun `given is forward navigation and no current space, when setCurrentSpace, then null added to backstack`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
+
+ val backstack = spaceStateHandler.getSpaceBackstack()
+
+ backstack.size shouldBe 1
+ backstack.first() shouldBe null
+ }
+
+ @Test
+ fun `given is forward navigation and is in space, when setCurrentSpace, then previous space added to backstack`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = true)
+ spaceStateHandler.setCurrentSpace("secondSpaceId", session, isForwardNavigation = true)
+
+ val backstack = spaceStateHandler.getSpaceBackstack()
+
+ backstack.size shouldBe 2
+ backstack shouldBeEqualTo listOf(null, spaceId)
+ }
+
+ @Test
+ fun `given is not forward navigation, when setCurrentSpace, then previous space not added to backstack`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session, isForwardNavigation = false)
+
+ val backstack = spaceStateHandler.getSpaceBackstack()
+
+ backstack.size shouldBe 0
+ }
+
+ @Test
+ fun `when setCurrentSpace, then space is emitted to selectedSpaceFlow`() = runTest {
+ spaceStateHandler.setCurrentSpace(spaceId, session)
+
+ val currentSpace = spaceStateHandler.getSelectedSpaceFlow().first().orNull()
+
+ currentSpace shouldBeEqualTo spaceSummary
+ }
+
+ @Test
+ fun `given current space exists, when getSafeActiveSpaceId, then return current space id`() {
+ spaceStateHandler.setCurrentSpace(spaceId, session)
+
+ val activeSpaceId = spaceStateHandler.getSafeActiveSpaceId()
+
+ activeSpaceId shouldBeEqualTo spaceId
+ }
+
+ @Test
+ fun `given current space doesn't exist, when getSafeActiveSpaceId, then return current null`() {
+ val activeSpaceId = spaceStateHandler.getSafeActiveSpaceId()
+
+ activeSpaceId shouldBe null
+ }
+}
diff --git a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt
index 454a73cd70..ebb7419ddc 100644
--- a/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt
+++ b/vector/src/test/java/im/vector/app/features/location/LocationTrackerTest.kt
@@ -23,6 +23,7 @@ import im.vector.app.features.session.coroutineScope
import im.vector.app.test.fakes.FakeActiveSessionHolder
import im.vector.app.test.fakes.FakeContext
import im.vector.app.test.fakes.FakeLocationManager
+import im.vector.app.test.fixtures.aBuildMeta
import im.vector.app.test.test
import io.mockk.every
import io.mockk.just
@@ -56,7 +57,7 @@ class LocationTrackerTest {
@Before
fun setUp() {
mockkStatic("im.vector.app.features.session.SessionCoroutineScopesKt")
- locationTracker = LocationTracker(fakeContext.instance, fakeActiveSessionHolder.instance)
+ locationTracker = LocationTracker(fakeContext.instance, fakeActiveSessionHolder.instance, aBuildMeta())
fakeLocationManager.givenRemoveUpdates(locationTracker)
}
@@ -75,19 +76,19 @@ class LocationTrackerTest {
verifyOrder {
fakeLocationManager.instance.requestLocationUpdates(
LocationManager.FUSED_PROVIDER,
- MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
+ locationTracker.minDurationToUpdateLocationMillis,
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
locationTracker
)
fakeLocationManager.instance.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
- MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
+ locationTracker.minDurationToUpdateLocationMillis,
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
locationTracker
)
fakeLocationManager.instance.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER,
- MIN_TIME_TO_UPDATE_LOCATION_MILLIS,
+ locationTracker.minDurationToUpdateLocationMillis,
MIN_DISTANCE_TO_UPDATE_LOCATION_METERS,
locationTracker
)
@@ -154,7 +155,7 @@ class LocationTrackerTest {
locationTracker.onLocationChanged(fusedLocation)
locationTracker.onLocationChanged(gpsLocation)
locationTracker.onLocationChanged(networkLocation)
- advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
+ advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
val expectedLocationData = LocationData(
latitude = 1.0,
@@ -188,7 +189,7 @@ class LocationTrackerTest {
locationTracker.onLocationChanged(gpsLocation)
locationTracker.onLocationChanged(networkLocation)
- advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
+ advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
val expectedLocationData = LocationData(
latitude = 1.0,
@@ -217,7 +218,7 @@ class LocationTrackerTest {
val resultUpdates = locationTracker.locations.test(this)
locationTracker.onLocationChanged(networkLocation)
- advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
+ advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
val expectedLocationData = LocationData(
latitude = 1.0,
@@ -243,7 +244,7 @@ class LocationTrackerTest {
val resultUpdates = locationTracker.locations.test(this)
locationTracker.requestLastKnownLocation()
- advanceTimeBy(MIN_TIME_TO_UPDATE_LOCATION_MILLIS + 1)
+ advanceTimeBy(locationTracker.minDurationToUpdateLocationMillis + 1)
val expectedLocationData = LocationData(
latitude = A_LATITUDE,
diff --git a/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt b/vector/src/test/java/im/vector/app/features/location/live/map/LiveLocationMapViewModelTest.kt
similarity index 90%
rename from vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt
rename to vector/src/test/java/im/vector/app/features/location/live/map/LiveLocationMapViewModelTest.kt
index dd1a894a28..fca5db14cc 100644
--- a/vector/src/test/java/im/vector/app/features/location/live/map/LocationLiveMapViewModelTest.kt
+++ b/vector/src/test/java/im/vector/app/features/location/live/map/LiveLocationMapViewModelTest.kt
@@ -34,20 +34,20 @@ import org.matrix.android.sdk.api.util.MatrixItem
private const val A_ROOM_ID = "room_id"
-class LocationLiveMapViewModelTest {
+class LiveLocationMapViewModelTest {
@get:Rule
val mvRxTestRule = MvRxTestRule(testDispatcher = UnconfinedTestDispatcher())
- private val args = LocationLiveMapViewArgs(roomId = A_ROOM_ID)
+ private val args = LiveLocationMapViewArgs(roomId = A_ROOM_ID)
private val getListOfUserLiveLocationUseCase = mockk()
private val locationServiceConnection = FakeLocationSharingServiceConnection()
private val stopLiveLocationShareUseCase = mockk()
- private fun createViewModel(): LocationLiveMapViewModel {
- return LocationLiveMapViewModel(
- LocationLiveMapViewState(args),
+ private fun createViewModel(): LiveLocationMapViewModel {
+ return LiveLocationMapViewModel(
+ LiveLocationMapViewState(args),
getListOfUserLiveLocationUseCase,
locationServiceConnection.instance,
stopLiveLocationShareUseCase
@@ -78,7 +78,7 @@ class LocationLiveMapViewModelTest {
viewModel
.test()
.assertState(
- LocationLiveMapViewState(args).copy(
+ LiveLocationMapViewState(args).copy(
userLocations = userLocations
)
)
diff --git a/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt b/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt
index a9bbb3eb07..61d3101b64 100644
--- a/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt
+++ b/vector/src/test/java/im/vector/app/features/onboarding/OnboardingViewModelTest.kt
@@ -17,6 +17,7 @@
package im.vector.app.features.onboarding
import android.net.Uri
+import android.os.Build
import com.airbnb.mvrx.test.MvRxTestRule
import im.vector.app.R
import im.vector.app.features.login.LoginConfig
@@ -24,6 +25,7 @@ import im.vector.app.features.login.LoginMode
import im.vector.app.features.login.ReAuthHelper
import im.vector.app.features.login.SignMode
import im.vector.app.features.onboarding.StartAuthenticationFlowUseCase.StartAuthenticationResult
+import im.vector.app.test.TestBuildVersionSdkIntProvider
import im.vector.app.test.fakes.FakeActiveSessionHolder
import im.vector.app.test.fakes.FakeAnalyticsTracker
import im.vector.app.test.fakes.FakeAuthenticationService
@@ -43,7 +45,6 @@ import im.vector.app.test.fakes.FakeVectorFeatures
import im.vector.app.test.fakes.FakeVectorOverrides
import im.vector.app.test.fakes.toTestString
import im.vector.app.test.fixtures.a401ServerError
-import im.vector.app.test.fixtures.aBuildMeta
import im.vector.app.test.fixtures.aHomeServerCapabilities
import im.vector.app.test.test
import kotlinx.coroutines.test.runTest
@@ -720,7 +721,7 @@ class OnboardingViewModelTest {
fakeStartAuthenticationFlowUseCase.instance,
FakeVectorOverrides(),
fakeRegistrationActionHandler.instance,
- aBuildMeta(),
+ TestBuildVersionSdkIntProvider().also { it.value = Build.VERSION_CODES.O },
).also {
viewModel = it
initialState = state
diff --git a/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/MissingSystemKeyMigratorTests.kt b/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/MissingSystemKeyMigratorTests.kt
index d65c3da2d2..3098187962 100644
--- a/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/MissingSystemKeyMigratorTests.kt
+++ b/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/MissingSystemKeyMigratorTests.kt
@@ -18,6 +18,7 @@ package im.vector.app.features.pin.lockscreen.crypto.migrations
import android.os.Build
import android.security.keystore.KeyPermanentlyInvalidatedException
+import android.security.keystore.UserNotAuthenticatedException
import im.vector.app.features.pin.lockscreen.crypto.KeyStoreCrypto
import im.vector.app.features.settings.VectorPreferences
import im.vector.app.test.TestBuildVersionSdkIntProvider
@@ -59,6 +60,17 @@ class MissingSystemKeyMigratorTests {
invoking { missingSystemKeyMigrator.migrate() } shouldNotThrow KeyPermanentlyInvalidatedException::class
}
+ @Test
+ fun migrateHandlesUserNotAuthenticatedExceptions() {
+ val keyStoreCryptoMock = mockk {
+ every { ensureKey() } throws UserNotAuthenticatedException()
+ }
+ every { keyStoreCryptoFactory.provide(any(), any()) } returns keyStoreCryptoMock
+ every { vectorPreferences.useBiometricsToUnlock() } returns true
+
+ invoking { missingSystemKeyMigrator.migrate() } shouldNotThrow UserNotAuthenticatedException::class
+ }
+
@Test
fun migrateReturnsEarlyIfBiometricAuthIsDisabled() {
val keyStoreCryptoMock = mockk {
diff --git a/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/SystemKeyV1MigratorTests.kt b/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/SystemKeyV1MigratorTests.kt
index a519251398..5cbb828f71 100644
--- a/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/SystemKeyV1MigratorTests.kt
+++ b/vector/src/test/java/im/vector/app/features/pin/lockscreen/crypto/migrations/SystemKeyV1MigratorTests.kt
@@ -16,11 +16,14 @@
package im.vector.app.features.pin.lockscreen.crypto.migrations
+import android.security.keystore.UserNotAuthenticatedException
import im.vector.app.features.pin.lockscreen.crypto.KeyStoreCrypto
import io.mockk.every
import io.mockk.mockk
import io.mockk.verify
+import org.amshove.kluent.invoking
import org.amshove.kluent.shouldBe
+import org.amshove.kluent.shouldNotThrow
import org.junit.Test
import java.security.KeyStore
@@ -39,6 +42,19 @@ class SystemKeyV1MigratorTests {
systemKeyV1Migrator.isMigrationNeeded() shouldBe false
}
+ @Test
+ fun migrateHandlesUserNotAuthenticatedException() {
+ val keyStoreCryptoMock = mockk {
+ every { ensureKey() } throws UserNotAuthenticatedException()
+ }
+ every { keyStoreCryptoFactory.provide("vector.system_new", any()) } returns keyStoreCryptoMock
+
+ invoking { systemKeyV1Migrator.migrate() } shouldNotThrow UserNotAuthenticatedException::class
+
+ verify { keyStore.deleteEntry(SystemKeyV1Migrator.SYSTEM_KEY_ALIAS_V1) }
+ verify { keyStoreCryptoMock.ensureKey() }
+ }
+
@Test
fun migrateDeletesOldEntryAndEnsuresNewKey() {
val keyStoreCryptoMock = mockk {
diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt
index db27a894f9..a42ce78b15 100644
--- a/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt
+++ b/vector/src/test/java/im/vector/app/test/fakes/FakeLocationSharingServiceConnection.kt
@@ -16,7 +16,7 @@
package im.vector.app.test.fakes
-import im.vector.app.features.location.LocationSharingServiceConnection
+import im.vector.app.features.location.live.tracking.LocationSharingServiceConnection
import io.mockk.every
import io.mockk.just
import io.mockk.mockk
diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt
index 65295af3dd..18af88ba0f 100644
--- a/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt
+++ b/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt
@@ -23,11 +23,14 @@ import im.vector.app.features.session.VectorSessionStore
import im.vector.app.test.testCoroutineDispatchers
import io.mockk.coEvery
import io.mockk.coJustRun
+import io.mockk.every
import io.mockk.mockk
import io.mockk.mockkStatic
import org.matrix.android.sdk.api.session.Session
+import org.matrix.android.sdk.api.session.getRoomSummary
import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService
import org.matrix.android.sdk.api.session.profile.ProfileService
+import org.matrix.android.sdk.api.session.room.model.RoomSummary
class FakeSession(
val fakeCryptoService: FakeCryptoService = FakeCryptoService(),
@@ -67,4 +70,11 @@ class FakeSession(
this@FakeSession.startSyncing(any())
}
}
+
+ companion object {
+
+ fun withRoomSummary(roomSummary: RoomSummary) = FakeSession().apply {
+ every { getRoomSummary(any()) } returns roomSummary
+ }
+ }
}
diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeUiStateRepository.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeUiStateRepository.kt
new file mode 100644
index 0000000000..4e8af9042c
--- /dev/null
+++ b/vector/src/test/java/im/vector/app/test/fakes/FakeUiStateRepository.kt
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.test.fakes
+
+import im.vector.app.features.ui.UiStateRepository
+import io.mockk.justRun
+import io.mockk.mockk
+import io.mockk.verify
+import org.matrix.android.sdk.api.session.Session
+
+class FakeUiStateRepository : UiStateRepository by mockk() {
+
+ init {
+ justRun { storeSelectedSpace(any(), any()) }
+ }
+
+ fun verifyStoreSelectedSpace(roomId: String, session: Session, inverse: Boolean = false) {
+ verify(inverse = inverse) { storeSelectedSpace(roomId, session.sessionId) }
+ }
+}
diff --git a/vector/src/test/java/im/vector/app/test/fixtures/AnalyticsConfigFixture.kt b/vector/src/test/java/im/vector/app/test/fixtures/AnalyticsConfigFixture.kt
index 5fbcdd98d1..ea1769ecb2 100644
--- a/vector/src/test/java/im/vector/app/test/fixtures/AnalyticsConfigFixture.kt
+++ b/vector/src/test/java/im/vector/app/test/fixtures/AnalyticsConfigFixture.kt
@@ -24,10 +24,5 @@ object AnalyticsConfigFixture {
postHogHost: String = "http://posthog.url",
postHogApiKey: String = "api-key",
policyLink: String = "http://policy.link"
- ) = object : AnalyticsConfig {
- override val isEnabled: Boolean = isEnabled
- override val postHogHost = postHogHost
- override val postHogApiKey = postHogApiKey
- override val policyLink = policyLink
- }
+ ) = AnalyticsConfig(isEnabled, postHogHost, postHogApiKey, policyLink)
}
diff --git a/vector/src/test/java/im/vector/app/test/fixtures/BuildMetaFixture.kt b/vector/src/test/java/im/vector/app/test/fixtures/BuildMetaFixture.kt
index b0e6b1dd51..4f4649106d 100644
--- a/vector/src/test/java/im/vector/app/test/fixtures/BuildMetaFixture.kt
+++ b/vector/src/test/java/im/vector/app/test/fixtures/BuildMetaFixture.kt
@@ -16,7 +16,17 @@
package im.vector.app.test.fixtures
-import android.os.Build
import im.vector.app.core.resources.BuildMeta
-fun aBuildMeta() = BuildMeta(Build.VERSION_CODES.O)
+fun aBuildMeta() = BuildMeta(
+ isDebug = false,
+ applicationId = "im.vector",
+ lowPrivacyLoggingEnabled = false,
+ versionName = "app-version-name",
+ gitRevision = "abcdef",
+ gitRevisionDate = "01-01-01",
+ gitBranchName = "a-branch-name",
+ buildNumber = "100",
+ flavorDescription = "Gplay",
+ flavorShortDescription = "",
+)
diff --git a/vector/src/test/java/im/vector/app/test/fixtures/RoomSummaryFixture.kt b/vector/src/test/java/im/vector/app/test/fixtures/RoomSummaryFixture.kt
new file mode 100644
index 0000000000..ee37dac618
--- /dev/null
+++ b/vector/src/test/java/im/vector/app/test/fixtures/RoomSummaryFixture.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2022 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package im.vector.app.test.fixtures
+
+import org.matrix.android.sdk.api.session.room.model.RoomSummary
+
+object RoomSummaryFixture {
+
+ fun aRoomSummary(roomId: String) = RoomSummary(
+ roomId,
+ isEncrypted = false,
+ encryptionEventTs = 0,
+ typingUsers = emptyList(),
+ )
+}