@@ -16,23 +16,16 @@ import androidx.compose.foundation.layout.fillMaxWidth
16
16
import androidx.compose.foundation.layout.padding
17
17
import androidx.compose.foundation.layout.preferredSize
18
18
import androidx.compose.foundation.layout.wrapContentSize
19
- import androidx.compose.foundation.lazy.LazyRowFor
20
19
import androidx.compose.foundation.shape.CircleShape
21
20
import androidx.compose.foundation.text.KeyboardOptions
22
- import androidx.compose.material.Card
23
- import androidx.compose.material.MaterialTheme
24
- import androidx.compose.material.Scaffold
25
- import androidx.compose.material.Surface
26
- import androidx.compose.material.Text
27
- import androidx.compose.material.TextField
21
+ import androidx.compose.material.*
28
22
import androidx.compose.runtime.Composable
29
23
import androidx.compose.runtime.collectAsState
30
24
import androidx.compose.runtime.getValue
31
25
import androidx.compose.runtime.remember
32
26
import androidx.compose.ui.Alignment
33
27
import androidx.compose.ui.Modifier
34
28
import androidx.compose.ui.graphics.ColorFilter
35
- import androidx.compose.ui.graphics.RectangleShape
36
29
import androidx.compose.ui.layout.ContentScale
37
30
import androidx.compose.ui.platform.AmbientContext
38
31
import androidx.compose.ui.res.stringResource
@@ -44,6 +37,7 @@ import com.halcyonmobile.multiplatformplayground.model.ui.UploadApplicationUiMod
44
37
import com.halcyonmobile.multiplatformplayground.model.ui.UploadApplicationUiModelChangeListener
45
38
import com.halcyonmobile.multiplatformplayground.shared.util.ImageFile
46
39
import com.halcyonmobile.multiplatformplayground.shared.util.toImageFile
40
+ import com.halcyonmobile.multiplatformplayground.ui.shared.Screenshots
47
41
import com.halcyonmobile.multiplatformplayground.ui.theme.AppTheme
48
42
import com.halcyonmobile.multiplatformplayground.util.composables.BackBar
49
43
import com.halcyonmobile.multiplatformplayground.util.registerForActivityResult
@@ -59,40 +53,62 @@ fun UploadApplication(initialCategoryId: Long, upPress: () -> Unit) {
59
53
val uploadApplicationUiModel by viewModel.uploadApplicationUiModel.collectAsState(
60
54
UploadApplicationUiModel (categoryId = initialCategoryId)
61
55
)
56
+ val state by viewModel.state.collectAsState()
57
+ val event by viewModel.event.collectAsState(null )
58
+
59
+ if (event == UploadApplicationViewModel .Event .SUCCESSFUL_UPLOAD ) {
60
+ upPress()
61
+ }
62
62
63
63
val getIcon = registerForGalleryResult(viewModel::onIconChanged)
64
64
val getScreenshot = registerForGalleryResult(viewModel::onAddScreenshot)
65
65
66
66
Scaffold (
67
67
topBar = { BackBar (upPress = upPress) },
68
68
bodyContent = {
69
- ScrollableColumn (contentPadding = PaddingValues (16 .dp)) {
70
- Card (
71
- modifier = Modifier .preferredSize(88 .dp).align(Alignment .CenterHorizontally ),
72
- shape = CircleShape ,
73
- backgroundColor = AppTheme .colors.cardButton
69
+ when (state) {
70
+ UploadApplicationViewModel .State .LOADING -> Box (
71
+ Modifier .wrapContentSize(align = Alignment .Center ).padding(16 .dp)
74
72
) {
75
- Box (Modifier .clickable { getIcon.launchAsImageResult() }) {
76
- if (uploadApplicationUiModel.icon == null ) {
77
- Image (
78
- imageVector = vectorResource(id = R .drawable.ic_add_image),
79
- colorFilter = ColorFilter .tint(AppTheme .colors.secondary),
80
- modifier = Modifier .wrapContentSize().align(Alignment .Center )
81
- )
82
- } else {
83
- CoilImage (
84
- data = uploadApplicationUiModel.icon!! .uri,
85
- modifier = Modifier .matchParentSize(),
86
- contentScale = ContentScale .Crop
87
- )
73
+ CircularProgressIndicator ()
74
+ }
75
+ UploadApplicationViewModel .State .NORMAL -> ScrollableColumn (
76
+ contentPadding = PaddingValues (16 .dp)
77
+ ) {
78
+ Card (
79
+ modifier = Modifier .preferredSize(88 .dp)
80
+ .align(Alignment .CenterHorizontally ),
81
+ shape = CircleShape ,
82
+ backgroundColor = AppTheme .colors.cardButton
83
+ ) {
84
+ Box (Modifier .clickable { getIcon.launchAsImageResult() }) {
85
+ if (uploadApplicationUiModel.icon == null ) {
86
+ Image (
87
+ imageVector = vectorResource(id = R .drawable.ic_add_image),
88
+ colorFilter = ColorFilter .tint(AppTheme .colors.secondary),
89
+ modifier = Modifier .wrapContentSize().align(Alignment .Center )
90
+ )
91
+ } else {
92
+ CoilImage (
93
+ data = uploadApplicationUiModel.icon!! .uri,
94
+ modifier = Modifier .matchParentSize(),
95
+ contentScale = ContentScale .Crop
96
+ )
97
+ }
88
98
}
89
99
}
100
+ Screenshots (
101
+ screenshots = uploadApplicationUiModel.screenshots,
102
+ onAddScreenshot = { getScreenshot.launchAsImageResult() },
103
+ showAdd = true
104
+ )
105
+ ApplicationDetails (uploadApplicationUiModel, viewModel)
106
+ ExtendedFloatingActionButton (
107
+ text = { Text (stringResource(R .string.submit)) },
108
+ onClick = viewModel::submit,
109
+ modifier = Modifier .fillMaxWidth().padding(16 .dp)
110
+ )
90
111
}
91
- Screenshots (
92
- screenshots = uploadApplicationUiModel.screenshots,
93
- onAddScreenshot = { getScreenshot.launchAsImageResult() }
94
- )
95
- ApplicationDetails (uploadApplicationUiModel, viewModel)
96
112
}
97
113
}
98
114
)
@@ -108,41 +124,6 @@ private fun registerForGalleryResult(callback: (ImageFile) -> Unit) =
108
124
}
109
125
}
110
126
111
- @Composable
112
- private fun Screenshots (screenshots : List <ImageFile >, onAddScreenshot : () -> Unit ) {
113
- Column {
114
- Text (
115
- text = stringResource(id = R .string.screenshots),
116
- style = MaterialTheme .typography.h6,
117
- modifier = Modifier .padding(16 .dp)
118
- )
119
- LazyRowFor (items = screenshots + null , modifier = Modifier .padding(8 .dp)) {
120
- if (it != null ) {
121
- CoilImage (
122
- data = it.uri,
123
- modifier = Modifier .preferredSize(88 .dp).padding(8 .dp),
124
- contentScale = ContentScale .Crop
125
- )
126
- } else {
127
- Card (
128
- modifier = Modifier .preferredSize(88 .dp).padding(8 .dp),
129
- shape = RectangleShape ,
130
- backgroundColor = AppTheme .colors.cardButton
131
- ) {
132
- Box (Modifier .clickable(onClick = onAddScreenshot)) {
133
- Image (
134
- imageVector = vectorResource(id = R .drawable.ic_add_image),
135
- colorFilter = ColorFilter .tint(AppTheme .colors.secondary),
136
- modifier = Modifier .wrapContentSize().align(Alignment .Center )
137
- )
138
- }
139
-
140
- }
141
- }
142
- }
143
- }
144
- }
145
-
146
127
@Composable
147
128
private fun ApplicationDetails (
148
129
uploadApplicationUiModel : UploadApplicationUiModel ,
0 commit comments