Skip to content

Commit 8bf377d

Browse files
committed
Merge branch 'release/25.08.0' into main
2 parents 5739a28 + 8d43ff5 commit 8bf377d

File tree

636 files changed

+3379
-2458
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

636 files changed

+3379
-2458
lines changed

.maestro/tests/roomList/timeline/messages/text.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ appId: ${MAESTRO_APP_ID}
44
- tapOn:
55
id: "text_editor"
66
- inputText: "Hello world!"
7-
- tapOn: "Send"
7+
- tapOn: "Send message"
88
- hideKeyboard
99
- takeScreenshot: build/maestro/511-Timeline

.maestro/tests/roomList/timeline/timeline.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ appId: ${MAESTRO_APP_ID}
66
- runFlow: messages/text.yaml
77
- runFlow: messages/location.yaml
88
- runFlow: messages/poll.yaml
9-
- runFlow: call/call.yaml
9+
10+
# Restore once the call flow is fixed
11+
#- runFlow: call/call.yaml
12+
1013
- back
1114
- runFlow: ../../assertions/assertHomeDisplayed.yaml

CHANGES.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,51 @@
1+
Changes in Element X v25.07.1
2+
=============================
3+
4+
<!-- Release notes generated using configuration in .github/release.yml at v25.07.1 -->
5+
6+
## What's Changed
7+
### 🐛 Bugfixes
8+
* fix ( room list) : rebuild with filteredSummaries to avoid bad state by @ganfra in https://github.com/element-hq/element-x-android/pull/4993
9+
* Keep video rotation metadata when transcoding by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5008
10+
### 🗣 Translations
11+
* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4988
12+
### 🧱 Build
13+
* Update Gradle Wrapper from 8.14.2 to 8.14.3 by @ElementBot in https://github.com/element-hq/element-x-android/pull/4985
14+
* Stop ignoring dependencies, but instead set `open-pull-requests-limit to 0 by @bmarty in https://github.com/element-hq/element-x-android/pull/5013
15+
### 📄 Documentation
16+
* Update to the status and clarifications with respect to the legacy app. by @mxandreas in https://github.com/element-hq/element-x-android/pull/5016
17+
### 🚧 In development 🚧
18+
* Home navigation bar fixes by @bmarty in https://github.com/element-hq/element-x-android/pull/4990
19+
* Home screen iteration by @bmarty in https://github.com/element-hq/element-x-android/pull/5003
20+
### Dependency upgrades
21+
* Update dependency io.element.android:compound-android to v25.7.4 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4984
22+
* Update dependency org.matrix.rustcomponents:sdk-android to v25.7.7 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4989
23+
* Update plugin ktlint to v13 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4992
24+
* Update dependency org.jetbrains.kotlinx:kotlinx-datetime to v0.7.1-0.6.x-compat by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4991
25+
* Update haze to v1.6.7 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4987
26+
* Update dependency com.squareup.okhttp3:okhttp-bom to v5 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4979
27+
* Update dependency io.sentry:sentry-android to v8.17.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4998
28+
* Update dependency com.squareup.okhttp3:okhttp-bom to v5.1.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/4997
29+
* Update dependency org.maplibre.gl:android-sdk to v11.12.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5001
30+
* Update dependency com.posthog:posthog-android to v3.19.2 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5009
31+
* Update dependency org.maplibre.gl:android-sdk to v11.12.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5006
32+
* Update android.gradle.plugin to v8.11.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5014
33+
* Update rnkdsh/action-upload-diawi action to v1.5.10 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5019
34+
* Update wysiwyg to v2.38.5 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5025
35+
* Update haze to v1.6.8 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5026
36+
* Update dependency org.matrix.rustcomponents:sdk-android to v25.7.15 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5011
37+
### Others
38+
* Remove bloom effect and replace by linear gradient by @bmarty in https://github.com/element-hq/element-x-android/pull/4926
39+
* misc (a11y) : mark MainActionButton icon as decorative by @ganfra in https://github.com/element-hq/element-x-android/pull/4996
40+
* Make `ContentAvoidingLayoutData` an immutable data class by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4999
41+
* Remove unused composable and cleanup colors by @bmarty in https://github.com/element-hq/element-x-android/pull/5000
42+
* Add a feature flag to reuse the last `pos` value for initial syncs by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5010
43+
* [a11y] Fix several issues around accessibility by @bmarty in https://github.com/element-hq/element-x-android/pull/5007
44+
* Replace video transcoder with Media3 Transformer by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5018
45+
46+
47+
**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v25.07.0...v25.07.1
48+
149
Changes in Element X v25.07.0
250
=============================
351

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ allprojects {
4949
config.from(files("$rootDir/tools/detekt/detekt.yml"))
5050
}
5151
dependencies {
52-
detektPlugins("io.nlopez.compose.rules:detekt:0.4.22")
52+
detektPlugins("io.nlopez.compose.rules:detekt:0.4.26")
5353
detektPlugins(project(":tests:detekt-rules"))
5454
}
5555

docs/_developer_onboarding.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333

3434
This doc is a quick introduction about the project and its architecture.
3535

36-
It's aim is to help new developers to understand the overall project and where to start developing.
36+
Its aim is to help new developers to understand the overall project and where to start developing.
3737

3838
Other useful documentation:
3939

@@ -157,6 +157,8 @@ Troubleshooting:
157157
- If you get the error `Unsupported class file major version <n>`, try changing your JVM version by setting
158158
`JAVA_HOME` and, if building via Android Studio, "File | Settings | Build, Execution, Deployment | Build Tools | Gradle | Gradle JDK".
159159

160+
You can switch back to using the published version of the SDK by deleting `libraries/rustsdk/matrix-rust-sdk.aar`.
161+
160162
### The Android project
161163

162164
The project should compile out of the box.

docs/notifications.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ That is why clients are able to **process the push rules client side** to decide
149149

150150
As seen previously, App developers don't directly send a push to the end user's device, they use a Push Provider as intermediary. So technically this intermediary is able to read the content of what is sent.
151151

152-
App developers usually mitigate this by sending a `silent notification`, that is a notification with no identifiable data, or with an encrypted payload. When the push is received the app can then synchronise to it's server in order to generate a local notification.
152+
App developers usually mitigate this by sending a `silent notification`, that is a notification with no identifiable data, or with an encrypted payload. When the push is received the app can then synchronise to its server in order to generate a local notification.
153153

154154

155155
### Background processing limitations
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Main changes in this version: start support for room v12, bug fixes and general improvements.
2+
Full changelog: https://github.com/element-hq/element-x-android/releases

fastlane/metadata/android/en-US/full_description.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Choose where to host your data - from any public server (the largest free server
2222
Use Element everywhere. Stay in touch wherever you are with fully synchronised message history across all your devices, including on the web at https://app.element.io
2323

2424
<b>Element X is our next-generation app</b>
25-
If you’re using the original Element app, it’s time to try Element X! It’s faster, easier to use, and more powerful than the original app. It’s better in every way and we’re adding new features all the time.
25+
If you’re using the previous-generation Element Classic app, it’s time to try Element X! It’s faster, easier to use, and more powerful than the classic app. It’s better in every way and we’re adding new features all the time.
2626

2727
The application requires the android.permission.REQUEST_INSTALL_PACKAGES permission to enable the installation of applications received as attachments, ensuring seamless and convenient access to new software within the app.
2828

features/analytics/impl/src/main/kotlin/io/element/android/features/analytics/impl/AnalyticsOptInView.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@ import io.element.android.compound.theme.ElementTheme
2929
import io.element.android.compound.tokens.generated.CompoundIcons
3030
import io.element.android.features.analytics.api.AnalyticsOptInEvents
3131
import io.element.android.libraries.designsystem.atomic.molecules.ButtonColumnMolecule
32+
import io.element.android.libraries.designsystem.atomic.molecules.IconTitleSubtitleMolecule
3233
import io.element.android.libraries.designsystem.atomic.organisms.InfoListItem
3334
import io.element.android.libraries.designsystem.atomic.organisms.InfoListOrganism
3435
import io.element.android.libraries.designsystem.atomic.pages.HeaderFooterPage
3536
import io.element.android.libraries.designsystem.background.OnboardingBackground
3637
import io.element.android.libraries.designsystem.components.BigIcon
3738
import io.element.android.libraries.designsystem.components.ClickableLinkText
38-
import io.element.android.libraries.designsystem.components.PageTitle
3939
import io.element.android.libraries.designsystem.preview.ElementPreview
4040
import io.element.android.libraries.designsystem.preview.PreviewsDayNight
4141
import io.element.android.libraries.designsystem.text.buildAnnotatedStringWithStyledPart
@@ -89,10 +89,10 @@ private fun AnalyticsOptInHeader(
8989
Column(
9090
horizontalAlignment = Alignment.CenterHorizontally,
9191
) {
92-
PageTitle(
93-
modifier = Modifier.padding(top = 60.dp, bottom = 12.dp),
92+
IconTitleSubtitleMolecule(
93+
modifier = Modifier.padding(top = 60.dp, bottom = 28.dp),
9494
title = stringResource(id = R.string.screen_analytics_prompt_title, state.applicationName),
95-
subtitle = stringResource(id = R.string.screen_analytics_prompt_help_us_improve),
95+
subTitle = stringResource(id = R.string.screen_analytics_prompt_help_us_improve),
9696
iconStyle = BigIcon.Style.Default(CompoundIcons.Chart())
9797
)
9898
if (state.hasPolicyLink) {

features/call/impl/src/main/kotlin/io/element/android/features/call/impl/utils/WebViewAudioManager.kt

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import kotlinx.coroutines.CoroutineScope
2121
import kotlinx.coroutines.Dispatchers
2222
import kotlinx.coroutines.delay
2323
import kotlinx.coroutines.launch
24+
import kotlinx.coroutines.sync.Mutex
25+
import kotlinx.coroutines.sync.withLock
2426
import kotlinx.serialization.Serializable
2527
import kotlinx.serialization.Transient
2628
import kotlinx.serialization.json.Json
@@ -84,6 +86,11 @@ class WebViewAudioManager(
8486
?.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "${webView.context.packageName}:ProximitySensorCallWakeLock")
8587
}
8688

89+
/**
90+
* Used to ensure that only one coroutine can access the proximity sensor wake lock at a time, preventing re-acquiring or re-releasing it.
91+
*/
92+
private val proximitySensorMutex = Mutex()
93+
8794
/**
8895
* This listener tracks the current communication device and updates the WebView when it changes.
8996
*/
@@ -208,8 +215,12 @@ class WebViewAudioManager(
208215
return
209216
}
210217

211-
if (proximitySensorWakeLock?.isHeld == true) {
212-
proximitySensorWakeLock?.release()
218+
coroutineScope.launch {
219+
proximitySensorMutex.withLock {
220+
if (proximitySensorWakeLock?.isHeld == true) {
221+
proximitySensorWakeLock?.release()
222+
}
223+
}
213224
}
214225

215226
audioManager.mode = AudioManager.MODE_NORMAL
@@ -397,13 +408,17 @@ class WebViewAudioManager(
397408

398409
expectedNewCommunicationDeviceId = null
399410

400-
@Suppress("WakeLock", "WakeLockTimeout")
401-
if (device?.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && proximitySensorWakeLock?.isHeld == false) {
402-
// If the device is the built-in earpiece, we need to acquire the proximity sensor wake lock
403-
proximitySensorWakeLock?.acquire()
404-
} else if (proximitySensorWakeLock?.isHeld == true) {
405-
// If the device is no longer the earpiece, we need to release the wake lock
406-
proximitySensorWakeLock?.release()
411+
coroutineScope.launch {
412+
proximitySensorMutex.withLock {
413+
@Suppress("WakeLock", "WakeLockTimeout")
414+
if (device?.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && proximitySensorWakeLock?.isHeld == false) {
415+
// If the device is the built-in earpiece, we need to acquire the proximity sensor wake lock
416+
proximitySensorWakeLock?.acquire()
417+
} else if (proximitySensorWakeLock?.isHeld == true) {
418+
// If the device is no longer the earpiece, we need to release the wake lock
419+
proximitySensorWakeLock?.release()
420+
}
421+
}
407422
}
408423
}
409424

0 commit comments

Comments
 (0)