Skip to content

Commit 9ff6dbb

Browse files
committed
Merge branch 'fix/invite-link' into 'master'
Fix invitation link button See merge request fmasa/wfrp-master!214
2 parents 774f2a9 + 52f2046 commit 9ff6dbb

File tree

7 files changed

+47
-35
lines changed

7 files changed

+47
-35
lines changed

app/src/main/java/cz/muni/fi/rpg/ui/gameMaster/InvitationDialog.kt

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,19 @@ package cz.muni.fi.rpg.ui.gameMaster
22

33
import android.content.Context
44
import android.content.Intent
5-
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Column
7-
import androidx.compose.foundation.layout.aspectRatio
7+
import androidx.compose.foundation.layout.fillMaxSize
88
import androidx.compose.foundation.layout.fillMaxWidth
99
import androidx.compose.foundation.layout.padding
10+
import androidx.compose.foundation.rememberScrollState
11+
import androidx.compose.foundation.verticalScroll
1012
import androidx.compose.material.Button
11-
import androidx.compose.material.CircularProgressIndicator
1213
import androidx.compose.material.Icon
1314
import androidx.compose.material.MaterialTheme
14-
import androidx.compose.material.Surface
15+
import androidx.compose.material.Scaffold
1516
import androidx.compose.material.Text
17+
import androidx.compose.material.TopAppBar
1618
import androidx.compose.runtime.Composable
1719
import androidx.compose.runtime.LaunchedEffect
1820
import androidx.compose.runtime.collectAsState
@@ -23,9 +25,8 @@ import androidx.compose.ui.platform.LocalContext
2325
import androidx.compose.ui.res.painterResource
2426
import androidx.compose.ui.res.stringResource
2527
import androidx.compose.ui.text.intl.Locale
28+
import androidx.compose.ui.text.style.TextAlign
2629
import androidx.compose.ui.text.toUpperCase
27-
import androidx.compose.ui.unit.dp
28-
import androidx.compose.ui.window.Dialog
2930
import com.fasterxml.jackson.databind.json.JsonMapper
3031
import com.google.firebase.analytics.FirebaseAnalytics
3132
import com.google.firebase.analytics.ktx.analytics
@@ -35,6 +36,10 @@ import com.google.firebase.dynamiclinks.ktx.dynamicLinks
3536
import com.google.firebase.dynamiclinks.ktx.shortLinkAsync
3637
import com.google.firebase.ktx.Firebase
3738
import 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
3843
import cz.frantisekmasa.wfrp_master.core.ui.primitives.VisualOnlyIconDescription
3944
import cz.frantisekmasa.wfrp_master.navigation.Route
4045
import cz.muni.fi.rpg.R
@@ -43,35 +48,40 @@ import kotlinx.coroutines.flow.MutableStateFlow
4348
import kotlinx.coroutines.flow.StateFlow
4449
import kotlinx.coroutines.tasks.await
4550
import 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
93103
private 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) {

app/src/main/java/cz/muni/fi/rpg/ui/gameMaster/PartySummaryScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ internal fun PartySummaryScreen(
9999
var invitationDialogVisible by remember { mutableStateOf(false) }
100100

101101
if (invitationDialogVisible) {
102-
InvitationDialog2(
102+
InvitationDialog(
103103
invitation = party.getInvitation(),
104104
onDismissRequest = { invitationDialogVisible = false },
105105
)

app/src/main/java/cz/muni/fi/rpg/ui/gameMaster/QrCode.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import androidx.compose.foundation.Image
66
import androidx.compose.foundation.layout.Box
77
import androidx.compose.foundation.layout.BoxWithConstraints
88
import androidx.compose.foundation.layout.aspectRatio
9+
import androidx.compose.foundation.layout.fillMaxSize
910
import androidx.compose.foundation.layout.fillMaxWidth
1011
import androidx.compose.material.CircularProgressIndicator
1112
import androidx.compose.runtime.Composable
@@ -31,15 +32,15 @@ import kotlinx.coroutines.withContext
3132
internal fun QrCode(data: String) {
3233
BoxWithConstraints(Modifier.fillMaxWidth()) {
3334
var qrCode: ImageBitmap? by remember { mutableStateOf(null) }
34-
val width = constraints.maxWidth
35+
val width = minOf(constraints.maxWidth, constraints.maxHeight)
3536

3637
LaunchedEffect(data, width) {
3738
qrCode = createQrCode(data, width)
3839
}
3940

4041
when (val bitmap = qrCode) {
4142
null -> {
42-
Box(Modifier.fillMaxWidth().aspectRatio(1f), contentAlignment = Alignment.Center) {
43+
Box(Modifier.fillMaxSize().aspectRatio(1f), contentAlignment = Alignment.Center) {
4344
CircularProgressIndicator()
4445
}
4546
}

app/src/main/java/cz/muni/fi/rpg/ui/joinParty/QrCodeScannerAnalyser.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import android.graphics.ImageFormat
55
import androidx.camera.core.ImageAnalysis
66
import androidx.camera.core.ImageProxy
77
import com.google.zxing.BinaryBitmap
8-
import com.google.zxing.NotFoundException
98
import com.google.zxing.PlanarYUVLuminanceSource
9+
import com.google.zxing.ReaderException
1010
import com.google.zxing.common.HybridBinarizer
1111
import com.google.zxing.qrcode.QRCodeReader
1212
import timber.log.Timber
@@ -60,7 +60,7 @@ class QrCodeScannerAnalyser(
6060

6161
val result = reader.decode(binaryBitmap)
6262
onQrCodesDetected(result.text)
63-
} catch (e: NotFoundException) {
63+
} catch (e: ReaderException) {
6464
Timber.d(e)
6565
} finally {
6666
imageProxy.close()

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@
8585
<string name="error_already_party_member">You are already member of this party</string>
8686
<string name="error_invalid_invitation">Invitation token is not valid</string>
8787
<string name="error_unkown">Unknown error occurred</string>
88-
<string name="invitation_code_description">Players can join using this code</string>
88+
<string name="title_invite_players">Invite players…</string>
89+
<string name="invitation_code_description">Players can scan this QR code in their apps</string>
8990
<string name="title_characterCreation">Describe your character…</string>
9091
<string name="title_character_stats">Attributes</string>
9192
<string name="title_character_conditions">Conditions</string>

buildSrc/src/main/resources/versions.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
androidGradlePluginVersion=7.1.0-alpha08
1+
androidGradlePluginVersion=7.1.0-alpha11
22
kotlinVersion=1.5.10
33
composeVersion=1.0.0
44

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#Mon Aug 31 09:56:08 CEST 2020
22
distributionBase=GRADLE_USER_HOME
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
44
distributionPath=wrapper/dists
55
zipStorePath=wrapper/dists
66
zipStoreBase=GRADLE_USER_HOME

0 commit comments

Comments
 (0)