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