fix(deps): update dependency androidx.compose.material3:material3 to v1.5.0-alpha15 (#6306)

* fix(deps): update dependency androidx.compose.material3:material3 to v1.5.0-alpha15

* Fix deprecations

* Add bottom sheet workaround

* Fix new lint issues

* Fix and ignore broken tests

* Update screenshots

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Jorge Martín <jorgem@element.io>
Co-authored-by: ElementBot <android@element.io>
This commit is contained in:
renovate[bot] 2026-03-24 11:24:07 +01:00 committed by GitHub
parent a6a63736e7
commit 2f99806603
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 62 additions and 42 deletions

View file

@ -9,6 +9,8 @@
package io.element.android.x
import android.app.Application
import androidx.compose.material3.ComposeMaterial3Flags.isAnchoredDraggableComponentsStrictOffsetCheckEnabled
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.startup.AppInitializer
import androidx.work.Configuration
import dev.zacsweers.metro.createGraphFactory
@ -27,6 +29,7 @@ class ElementXApplication : Application(), DependencyInjectionGraphOwner, Config
.setWorkerFactory(MetroWorkerFactory(graph.workerProviders))
.build()
@OptIn(ExperimentalMaterial3Api::class)
override fun onCreate() {
super.onCreate()
AppInitializer.getInstance(this).apply {
@ -36,5 +39,9 @@ class ElementXApplication : Application(), DependencyInjectionGraphOwner, Config
}
logApplicationInfo(this)
// Disable the strict offset check for anchored draggable components, as it can cause issues with bottom sheets.
// Remove once https://issuetracker.google.com/issues/477038695 is fixed.
isAnchoredDraggableComponentsStrictOffsetCheckEnabled = false
}
}

View file

