Fix missing background issue.

This commit is contained in:
Benoit Marty 2024-04-19 17:36:49 +02:00 committed by Benoit Marty
parent 70d7b5a61f
commit 7133b821db
3 changed files with 85 additions and 77 deletions

View file

@ -16,15 +16,15 @@
package io.element.android.features.joinroom.impl package io.element.android.features.joinroom.impl
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -64,38 +64,41 @@ fun JoinRoomView(
onKnockSuccess: () -> Unit, onKnockSuccess: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val gradientBackground = remember { LightGradientBackground() } Box(
HeaderFooterPage( modifier = modifier.fillMaxSize(),
modifier = modifier.background(gradientBackground), ) {
containerColor = Color.Transparent, LightGradientBackground()
paddingValues = PaddingValues(16.dp), HeaderFooterPage(
topBar = { containerColor = Color.Transparent,
JoinRoomTopBar(onBackClicked = onBackPressed) paddingValues = PaddingValues(16.dp),
}, topBar = {
content = { JoinRoomTopBar(onBackClicked = onBackPressed)
JoinRoomContent(contentState = state.contentState) },
}, content = {
footer = { JoinRoomContent(contentState = state.contentState)
JoinRoomFooter( },
state = state, footer = {
onAcceptInvite = { JoinRoomFooter(
state.eventSink(JoinRoomEvents.AcceptInvite) state = state,
}, onAcceptInvite = {
onDeclineInvite = { state.eventSink(JoinRoomEvents.AcceptInvite)
state.eventSink(JoinRoomEvents.DeclineInvite) },
}, onDeclineInvite = {
onJoinRoom = { state.eventSink(JoinRoomEvents.DeclineInvite)
state.eventSink(JoinRoomEvents.JoinRoom) },
}, onJoinRoom = {
onKnockRoom = { state.eventSink(JoinRoomEvents.JoinRoom)
state.eventSink(JoinRoomEvents.KnockRoom) },
}, onKnockRoom = {
onRetry = { state.eventSink(JoinRoomEvents.KnockRoom)
state.eventSink(JoinRoomEvents.RetryFetchingContent) },
} onRetry = {
) state.eventSink(JoinRoomEvents.RetryFetchingContent)
} }
) )
}
)
}
AsyncActionView( AsyncActionView(
async = state.knockAction, async = state.knockAction,

View file

@ -16,17 +16,17 @@
package io.element.android.features.roomaliasresolver.impl package io.element.android.features.roomaliasresolver.impl
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@ -65,23 +65,26 @@ fun RoomAliasResolverView(
latestOnAliasResolved(state.resolveState.data) latestOnAliasResolved(state.resolveState.data)
} }
} }
val gradientBackground = remember { LightGradientBackground() } Box(
HeaderFooterPage( modifier = modifier.fillMaxSize(),
modifier = modifier.background(gradientBackground), ) {
containerColor = Color.Transparent, LightGradientBackground()
paddingValues = PaddingValues(16.dp), HeaderFooterPage(
topBar = { containerColor = Color.Transparent,
RoomAliasResolverTopBar(onBackClicked = onBackPressed) paddingValues = PaddingValues(16.dp),
}, topBar = {
content = { RoomAliasResolverTopBar(onBackClicked = onBackPressed)
RoomAliasResolverContent(state = state) },
}, content = {
footer = { RoomAliasResolverContent(state = state)
RoomAliasResolverFooter( },
state = state, footer = {
) RoomAliasResolverFooter(
} state = state,
) )
}
)
}
} }
@Composable @Composable

View file

@ -16,46 +16,48 @@
package io.element.android.libraries.designsystem.background package io.element.android.libraries.designsystem.background
import androidx.compose.foundation.background import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.geometry.center import androidx.compose.ui.geometry.center
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.RadialGradientShader import androidx.compose.ui.graphics.RadialGradientShader
import androidx.compose.ui.graphics.Shader
import androidx.compose.ui.graphics.ShaderBrush import androidx.compose.ui.graphics.ShaderBrush
import io.element.android.libraries.designsystem.preview.ElementPreview import io.element.android.libraries.designsystem.preview.ElementPreview
import io.element.android.libraries.designsystem.preview.PreviewsDayNight import io.element.android.libraries.designsystem.preview.PreviewsDayNight
class LightGradientBackground( /**
private val firstColor: Color = Color(0x1E0DBD8B), * Light gradient background for Join room screens.
private val secondColor: Color = Color(0x001273EB), */
private val ratio: Float = 642 / 775f, @Composable
) : ShaderBrush() { fun LightGradientBackground(
override fun createShader(size: Size): Shader { modifier: Modifier = Modifier,
backgroundColor: Color = MaterialTheme.colorScheme.background,
firstColor: Color = Color(0x1E0DBD8B),
secondColor: Color = Color(0x001273EB),
ratio: Float = 642 / 775f,
) {
Canvas(
modifier = modifier.fillMaxSize()
) {
val biggerDimension = size.width * 1.98f val biggerDimension = size.width * 1.98f
return RadialGradientShader( val gradientShaderBrush = ShaderBrush(
colors = listOf(firstColor, secondColor), RadialGradientShader(
center = size.center.copy(x = size.width * ratio, y = size.height * ratio), colors = listOf(firstColor, secondColor),
radius = biggerDimension / 2f, center = size.center.copy(x = size.width * ratio, y = size.height * ratio),
colorStops = listOf(0f, 0.95f) radius = biggerDimension / 2f,
colorStops = listOf(0f, 0.95f)
)
) )
drawRect(backgroundColor, size = size)
drawRect(brush = gradientShaderBrush, size = size)
} }
} }
@PreviewsDayNight @PreviewsDayNight
@Composable @Composable
internal fun LightGradientBackgroundPreview() = ElementPreview { internal fun LightGradientBackgroundPreview() = ElementPreview {
val gradientBackground = remember { LightGradientBackground()
LightGradientBackground()
}
Box(
modifier = Modifier
.fillMaxSize()
.background(gradientBackground)
)
} }