Bet Creation Screen : Corrections
continuous-integration/drone/push Build is passing Details

pull/3/head
Arthur VALIN 2 years ago
parent 1d790ad923
commit e32bc5d829

@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.betcreation
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
@ -26,12 +27,12 @@ import java.time.ZonedDateTime
fun BetCreationScreen(
) {
val interactionSource = remember { MutableInteractionSource() }
var theme by remember{ mutableStateOf("") }
var phrase by remember{ mutableStateOf("") }
val (registerDate, setRegisterDate) = remember { mutableStateOf<ZonedDateTime>(ZonedDateTime.now()) }
val (registerTime, setRegisterTime) = remember { mutableStateOf<ZonedDateTime>(ZonedDateTime.now()) }
val (betDate, setBetDate) = remember { mutableStateOf<ZonedDateTime>(ZonedDateTime.now()) }
val (betTime, setBetTime) = remember { mutableStateOf<ZonedDateTime>(ZonedDateTime.now()) }
var isPublic by remember{ mutableStateOf(true) }
val betTypes = remember { BetType.values().toList() }
val selectedFriends = remember { mutableListOf<Int>() }
@ -86,12 +87,11 @@ fun BetCreationScreen(
selectedFriends = selectedFriends,
registerDate = registerDate,
betDate = betDate,
registerTime = registerTime,
betTime = betTime,
setRegisterDateDialog = { setRegisterDatePicker(it) },
setEndDateDialog = { setEndDatePicker(it) },
setRegisterTimeDialog = { setRegisterTimePicker(it) },
setEndTimeDialog = { setEndTimePicker(it) },
interactionSource = interactionSource,
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState())
@ -122,14 +122,20 @@ fun BetCreationScreen(
)
}
if (showRegisterDatePicker || showEndDatePicker) {
val dateToEdit = if(showRegisterDatePicker) registerDate else betDate
AllInDatePicker(
currentDate = if(showRegisterDatePicker) registerDate else betDate,
onSelectDate = { date ->
val selectedDate = ZonedDateTime.ofInstant(Instant.ofEpochMilli(date), ZoneId.systemDefault())
val newDate = dateToEdit
.withYear(selectedDate.year)
.withMonth(selectedDate.month.value)
.withDayOfMonth(selectedDate.dayOfMonth)
.withDayOfYear(selectedDate.dayOfYear)
if(showRegisterDatePicker) {
setRegisterDate(selectedDate)
setRegisterDate(newDate)
} else {
setBetDate(selectedDate)
setBetDate(newDate)
}
setRegisterDatePicker(false)
setEndDatePicker(false)
@ -141,7 +147,7 @@ fun BetCreationScreen(
)
}
if (showRegisterTimePicker || showEndTimePicker) {
val timeToEdit = if(showRegisterTimePicker) registerTime else betTime
val timeToEdit = if(showRegisterTimePicker) registerDate else betDate
AllInTimePicker(
hour = timeToEdit.hour,
minutes = timeToEdit.minute,
@ -149,10 +155,10 @@ fun BetCreationScreen(
val time = (timeToEdit)
.withHour(hour)
.withMinute(min)
if(showRegisterDatePicker) {
setRegisterTime(time)
if(showRegisterTimePicker) {
setRegisterDate(time)
} else {
setBetTime(time)
setBetDate(time)
}
setRegisterTimePicker(false)
setEndTimePicker(false)

@ -1,6 +1,7 @@
package fr.iut.alldev.allin.ui.betcreation.tabs
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.relocation.BringIntoViewRequester
import androidx.compose.runtime.*
@ -26,13 +27,12 @@ fun BetCreationScreenQuestionTab(
setIsPublic: (Boolean)->Unit,
registerDate: ZonedDateTime,
betDate: ZonedDateTime,
registerTime: ZonedDateTime,
betTime: ZonedDateTime,
selectedFriends: MutableList<Int>,
setRegisterDateDialog: (Boolean)->Unit,
setEndDateDialog: (Boolean)->Unit,
setRegisterTimeDialog: (Boolean)->Unit,
setEndTimeDialog: (Boolean)->Unit
setEndTimeDialog: (Boolean)->Unit,
interactionSource: MutableInteractionSource
) {
val bringIntoViewRequester = remember { BringIntoViewRequester() }
Column(modifier){
@ -41,25 +41,28 @@ fun BetCreationScreenQuestionTab(
setBetTheme = setBetTheme,
betPhrase = betPhrase,
setBetPhrase = setBetPhrase,
bringIntoViewRequester = bringIntoViewRequester
bringIntoViewRequester = bringIntoViewRequester,
interactionSource = interactionSource
)
Spacer(modifier = Modifier.height(35.dp))
QuestionTabDateTimeSection(
registerDate = registerDate.formatToMediumDate(),
registerTime = registerTime.formatToTime(),
registerTime = registerDate.formatToTime(),
endDate = betDate.formatToMediumDate(),
endTime = betTime.formatToTime(),
endTime = betDate.formatToTime(),
setEndDateDialog = setEndDateDialog,
setRegisterDateDialog = setRegisterDateDialog,
setRegisterTimeDialog = setRegisterTimeDialog,
setEndTimeDialog = setEndTimeDialog
setEndTimeDialog = setEndTimeDialog,
interactionSource = interactionSource,
)
Spacer(modifier = Modifier.height(35.dp))
QuestionTabPrivacySection(
isPublic = isPublic,
setIsPublic = setIsPublic,
nbFriends = nbFriends,
selectedFriends = selectedFriends
selectedFriends = selectedFriends,
interactionSource = interactionSource
)
}
}

@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.betcreation.tabs.sections
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
@ -22,13 +23,15 @@ internal fun QuestionTabDateTimeSection(
registerDate: String,
registerTime: String,
endDate: String,
endTime: String
endTime: String,
interactionSource: MutableInteractionSource
) {
AllInTitleInfo(
text = stringResource(id = R.string.End_registration_date),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
tooltipText = "Bonjour"
tooltipText = stringResource(id = R.string.Register_tooltip),
interactionSource = interactionSource
)
BetCreationScreenDateTimeRow(
date = registerDate,
@ -41,7 +44,8 @@ internal fun QuestionTabDateTimeSection(
text = stringResource(id = R.string.End_bet_date),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
tooltipText = "Bonjour"
tooltipText = stringResource(id = R.string.BetEnd_tooltip),
interactionSource = interactionSource
)
BetCreationScreenDateTimeRow(
date = endDate,

@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.betcreation.tabs.sections
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
@ -24,13 +25,15 @@ fun QuestionTabPrivacySection(
isPublic: Boolean,
setIsPublic: (Boolean)->Unit,
nbFriends: Int,
selectedFriends: MutableList<Int>
selectedFriends: MutableList<Int>,
interactionSource: MutableInteractionSource
) {
AllInTitleInfo(
text = stringResource(id = R.string.Bet_privacy),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
tooltipText = "Généralement une question qui sera répondu par les utilisateurs."
tooltipText = stringResource(id = R.string.Privacy_tooltip),
interactionSource = interactionSource
)
Row(
modifier = Modifier.padding(bottom = 10.dp),

@ -1,6 +1,7 @@
package fr.iut.alldev.allin.ui.betcreation.tabs.sections
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
@ -14,8 +15,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import fr.iut.alldev.allin.R
import fr.iut.alldev.allin.ui.core.AllInTitleInfo
import fr.iut.alldev.allin.ui.core.AllInTextField
import fr.iut.alldev.allin.ui.core.AllInTitleInfo
import fr.iut.alldev.allin.ui.theme.AllInTheme
@OptIn(ExperimentalFoundationApi::class)
@ -25,13 +26,15 @@ internal fun QuestionTabThemePhraseSection(
setBetTheme: (String)->Unit,
betPhrase: String,
setBetPhrase: (String)->Unit,
bringIntoViewRequester: BringIntoViewRequester
bringIntoViewRequester: BringIntoViewRequester,
interactionSource: MutableInteractionSource
) {
AllInTitleInfo(
text = stringResource(id = R.string.Theme),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
tooltipText = "Bonjour"
tooltipText = stringResource(id = R.string.Theme_tooltip),
interactionSource = interactionSource
)
AllInTextField(
placeholder = stringResource(id = R.string.Theme_placeholder),
@ -48,7 +51,8 @@ internal fun QuestionTabThemePhraseSection(
text = stringResource(id = R.string.Bet_Phrase),
icon = Icons.AutoMirrored.Outlined.HelpOutline,
modifier = Modifier.padding(start = 11.dp, bottom = 8.dp),
tooltipText = "Généralement une question qui sera répondu par les utilisateurs."
tooltipText = stringResource(id = R.string.Phrase_tooltip),
interactionSource = interactionSource
)
AllInTextField(
placeholder = stringResource(id = R.string.Bet_Phrase_placeholder),

@ -54,6 +54,8 @@ fun AllInSections(
)
}
}
HorizontalPager(state = pagerState) { page ->
LaunchedEffect(key1 = page){
onLoadSection()

@ -44,7 +44,10 @@ fun AllInTextField(
visualTransformation: VisualTransformation = VisualTransformation.None,
keyboardType: KeyboardType = KeyboardType.Text,
keyboardActions: KeyboardActions = KeyboardActions.Default,
borderColor: Color = AllInTheme.colors.allIn_LightGrey300
borderColor: Color = AllInTheme.themeColors.on_background_2,
containerColor: Color = AllInTheme.themeColors.background,
textColor: Color = AllInTheme.themeColors.on_main_surface,
placeholderColor: Color = AllInTheme.themeColors.on_background_2
) {
val scope = rememberCoroutineScope()
var hasFocus by remember { mutableStateOf(false) }
@ -81,7 +84,7 @@ fun AllInTextField(
text = placeholder,
fontSize = placeholderFontSize,
style = AllInTheme.typography.r,
color = AllInTheme.colors.allIn_LightGrey300,
color = placeholderColor,
maxLines = if(multiLine) 3 else 1,
overflow = TextOverflow.Ellipsis
)
@ -101,13 +104,13 @@ fun AllInTextField(
keyboardActions = keyboardActions,
shape = AbsoluteSmoothCornerShape(10.dp, 100),
colors = OutlinedTextFieldDefaults.colors(
cursorColor = AllInTheme.colors.allIn_Dark,
cursorColor = textColor,
focusedBorderColor = borderColor,
unfocusedBorderColor = borderColor,
focusedTextColor = AllInTheme.colors.allIn_Dark,
unfocusedTextColor = AllInTheme.colors.allIn_Dark,
focusedContainerColor = AllInTheme.colors.white,
unfocusedContainerColor = AllInTheme.colors.white
focusedTextColor = textColor,
unfocusedTextColor = textColor,
focusedContainerColor = containerColor,
unfocusedContainerColor = containerColor
)
)
}

@ -24,7 +24,8 @@ fun AllInTimePicker(
initialMinute = minutes ?: calendar.get(Calendar.MINUTE)
)
DatePickerDialog(
AlertDialog(
onDismissRequest = onDismiss,
confirmButton = {
TextButton(
@ -49,18 +50,21 @@ fun AllInTimePicker(
)
}
},
colors = DatePickerDefaults.colors(
containerColor = AllInTheme.themeColors.main_surface
)
){
text = {
TimePicker(
state = timePickerState,
colors = TimePickerDefaults.colors(
selectorColor = AllInTheme.colors.allIn_Pink,
selectorColor = AllInTheme.colors.allIn_Purple,
containerColor = AllInTheme.themeColors.background,
clockDialColor = AllInTheme.themeColors.background_2,
clockDialUnselectedContentColor = AllInTheme.themeColors.on_main_surface,
clockDialSelectedContentColor = AllInTheme.themeColors.background_2,
)
)
}
},
containerColor = AllInTheme.themeColors.main_surface
)
}
@Preview

@ -1,7 +1,8 @@
package fr.iut.alldev.allin.ui.core
import android.content.res.Configuration
import androidx.compose.foundation.clickable
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@ -22,33 +23,37 @@ 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
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class)
private fun launchTooltip(
scope: CoroutineScope,
tooltipState: TooltipState
){
scope.launch {
tooltipState.show()
}
}
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)
@Composable
fun AllInTitleInfo(
text: String,
tooltipText: String,
icon: ImageVector,
tooltipState: TooltipState = rememberTooltipState(),
modifier: Modifier = Modifier
tooltipState: TooltipState = rememberTooltipState(isPersistent = true),
modifier: Modifier = Modifier,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }
) {
val scope = rememberCoroutineScope()
val interactionSource = remember { MutableInteractionSource() }
Row(
modifier = modifier
.clickable(
.combinedClickable(
interactionSource = interactionSource,
indication = null,
onClick = {
scope.launch {
if(tooltipState.isVisible){
tooltipState.dismiss()
}else{
tooltipState.show()
}
}
}
onClick = { launchTooltip(scope, tooltipState) },
onDoubleClick = { launchTooltip(scope, tooltipState) },
onLongClick = { launchTooltip(scope, tooltipState) },
),
verticalAlignment = Alignment.CenterVertically
) {

@ -1,5 +1,6 @@
package fr.iut.alldev.allin.ui.navigation.drawer
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
@ -153,6 +154,14 @@ fun AllInDrawer(
}
}
}
BackHandler(
enabled = drawerState.isOpen
) {
scope.launch {
drawerState.close()
}
}
}

@ -37,6 +37,11 @@
<string name="Login_title">Te revoilà !</string>
<string name="Login_subtitle">Bon retour parmis nous tu nous as manqué !</string>
<!--Bet Creation Page-->
<string name="Theme_tooltip">Le sujet du bet.</string>
<string name="Phrase_tooltip">Généralement la question à laquelle les participants devront répondre.</string>
<string name="Register_tooltip">Après cette date, plus personne ne pourra s\'inscrire.</string>
<string name="BetEnd_tooltip">Après cette date, les résultats seront annoncés.</string>
<string name="Privacy_tooltip">Détermine qui pourra voir le bet.</string>
<string name="Question">Question</string>
<string name="Answer">Réponse</string>
<string name="Publish">Publier le bet</string>

@ -44,6 +44,11 @@
<string name="Question">Question</string>
<string name="Answer">Answer</string>
<string name="Publish">Publish the bet</string>
<string name="Theme_tooltip">The subject of the bet.</string>
<string name="Phrase_tooltip">Generally the question the participants will answer to.</string>
<string name="Register_tooltip">After this date, nobody will be able to register anymore.</string>
<string name="BetEnd_tooltip">After this date, the result will be announced.</string>
<string name="Privacy_tooltip">Determines who will be able to see the bet.</string>
<string name="Theme">Theme</string>
<string name="Theme_placeholder">Studies, sports, party…</string>
<string name="Bet_Phrase">Bet phrase</string>

Loading…
Cancel
Save