@ -12,6 +12,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import dev.zacsweers.metro.Inject
import io.element.android.features.logout.api.direct.DirectLogoutEvents
@ -30,17 +31,21 @@ class ChooseSelfVerificationModePresenter(
@Composable
override fun present(): ChooseSelfVerificationModeState {
val hasDevicesToVerifyAgainst by encryptionService.hasDevicesToVerifyAgainst.collectAsState()
val canUseRecoveryKey by encryptionService.recoveryStateStateFlow
.mapState { recoveryState ->
when (recoveryState) {
RecoveryState.WAITING_FOR_SYNC,
RecoveryState.UNKNOWN -> AsyncData.Loading()
RecoveryState.INCOMPLETE -> AsyncData.Success(true)
RecoveryState.ENABLED,
RecoveryState.DISABLED -> AsyncData.Success(false)
val canUseRecoveryKey by produceState<AsyncData<Boolean>>(AsyncData.Uninitialized) {
encryptionService.recoveryStateStateFlow
.mapState { recoveryState ->
when (recoveryState) {
RecoveryState.WAITING_FOR_SYNC,
RecoveryState.UNKNOWN -> AsyncData.Loading()
RecoveryState.INCOMPLETE -> AsyncData.Success(true)
RecoveryState.ENABLED,
RecoveryState.DISABLED -> AsyncData.Success(false)
}
}
}
.collectAsState()
.collect {
value = it
}
}
val buttonsState by remember {
derivedStateOf {
val canUseAnotherDevice = hasDevicesToVerifyAgainst.dataOrNull()

View file

@ -56,7 +56,6 @@ class RoomListViewTest {
eventsRecorder.assertList(
listOf(
RoomListEvent.UpdateVisibleRange(IntRange.EMPTY),
RoomListEvent.UpdateVisibleRange(0..5),
)
)

View file

@ -38,6 +38,7 @@ import io.element.android.tests.testutils.setSafeContent
import io.element.android.wysiwyg.link.Link
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.rules.TestRule
@ -141,6 +142,10 @@ class TimelineViewTest {
eventsRecorder.assertSingle(TimelineEvent.HideShieldDialog)
}
@Ignore(
"performScrollToIndex in compose tests no longer sets LazyListState.isScrollInProgress to true, so the LoadMore event is not emitted." +
"This needs to be reworked to use a different approach to check the LoadMore event was emitted."
)
@Test
fun `scrolling near to the start of the loaded items triggers a pre-fetch`() {
val eventsRecorder = EventsRecorder<TimelineEvent>()

View file

@ -63,6 +63,10 @@ class ChangeRolesViewTest {
),
)
rule.pressBackKey()
// Advance time to let the event be processed, as the search toggle might have some delay (e.g. for the animation)
rule.mainClock.advanceTimeBy(1)
eventsRecorder.assertSingle(ChangeRolesEvent.ToggleSearchActive)
}

View file

@ -120,7 +120,7 @@ androidx_preference = "androidx.preference:preference:1.2.1"
androidx_webkit = "androidx.webkit:webkit:1.15.0"
androidx_compose_bom = { module = "androidx.compose:compose-bom", version.ref = "compose_bom" }
androidx_compose_material3 = { module = "androidx.compose.material3:material3", version = '1.5.0-alpha11' }
androidx_compose_material3 = { module = "androidx.compose.material3:material3", version = '1.5.0-alpha15' }
androidx_compose_material3_windowsizeclass = { module = "androidx.compose.material3:material3-window-size-class" }
androidx_compose_material3_adaptive = "androidx.compose.material3:material3-adaptive-android:1.0.0-alpha06"
androidx_compose_ui = { module = "androidx.compose.ui:ui" }

View file

@ -20,9 +20,9 @@ import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.RoundRect
import androidx.compose.ui.graphics.AndroidPaint
import androidx.compose.ui.graphics.ClipOp
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Paint
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.drawscope.clipPath
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
@ -55,10 +55,10 @@ fun Modifier.blurredShapeShadow(
addRoundRect(RoundRect(Rect(Offset.Zero, size), CornerRadius(cornerRadius.toPx())))
}
val frameworkPaint = android.graphics.Paint()
// Draw the blurred shadow, then cut out the shape from it
clipPath(path, ClipOp.Difference) {
val paint = Paint()
val frameworkPaint = paint.asFrameworkPaint()
val paint = AndroidPaint(frameworkPaint)
if (blurRadius != 0.dp) {
frameworkPaint.maskFilter = BlurMaskFilter(blurRadius.toPx(), BlurMaskFilter.Blur.NORMAL)
}

View file

@ -54,7 +54,7 @@ fun ModalBottomSheet(
tonalElevation: Dp = if (ElementTheme.isLightTheme) 0.dp else BottomSheetDefaults.Elevation,
scrimColor: Color = BottomSheetDefaults.ScrimColor,
dragHandle: @Composable (() -> Unit)? = { BottomSheetDefaults.DragHandle() },
contentWindowInsets: @Composable () -> WindowInsets = { BottomSheetDefaults.windowInsets },
contentWindowInsets: @Composable () -> WindowInsets = { BottomSheetDefaults.modalWindowInsets },
content: @Composable ColumnScope.() -> Unit,
) {
val safeSheetState = if (LocalInspectionMode.current) sheetStateForPreview() else sheetState

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:de47f99903217dbe13518771d78b70ac8d53ec6f636a1d2693adb36f4d552909
size 57454
oid sha256:9c6e4ac872b497e115985a4d9535c3720d3d9189537cfffcd3f3b30033db636b
size 57156

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:302a8d726dadfda8dd336b10404c8046250deeb43d8b8caa0deaa04647dd1bdb
size 55323
oid sha256:70898c5044adbc7bb5a318bf218a551daeb62390d767eb0457774900f52d401a
size 55072

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7455353141ee3d5cd656b6935207f465a22044dbddb6dbc031bf63d8d838c0c6
size 75268
oid sha256:938d7774286e17cda5a154240e13e5bad8c424d0bfce9d0941540f1648039555
size 75040

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4a35b229a3af65a3c5ecdf2e373d7870020dd9194cbc133c3755310e95a0083d
size 57337
oid sha256:ae0de9520beb1ce721797d2cc727494b4e9491fae3d8057133cabd86b70f410d
size 56987

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7a6fbcdf4ab70694b5417141d65e2e58f19a4905191250238c253bb617aec2c8
size 50547
oid sha256:1184bfad29af5a41c0049ade4c7e4da3b7c729e41cc5cb2d54201529f0f4d54b
size 51476

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9c98843d0390cf29ef7877af6c65bff74564f018b92f95c0244f99e612945790
size 34190
oid sha256:45b982e467e1d33f5ad0ef2d5a1712589f378a07c8521ac273f2f40364c9adb8
size 34004

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5029d3fe6b336feeed2240030390d561eec91730d10a5bc09f8668d8d69d6d01
size 26986
oid sha256:12195a28876c3c90b0488edf00046f5b941faa8c7203e60f5ab9317dcbe35cf1
size 25757

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d5aa69df4d7f1e48ca15ed7cba55b42124428aeb9bdd1bc840a81f75a389675a
size 25512
oid sha256:d6ab0c3e8353c2e3ce517065fb66c1fca10d58b96081c0dc7a44d59dd084cb3f
size 24498

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2a169164322e6dbe2e9c89ec175112cc70734fa1fab25c2103bbccafc52ee578
size 32147
oid sha256:e5bd87fa02dda072996cb8b1c927bceca0a7dac0c790e82681b4c1e411523365
size 32310

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c3b8fa8a80cca09f7a50500f2e78f9fbf9f444338b997d392db45eb98acc30eb
size 24235
oid sha256:b456443ad681ee4edcbf5a605f9799062c5482f060506ec0f597056cef5510be
size 24316

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0c9a7d0453d64405e1ba929134c9f45664e6c2278c63e64a69f619fe45a742de
size 23932
oid sha256:7f60460469e16407dc671c08071a03553d2ffa81cde48bed19628f46b86cb778
size 24033

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3ea14b8b16f5df12d0bb011a3a5496ca710506b4882dda83317a083052e91f1a
size 63185
oid sha256:ddd8149f9d7cb4867bdf5f12276d778d2ed56963051961e949f4feb470308fc4
size 63636

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f12959d1d6610679fb551c6526dd8347e3e223f3e246772c5ac8632a80fcf3b8
size 61972
oid sha256:6794c0d21a221b47c9c808339e7eae1195af9504d4ea3f68bede59f3d77cf1c4
size 62497