Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
e527883
Merge branch 'release/1.6.48' into develop
ganfra Oct 15, 2025
05fe689
version++
ganfra Oct 15, 2025
7038914
Use the dedicated subdomain for the bug report URL by default
benbz Nov 6, 2025
12c798b
Merge pull request #9097 from element-hq/bbz/use-dedicated-bug-report…
bmarty Nov 17, 2025
c1ed75b
Support for stable version of MSC3824 OAuth 2.0 aware
hughns Dec 15, 2025
e68101c
Use all values from auth metadata even if null
hughns Dec 19, 2025
a3684fa
Test cases
hughns Dec 19, 2025
5117c93
Changelog
hughns Dec 19, 2025
4d46daf
Lint
hughns Dec 19, 2025
9af7512
Lint
hughns Dec 19, 2025
04883b2
Bump org.matrix.rustcomponents:crypto-android from 0.11.1 to 26.1.4
dependabot[bot] Jan 2, 2026
0367786
Update matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/au…
hughns Jan 7, 2026
88c53c2
Remove unused file
hughns Jan 7, 2026
df2bf39
Be consistent with copyright year
hughns Jan 7, 2026
7099f39
Merge pull request #9102 from hughns/oauth-stable
bmarty Jan 14, 2026
a631d85
Add missing Realm migration.
bmarty Jan 16, 2026
e8bc6e9
Fix data
bmarty Jan 16, 2026
9dd2f43
Merge pull request #9110 from element-hq/feature/bma/addMissingRealmM…
bmarty Jan 16, 2026
274d1fc
Upgrade org.matrix.rustcomponents:crypto-android to 26.1.22
bmarty Jan 22, 2026
e618f2b
Fix API break.
bmarty Jan 22, 2026
5f2df44
Upgrade Realm plugin to 10.19.0
bmarty Jan 22, 2026
306681f
Changelog
bmarty Jan 22, 2026
55c7b1d
Merge pull request #9105 from element-hq/dependabot/gradle/org.matrix…
bmarty Jan 22, 2026
fcce287
Merge pull request #9111 from element-hq/feature/bma/upgradeRealm
bmarty Jan 23, 2026
6aeca83
Bump org.matrix.rustcomponents:crypto-android from 26.1.22 to 26.1.28
dependabot[bot] Jan 28, 2026
5a925d9
Update Sentry dependency to version 8.31.0
bmarty Feb 2, 2026
21c3f01
Fix compilation issue.
bmarty Feb 2, 2026
2b07e16
Update Maplibre dependency to version 11.6.1
bmarty Feb 2, 2026
82e835e
Remove flipper from the codebase.
bmarty Feb 2, 2026
1cda5eb
Reorder import statements
bmarty Feb 2, 2026
5f370f8
Remove unused import statements.
bmarty Feb 3, 2026
100b5ca
Merge pull request #9117 from element-hq/feature/bma/removeFlipper
bmarty Feb 3, 2026
e600584
Merge pull request #9115 from element-hq/feature/bma/updateSentry
bmarty Feb 3, 2026
dd0028d
Merge pull request #9114 from element-hq/dependabot/gradle/org.matrix…
bmarty Feb 3, 2026
61f9c5f
Merge pull request #9116 from element-hq/feature/bma/updateMaplibre
bmarty Feb 3, 2026
c975727
Changelog for version 1.6.50
bmarty Feb 4, 2026
7bf5c55
Adding fastlane file for version 1.6.50
bmarty Feb 4, 2026
9889796
Merge branch 'release/1.6.50' into main
bmarty Feb 4, 2026
eca0abd
Merge tag 'v1.6.50' into synodim-merge-upstream
Apr 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
Changes in Element v1.6.50 (2026-02-04)
=======================================

