Skip to content

Commit d51bdf3

Browse files
authored
Merge branch 'develop' into renovate/media3
2 parents 6021fc9 + 3588259 commit d51bdf3

File tree

211 files changed

+2877
-2641
lines changed

Some content is hidden

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

211 files changed

+2877
-2641
lines changed

.github/workflows/maestro-local.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ env:
1111
CI_GRADLE_ARG_PROPERTIES: --stacktrace --no-daemon -Dsonar.gradle.skipCompile=true --no-configuration-cache
1212
ARCH: x86_64
1313
DEVICE: pixel_7_pro
14-
API_LEVEL: 35
14+
API_LEVEL: 33
1515
TARGET: google_apis
1616

1717
jobs:

.github/workflows/post-release.yml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Post-release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
post-release:
10+
runs-on: ubuntu-latest
11+
# Skip in forks
12+
if: github.repository == 'element-hq/element-x-android'
13+
14+
steps:
15+
- name: Trigger pipeline
16+
uses: actions/github-script@v7
17+
with:
18+
github-token: ${{ secrets.ENTERPRISE_ACTIONS_TOKEN }}
19+
script: |
20+
const tag = context.ref.replace('refs/tags/', '');
21+
const inputs = { git_tag: tag };
22+
await github.rest.actions.createWorkflowDispatch({
23+
owner: 'element-hq',
24+
repo: 'element-enterprise',
25+
workflow_id: 'pipeline-android.yml',
26+
ref: 'main',
27+
inputs: inputs
28+
});

.idea/kotlinc.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.maestro/allTests.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
appId: ${MAESTRO_APP_ID}
2+
androidWebViewHierarchy: devtools
23
---
34
## Check that all env variables required in the whole test suite are declared (to fail faster)
45
- runScript: ./scripts/checkEnv.js

.maestro/tests/account/login.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,22 @@ appId: ${MAESTRO_APP_ID}
1414
visible: 'Use without an account'
1515
commands:
1616
- tapOn: "Use without an account"
17+
## For older chrome versions
18+
- runFlow:
19+
when:
20+
visible: 'Accept & continue'
21+
commands:
22+
- tapOn: "Accept & continue"
23+
- runFlow:
24+
when:
25+
visible: 'No thanks'
26+
commands:
27+
- tapOn: "No thanks"
1728
## Working when running Maestro locally, but not on the CI yet.
29+
- extendedWaitUntil:
30+
visible:
31+
id: "form-1"
32+
timeout: 10000
1833
- tapOn:
1934
id: "form-1"
2035
- inputText: ${MAESTRO_USERNAME}

