Bet Creation Screen, starting Question Tab
continuous-integration/drone/push Build is passing Details

pull/3/head
Arthur VALIN 2 years ago
parent 16f3a5808f
commit 6f9f6e5be0

@ -3,11 +3,9 @@ package fr.iut.alldev.allin.ui.bet.components
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.material.ripple.LocalRippleTheme
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Alignment.Companion.CenterHorizontally import androidx.compose.ui.Alignment.Companion.CenterHorizontally
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -22,7 +20,6 @@ import fr.iut.alldev.allin.ui.core.RainbowButton
import fr.iut.alldev.allin.ui.core.bet.BetDateTimeRow import fr.iut.alldev.allin.ui.core.bet.BetDateTimeRow
import fr.iut.alldev.allin.ui.core.bet.BetProfilePictureRow import fr.iut.alldev.allin.ui.core.bet.BetProfilePictureRow
import fr.iut.alldev.allin.ui.core.bet.BetTitleHeader import fr.iut.alldev.allin.ui.core.bet.BetTitleHeader
import fr.iut.alldev.allin.ui.theme.AllInRippleTheme
import fr.iut.alldev.allin.ui.theme.AllInTheme import fr.iut.alldev.allin.ui.theme.AllInTheme
@Composable @Composable
@ -78,15 +75,11 @@ fun BetScreenCard(
color = AllInTheme.themeColors.on_background_2 color = AllInTheme.themeColors.on_background_2
) )
} }
CompositionLocalProvider( RainbowButton(
LocalRippleTheme provides AllInRippleTheme, modifier = Modifier.padding(6.dp),
){ text = stringResource(id = R.string.Participate),
RainbowButton( onClick = onClickParticipate
modifier = Modifier.padding(6.dp), )
text = stringResource(id = R.string.Participate),
onClick = onClickParticipate
)
}
} }
} }
} }