Other changes
-------------
- Update the default bug reporting URL. ([#9097](https://github.com/element-hq/element-android/issues/9097))
- Update OAuth-awareness to support the stable version of MSC3824. ([#9102](https://github.com/element-hq/element-android/issues/9102))
- Update realm plugin to 10.19.0 ([#9111](https://github.com/element-hq/element-android/issues/9116))
- Bump org.matrix.rustcomponents:crypto-android from 26.1.22 to 26.1.28 ([#9114](https://github.com/element-hq/element-android/issues/9114))
- Update sentry to version 8.31.0 ([#9115](https://github.com/element-hq/element-android/issues/9115))
- Update Maplibre dependency to version 11.6.1 ([#9116](https://github.com/element-hq/element-android/issues/9116))
- Remove flipper from the codebase. ([#9117](https://github.com/element-hq/element-android/issues/9117))

Changes in Element v1.6.48 (2025-10-15)
=======================================

Expand Down
11 changes: 3 additions & 8 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,13 @@ def markwon = "4.6.2"
def moshi = "1.15.1"
def lifecycle = "2.8.3"
def flowBinding = "1.2.0"
def flipper = "0.259.0"
def epoxy = "5.0.0"
def mavericks = "3.0.9"
def glide = "4.16.0"
def bigImageViewer = "1.8.1"
def jjwt = "0.11.5"
def vanniktechEmoji = "0.16.0"
def sentry = "6.18.1"
def sentry = "8.31.0"
def fragment = "1.8.6"
// Testing
def mockk = "1.13.11"
Expand Down Expand Up @@ -95,10 +94,6 @@ ext.libs = [
'hiltAndroidTesting' : "com.google.dagger:hilt-android-testing:$dagger",
'hiltCompiler' : "com.google.dagger:hilt-compiler:$dagger"
],
flipper : [
'flipper' : "com.facebook.flipper:flipper:$flipper",
'flipperNetworkPlugin' : "com.facebook.flipper:flipper-network-plugin:$flipper",
],
element : [
'opusencoder' : "io.element.android:opusencoder:1.1.0",
'wysiwyg' : "io.element.android:wysiwyg:2.38.2"
Expand Down Expand Up @@ -132,8 +127,8 @@ ext.libs = [
'mavericksTesting' : "com.airbnb.android:mavericks-testing:$mavericks"
],
maplibre : [
'androidSdk' : "org.maplibre.gl:android-sdk:10.0.2",
'pluginAnnotation' : "org.maplibre.gl:android-plugin-annotation-v9:1.0.0"
'androidSdk' : "org.maplibre.gl:android-sdk:11.6.1",
'pluginAnnotation' : "org.maplibre.gl:android-plugin-annotation-v9:3.0.2"
],
mockk : [
'mockk' : "io.mockk:mockk:$mockk",
Expand Down
2 changes: 0 additions & 2 deletions dependencies_groups.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ ext.groups = [
'com.dropbox.core',
'com.soywiz.korlibs.korte',
'com.facebook.fbjni',
'com.facebook.flipper',
'com.facebook.fresco',
'com.facebook.infer.annotation',
'com.facebook.react',
Expand Down Expand Up @@ -114,7 +113,6 @@ ext.groups = [
'com.intellij',
'com.jakewharton.android.repackaged',
'com.jakewharton.timber',
'com.kgurgul.flipper',
'com.linkedin.dexmaker',
'com.mapbox.mapboxsdk',
'com.nulab-inc',
Expand Down
58 changes: 0 additions & 58 deletions docs/flipper.md

This file was deleted.

2 changes: 2 additions & 0 deletions fastlane/metadata/android/en-US/changelogs/40106500.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Main changes in this version: bug fixes and improvements.
Full changelog: https://github.com/element-hq/element-android/releases
6 changes: 3 additions & 3 deletions matrix-sdk-android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ buildscript {
}
}
dependencies {
classpath "io.realm:realm-gradle-plugin:10.18.0"
classpath "io.realm:realm-gradle-plugin:10.19.0"
}
}

Expand Down Expand Up @@ -62,7 +62,7 @@ android {
// that the app's state is completely cleared between tests.
testInstrumentationRunnerArguments clearPackageData: 'true'

buildConfigField "String", "SDK_VERSION", "\"1.6.48\""
buildConfigField "String", "SDK_VERSION", "\"1.6.50\""

buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\""
Expand Down Expand Up @@ -221,7 +221,7 @@ dependencies {

implementation libs.google.phonenumber

implementation("org.matrix.rustcomponents:crypto-android:0.11.1")
implementation("org.matrix.rustcomponents:crypto-android:26.1.28")
// api project(":library:rustCrypto")

testImplementation libs.tests.junit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ package org.matrix.android.sdk.api.auth
/**
* See https://github.com/matrix-org/matrix-spec-proposals/pull/3824
*/
enum class SSOAction {
LOGIN,
REGISTER;
enum class SSOAction(val value: String) {
LOGIN("login"),
REGISTER("register");
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* Copyright 2026 The Matrix.org Foundation C.I.C.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.matrix.android.sdk.api.auth.data

import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass

/**
* This is a subset of the server metadata discovery for the OAuth 2.0 API
* https://spec.matrix.org/v1.16/client-server-api/#get_matrixclientv1auth_metadata
*
* Includes the values from MSC4191: https://github.com/matrix-org/matrix-spec-proposals/pull/4191
*
* <pre>
* {
* "issuer": "https://id.server.org",
* "account_management_uri": "https://id.server.org/my-account",
* "account_management_actions_supported": ["org.matrix.profile", "org.matrix.devices_list"],
* }
* </pre>
* .
*/

@JsonClass(generateAdapter = true)
data class AuthMetadata(
@Json(name = "issuer")
val issuer: String,

@Json(name = "account_management_uri")
val accountManagementUri: String?,

@Json(name = "account_management_actions_supported")
val accountManagementActionsSupported: List<String>?,
)
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,17 @@ data class HomeServerCapabilities(
var canRedactRelatedEvents: Boolean = false,

/**
* External account management url for use with MSC3824 delegated OIDC, provided in Wellknown.
* External account management url for use with OAuth API, provided by MSC4191 /auth_metadata discovery or in unstable Wellknown.
*/
val externalAccountManagementUrl: String? = null,

/**
* Authentication issuer for use with MSC3824 delegated OIDC, provided in Wellknown.
* External account management supported actions for use with OAuth API, provided by MSC4191 /auth_metadata discovery.
*/
val externalAccountManagementSupportedActions: List<String>? = null,

/**
* Authentication issuer for use with MSC3824 delegated OIDC, provided by /auth_metadata discovery or in unstable Wellknown.
*/
val authenticationIssuer: String? = null,

Expand Down Expand Up @@ -162,4 +167,26 @@ data class HomeServerCapabilities(
const val ROOM_CAP_KNOCK = "knock"
const val ROOM_CAP_RESTRICTED = "restricted"
}

fun getLogoutDeviceURL(deviceId: String): String? {
if (externalAccountManagementUrl == null) {
return null
}

// default to the stable value:
var action = "org.matrix.device_delete"
externalAccountManagementSupportedActions?.also { actions ->
if (actions.contains("org.matrix.device_delete")) {
// server supports stable version so use it
} else if (actions.contains("org.matrix.session_end")) {
// earlier version of MSC4191:
action = "org.matrix.session_end"
} else if (actions.contains("session_end")) {
// previous unspecified version
action = "session_end"
}
}

return externalAccountManagementUrl.removeSuffix("/") + "?action=${action}&device_id=${deviceId}"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,11 @@ internal class DefaultAuthenticationService @Inject constructor(
}

// unstable MSC3824 action param
appendParamToUrl("org.matrix.msc3824.action", action.toString())
// This can be removed once servers have been updated to support the stable one.
appendParamToUrl("org.matrix.msc3824.action", action.value)

// stable param:
appendParamToUrl("action", action.value)
}
}

Expand Down Expand Up @@ -297,8 +301,8 @@ internal class DefaultAuthenticationService @Inject constructor(
authAPI.getLoginFlows()
}

// If an m.login.sso flow is present that is flagged as being for MSC3824 OIDC compatibility then we only return that flow
val oidcCompatibilityFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.sso" && it.delegatedOidcCompatibility == true }
// If an m.login.sso flow is present that is flagged as being for MSC3824 OAuth compatibility then we only return that flow
val oidcCompatibilityFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.sso" && it.delegatedOidcCompatibility }
val flows = if (oidcCompatibilityFlow != null) listOf(oidcCompatibilityFlow) else loginFlowResponse.flows

val supportsGetLoginTokenFlow = loginFlowResponse.flows.orEmpty().firstOrNull { it.type == "m.login.token" && it.getLoginToken == true } != null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package org.matrix.android.sdk.internal.auth.data
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import org.matrix.android.sdk.api.auth.data.SsoIdentityProvider
import org.matrix.android.sdk.api.extensions.orFalse

@JsonClass(generateAdapter = true)
internal data class LoginFlowResponse(
Expand Down Expand Up @@ -46,12 +47,20 @@ internal data class LoginFlow(
val ssoIdentityProvider: List<SsoIdentityProvider>? = null,

/**
* Whether this login flow is preferred for OIDC-aware clients.
* Whether this login flow is preferred for OAuth 2.0-aware clients like we are.
*
* See [MSC3824](https://github.com/matrix-org/matrix-spec-proposals/pull/3824)
*/
@Json(name = "oauth_aware_preferred")
val oauthAwarePreferred: Boolean? = null,

/**
* Unstable name from MSC3824.
*
*/
@Deprecated("Use oauthAwarePreferred instead")
@Json(name = "org.matrix.msc3824.delegated_oidc_compatibility")
val delegatedOidcCompatibility: Boolean? = null,
val unstableDelegatedOidcCompatibility: Boolean? = null,

/**
* Whether a login flow of type m.login.token could accept a token issued using /login/get_token.
Expand All @@ -60,4 +69,7 @@ internal data class LoginFlow(
*/
@Json(name = "get_login_token")
val getLoginToken: Boolean? = null
)
) {
@Suppress("DEPRECATION") val delegatedOidcCompatibility: Boolean
get() = this.oauthAwarePreferred.orFalse() || this.unstableDelegatedOidcCompatibility.orFalse()
}
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,14 @@ internal class OlmMachine @Inject constructor(
val events = adapter.toJson(toDevice ?: ToDeviceSyncResponse())

// field pass in the list of unused fallback keys here
val receiveSyncChanges = inner.receiveSyncChanges(events, devices, counts, deviceUnusedFallbackKeyTypes, nextBatch ?: "")
val receiveSyncChanges = inner.receiveSyncChanges(
events = events,
deviceChanges = devices,
keyCounts = counts,
unusedFallbackKeys = deviceUnusedFallbackKeyTypes,
nextBatchToken = nextBatch ?: "",
decryptionSettings = DecryptionSettings(TrustRequirement.UNTRUSTED),
)

val outAdapter = moshi.adapter(Event::class.java)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo053
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo054
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo055
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo056
import org.matrix.android.sdk.internal.database.migration.MigrateSessionTo057
import org.matrix.android.sdk.internal.util.Normalizer
import org.matrix.android.sdk.internal.util.database.MatrixRealmMigration
import javax.inject.Inject
Expand All @@ -81,7 +82,7 @@ internal class RealmSessionStoreMigration @Inject constructor(
private val normalizer: Normalizer
) : MatrixRealmMigration(
dbName = "Session",
schemaVersion = 56L,
schemaVersion = 57L,
) {
/**
* Forces all RealmSessionStoreMigration instances to be equal.
Expand Down Expand Up @@ -147,5 +148,6 @@ internal class RealmSessionStoreMigration @Inject constructor(
if (oldVersion < 54) MigrateSessionTo054(realm).perform()
if (oldVersion < 55) MigrateSessionTo055(realm).perform()
if (oldVersion < 56) MigrateSessionTo056(realm).perform()
if (oldVersion < 57) MigrateSessionTo057(realm).perform()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ internal object HomeServerCapabilitiesMapper {
canRemotelyTogglePushNotificationsOfDevices = entity.canRemotelyTogglePushNotificationsOfDevices,
canRedactRelatedEvents = entity.canRedactEventWithRelations,
externalAccountManagementUrl = entity.externalAccountManagementUrl,
externalAccountManagementSupportedActions = entity.externalAccountManagementSupportedActions?.split(","),
authenticationIssuer = entity.authenticationIssuer,
disableNetworkConstraint = entity.disableNetworkConstraint,
canUseAuthenticatedMedia = entity.canUseAuthenticatedMedia,
Expand Down
Loading
Loading