diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index ea44e3a5d0..ed5d45c62c 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -44,11 +44,10 @@ Uncomment this markdown table below and edit the last line `|||`:
-- [ ] Changes have been tested on an Android device or Android emulator with API 23
+- [ ] Changes have been tested on an Android device or Android emulator with API 24
- [ ] UI change has been tested on both light and dark themes
- [ ] Accessibility has been taken into account. See https://github.com/element-hq/element-x-android/blob/develop/CONTRIBUTING.md#accessibility
- [ ] Pull request is based on the develop branch
- [ ] Pull request title will be used in the release note, it clearly define what will change for the user
- [ ] Pull request includes screenshots or videos if containing UI changes
-- [ ] Pull request includes a [sign off](https://matrix-org.github.io/synapse/latest/development/contributing_guide.html#sign-off)
- [ ] You've made a self review of your PR
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index aef924c392..5ce7acf880 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ env:
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true --no-configuration-cache
jobs:
- debug:
+ build:
name: Build APKs
runs-on: ubuntu-latest
strategy:
@@ -45,6 +45,7 @@ jobs:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
+ ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
run: ./gradlew :app:assembleGplayDebug app:assembleFDroidDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
- name: Upload debug APKs
if: ${{ matrix.variant == 'debug' }}
@@ -54,7 +55,17 @@ jobs:
path: |
app/build/outputs/apk/gplay/debug/*-universal-debug.apk
app/build/outputs/apk/fdroid/debug/*-universal-debug.apk
- - uses: rnkdsh/action-upload-diawi@v1.5.5
+ - name: Upload x86_64 APK for Maestro
+ if: ${{ matrix.variant == 'debug' }}
+ uses: actions/upload-artifact@v4
+ with:
+ name: elementx-apk-maestro
+ path: |
+ app/build/outputs/apk/gplay/debug/app-gplay-x86_64-debug.apk
+ retention-days: 5
+ overwrite: true
+ if-no-files-found: error
+ - uses: rnkdsh/action-upload-diawi@v1.5.6
id: diawi
# Do not fail the whole build if Diawi upload fails
continue-on-error: true
diff --git a/.github/workflows/build_enterprise.yml b/.github/workflows/build_enterprise.yml
index 4370c75d0c..9182a9af3c 100644
--- a/.github/workflows/build_enterprise.yml
+++ b/.github/workflows/build_enterprise.yml
@@ -53,6 +53,7 @@ jobs:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
+ ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
run: ./gradlew :app:assembleGplayDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
- name: Upload debug Enterprise APKs
if: ${{ matrix.variant == 'debug' }}
diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro-local.yml
similarity index 53%
rename from .github/workflows/maestro.yml
rename to .github/workflows/maestro-local.yml
index 74696c9a22..b07eb196fd 100644
--- a/.github/workflows/maestro.yml
+++ b/.github/workflows/maestro-local.yml
@@ -1,40 +1,35 @@
-name: Maestro
+name: Maestro (local)
-# Run this flow only on pull request, and only when the pull request has the Run-Maestro label, to limit our usage of maestro cloud.
+# Run this flow only when APK Build workflow completes
on:
workflow_dispatch:
pull_request:
- types: [labeled]
# Enrich gradle.properties for CI/CD
env:
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx9g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -Dkotlin.daemon.jvm.options=-Xmx4g
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true --no-configuration-cache
+ ARCH: x86_64
+ DEVICE: pixel_7_pro
+ API_LEVEL: 35
+ TARGET: google_apis
jobs:
build-apk:
name: Build APK
runs-on: ubuntu-latest
- if: github.event_name == 'workflow_dispatch' || github.event.label.name == 'Run-Maestro'
# Allow one per PR.
concurrency:
group: ${{ format('maestro-{0}', github.ref) }}
cancel-in-progress: true
steps:
- - name: Remove Run-Maestro label
- if: ${{ github.event_name == 'pull_request' && github.event.label.name == 'Run-Maestro' }}
- uses: actions-ecosystem/action-remove-labels@v1
- with:
- labels: Run-Maestro
- uses: actions/checkout@v4
- if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch'
with:
# Ensure we are building the branch and not the branch after being merged on develop
# https://github.com/actions/checkout/issues/881
- ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }}
+ ref: ${{ github.ref }}
- uses: actions/setup-java@v4
name: Use JDK 21
- if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch'
with:
distribution: 'temurin' # See 'Supported distributions' for available options
java-version: '21'
@@ -44,7 +39,6 @@ jobs:
cache-read-only: ${{ github.ref != 'refs/heads/develop' }}
- name: Assemble debug APK
run: ./gradlew :app:assembleGplayDebug $CI_GRADLE_ARG_PROPERTIES
- if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch'
env:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
@@ -62,8 +56,7 @@ jobs:
maestro-cloud:
name: Maestro test suite
runs-on: ubuntu-latest
- needs: build-apk
- if: github.event_name == 'workflow_dispatch' || github.event.label.name == 'Run-Maestro'
+ needs: [build-apk]
# Allow one per PR.
concurrency:
group: ${{ format('maestro-{0}', github.ref) }}
@@ -74,23 +67,45 @@ jobs:
with:
# Ensure we are building the branch and not the branch after being merged on develop
# https://github.com/actions/checkout/issues/881
- ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }}
+ ref: ${{ github.ref }}
- name: Download APK artifact from previous job
uses: actions/download-artifact@v4
with:
name: elementx-apk-maestro
- - uses: mobile-dev-inc/action-maestro-cloud@v1.9.7
- if: (github.event_name == 'pull_request' && github.event.pull_request.fork == null) || github.event_name == 'workflow_dispatch'
+ - name: Enable KVM group perms
+ run: |
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
+ sudo udevadm control --reload-rules
+ sudo udevadm trigger --name-match=kvm
+ - name: Install maestro
+ run: curl -fsSL "https://get.maestro.mobile.dev" | bash
+ - name: Run Maestro tests in emulator
+ uses: reactivecircus/android-emulator-runner@v2
+ continue-on-error: true
+ env:
+ MAESTRO_USERNAME: maestroelement
+ MAESTRO_PASSWORD: ${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }}
+ MAESTRO_RECOVERY_KEY: ${{ secrets.MATRIX_MAESTRO_ACCOUNT_RECOVERY_KEY }}
+ MAESTRO_ROOM_NAME: MyRoom
+ MAESTRO_INVITEE1_MXID: "@maestroelement2:matrix.org"
+ MAESTRO_INVITEE2_MXID: "@maestroelement3:matrix.org"
+ MAESTRO_APP_ID: io.element.android.x.debug
with:
- api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }}
- # Doc says (https://github.com/mobile-dev-inc/action-maestro-cloud#android):
- # app-file should point to an x86 compatible APK file, so upload the x86_64 one (much smaller than the universal APK).
- app-file: app-gplay-x86_64-debug.apk
- env: |
- MAESTRO_USERNAME=maestroelement
- MAESTRO_PASSWORD=${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }}
- MAESTRO_RECOVERY_KEY=${{ secrets.MATRIX_MAESTRO_ACCOUNT_RECOVERY_KEY }}
- MAESTRO_ROOM_NAME=MyRoom
- MAESTRO_INVITEE1_MXID=@maestroelement2:matrix.org
- MAESTRO_INVITEE2_MXID=@maestroelement3:matrix.org
- MAESTRO_APP_ID=io.element.android.x.debug
+ api-level: ${{ env.API_LEVEL }}
+ arch: ${{ env.ARCH }}
+ profile: ${{ env.DEVICE }}
+ target: ${{ env.TARGET }}
+ emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none
+ disable-animations: true
+ disk-size: 3G
+ script: |
+ .github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh app-gplay-x86_64-debug.apk
+ - name: Upload test results
+ uses: actions/upload-artifact@v4
+ with:
+ name: test-results
+ path: |
+ ~/.maestro/tests/**
+ retention-days: 5
+ overwrite: true
+ if-no-files-found: error
diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml
index 3ad597e658..465a95bd08 100644
--- a/.github/workflows/nightly.yml
+++ b/.github/workflows/nightly.yml
@@ -29,6 +29,7 @@ jobs:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
+ ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD }}
diff --git a/.github/workflows/nightly_enterprise.yml b/.github/workflows/nightly_enterprise.yml
index 7d12ac66a8..c7700ed56b 100644
--- a/.github/workflows/nightly_enterprise.yml
+++ b/.github/workflows/nightly_enterprise.yml
@@ -35,6 +35,7 @@ jobs:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
+ ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
ELEMENT_ANDROID_NIGHTLY_KEYID: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYID }}
ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD }}
ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD: ${{ secrets.ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD }}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 99ee377c00..e9de267d3f 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -31,6 +31,7 @@ jobs:
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
+ ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
run: ./gradlew bundleGplayRelease $CI_GRADLE_ARG_PROPERTIES
- name: Upload bundle as artifact
uses: actions/upload-artifact@v4
diff --git a/.github/workflows/scripts/maestro/local-recording.sh b/.github/workflows/scripts/maestro/local-recording.sh
new file mode 100755
index 0000000000..4a800dc5e7
--- /dev/null
+++ b/.github/workflows/scripts/maestro/local-recording.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+#
+# Copyright 2024 New Vector Ltd.
+#
+# SPDX-License-Identifier: AGPL-3.0-only
+# Please see LICENSE in the repository root for full details.
+#
+
+COUNT=0
+mkdir -p /data/local/tmp/recordings;
+FILENAME=/data/local/tmp/recordings/testRecording$COUNT.mp4
+while true
+ do
+ ((COUNT++))
+ FILENAME=/data/local/tmp/recordings/testRecording$COUNT.mp4
+ echo "\nRecording video file #$COUNT"
+ screenrecord --bugreport --bit-rate=16m --size 720x1280 $FILENAME
+ done
diff --git a/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh b/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh
new file mode 100755
index 0000000000..b94958dba4
--- /dev/null
+++ b/.github/workflows/scripts/maestro/maestro-local-with-screen-recording.sh
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+#
+# Copyright 2024 New Vector Ltd.
+#
+# SPDX-License-Identifier: AGPL-3.0-only
+# Please see LICENSE in the repository root for full details.
+#
+
+adb install -r $1
+echo "Starting the screen recording..."
+adb push .github/workflows/scripts/maestro/local-recording.sh /data/local/tmp/
+adb shell "chmod +x /data/local/tmp/local-recording.sh"
+adb shell "/data/local/tmp/local-recording.sh & echo \$! > /data/local/tmp/screenrecord_pid.txt" &
+set +e
+~/.maestro/bin/maestro test .maestro/allTests.yaml
+TEST_STATUS=$?
+echo "Test run completed with status $TEST_STATUS"
+
+# Stop the screen recording loop
+SCRIPT_PID=$(adb shell "cat /data/local/tmp/screenrecord_pid.txt")
+adb shell "kill -2 $SCRIPT_PID"
+
+# Get the PID of the screen recording process
+SCREENRECORD_PID=$(adb shell ps | grep screenrecord | awk '{print $2}')
+# Wait for the screen recording process to exit
+while [ ! -z $SCREENRECORD_PID ]; do
+ echo "Waiting for screen recording ($SCREENRECORD_PID) to finish..."
+ adb shell "kill -2 $SCREENRECORD_PID"
+ sleep 1
+ SCREENRECORD_PID=$(adb shell ps | grep screenrecord | awk '{print $2}')
+done
+
+adb pull /data/local/tmp/recordings/ ~/.maestro/tests/
+exit $TEST_STATUS
diff --git a/.github/workflows/scripts/recordScreenshots.sh b/.github/workflows/scripts/recordScreenshots.sh
index 490eda4493..a610c6cc69 100755
--- a/.github/workflows/scripts/recordScreenshots.sh
+++ b/.github/workflows/scripts/recordScreenshots.sh
@@ -2,8 +2,8 @@
# Copyright 2023-2024 New Vector Ltd.
#
-# SPDX-License-Identifier: AGPL-3.0-only
-# Please see LICENSE in the repository root for full details.
+# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+# Please see LICENSE files in the repository root for full details.
set -e
diff --git a/.idea/copyright/Element_FOSS.xml b/.idea/copyright/Element_FOSS.xml
index 1ca60d065b..930b4d9f5b 100644
--- a/.idea/copyright/Element_FOSS.xml
+++ b/.idea/copyright/Element_FOSS.xml
@@ -1,6 +1,6 @@
-
+
-
\ No newline at end of file
+
diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
index bb4493707f..c22b6fa9ee 100644
--- a/.idea/kotlinc.xml
+++ b/.idea/kotlinc.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/.maestro/tests/account/changeServer.yaml b/.maestro/tests/account/changeServer.yaml
index 7ae4c3450f..b07fa5cc09 100644
--- a/.maestro/tests/account/changeServer.yaml
+++ b/.maestro/tests/account/changeServer.yaml
@@ -11,6 +11,9 @@ appId: ${MAESTRO_APP_ID}
id: "change_server-server"
- inputText: "element"
- hideKeyboard
+- extendedWaitUntil:
+ visible: "element.io"
+ timeout: 10000
- tapOn: "element.io"
# Revert to matrix.org
- tapOn:
diff --git a/.maestro/tests/roomList/createAndDeleteRoom.yaml b/.maestro/tests/roomList/createAndDeleteRoom.yaml
index 7cbf455ba2..e957d04bdf 100644
--- a/.maestro/tests/roomList/createAndDeleteRoom.yaml
+++ b/.maestro/tests/roomList/createAndDeleteRoom.yaml
@@ -26,6 +26,10 @@ appId: ${MAESTRO_APP_ID}
- tapOn: "Invite"
- tapOn: "Back"
- tapOn: "aRoomName"
+- scrollUntilVisible:
+ direction: DOWN
+ element:
+ text: "People"
- tapOn: "People"
# assert there's 1 member and 2 invitees
- tapOn: "Back"
diff --git a/CHANGES.md b/CHANGES.md
index 53d6eb2e12..60fcfe0046 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,74 @@
+Changes in Element X v0.7.6 (2024-12-20)
+========================================
+
+## What's Changed
+### ✨ Features
+* Media gallery UI by @bmarty in https://github.com/element-hq/element-x-android/pull/4010
+* Render audio file in the files list and improve media viewer for audio/voice files by @bmarty in https://github.com/element-hq/element-x-android/pull/4031
+* Media gallery UI update by @bmarty in https://github.com/element-hq/element-x-android/pull/4071
+### 🙌 Improvements
+* Support new properties in posthog UTD reports by @richvdh in https://github.com/element-hq/element-x-android/pull/4020
+### 🐛 Bugfixes
+* fix(dm) : remove duplicate LaunchedEffect when opening DM by @ganfra in https://github.com/element-hq/element-x-android/pull/4012
+* Always attempt to start the sync when starting the application. by @bmarty in https://github.com/element-hq/element-x-android/pull/4069
+* Fix rendering issue in the toolbar. by @bmarty in https://github.com/element-hq/element-x-android/pull/4075
+* fix(timeline) : dispatch timeline creations trying to avoid ANRs by @ganfra in https://github.com/element-hq/element-x-android/pull/4076
+### 🗣 Translations
+* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4007
+* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4043
+* Add Accept-Language to extra header when opening CustomChromeTab by @bmarty in https://github.com/element-hq/element-x-android/pull/4051
+### 🧱 Build
+* Update Gradle Wrapper from 8.10.2 to 8.11.1 by @ElementBot in https://github.com/element-hq/element-x-android/pull/4019
+### 📄 Documentation
+* [Doc] Improve instructions for building Rust SDK locally by @richvdh in https://github.com/element-hq/element-x-android/pull/4015
+* Build SDK for the local hardware by @richvdh in https://github.com/element-hq/element-x-android/pull/4021
+### 🚧 In development 🚧
+* feat(knock_requests_list) : implement design by @ganfra in https://github.com/element-hq/element-x-android/pull/3995
+* feat(knock) : Knock Requests Banner UI by @ganfra in https://github.com/element-hq/element-x-android/pull/4005
+* Add a feature flag to be able to enable the event cache by @bmarty in https://github.com/element-hq/element-x-android/pull/4029
+* Improve title and subtitle for empty states in the gallery. by @bmarty in https://github.com/element-hq/element-x-android/pull/4038
+* Inline voice message player in the files gallery. by @bmarty in https://github.com/element-hq/element-x-android/pull/4045
+* Media gallery update by @bmarty in https://github.com/element-hq/element-x-android/pull/4059
+* feat(knock requests) : branch logic for handling knock requests by @ganfra in https://github.com/element-hq/element-x-android/pull/4067
+### Dependency upgrades
+* Update dependency io.sentry:sentry-android to v7.18.1 by @renovate in https://github.com/element-hq/element-x-android/pull/3972
+* Update dependency com.google.firebase:firebase-bom to v33.7.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4001
+* Update nschloe/action-cached-lfs-checkout action to v1.2.3 by @renovate in https://github.com/element-hq/element-x-android/pull/4017
+* Update dependency com.posthog:posthog-android to v3.9.3 by @renovate in https://github.com/element-hq/element-x-android/pull/3960
+* Update dependency org.matrix.rustcomponents:sdk-android to v0.2.70 by @renovate in https://github.com/element-hq/element-x-android/pull/4018
+* Update dependency org.matrix.rustcomponents:sdk-android to v0.2.71 by @renovate in https://github.com/element-hq/element-x-android/pull/4024
+* Update camera to v1.4.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4022
+* Update dependency org.maplibre.gl:android-sdk to v11.7.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4028
+* Update dependency io.nlopez.compose.rules:detekt to v0.4.22 by @renovate in https://github.com/element-hq/element-x-android/pull/4016
+* Update dependencyAnalysis to v2.6.0 by @renovate in https://github.com/element-hq/element-x-android/pull/3996
+* Update kotlin by @renovate in https://github.com/element-hq/element-x-android/pull/3955
+* Update dependency org.jsoup:jsoup to v1.18.3 by @renovate in https://github.com/element-hq/element-x-android/pull/3951
+* Update dagger to v2.53.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4013
+* Update dependency io.sentry:sentry-android to v7.19.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4030
+* Update dependency org.jetbrains.kotlinx:kover-gradle-plugin to v0.9.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4032
+* Update dependencyAnalysis to v2.6.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4041
+* Update dependency androidx.compose:compose-bom to v2024.12.01 by @renovate in https://github.com/element-hq/element-x-android/pull/4023
+* Update android.gradle.plugin to v8.7.3 by @renovate in https://github.com/element-hq/element-x-android/pull/3982
+* Update dependency com.lemonappdev:konsist to v0.17.3 by @renovate in https://github.com/element-hq/element-x-android/pull/3997
+* Update dependency com.google.accompanist:accompanist-permissions to v0.37.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4035
+* depencies(sdk) : update rust sdk 0.2.72 by @ganfra in https://github.com/element-hq/element-x-android/pull/4060
+* Update dependency org.maplibre.gl:android-sdk to v11.7.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4066
+* Update dependency org.matrix.rustcomponents:sdk-android to v0.2.73 by @renovate in https://github.com/element-hq/element-x-android/pull/4070
+* Update media3 to v1.5.1 by @renovate in https://github.com/element-hq/element-x-android/pull/4072
+### Others
+* Add destructive param to BigIcon.Style.Default to be able to render icons with red tint by @bmarty in https://github.com/element-hq/element-x-android/pull/4004
+* UI: knock avatars by @bmarty in https://github.com/element-hq/element-x-android/pull/4014
+* Implement month separator for the Gallery, and improve date rendering. by @bmarty in https://github.com/element-hq/element-x-android/pull/4026
+* Extract voice message player to its own module by @bmarty in https://github.com/element-hq/element-x-android/pull/4036
+* Add a quick filter on the open source licence screen. by @bmarty in https://github.com/element-hq/element-x-android/pull/4052
+* Make the room filter use normalized strings. by @bmarty in https://github.com/element-hq/element-x-android/pull/4050
+* Add test on DefaultMediaPlayer. by @bmarty in https://github.com/element-hq/element-x-android/pull/4054
+* Fix flaky test by using CompletableDeferred by @bmarty in https://github.com/element-hq/element-x-android/pull/4057
+* feat(crypto): Support for new UtdCause for historical messages by @BillCarsonFr in https://github.com/element-hq/element-x-android/pull/4044
+* Update message action list by @bmarty in https://github.com/element-hq/element-x-android/pull/4056
+* Update recovery key UI by @bmarty in https://github.com/element-hq/element-x-android/pull/4065
+* Fix gallery title by @bmarty in https://github.com/element-hq/element-x-android/pull/4078
+
Changes in Element X v0.7.5 (2024-12-06)
========================================
diff --git a/LICENSE-COMMERCIAL b/LICENSE-COMMERCIAL
new file mode 100644
index 0000000000..39041ce02d
--- /dev/null
+++ b/LICENSE-COMMERCIAL
@@ -0,0 +1,6 @@
+Licensees holding a valid commercial license with Element may use this
+software in accordance with the terms contained in a written agreement
+between you and Element.
+
+To purchase a commercial license please contact our sales team at
+licensing@element.io
diff --git a/README.md b/README.md
index b486d55ecb..37cfc58e9b 100644
--- a/README.md
+++ b/README.md
@@ -97,10 +97,12 @@ If after your research you still have a question, ask at [#element-x-android:mat
## Copyright and License
-Copyright New Vector Ltd.
+Copyright (c) 2022 - 2025 New Vector Ltd
-Licensed under the AGPL-3.0-only (the "License"); you may not use this work except in compliance with the License. You may obtain a copy of the License in the [LICENSE](LICENSE) file, or at:
+This software is dual licensed by New Vector Ltd (Element). It can be used either:
-[https://www.gnu.org/licenses/agpl-3.0.txt](https://www.gnu.org/licenses/agpl-3.0.txt)
+(1) for free under the terms of the GNU Affero General Public License (as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version); OR
-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.
+(2) under the terms of a paid-for Element Commercial License agreement between you and Element (the terms of which may vary depending on what you and Element have agreed to).
+
+Unless required by applicable law or agreed to in writing, software distributed under the Licenses is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Licenses for the specific language governing permissions and limitations under the Licenses.
diff --git a/anvilannotations/build.gradle.kts b/anvilannotations/build.gradle.kts
index dd2bfaa41e..66b88b4dfa 100644
--- a/anvilannotations/build.gradle.kts
+++ b/anvilannotations/build.gradle.kts
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
plugins {
alias(libs.plugins.kotlin.jvm)
diff --git a/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
index 45e3c466d9..d91a4761fc 100644
--- a/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
+++ b/anvilannotations/src/main/kotlin/io/element/android/anvilannotations/ContributesNode.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.anvilannotations
diff --git a/anvilcodegen/build.gradle.kts b/anvilcodegen/build.gradle.kts
index 30d244c9a9..6f73bd9f44 100644
--- a/anvilcodegen/build.gradle.kts
+++ b/anvilcodegen/build.gradle.kts
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
plugins {
diff --git a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt
index 06bb60c55a..2511e0008d 100644
--- a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt
+++ b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessor.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.anvilcodegen
diff --git a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessorProvider.kt b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessorProvider.kt
index 478e30fbf0..80c552428f 100644
--- a/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessorProvider.kt
+++ b/anvilcodegen/src/main/kotlin/io/element/android/anvilcodegen/ContributesNodeProcessorProvider.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.anvilcodegen
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 52fb01f067..d4a8945d5d 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
@file:Suppress("UnstableApiUsage")
@@ -306,6 +306,8 @@ licensee {
allowUrl("https://asm.ow2.io/license.html")
allowUrl("https://www.gnu.org/licenses/agpl-3.0.txt")
ignoreDependencies("com.github.matrix-org", "matrix-analytics-events")
+ // Ignore dependency that are not third-party licenses to us.
+ ignoreDependencies(groupId = "io.element.android")
}
fun Project.configureLicensesTasks(reportingExtension: ReportingExtension) {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8bbbb8adfa..3450fcd55e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,8 +1,8 @@
diff --git a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
index 2abd803846..4f4e360f4f 100644
--- a/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
+++ b/app/src/main/kotlin/io/element/android/x/ElementXApplication.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x
diff --git a/app/src/main/kotlin/io/element/android/x/MainActivity.kt b/app/src/main/kotlin/io/element/android/x/MainActivity.kt
index 158622b4a3..2d2b645f3f 100644
--- a/app/src/main/kotlin/io/element/android/x/MainActivity.kt
+++ b/app/src/main/kotlin/io/element/android/x/MainActivity.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x
diff --git a/app/src/main/kotlin/io/element/android/x/MainNode.kt b/app/src/main/kotlin/io/element/android/x/MainNode.kt
index add83a9d2a..2fd36db3b9 100644
--- a/app/src/main/kotlin/io/element/android/x/MainNode.kt
+++ b/app/src/main/kotlin/io/element/android/x/MainNode.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
index 9864b5ad69..e24fdbb9fb 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppBindings.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
index 42ff4c830a..2a0cac9d74 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppComponent.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
index add1abe19e..d682cb7524 100644
--- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt
index 80c0fbde74..5ed8e89e24 100644
--- a/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/DefaultRoomComponentFactory.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt
index bf092bcf54..1c36991cd2 100644
--- a/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/DefaultSessionComponentFactory.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
index 7d5d3b2e5e..e595818051 100644
--- a/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/RoomComponent.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
index 2ff56211e3..7cdc686917 100644
--- a/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
+++ b/app/src/main/kotlin/io/element/android/x/di/SessionComponent.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.di
diff --git a/app/src/main/kotlin/io/element/android/x/info/Logs.kt b/app/src/main/kotlin/io/element/android/x/info/Logs.kt
index 6e5bb4c897..cca271e199 100644
--- a/app/src/main/kotlin/io/element/android/x/info/Logs.kt
+++ b/app/src/main/kotlin/io/element/android/x/info/Logs.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.info
diff --git a/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
index 11f108496b..72e864bbea 100644
--- a/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
+++ b/app/src/main/kotlin/io/element/android/x/initializer/CrashInitializer.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.initializer
diff --git a/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt b/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt
index 91e84cf495..5c53968ece 100644
--- a/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt
+++ b/app/src/main/kotlin/io/element/android/x/initializer/TracingInitializer.kt
@@ -1,58 +1,42 @@
/*
* Copyright 2022-2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.initializer
import android.content.Context
import android.system.Os
-import androidx.preference.PreferenceManager
import androidx.startup.Initializer
-import io.element.android.features.preferences.impl.developer.tracing.SharedPreferencesTracingConfigurationStore
-import io.element.android.features.preferences.impl.developer.tracing.TargetLogLevelMapBuilder
import io.element.android.features.rageshake.api.reporter.BugReporter
import io.element.android.libraries.architecture.bindings
-import io.element.android.libraries.core.meta.BuildType
import io.element.android.libraries.matrix.api.tracing.TracingConfiguration
-import io.element.android.libraries.matrix.api.tracing.TracingFilterConfigurations
import io.element.android.libraries.matrix.api.tracing.WriteToFilesConfiguration
import io.element.android.x.BuildConfig
import io.element.android.x.di.AppBindings
+import kotlinx.coroutines.flow.first
+import kotlinx.coroutines.runBlocking
import timber.log.Timber
+private const val ELEMENT_X_TARGET = "elementx"
+
class TracingInitializer : Initializer {
override fun create(context: Context) {
val appBindings = context.bindings()
val tracingService = appBindings.tracingService()
val bugReporter = appBindings.bugReporter()
- Timber.plant(tracingService.createTimberTree())
- val tracingConfiguration = if (BuildConfig.BUILD_TYPE == BuildType.RELEASE.name) {
- TracingConfiguration(
- filterConfiguration = TracingFilterConfigurations.release,
- writesToLogcat = false,
- writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
- )
- } else {
- val prefs = PreferenceManager.getDefaultSharedPreferences(context)
- val store = SharedPreferencesTracingConfigurationStore(prefs)
- val builder = TargetLogLevelMapBuilder(
- tracingConfigurationStore = store,
- defaultConfig = if (BuildConfig.BUILD_TYPE == BuildType.NIGHTLY.name) {
- TracingFilterConfigurations.nightly
- } else {
- TracingFilterConfigurations.debug
- }
- )
- TracingConfiguration(
- filterConfiguration = TracingFilterConfigurations.custom(builder.getCurrentMap()),
- writesToLogcat = BuildConfig.DEBUG,
- writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
- )
- }
- bugReporter.setCurrentTracingFilter(tracingConfiguration.filterConfiguration.filter)
+ Timber.plant(tracingService.createTimberTree(ELEMENT_X_TARGET))
+ val preferencesStore = appBindings.preferencesStore()
+ val logLevel = runBlocking { preferencesStore.getTracingLogLevelFlow().first() }
+ val tracingConfiguration = TracingConfiguration(
+ writesToLogcat = BuildConfig.DEBUG,
+ writesToFilesConfiguration = defaultWriteToDiskConfiguration(bugReporter),
+ logLevel = logLevel,
+ extraTargets = listOf(ELEMENT_X_TARGET),
+ )
+ bugReporter.setCurrentTracingLogLevel(logLevel.name)
tracingService.setupTracing(tracingConfiguration)
// Also set env variable for rust back trace
Os.setenv("RUST_BACKTRACE", "1", true)
diff --git a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt
index 2768f87b6e..fedcdf2919 100644
--- a/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt
+++ b/app/src/main/kotlin/io/element/android/x/intent/DefaultIntentProvider.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.intent
diff --git a/app/src/main/kotlin/io/element/android/x/intent/SafeUriHandler.kt b/app/src/main/kotlin/io/element/android/x/intent/SafeUriHandler.kt
index 7df60333c8..d225b8ea34 100644
--- a/app/src/main/kotlin/io/element/android/x/intent/SafeUriHandler.kt
+++ b/app/src/main/kotlin/io/element/android/x/intent/SafeUriHandler.kt
@@ -1,8 +1,8 @@
/*
* Copyright 2023, 2024 New Vector Ltd.
*
- * SPDX-License-Identifier: AGPL-3.0-only
- * Please see LICENSE in the repository root for full details.
+ * SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+ * Please see LICENSE files in the repository root for full details.
*/
package io.element.android.x.intent
diff --git a/app/src/main/res/drawable/transparent.xml b/app/src/main/res/drawable/transparent.xml
index 38b4ce31f9..f5f4d3a7bf 100644
--- a/app/src/main/res/drawable/transparent.xml
+++ b/app/src/main/res/drawable/transparent.xml
@@ -1,8 +1,8 @@
diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties
index ae036a05a6..b55c556736 100644
--- a/app/src/main/res/resources.properties
+++ b/app/src/main/res/resources.properties
@@ -1,6 +1,6 @@
# Copyright 2024 New Vector Ltd.
#
-# SPDX-License-Identifier: AGPL-3.0-only
-# Please see LICENSE in the repository root for full details.
+# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
+# Please see LICENSE files in the repository root for full details.
unqualifiedResLocale=en
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 83997a07a9..c4014b842c 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,8 +1,8 @@
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 3022714895..884ae0ea71 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,8 +1,8 @@
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 1c75ab5111..76fb597109 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,8 +1,8 @@