@ -3,7 +3,7 @@ package fr.iut.alldev.allin.ui.betcreation
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -16,11 +16,23 @@ import fr.iut.alldev.allin.ui.core.RainbowButton
import fr.iut.alldev.allin.ui.core.SectionElement import fr.iut.alldev.allin.ui.core.SectionElement
@Composable @Composable
fun BetCreationScreen() { fun BetCreationScreen(
) {
var theme by remember{
mutableStateOf("")
}
var phrase by remember{
mutableStateOf("")
}
var isPublic by remember{
mutableStateOf(true)
}
Box( Box(
Modifier Modifier
.fillMaxSize() .fillMaxSize()
.padding(horizontal = 30.dp, vertical = 20.dp) .padding(20.dp)
) { ) {
AllInSections( AllInSections(
modifier = Modifier modifier = Modifier
@ -28,7 +40,14 @@ fun BetCreationScreen() {
.fillMaxSize(), .fillMaxSize(),
sections = listOf( sections = listOf(
SectionElement(stringResource(id = R.string.Question)){ SectionElement(stringResource(id = R.string.Question)){
BetCreationScreenQuestionTab() BetCreationScreenQuestionTab(
isPublic = isPublic,
setIsPublic = { isPublic = it },
betPhrase = phrase,
setBetPhrase = { phrase = it },
betTheme = theme,
setBetTheme = { theme = it }
)
}, },
SectionElement(stringResource(id = R.string.Answer)){ SectionElement(stringResource(id = R.string.Answer)){
BetCreationScreenAnswerTab() BetCreationScreenAnswerTab()

@ -0,0 +1,31 @@
package fr.iut.alldev.allin.ui.betcreation.components
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import fr.iut.alldev.allin.ui.theme.AllInTheme
@Composable
fun BetCreationScreenBottomText(
text: String,
modifier: Modifier = Modifier
) {
Text(
text = text,
color = AllInTheme.colors.allIn_Purple,
fontWeight = FontWeight.Bold,
style = AllInTheme.typography.h2,
modifier = modifier.alpha(.5f)
)
}
@Preview
@Composable
private fun BetCreationScreenBottomTextPreview() {
AllInTheme {
BetCreationScreenBottomText("Lorem Ipsum...")
}
}

@ -1,11 +1,30 @@
package fr.iut.alldev.allin.ui.betcreation.tabs package fr.iut.alldev.allin.ui.betcreation.tabs
import androidx.compose.material3.Text import android.util.Log
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.QuestionAnswer
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import fr.iut.alldev.allin.R import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.ui.core.AllInTextAndIcon
@Composable @Composable
fun BetCreationScreenAnswerTab() { fun BetCreationScreenAnswerTab() {
Text(text = stringResource(id = R.string.Answer)) Column(
Modifier
.fillMaxSize()
.padding(20.dp)
) {
AllInTextAndIcon(
text = stringResource(id = R.string.Answer),
icon = Icons.Outlined.QuestionAnswer
){
Log.d("ALLINNN", "AAAA")
}
}
} }

@ -1,43 +1,116 @@
package fr.iut.alldev.allin.ui.betcreation.tabs package fr.iut.alldev.allin.ui.betcreation.tabs
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.height import androidx.compose.foundation.relocation.BringIntoViewRequester
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.HelpOutline
import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.filled.Lock
import androidx.compose.material.icons.filled.Public import androidx.compose.material.icons.filled.Public
import androidx.compose.material3.Text
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import fr.iut.alldev.allin.R import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.ui.betcreation.components.BetCreationScreenBottomText
import fr.iut.alldev.allin.ui.core.AllInIconChip import fr.iut.alldev.allin.ui.core.AllInIconChip
import fr.iut.alldev.allin.ui.core.AllInTextAndIcon
import fr.iut.alldev.allin.ui.core.AllInTextField
import fr.iut.alldev.allin.ui.theme.AllInTheme
@OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun BetCreationScreenQuestionTab() { fun BetCreationScreenQuestionTab(
Column(Modifier.padding(20.dp)){ betTheme: String,
var isPublic by remember{ setBetTheme: (String)->Unit,
mutableStateOf(true) betPhrase: String,
} setBetPhrase: (String)->Unit,
Text(text = stringResource(id = R.string.Question)) isPublic: Boolean,
Spacer(modifier = Modifier.height(7.dp)) setIsPublic: (Boolean)->Unit
AllInIconChip( ) {
text = "Public", val bringIntoViewRequester = remember { BringIntoViewRequester() }
leadingIcon = Icons.Default.Public, Column(
onClick = { Modifier
isPublic = true .fillMaxSize()
}, .padding(20.dp)
isSelected = isPublic ){
AllInTextAndIcon(
text = stringResource(id = R.string.Theme),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
onClick = {}
)
AllInTextField(
placeholder = stringResource(id = R.string.Theme_placeholder),
value = betPhrase,
onValueChange = setBetPhrase,
bringIntoViewRequester = bringIntoViewRequester,
borderColor = AllInTheme.colors.white,
maxChar = 20,
placeholderFontSize = 13.sp,
modifier = Modifier.fillMaxWidth()
)
Spacer(modifier = Modifier.height(12.dp))
AllInTextAndIcon(
text = stringResource(id = R.string.Bet_Phrase),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
onClick = {}
)
AllInTextField(
placeholder = stringResource(id = R.string.Bet_Phrase_placeholder),
value = betTheme,
borderColor = AllInTheme.colors.white,
onValueChange = setBetTheme,
bringIntoViewRequester = bringIntoViewRequester,
multiLine = true,
maxChar = 100,
placeholderFontSize = 13.sp,
modifier = Modifier
.fillMaxWidth()
.height(100.dp)
) )
AllInIconChip( Spacer(modifier = Modifier.height(35.dp))
text = "Privé", AllInTextAndIcon(
leadingIcon = Icons.Default.Lock, text = stringResource(id = R.string.Bet_privacy),
onClick = { icon = Icons.AutoMirrored.Outlined.HelpOutline,
isPublic = false modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
}, onClick = {}
isSelected = !isPublic
) )
Row(
horizontalArrangement = Arrangement.spacedBy(8.dp)
){
AllInIconChip(
text = stringResource(id = R.string.Public),
leadingIcon = Icons.Default.Public,
onClick = {
setIsPublic(true)
},
isSelected = isPublic
)
AllInIconChip(
text = stringResource(id = R.string.Private),
leadingIcon = Icons.Default.Lock,
onClick = {
setIsPublic(false)
},
isSelected = !isPublic
)
}
Spacer(modifier = Modifier.height(52.dp))
Column(
verticalArrangement = Arrangement.spacedBy(17.dp)
) {
if(isPublic){
BetCreationScreenBottomText(text = stringResource(id = R.string.public_bottom_text_1))
BetCreationScreenBottomText(text = stringResource(id = R.string.public_bottom_text_2))
}else{
BetCreationScreenBottomText(text = stringResource(id = R.string.private_bottom_text_1))
BetCreationScreenBottomText(text = stringResource(id = R.string.private_bottom_text_2))
BetCreationScreenBottomText(text = stringResource(id = R.string.private_bottom_text_3))
}
}
} }
} }

@ -0,0 +1,18 @@
package fr.iut.alldev.allin.ui.core
import androidx.compose.material.ripple.LocalRippleTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.graphics.Color
import fr.iut.alldev.allin.ui.theme.AllInRippleTheme
@Composable
fun AllInRipple(
color: Color,
content: @Composable ()->Unit
) {
CompositionLocalProvider(
LocalRippleTheme provides AllInRippleTheme(color),
content = content
)
}

@ -1,16 +1,22 @@
package fr.iut.alldev.allin.ui.core package fr.iut.alldev.allin.ui.core
import android.content.res.Configuration import android.content.res.Configuration
import androidx.compose.foundation.layout.Arrangement import androidx.compose.animation.core.Spring
import androidx.compose.foundation.layout.Column import androidx.compose.animation.core.spring
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.gestures.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import fr.iut.alldev.allin.ui.theme.AllInTheme import fr.iut.alldev.allin.ui.theme.AllInTheme
@ -19,15 +25,56 @@ class SectionElement(
val content: @Composable ()->Unit val content: @Composable ()->Unit
) )
enum class DragAnchors(val fraction: Float) {
Start(-2f),
Center(0f),
End(2f),
}
@OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun AllInSections( fun AllInSections(
sections: List<SectionElement>, sections: List<SectionElement>,
interSectionsPadding: Dp = 56.dp, interSectionsPadding: Dp = 56.dp,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
var selected by remember{ var selected by remember {
mutableStateOf(sections.firstOrNull()) mutableStateOf(sections.firstOrNull())
} }
var wasSwiped by remember{
mutableStateOf(false)
}
val density = LocalDensity.current
val draggableState = remember {
AnchoredDraggableState(
initialValue = DragAnchors.Center,
positionalThreshold = { distance: Float -> distance * .5f },
velocityThreshold = { with(density) { 50.dp.toPx() } },
animationSpec = spring(
dampingRatio = 0.66f,
stiffness = Spring.StiffnessMediumLow,
),
){
val idx = sections.indexOf(selected)
val add = when(it.fraction){
DragAnchors.End.fraction-> {
-1
}
DragAnchors.Start.fraction-> {
1
}
else -> 0
}
selected=sections.getOrElse(idx+add){
sections[idx]
}
if(selected!=sections[idx]){
wasSwiped=true
}
false
}
}
Column( Column(
modifier = modifier, modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
@ -43,7 +90,46 @@ fun AllInSections(
) )
} }
} }
selected?.content?.let { it() }
Box(
Modifier
.wrapContentSize()
.anchoredDraggable(draggableState, Orientation.Horizontal)
.onSizeChanged { layoutSize ->
val dragEndPoint = layoutSize.width
draggableState.updateAnchors(
DraggableAnchors {
DragAnchors
.values()
.forEach { anchor ->
anchor at dragEndPoint * anchor.fraction
}
}
)
},
){
Box(
Modifier
.wrapContentSize()
.offset {
val offset =
if (
wasSwiped
) {
if (!draggableState.isAnimationRunning) {
wasSwiped = false
}
-draggableState.offset.toInt()
} else {
draggableState.offset.toInt()
}
IntOffset(x = offset, y = 0)
}
){
selected?.content?.let { it() }
}
}
} }
} }

@ -0,0 +1,71 @@
package fr.iut.alldev.allin.ui.core
import android.content.res.Configuration
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.HelpOutline
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import fr.iut.alldev.allin.ui.theme.AllInTheme
@Composable
fun AllInTextAndIcon(
text: String,
icon: ImageVector,
modifier: Modifier = Modifier,
onClick: ()->Unit
) {
val interactionSource = remember { MutableInteractionSource() }
Row(
modifier = modifier
.clickable(
interactionSource = interactionSource,
indication = null,
onClick = onClick
),
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = text,
style = AllInTheme.typography.h2,
fontWeight = FontWeight.Bold,
fontSize = 15.sp,
color = AllInTheme.themeColors.on_main_surface
)
Spacer(modifier = Modifier.width(5.dp))
Icon(
imageVector = icon,
contentDescription = null,
tint = AllInTheme.themeColors.on_main_surface,
modifier = Modifier
.size(15.dp)
.alpha(.8f)
)
}
}
@Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun AllInTextAndIconPreview() {
AllInTheme {
AllInTextAndIcon(text = "Texte", icon = Icons.AutoMirrored.Outlined.HelpOutline) {
}
}
}

@ -2,7 +2,6 @@ package fr.iut.alldev.allin.ui.core
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.relocation.BringIntoViewRequester import androidx.compose.foundation.relocation.BringIntoViewRequester
import androidx.compose.foundation.shape.AbsoluteRoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@ -12,6 +11,7 @@ import androidx.compose.material3.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
@ -20,9 +20,12 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import fr.iut.alldev.allin.ui.theme.AllInTheme import fr.iut.alldev.allin.ui.theme.AllInTheme
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import racra.compose.smooth_corner_rect_library.AbsoluteSmoothCornerShape
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
@ -34,11 +37,14 @@ fun AllInTextField(
enabled: Boolean = true, enabled: Boolean = true,
trailingIcon: ImageVector? = null, trailingIcon: ImageVector? = null,
trailingContent: @Composable (() -> Unit)? = null, trailingContent: @Composable (() -> Unit)? = null,
placeholderFontSize: TextUnit = 18.sp,
multiLine: Boolean = false,
onValueChange: (String)->Unit, onValueChange: (String)->Unit,
bringIntoViewRequester: BringIntoViewRequester, bringIntoViewRequester: BringIntoViewRequester,
visualTransformation: VisualTransformation = VisualTransformation.None, visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardType: KeyboardType = KeyboardType.Text, keyboardType: KeyboardType = KeyboardType.Text,
keyboardActions: KeyboardActions = KeyboardActions.Default keyboardActions: KeyboardActions = KeyboardActions.Default,
borderColor: Color = AllInTheme.colors.allIn_LightGrey300
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
var hasFocus by remember { mutableStateOf(false) } var hasFocus by remember { mutableStateOf(false) }
@ -51,8 +57,8 @@ fun AllInTextField(
textFieldValue = TextFieldValue(text = value, selection = TextRange(value.length)) textFieldValue = TextFieldValue(text = value, selection = TextRange(value.length))
}) })
OutlinedTextField( OutlinedTextField(
value = textFieldValue,
modifier = modifier modifier = modifier
.onFocusChanged { .onFocusChanged {
hasFocus = it.hasFocus hasFocus = it.hasFocus
@ -63,7 +69,7 @@ fun AllInTextField(
} }
}, },
visualTransformation = visualTransformation, visualTransformation = visualTransformation,
value = textFieldValue, singleLine = !multiLine,
onValueChange = { onValueChange = {
if(maxChar==null || it.text.length<=maxChar) { if(maxChar==null || it.text.length<=maxChar) {
textFieldValue = it textFieldValue = it
@ -73,10 +79,10 @@ fun AllInTextField(
placeholder = { placeholder = {
Text( Text(
text = placeholder, text = placeholder,
fontSize = 18.sp, fontSize = placeholderFontSize,
style = AllInTheme.typography.r, style = AllInTheme.typography.r,
color = AllInTheme.colors.allIn_LightGrey300, color = AllInTheme.colors.allIn_LightGrey300,
maxLines = 1, maxLines = if(multiLine) 3 else 1,
overflow = TextOverflow.Ellipsis overflow = TextOverflow.Ellipsis
) )
}, },
@ -90,20 +96,18 @@ fun AllInTextField(
} }
}, },
textStyle = AllInTheme.typography.r, textStyle = AllInTheme.typography.r,
singleLine = true,
enabled = enabled, enabled = enabled,
keyboardOptions = KeyboardOptions(keyboardType = keyboardType), keyboardOptions = KeyboardOptions(keyboardType = keyboardType),
keyboardActions = keyboardActions, keyboardActions = keyboardActions,
shape = AbsoluteRoundedCornerShape(20), shape = AbsoluteSmoothCornerShape(10.dp, 100),
colors = OutlinedTextFieldDefaults.colors( colors = OutlinedTextFieldDefaults.colors(
cursorColor = AllInTheme.colors.allIn_Dark, cursorColor = AllInTheme.colors.allIn_Dark,
focusedBorderColor = AllInTheme.colors.allIn_LightGrey300, focusedBorderColor = borderColor,
unfocusedBorderColor = AllInTheme.colors.allIn_LightGrey300, unfocusedBorderColor = borderColor,
focusedTextColor = AllInTheme.colors.allIn_Dark, focusedTextColor = AllInTheme.colors.allIn_Dark,
unfocusedTextColor = AllInTheme.colors.allIn_Dark, unfocusedTextColor = AllInTheme.colors.allIn_Dark,
focusedContainerColor = AllInTheme.colors.white, focusedContainerColor = AllInTheme.colors.white,
unfocusedContainerColor = AllInTheme.colors.white unfocusedContainerColor = AllInTheme.colors.white
) )
) )
} }
@ -189,3 +193,18 @@ private fun AllInTextFieldPasswordPreview() {
) )
} }
} }
@OptIn(ExperimentalFoundationApi::class)
@Preview
@Composable
private fun AllInTextFieldMultilinePreview() {
AllInTheme {
AllInTextField(
placeholder = "David sera il absent le Lundi matin en cours ?",
value = "",
onValueChange = { },
multiLine = true,
bringIntoViewRequester = BringIntoViewRequester()
)
}
}