CHANGES.md

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,50 @@
1+
<!-- Release notes generated using configuration in .github/release.yml at v25.05.4 -->
2+
3+
Changes in Element X v25.05.4
4+
=============================
5+
6+
Rust SDK: https://github.com/matrix-org/matrix-rust-sdk/releases/tag/matrix-sdk-ffi%2F20250521
7+
8+
## What's Changed
9+
### 🙌 Improvements
10+
* Change (report room) : check if server supports the report room api by @ganfra in https://github.com/element-hq/element-x-android/pull/4718
11+
### 🐛 Bugfixes
12+
* Improve audio focus management by @bmarty in https://github.com/element-hq/element-x-android/pull/4707
13+
* When transcoding a video fails, send it as a file by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4257
14+
* Disable mutliple click (parallel or serial) on a room by @bmarty in https://github.com/element-hq/element-x-android/pull/4683
15+
* Fix generic mime type used when externally sharing several files by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4715
16+
* Fix issues on JoinedRoom / BaseRoom by @bmarty in https://github.com/element-hq/element-x-android/pull/4724
17+
* Use the right live timeline instance in `RustRoomFactory` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4745
18+
### 🗣 Translations
19+
* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/4739
20+
### 🧱 Build
21+
* Ensure the CI is marked as failed when Maestro test is failing by @bmarty in https://github.com/element-hq/element-x-android/pull/4700
22+
* Trigger pipeline build when a release tag is pushed by @bmarty in https://github.com/element-hq/element-x-android/pull/4741
23+
* Fix compilation issues. by @bmarty in https://github.com/element-hq/element-x-android/pull/4750
24+
### 📄 Documentation
25+
* README.md: fix broken link by @richvdh in https://github.com/element-hq/element-x-android/pull/4728
26+
### Dependency upgrades
27+
* chore(config): migrate renovate config by @renovate in https://github.com/element-hq/element-x-android/pull/4688
28+
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.13 by @renovate in https://github.com/element-hq/element-x-android/pull/4716
29+
* fix(deps): update dependency io.sentry:sentry-android to v8.12.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4717
30+
* chore(deps): update plugin sonarqube to v6.2.0.5505 by @renovate in https://github.com/element-hq/element-x-android/pull/4725
31+
* fix(deps): update dependency com.posthog:posthog-android to v3.15.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4723
32+
* fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v2.12.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4727
33+
* chore(deps): update codecov/codecov-action action to v5.4.3 by @renovate in https://github.com/element-hq/element-x-android/pull/4730
34+
* fix(deps): update kotlin by @renovate in https://github.com/element-hq/element-x-android/pull/4713
35+
* fix(deps): update dependency com.squareup.retrofit2:retrofit-bom to v3 by @renovate in https://github.com/element-hq/element-x-android/pull/4729
36+
* fix(deps): update kotlinpoet to v2.2.0 by @renovate in https://github.com/element-hq/element-x-android/pull/4732
37+
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.5.21 by @renovate in https://github.com/element-hq/element-x-android/pull/4759
38+
### Others
39+
* Remove event cache feature flag by @jmartinesp in https://github.com/element-hq/element-x-android/pull/4719
40+
* Check homeserver when login using qr code by @bmarty in https://github.com/element-hq/element-x-android/pull/4708
41+
* Merge on boarding module to login module by @bmarty in https://github.com/element-hq/element-x-android/pull/4746
42+
* Allow configuration to provide multiple account providers. by @bmarty in https://github.com/element-hq/element-x-android/pull/4742
43+
* Reduce API of JoinedRoom, caller must use the Timeline API from liveTimeline instead by @bmarty in https://github.com/element-hq/element-x-android/pull/4731
44+
45+
46+
**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v25.05.3...v25.05.4
47+
148
Changes in Element X v25.05.3
249
=============================
350

app/src/main/AndroidManifest.xml

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,17 @@
3434
android:value='androidx.startup' />
3535
</provider>
3636

