package org.terst.doot.widget.ui import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.background import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.* import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.glance.appwidget.updateAll import androidx.lifecycle.lifecycleScope import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import okhttp3.OkHttpClient import org.terst.doot.widget.data.Keys import org.terst.doot.widget.data.WidgetRepository import org.terst.doot.widget.data.dataStore class QuickAddActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme(colorScheme = darkColorScheme()) { QuickAddSheet( onAdd = { title -> lifecycleScope.launch { val prefs = this@QuickAddActivity.dataStore.data.first() val url = prefs[Keys.SERVER_URL]?.trimEnd('/') ?: return@launch val token = prefs[Keys.TOKEN] ?: return@launch val repo = WidgetRepository(OkHttpClient(), url, token) repo.addTask(title).onSuccess { repo.fetchAndPersist(this@QuickAddActivity) DootWidget().updateAll(this@QuickAddActivity) finish() } } }, onDismiss = ::finish ) } } } } @OptIn(ExperimentalMaterial3Api::class) @Composable fun QuickAddSheet( onAdd: (String) -> Unit, onDismiss: () -> Unit ) { var title by remember { mutableStateOf("") } ModalBottomSheet( onDismissRequest = onDismiss, sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true), containerColor = Color(0xFF1E293B), tonalElevation = 0.dp, dragHandle = { Box( modifier = Modifier .padding(vertical = 12.dp) .width(36.dp) .height(4.dp) .background(Color.White.copy(alpha = 0.25f), RoundedCornerShape(2.dp)) ) } ) { Column( modifier = Modifier .fillMaxWidth() .padding(horizontal = 20.dp) .navigationBarsPadding() .imePadding() ) { Text( text = "Quick Add", fontSize = 17.sp, fontWeight = FontWeight.SemiBold, color = Color.White ) Spacer(Modifier.height(16.dp)) OutlinedTextField( value = title, onValueChange = { title = it }, placeholder = { Text("Task title") }, modifier = Modifier.fillMaxWidth(), singleLine = true, colors = OutlinedTextFieldDefaults.colors( focusedTextColor = Color.White, unfocusedTextColor = Color.White, focusedBorderColor = Color(0xFF3B82F6), unfocusedBorderColor = Color.White.copy(alpha = 0.3f) ) ) Spacer(Modifier.height(16.dp)) Button( onClick = { onAdd(title.trim()) }, enabled = title.isNotBlank(), modifier = Modifier.fillMaxWidth(), colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF3B82F6)) ) { Text("Add", fontSize = 15.sp) } Spacer(Modifier.height(20.dp)) } } }