@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -17,35 +18,38 @@ fun RainbowButton(
text: String, text: String,
onClick: ()->Unit, onClick: ()->Unit,
enabled: Boolean = true, enabled: Boolean = true,
rippleColor: Color = AllInTheme.colors.allIn_Blue,
modifier: Modifier = Modifier modifier: Modifier = Modifier
) { ) {
AllInCard( AllInRipple(rippleColor) {
borderWidth = if(enabled) 1.dp else 2.dp, AllInCard(
onClick = onClick, borderWidth = if (enabled) 1.dp else 2.dp,
modifier = modifier, onClick = onClick,
enabled = enabled modifier = modifier,
) { enabled = enabled
val textStyle = ) {
with(AllInTheme.typography.h2){ val textStyle =
if(enabled){ with(AllInTheme.typography.h2) {
copy( if (enabled) {
brush = AllInTheme.colors.allIn_TextGradient copy(
) brush = AllInTheme.colors.allIn_TextGradient
}else{ )
copy( } else {
color = AllInTheme.themeColors.disabled_border copy(
) color = AllInTheme.themeColors.disabled_border
)
}
} }
} Text(
Text( text = text,
text = text, textAlign = TextAlign.Center,
textAlign = TextAlign.Center, style = textStyle,
style = textStyle, fontSize = 30.sp,
fontSize = 30.sp, modifier = Modifier
modifier = Modifier .padding(vertical = 20.dp)
.padding(vertical = 20.dp) .fillMaxWidth(),
.fillMaxWidth(),
) )
}
} }
} }