37+
<!--
38+
Using launchMode singleTask to avoid multiple instances of the Activity
39+
when the app is already open. This is important for incoming share (see
40+
https://github.com/element-hq/element-x-android/issues/4074) and for opening
41+
the application from a mobile.element.io link.
42+
-->
3743
<activity
3844
android:name=".MainActivity"
3945
android:configChanges="orientation|screenSize|screenLayout|keyboardHidden|uiMode"
4046
android:exported="true"
41-
android:launchMode="singleTop"
47+
android:launchMode="singleTask"
4248
android:theme="@style/Theme.ElementX.Splash"
4349
android:windowSoftInputMode="adjustResize">
4450
<intent-filter>
@@ -54,6 +60,9 @@
5460
android:host="open"
5561
android:scheme="elementx" />
5662
</intent-filter>
63+
<!--
64+
Oidc redirection
65+
-->
5766
<intent-filter>
5867
<action android:name="android.intent.action.VIEW" />
5968

@@ -80,6 +89,21 @@
8089
<!-- Matching asset file: https://staging.element.io/.well-known/assetlinks.json -->
8190
<data android:host="staging.element.io" />
8291
</intent-filter>
92+
<!--
93+
Element mobile links
94+
Example: https://mobile.element.io/element?account_provider=example.org&login_hint=mxid:@alice:example.org
95+
-->
96+
<intent-filter android:autoVerify="true">
97+
<action android:name="android.intent.action.VIEW" />
98+
99+
<category android:name="android.intent.category.DEFAULT" />
100+
<category android:name="android.intent.category.BROWSABLE" />
101+
102+
<data android:scheme="https" />
103+
<!-- Matching asset file: https://mobile.element.io/.well-known/assetlinks.json -->
104+
<data android:host="mobile.element.io" />
105+
<data android:path="/element" />
106+
</intent-filter>
83107
<!--
84108
matrix.to links
85109
Note: On Android 12 and higher clicking a web link (that is not an Android App Link) always shows content in a web browser

appnav/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ dependencies {
5353
testImplementation(libs.molecule.runtime)
5454
testImplementation(libs.test.truth)
5555
testImplementation(libs.test.turbine)
56+
testImplementation(projects.features.login.test)
5657
testImplementation(projects.libraries.matrix.test)
5758
testImplementation(projects.libraries.oidc.impl)
5859
testImplementation(projects.libraries.preferences.test)

appnav/src/main/kotlin/io/element/android/appnav/NotLoggedInFlowNode.kt

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ import com.bumble.appyx.core.node.Node
2020
import com.bumble.appyx.core.plugin.Plugin
2121
import com.bumble.appyx.core.plugin.plugins
2222
import com.bumble.appyx.navmodel.backstack.BackStack
23-
import com.bumble.appyx.navmodel.backstack.operation.push
2423
import dagger.assisted.Assisted
2524
import dagger.assisted.AssistedInject
2625
import io.element.android.anvilannotations.ContributesNode
2726
import io.element.android.features.login.api.LoginEntryPoint
28-
import io.element.android.features.login.api.LoginFlowType
29-
import io.element.android.features.onboarding.api.OnBoardingEntryPoint
27+
import io.element.android.features.login.api.LoginParams
3028
import io.element.android.libraries.architecture.BackstackView
3129
import io.element.android.libraries.architecture.BaseFlowNode
30+
import io.element.android.libraries.architecture.NodeInputs
31+
import io.element.android.libraries.architecture.inputs
3232
import io.element.android.libraries.designsystem.utils.ForceOrientationInMobileDevices
3333
import io.element.android.libraries.designsystem.utils.ScreenOrientation
3434
import io.element.android.libraries.di.AppScope
@@ -39,21 +39,26 @@ import kotlinx.parcelize.Parcelize
3939
class NotLoggedInFlowNode @AssistedInject constructor(
4040
@Assisted buildContext: BuildContext,
4141
@Assisted plugins: List<Plugin>,
42-
private val onBoardingEntryPoint: OnBoardingEntryPoint,
4342
private val loginEntryPoint: LoginEntryPoint,
4443
private val notLoggedInImageLoaderFactory: NotLoggedInImageLoaderFactory,
4544
) : BaseFlowNode<NotLoggedInFlowNode.NavTarget>(
4645
backstack = BackStack(
47-
initialElement = NavTarget.OnBoarding,
46+
initialElement = NavTarget.Root,
4847
savedStateMap = buildContext.savedStateMap
4948
),
5049
buildContext = buildContext,
5150
plugins = plugins,
5251
) {
52+
data class Params(
53+
val loginParams: LoginParams?,
54+
) : NodeInputs
55+
5356
interface Callback : Plugin {
5457
fun onOpenBugReport()
5558
}
5659

60+
private val inputs = inputs<Params>()
61+
5762
override fun onBuilt() {
5863
super.onBuilt()
5964
lifecycle.subscribe(
@@ -65,42 +70,28 @@ class NotLoggedInFlowNode @AssistedInject constructor(
6570

6671
sealed interface NavTarget : Parcelable {
6772
@Parcelize
68-
data object OnBoarding : NavTarget
69-
70-
@Parcelize
71-
data class LoginFlow(val type: LoginFlowType) : NavTarget
73+
data object Root : NavTarget
7274
}
7375

7476
override fun resolve(navTarget: NavTarget, buildContext: BuildContext): Node {
7577
return when (navTarget) {
76-
NavTarget.OnBoarding -> {
77-
val callback = object : OnBoardingEntryPoint.Callback {
78-
override fun onSignUp() {
79-
backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_UP))
80-
}
81-
82-
override fun onSignIn() {
83-
backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_IN_MANUAL))
84-
}
85-
86-
override fun onSignInWithQrCode() {
87-
backstack.push(NavTarget.LoginFlow(type = LoginFlowType.SIGN_IN_QR_CODE))
88-
}
89-
78+
NavTarget.Root -> {
79+
val callback = object : LoginEntryPoint.Callback {
9080
override fun onReportProblem() {
9181
plugins<Callback>().forEach { it.onOpenBugReport() }
9282
}
9383
}
94-
onBoardingEntryPoint
84+
loginEntryPoint
9585
.nodeBuilder(this, buildContext)
86+
.params(
87+
LoginEntryPoint.Params(
88+
accountProvider = inputs.loginParams?.accountProvider,
89+
loginHint = inputs.loginParams?.loginHint,
90+
)
91+
)
9692
.callback(callback)
9793
.build()
9894
}
99-
is NavTarget.LoginFlow -> {
100-
loginEntryPoint.nodeBuilder(this, buildContext)
101-
.params(LoginEntryPoint.Params(flowType = navTarget.type))
102-
.build()
103-
}
10495
}
10596
}
10697

0 commit comments

Comments
 (0)