@@ -2,17 +2,19 @@ package cz.muni.fi.rpg.ui.gameMaster
22
33import android.content.Context
44import android.content.Intent
5- import androidx.compose.foundation.layout.Box
5+ import androidx.compose.foundation.layout.Arrangement
66import androidx.compose.foundation.layout.Column
7- import androidx.compose.foundation.layout.aspectRatio
7+ import androidx.compose.foundation.layout.fillMaxSize
88import androidx.compose.foundation.layout.fillMaxWidth
99import androidx.compose.foundation.layout.padding
10+ import androidx.compose.foundation.rememberScrollState
11+ import androidx.compose.foundation.verticalScroll
1012import androidx.compose.material.Button
11- import androidx.compose.material.CircularProgressIndicator
1213import androidx.compose.material.Icon
1314import androidx.compose.material.MaterialTheme
14- import androidx.compose.material.Surface
15+ import androidx.compose.material.Scaffold
1516import androidx.compose.material.Text
17+ import androidx.compose.material.TopAppBar
1618import androidx.compose.runtime.Composable
1719import androidx.compose.runtime.LaunchedEffect
1820import androidx.compose.runtime.collectAsState
@@ -23,9 +25,8 @@ import androidx.compose.ui.platform.LocalContext
2325import androidx.compose.ui.res.painterResource
2426import androidx.compose.ui.res.stringResource
2527import androidx.compose.ui.text.intl.Locale
28+ import androidx.compose.ui.text.style.TextAlign
2629import androidx.compose.ui.text.toUpperCase
27- import androidx.compose.ui.unit.dp
28- import androidx.compose.ui.window.Dialog
2930import com.fasterxml.jackson.databind.json.JsonMapper
3031import com.google.firebase.analytics.FirebaseAnalytics
3132import com.google.firebase.analytics.ktx.analytics
@@ -35,6 +36,10 @@ import com.google.firebase.dynamiclinks.ktx.dynamicLinks
3536import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
3637import com.google.firebase.ktx.Firebase
3738import cz.frantisekmasa.wfrp_master.core.domain.party.Invitation
39+ import cz.frantisekmasa.wfrp_master.core.ui.buttons.CloseButton
40+ import cz.frantisekmasa.wfrp_master.core.ui.dialogs.FullScreenDialog
41+ import cz.frantisekmasa.wfrp_master.core.ui.primitives.FullScreenProgress
42+ import cz.frantisekmasa.wfrp_master.core.ui.primitives.Spacing
3843import cz.frantisekmasa.wfrp_master.core.ui.primitives.VisualOnlyIconDescription
3944import cz.frantisekmasa.wfrp_master.navigation.Route
4045import cz.muni.fi.rpg.R
@@ -43,35 +48,40 @@ import kotlinx.coroutines.flow.MutableStateFlow
4348import kotlinx.coroutines.flow.StateFlow
4449import kotlinx.coroutines.tasks.await
4550import kotlinx.coroutines.withContext
46- import org.koin.core.context.KoinContextHandler
51+ import org.koin.core.context.GlobalContext
4752
4853@Composable
49- internal fun InvitationDialog2 (invitation : Invitation , onDismissRequest : () -> Unit ) {
50- Dialog (onDismissRequest = onDismissRequest) {
51- Surface (shape = MaterialTheme .shapes.medium) {
52- Column (Modifier .padding(20 .dp)) {
53- Text (
54- stringResource(R .string.invitation_code_description),
55- Modifier
56- .fillMaxWidth()
57- .padding(top = 16 .dp),
58- style = MaterialTheme .typography.h6,
54+ internal fun InvitationDialog (invitation : Invitation , onDismissRequest : () -> Unit ) {
55+ FullScreenDialog (onDismissRequest = onDismissRequest) {
56+ Scaffold (
57+ topBar = {
58+ TopAppBar (
59+ navigationIcon = { CloseButton (onClick = onDismissRequest) },
60+ title = { Text (stringResource(R .string.title_invite_players))},
5961 )
60-
62+ }
63+ ) {
64+ Column (
65+ Modifier
66+ .fillMaxSize()
67+ .verticalScroll(rememberScrollState())
68+ .padding(Spacing .bodyPadding),
69+ verticalArrangement = Arrangement .spacedBy(Spacing .small, Alignment .CenterVertically )
70+ ) {
6171 val sharingOptions = sharingOptions(invitation).collectAsState().value
6272
6373 if (sharingOptions == null ) {
64- Box (
65- Modifier
66- .fillMaxWidth()
67- .aspectRatio(1f ),
68- contentAlignment = Alignment .Center
69- ) {
70- CircularProgressIndicator ()
71- }
74+ FullScreenProgress ()
7275 } else {
7376 val context = LocalContext .current
7477
78+ Text (
79+ stringResource(R .string.invitation_code_description),
80+ modifier = Modifier .fillMaxWidth(),
81+ textAlign = TextAlign .Center ,
82+ style = MaterialTheme .typography.caption,
83+ )
84+
7585 QrCode (sharingOptions.json)
7686
7787 Button (
@@ -91,7 +101,7 @@ internal fun InvitationDialog2(invitation: Invitation, onDismissRequest: () -> U
91101
92102@Composable
93103private fun sharingOptions (invitation : Invitation ): StateFlow <SharingOptions ?> {
94- val jsonMapper: JsonMapper = KoinContextHandler .get().get()
104+ val jsonMapper: JsonMapper = GlobalContext .get().get()
95105 val flow = remember { MutableStateFlow <SharingOptions ?>(null ) }
96106
97107 LaunchedEffect (invitation) {
0 commit comments