Skip to content

Commit 547f1c6

Browse files
committed
Add CW to compose page, improve bottom bar
1 parent 8d85101 commit 547f1c6

1 file changed

Lines changed: 50 additions & 8 deletions

File tree

shared/src/commonMain/kotlin/site/remlit/snowdrop/view/ComposeView.kt

Lines changed: 50 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,16 @@ import androidx.compose.foundation.layout.heightIn
1212
import androidx.compose.foundation.layout.imePadding
1313
import androidx.compose.foundation.layout.navigationBarsPadding
1414
import androidx.compose.foundation.layout.padding
15+
import androidx.compose.foundation.shape.CircleShape
1516
import androidx.compose.foundation.shape.RoundedCornerShape
1617
import androidx.compose.foundation.text.KeyboardActions
1718
import androidx.compose.foundation.text.KeyboardOptions
19+
import androidx.compose.material3.ButtonColors
20+
import androidx.compose.material3.ButtonDefaults
1821
import androidx.compose.material3.DropdownMenu
1922
import androidx.compose.material3.DropdownMenuItem
23+
import androidx.compose.material3.FilledTonalButton
24+
import androidx.compose.material3.FilledTonalIconButton
2025
import androidx.compose.material3.Icon
2126
import androidx.compose.material3.IconButton
2227
import androidx.compose.material3.MaterialTheme
@@ -33,6 +38,8 @@ import androidx.compose.runtime.remember
3338
import androidx.compose.runtime.setValue
3439
import androidx.compose.ui.Alignment
3540
import androidx.compose.ui.Modifier
41+
import androidx.compose.ui.composed
42+
import androidx.compose.ui.draw.clip
3643
import androidx.compose.ui.graphics.Color
3744
import androidx.compose.ui.text.font.FontWeight
3845
import androidx.compose.ui.text.style.TextOverflow
@@ -48,6 +55,8 @@ import site.remlit.snowdrop.component.ViewSurface
4855
import site.remlit.snowdrop.component.Visibility
4956
import site.remlit.snowdrop.model.request.CreateStatusRequest
5057
import site.remlit.snowdrop.util.LocalNavController
58+
import site.remlit.snowdrop.util.WarningColor25
59+
import site.remlit.snowdrop.util.bgIO
5160
import site.remlit.snowdrop.util.blockingSettings
5261
import site.remlit.snowdrop.util.getCurrentAccountObjectFlow
5362
import site.remlit.snowdrop.util.settings
@@ -58,6 +67,7 @@ import snowdrop.shared.generated.resources.icon_home_20px
5867
import snowdrop.shared.generated.resources.icon_lock_20px
5968
import snowdrop.shared.generated.resources.icon_mail_20px
6069
import snowdrop.shared.generated.resources.icon_send_24px
70+
import snowdrop.shared.generated.resources.icon_warning_24px
6171

6272
@Composable
6373
@OptIn(ExperimentalSettingsApi::class)
@@ -71,12 +81,19 @@ fun ComposeView(
7181
val currentAccount by getCurrentAccountObjectFlow()
7282
.collectAsStateWithLifecycle(null)
7383

84+
var canSubmit by remember { mutableStateOf(false) }
85+
7486
var visibilityDropdownOpen by remember { mutableStateOf(false) }
87+
var showCwField by remember { mutableStateOf(false) }
88+
89+
if (!initialCw.isBlank()) showCwField = true
7590

7691
var cw by remember { mutableStateOf(initialCw) }
7792
var content by remember { mutableStateOf(initialContent) }
7893
var visibility by remember { mutableStateOf(blockingSettings.getString("default_visibility", "public")) }
7994

95+
// can submit stuff
96+
canSubmit = !content.isBlank()
8097

8198
suspend fun sendPost() {
8299
val res = createStatus(CreateStatusRequest(
@@ -86,7 +103,6 @@ fun ComposeView(
86103
))
87104
if (res.error) return
88105
if (res.response == null) return
89-
navHandler.popBackStack()
90106
}
91107

92108
TopAppBar(
@@ -233,14 +249,31 @@ fun ComposeView(
233249
}
234250

235251
Column(
236-
verticalArrangement = Arrangement.spacedBy(10.dp)
252+
modifier = Modifier.fillMaxHeight().weight(1f),
253+
verticalArrangement = Arrangement.spacedBy(5.dp)
237254
) {
255+
if (showCwField)
256+
TextField(
257+
value = cw,
258+
onValueChange = { cw = it },
259+
placeholder = { Text("Content warning") },
260+
modifier = Modifier.fillMaxWidth().padding(start = 10.dp, end = 10.dp, top = 5.dp)
261+
.clip(RoundedCornerShape(10.dp)),
262+
maxLines = 1,
263+
colors = TextFieldDefaults.colors(
264+
unfocusedContainerColor = WarningColor25,
265+
unfocusedIndicatorColor = Color(0x00000000),
266+
focusedContainerColor = WarningColor25,
267+
focusedIndicatorColor = Color(0x00000000)
268+
)
269+
)
270+
238271
TextField(
239-
content,
272+
value = content,
240273
placeholder = { Text("Write your post here...") },
241274
onValueChange = { content = it },
242275
modifier = Modifier.imePadding()
243-
.fillMaxWidth(),
276+
.fillMaxWidth().fillMaxHeight(),
244277
colors = TextFieldDefaults.colors(
245278
unfocusedContainerColor = Color(0x00000000),
246279
unfocusedIndicatorColor = Color(0x00000000),
@@ -253,16 +286,25 @@ fun ComposeView(
253286
Row(
254287
modifier = Modifier.background(MaterialTheme.colorScheme.surfaceContainerHigh)
255288
.padding(all = 5.dp)
256-
.fillMaxWidth(),
289+
.fillMaxWidth()
290+
.imePadding(),
257291
verticalAlignment = Alignment.CenterVertically
258292
) {
293+
TextButton(onClick = { showCwField = !showCwField }) {
294+
Icon(painterResource(Res.drawable.icon_warning_24px), null)
295+
}
296+
297+
298+
// End
259299
Row(
260-
modifier = Modifier.fillMaxWidth()
261-
.navigationBarsPadding(),
300+
modifier = Modifier.fillMaxWidth(),
262301
horizontalArrangement = Arrangement.End
263302
) {
264303
Row {
265-
TextButton(onClick = { runBlocking { sendPost() } }) {
304+
FilledTonalIconButton(
305+
onClick = { bgIO { sendPost() }; navHandler.popBackStack() },
306+
enabled = canSubmit
307+
) {
266308
Icon(painterResource(Res.drawable.icon_send_24px), null)
267309
}
268310
}

0 commit comments

Comments
 (0)