@ -154,9 +154,11 @@ object AllInTheme {
} }
object AllInRippleTheme : RippleTheme { class AllInRippleTheme(
val color: Color,
) : RippleTheme {
@Composable @Composable
override fun defaultColor(): Color = AllInTheme.colors.allIn_Blue override fun defaultColor(): Color = color
@Composable @Composable
override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha( override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha(

@ -37,9 +37,25 @@
<string name="Question">Question</string> <string name="Question">Question</string>
<string name="Answer">Réponse</string> <string name="Answer">Réponse</string>
<string name="Publish">Publier le bet</string> <string name="Publish">Publier le bet</string>
<string name="Theme">Thème</string>
<string name="Theme_placeholder">Études, sport, soirée…</string>
<string name="Bet_Phrase">Phrase du bet</string>
<string name="Bet_Phrase_placeholder">David sera-il absent lundi matin en cours ?</string>
<string name="End_registration_date">Date de fin des inscriptions</string>
<string name="End_bet_date">Date de fin du BET</string>
<string name="Bet_privacy">Confidentialité du bet</string>
<string name="n_friends_available">%d amis disponibles</string>
<string name="public_bottom_text_1">Votre bet sera visible par tous les utilisateurs.</string>
<string name="public_bottom_text_2">Tout le monde pourra rejoindre le BET.</string>
<string name="private_bottom_text_1">Votre bet sera visible uniquement par vos amis.</string>
<string name="private_bottom_text_2">Seulement vos amis pourront rejoindre le bet.</string>
<string name="private_bottom_text_3">Vous pourrez inviter des amis à tout moment pendant la période dinscription.</string>
<string name="yes_no">Oui / Non</string>
<string name="custom_answers">Réponses personnalisées</string>
<!--Bet Page--> <!--Bet Page-->
<string name="Popular">Populaire</string> <string name="Popular">Populaire</string>
<string name="Public">Public</string> <string name="Public">Public</string>
<string name="Private">Privé</string>
<string name="Invitation">Invitation</string> <string name="Invitation">Invitation</string>
<string name="Current">En cours</string> <string name="Current">En cours</string>
<string name="Finished">Terminés</string> <string name="Finished">Terminés</string>

@ -42,9 +42,25 @@
<string name="Question">Question</string> <string name="Question">Question</string>
<string name="Answer">Answer</string> <string name="Answer">Answer</string>
<string name="Publish">Publish the bet</string> <string name="Publish">Publish the bet</string>
<string name="Theme">Theme</string>
<string name="Theme_placeholder">Studies, sports, party…</string>
<string name="Bet_Phrase">Bet phrase</string>
<string name="Bet_Phrase_placeholder">Will David be missing this Monday in class ?</string>
<string name="End_registration_date">Registration end date</string>
<string name="End_bet_date">Bet end date</string>
<string name="Bet_privacy">Bet privacy</string>
<string name="n_friends_available">%d friends available</string>
<string name="public_bottom_text_1">Your bet will be visible by all the users.</string>
<string name="public_bottom_text_2">Everyone will be able to join the bet.</string>
<string name="private_bottom_text_1">Your bet will only be visible by your friends.</string>
<string name="private_bottom_text_2">Only your friends will be able to join the bet.</string>
<string name="private_bottom_text_3">You can invite friends at any moment during the registration period.</string>
<string name="yes_no">Yes / No</string>
<string name="custom_answers">Custom answers</string>
<!--Bet Page--> <!--Bet Page-->
<string name="Popular">Popular</string> <string name="Popular">Popular</string>
<string name="Public">Public</string> <string name="Public">Public</string>
<string name="Private">Private</string>
<string name="Invitation">Invitation</string> <string name="Invitation">Invitation</string>
<string name="Current">Current</string> <string name="Current">Current</string>
<string name="Finished">Finished</string> <string name="Finished">Finished</string>

Loading…
Cancel
Save