Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
7 changes: 7 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
Changes in Element v1.6.52 (2026-03-05)
=======================================

Other changes
-------------
- Bump `jitsi_modile_sdk` to v11.5.1 ([#9124](https://github.com/element-hq/element-android/issues/9124)). This should fix the 16KB page size incompatibility.

Changes in Element v1.6.50 (2026-02-04)
=======================================

Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -96,9 +96,9 @@ allprojects {
}
// Jitsi repo
maven {
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-11.4.0"
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-11.5.1"
// Note: to test Jitsi release you can use a local file like this:
// url "file:///Users/bmarty/workspaces/jitsi_libre_maven/mobile-sdk-10.2.0"
// url "file:///Users/bmarty/workspaces/jitsi_libre_maven/mobile-sdk-11.5.1"
content {
groups.jitsi.regex.each { includeGroupByRegex it }
groups.jitsi.group.each { includeGroup it }
Expand Down
4 changes: 2 additions & 2 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ ext.libs = [
'hiltCompiler' : "com.google.dagger:hilt-compiler:$dagger"
],
element : [
'opusencoder' : "io.element.android:opusencoder:1.1.0",
'wysiwyg' : "io.element.android:wysiwyg:2.38.2"
'opusencoder' : "io.element.android:opusencoder:1.1.2",
'wysiwyg' : "io.element.android:wysiwyg:2.41.1-classic"
],
squareup : [
'moshi' : "com.squareup.moshi:moshi:$moshi",
Expand Down
8 changes: 4 additions & 4 deletions docs/jitsi.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Update the script `./tools/jitsi/build_jitsi_libs.sh` with the tag of the projec

Latest tag can be found from this page: https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-MOBILE-SDKS.md

Currently we are building the version with the tag `mobile-sdk-10.2.0`.
Currently we are building the version with the tag `mobile-sdk-11.5.1`.

#### Run the build script

Expand All @@ -49,15 +49,15 @@ It will build the Jitsi Meet Android library and put every generated files in th
- Update the file `./build.gradle` to use the previously created local Maven repository. Currently we have this line:

```groovy
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-10.2.0"
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-11.5.1"
```

You can uncomment and update the line starting with `// url "file://...` and comment the line starting with `url`, to test the library using the locally generated Maven repository.

- Update the dependency of the Jitsi Meet library in the file `./vector/build.gradle`. Currently we have this line:

```groovy
api('org.jitsi.react:jitsi-meet-sdk:10.2.0')
api('org.jitsi.react:jitsi-meet-sdk:11.5.1')
```

- Perform a gradle sync and build the project
Expand All @@ -82,7 +82,7 @@ If all the tests are passed, you can export the generated Jitsi library to our M
- Update the file `./build.gradle` to use the previously created Maven repository. Currently we have this line:

```groovy
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-10.2.0"
url "https://github.com/element-hq/jitsi_libre_maven/raw/main/mobile-sdk-11.5.1"
```

- Build the project and perform the sanity tests again.
Expand Down
2 changes: 2 additions & 0 deletions fastlane/metadata/android/en-US/changelogs/40106520.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Main changes in this version: updated Jitsi version.
Full changelog: https://github.com/element-hq/element-android/releases
2 changes: 2 additions & 0 deletions library/ui-strings/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2738,6 +2738,8 @@
<string name="review_unverified_sessions_description">Review to ensure your account is safe</string>
<!-- Argument will be replaced by the other session name (e.g, Desktop, mobile) -->
<string name="verify_this_session">Verify the new login accessing your account: %1$s</string>
<string name="verify_this_session_content">As of April 2026 unverified devices will not be able to send and receive messages.</string>
<string name="verify_now">Verify now</string>

<string name="cross_signing_verify_by_text">Manually Verify by Text</string>
<!-- TODO TO BE REMOVED -->
Expand Down
2 changes: 1 addition & 1 deletion matrix-sdk-android/build.gradle
Original file line number Diff line number Diff line change
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.50\""
buildConfigField "String", "SDK_VERSION", "\"1.6.52\""

buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\""
buildConfigField "String", "GIT_SDK_REVISION_UNIX_DATE", "\"${gitRevisionUnixDate()}\""
Expand Down
4 changes: 2 additions & 2 deletions tools/jitsi/build_jitsi_libs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export LIBRE_BUILD=true
cd jitsi-meet

# Get the latest version from the changelog: https://github.com/jitsi/jitsi-meet-release-notes/blob/master/CHANGELOG-MOBILE-SDKS.md
git checkout mobile-sdk-11.4.0
git checkout mobile-sdk-11.5.1

echo
echo "##################################################"
Expand All @@ -52,11 +52,11 @@ npm install
#
#react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output index.android.bundle --assets-dest android/app/src/main/res/

mkdir -p /tmp/jitsi/org/webkit/
./android/scripts/release-sdk.sh /tmp/jitsi/

# Also copy jsc

mkdir -p /tmp/jitsi/org/webkit/
cp -r ./node_modules/jsc-android/dist/org/webkit/android-jsc /tmp/jitsi/org/webkit/

echo
Expand Down
48 changes: 24 additions & 24 deletions tools/release/releaseScript.sh
Original file line number Diff line number Diff line change
Expand Up @@ -147,30 +147,30 @@ printf "\n======================================================================
printf "Uninstalling previous test app if any...\n"
adb -e uninstall im.vector.app.debug.test

printf "\n================================================================================\n"
printf "Running the integration test UiAllScreensSanityTest.allScreensTest()...\n"
./gradlew connectedGplayDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=im.vector.app.ui.UiAllScreensSanityTest

printf "\n================================================================================\n"
printf "Building the app...\n"
./gradlew assembleGplayDebug

printf "\n================================================================================\n"
printf "Uninstalling previous debug app if any...\n"
adb -e uninstall im.vector.app.debug

printf "\n================================================================================\n"
printf "Installing the app...\n"
adb -e install ./vector-app/build/outputs/apk/gplay/debug/vector-gplay-arm64-v8a-debug.apk

printf "\n================================================================================\n"
printf "Running the app...\n"
# TODO This does not work, need to be fixed
adb -e shell am start -n im.vector.app.debug/im.vector.app.features.Alias -a android.intent.action.MAIN -c android.intent.category.LAUNCHER

printf "\n================================================================================\n"
# TODO could build and deploy the APK to any emulator
read -p "Create an account on matrix.org and do some smoke tests that the sanity test does not cover like: 1-1 call, 1-1 video call, Jitsi call for instance. Press enter when it's done."
#printf "\n================================================================================\n"
#printf "Running the integration test UiAllScreensSanityTest.allScreensTest()...\n"
#./gradlew connectedGplayDebugAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=im.vector.app.ui.UiAllScreensSanityTest
#
#printf "\n================================================================================\n"
#printf "Building the app...\n"
#./gradlew assembleGplayDebug
#
#printf "\n================================================================================\n"
#printf "Uninstalling previous debug app if any...\n"
#adb -e uninstall im.vector.app.debug
#
#printf "\n================================================================================\n"
#printf "Installing the app...\n"
#adb -e install ./vector-app/build/outputs/apk/gplay/debug/vector-gplay-arm64-v8a-debug.apk
#
#printf "\n================================================================================\n"
#printf "Running the app...\n"
## TODO This does not work, need to be fixed
#adb -e shell am start -n im.vector.app.debug/im.vector.app.features.Alias -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
#
#printf "\n================================================================================\n"
## TODO could build and deploy the APK to any emulator
#read -p "Create an account on matrix.org and do some smoke tests that the sanity test does not cover like: 1-1 call, 1-1 video call, Jitsi call for instance. Press enter when it's done."

printf "\n================================================================================\n"
printf "Running towncrier...\n"
Expand Down
2 changes: 1 addition & 1 deletion vector-app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ ext.versionMinor = 6
// 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 = 50
ext.versionPatch = 52

static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct'
Expand Down
2 changes: 1 addition & 1 deletion vector/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ dependencies {
implementation "androidx.emoji2:emoji2:1.3.0"

// Jitsi
api('org.jitsi.react:jitsi-meet-sdk:11.4.0') {
api('org.jitsi.react:jitsi-meet-sdk:11.5.1') {
exclude group: 'com.google.firebase'
exclude group: 'com.google.android.gms'
exclude group: 'com.android.installreferrer'
Expand Down
2 changes: 1 addition & 1 deletion vector/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />

<!-- Jitsi SDK is now API26+ -->
<uses-sdk tools:overrideLibrary="com.swmansion.gesturehandler,org.jitsi.meet.sdk,com.oney.WebRTCModule,com.learnium.RNDeviceInfo,com.reactnativecommunity.asyncstorage,com.ocetnik.timer,com.calendarevents,com.reactnativecommunity.netinfo,com.kevinresol.react_native_default_preference,com.rnimmersive,com.rnimmersivemode,com.corbt.keepawake,com.BV.LinearGradient,com.horcrux.svg,com.oblador.performance,com.reactnativecommunity.slider,com.brentvatne.react,com.reactnativecommunity.clipboard,com.swmansion.gesturehandler.react,org.linusu,org.reactnative.maskedview,com.reactnativepagerview,com.swmansion.reanimated,com.th3rdwave.safeareacontext,com.swmansion.rnscreens,org.devio.rn.splashscreen,com.reactnativecommunity.webview,org.wonday.orientation,com.sayem.keepawake,com.splashview,com.facebook.react,com.facebook.hermes" />
<uses-sdk tools:overrideLibrary="com.worklets,com.swmansion.gesturehandler,org.jitsi.meet.sdk,com.oney.WebRTCModule,com.learnium.RNDeviceInfo,com.reactnativecommunity.asyncstorage,com.ocetnik.timer,com.calendarevents,com.reactnativecommunity.netinfo,com.kevinresol.react_native_default_preference,com.rnimmersive,com.rnimmersivemode,com.corbt.keepawake,com.BV.LinearGradient,com.horcrux.svg,com.oblador.performance,com.reactnativecommunity.slider,com.brentvatne.react,com.reactnativecommunity.clipboard,com.swmansion.gesturehandler.react,org.linusu,org.reactnative.maskedview,com.reactnativepagerview,com.swmansion.reanimated,com.th3rdwave.safeareacontext,com.swmansion.rnscreens,org.devio.rn.splashscreen,com.reactnativecommunity.webview,org.wonday.orientation,com.sayem.keepawake,com.splashview,com.facebook.react,com.facebook.hermes" />

<!-- For MicrophoneAccessService -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2026 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/

package im.vector.app.core.ui.views

import android.content.Context
import android.util.AttributeSet
import androidx.constraintlayout.widget.ConstraintLayout
import im.vector.app.R
import im.vector.app.databinding.ViewVerifySessionBannerBinding

class VerifyDeviceBanner @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : ConstraintLayout(context, attrs, defStyleAttr) {
var delegate: Delegate? = null

init {
setupView()
}

private fun setupView() {
inflate(context, R.layout.view_verify_session_banner, this)
val views = ViewVerifySessionBannerBinding.bind(this)
views.learnMore.setOnClickListener { delegate?.onVerificationLearnMoreClicked() }
views.verifyButton.setOnClickListener { delegate?.onVerifySession() }
}

interface Delegate {
fun onVerificationLearnMoreClicked()
fun onVerifySession()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -362,11 +362,13 @@ class HomeActivityViewModel @AssistedInject constructor(
// cross signing keys have been reset
// Trigger a popup to re-verify
// Note: user can be unknown in case of logout
session.getUserOrDefault(session.myUserId)
.toMatrixItem()
.let { user ->
_viewEvents.post(HomeActivityViewEvents.OnCrossSignedInvalidated(user))
}

// This is now handled by the banner in the HomeFragment
// session.getUserOrDefault(session.myUserId)
// .toMatrixItem()
// .let { user ->
// _viewEvents.post(HomeActivityViewEvents.OnCrossSignedInvalidated(user))
// }
}
}

Expand Down Expand Up @@ -441,12 +443,13 @@ class HomeActivityViewModel @AssistedInject constructor(
val is4Ssetup = session.sharedSecretStorageService().isRecoverySetup()
if (hasTargetDeviceToVerifyAgainst || is4Ssetup) {
// New session
_viewEvents.post(
HomeActivityViewEvents.CurrentSessionNotVerified(
session.getUserOrDefault(session.myUserId).toMatrixItem(),
vectorPreferences.isOnRustCrypto() && vectorPreferences.hadExistingLegacyData()
)
)
// This is now handled by the banner in the HomeFragment
// _viewEvents.post(
// HomeActivityViewEvents.CurrentSessionNotVerified(
// session.getUserOrDefault(session.myUserId).toMatrixItem(),
// vectorPreferences.isOnRustCrypto() && vectorPreferences.hadExistingLegacyData()
// )
// )
} else {
_viewEvents.post(
HomeActivityViewEvents.CurrentSessionCannotBeVerified(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ class HomeDetailViewModel @AssistedInject constructor(
observeRoomSummaries()
updatePstnSupportFlag()
observeDataStore()
observeCrossSigningState()
callManager.addProtocolsCheckerListener(this)
session.flow().liveUser(session.myUserId).execute {
copy(
Expand All @@ -101,6 +102,21 @@ class HomeDetailViewModel @AssistedInject constructor(
}
}

private fun observeCrossSigningState() {
session
.flow()
.liveCrossSigningInfo(session.myUserId)
.onEach { info ->
val isVerified = info.getOrNull()?.isTrusted() ?: false
setState {
copy(
isSessionVerified = isVerified,
)
}
}
.launchIn(viewModelScope)
}

private fun observeDataStore() {
vectorDataStore.pushCounterFlow.setOnEach { nbOfPush ->
copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ data class HomeDetailViewState(
val incrementalSyncRequestState: SyncRequestState.IncrementalSyncRequestState? = null,
val pushCounter: Int = 0,
val pstnSupportFlag: Boolean = false,
val forceDialPadTab: Boolean = false
val forceDialPadTab: Boolean = false,
// Set to true by default to avoid glitch
val isSessionVerified: Boolean = true,
) : MavericksState {
val showDialPadTab = forceDialPadTab || pstnSupportFlag
}
Expand Down
Loading
Loading