From 29c136d6127d59c196aa5b3499ecaac0db6d81ad Mon Sep 17 00:00:00 2001 From: Trey t Date: Thu, 13 Nov 2025 22:21:54 -0600 Subject: [PATCH] Migrate Android app to Material3 system colors and improve UX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove AppColors object, migrate to Material3 semantic colors throughout - Add collapsible dropdown menu for task card actions - Implement pull-to-refresh on Residences, Documents, and Contractors screens - Add refresh button to All Tasks screen with forceRefresh support - Fix nullable function reference error in TaskCard (make onEditClick nullable) - Fix layout padding issues on All Tasks and Tasks screens - Remove unused AppColors import from HomeScreen 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../documents/DocumentsTabContent.kt | 49 ++- .../mycrib/ui/components/task/TaskCard.kt | 284 +++++++++++++----- .../ui/components/task/TaskKanbanView.kt | 39 ++- .../mycrib/ui/screens/AllTasksScreen.kt | 83 ++--- .../mycrib/ui/screens/ContractorsScreen.kt | 118 +++++--- .../example/mycrib/ui/screens/HomeScreen.kt | 1 - .../mycrib/ui/screens/ResidencesScreen.kt | 53 ++-- .../example/mycrib/ui/screens/TasksScreen.kt | 10 +- .../com/example/mycrib/ui/theme/Theme.kt | 12 - .../AppIcon.appiconset/Contents.json | 2 +- .../AppIcon.appiconset/app-icon-1024.png | Bin 67285 -> 0 bytes .../AppIcon.appiconset/icon.png | Bin 0 -> 32665 bytes 12 files changed, 413 insertions(+), 238 deletions(-) delete mode 100644 iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png create mode 100644 iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/icon.png diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/documents/DocumentsTabContent.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/documents/DocumentsTabContent.kt index 1be0cd9..50e6d0f 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/documents/DocumentsTabContent.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/documents/DocumentsTabContent.kt @@ -7,13 +7,16 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Description import androidx.compose.material.icons.filled.ReceiptLong import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.runtime.Composable +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.pulltorefresh.PullToRefreshBox +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import com.mycrib.shared.models.DocumentListResponse import com.mycrib.shared.network.ApiResult +@OptIn(ExperimentalMaterial3Api::class) @Composable fun DocumentsTabContent( state: ApiResult, @@ -21,10 +24,21 @@ fun DocumentsTabContent( onDocumentClick: (Int) -> Unit, onRetry: () -> Unit ) { + var isRefreshing by remember { mutableStateOf(false) } + + // Handle refresh state + LaunchedEffect(state) { + if (state !is ApiResult.Loading) { + isRefreshing = false + } + } + when (state) { is ApiResult.Loading -> { - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - CircularProgressIndicator() + if (!isRefreshing) { + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + CircularProgressIndicator() + } } } is ApiResult.Success -> { @@ -35,17 +49,26 @@ fun DocumentsTabContent( message = if (isWarrantyTab) "No warranties found" else "No documents found" ) } else { - LazyColumn( - modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 96.dp), - verticalArrangement = Arrangement.spacedBy(12.dp) + PullToRefreshBox( + isRefreshing = isRefreshing, + onRefresh = { + isRefreshing = true + onRetry() + }, + modifier = Modifier.fillMaxSize() ) { - items(documents) { document -> - DocumentCard( - document = document, - isWarrantyCard = isWarrantyTab, - onClick = { document.id?.let { onDocumentClick(it) } } - ) + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(start = 16.dp, end = 16.dp, top = 16.dp, bottom = 96.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + items(documents) { document -> + DocumentCard( + document = document, + isWarrantyCard = isWarrantyTab, + onClick = { document.id?.let { onDocumentClick(it) } } + ) + } } } } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskCard.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskCard.kt index 8cca8d5..bc46f63 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskCard.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskCard.kt @@ -14,7 +14,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import com.mycrib.android.ui.theme.AppColors import com.mycrib.shared.models.TaskDetail import com.mycrib.shared.models.TaskCategory import com.mycrib.shared.models.TaskPriority @@ -28,7 +27,7 @@ fun TaskCard( task: TaskDetail, buttonTypes: List = emptyList(), onCompleteClick: (() -> Unit)?, - onEditClick: () -> Unit, + onEditClick: (() -> Unit)?, onCancelClick: (() -> Unit)?, onUncancelClick: (() -> Unit)?, onMarkInProgressClick: (() -> Unit)? = null, @@ -80,9 +79,9 @@ fun TaskCard( ) { // Priority badge with semantic colors val priorityColor = when (task.priority.name.lowercase()) { - "urgent", "high" -> Color(0xFFEF4444) // Error/Red - "medium" -> Color(0xFFF59E0B) // Warning/Orange - else -> Color(0xFF10B981) // Success/Green + "urgent", "high" -> MaterialTheme.colorScheme.error + "medium" -> MaterialTheme.colorScheme.tertiary + else -> MaterialTheme.colorScheme.secondary } Row( modifier = Modifier @@ -110,11 +109,11 @@ fun TaskCard( // Status badge with semantic colors if (task.status != null) { val statusColor = when (task.status.name.lowercase()) { - "completed" -> AppColors.taskCompleted - "in_progress" -> AppColors.taskInProgress - "pending" -> Color(0xFFF59E0B) - "cancelled" -> AppColors.taskCanceled - else -> Color(0xFF9CA3AF) + "completed" -> MaterialTheme.colorScheme.secondary + "in_progress" -> MaterialTheme.colorScheme.tertiary + "pending" -> MaterialTheme.colorScheme.tertiary + "cancelled" -> MaterialTheme.colorScheme.onSurfaceVariant + else -> MaterialTheme.colorScheme.onSurfaceVariant } Surface( color = statusColor.copy(alpha = 0.15f), @@ -228,85 +227,78 @@ fun TaskCard( } } - // Render buttons based on buttonTypes array + // Actions dropdown menu based on buttonTypes array if (buttonTypes.isNotEmpty()) { + var showActionsMenu by remember { mutableStateOf(false) } + + Spacer(modifier = Modifier.height(16.dp)) + HorizontalDivider(color = MaterialTheme.colorScheme.outlineVariant) Spacer(modifier = Modifier.height(16.dp)) - buttonTypes.forEach { buttonType -> - when (buttonType) { - "mark_in_progress" -> { - onMarkInProgressClick?.let { - MarkInProgressButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) - } - } - "complete" -> { - onCompleteClick?.let { - CompleteTaskButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) - } - } - "edit" -> { - EditTaskButton( - taskId = task.id, - onCompletion = onEditClick, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() + Box { + Button( + onClick = { showActionsMenu = true }, + modifier = Modifier.fillMaxWidth(), + colors = ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.primaryContainer, + contentColor = MaterialTheme.colorScheme.onPrimaryContainer + ), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + Icons.Default.MoreVert, + contentDescription = null, + modifier = Modifier.size(18.dp) + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + text = "Actions", + style = MaterialTheme.typography.labelLarge, + fontWeight = FontWeight.SemiBold + ) + } + + DropdownMenu( + expanded = showActionsMenu, + onDismissRequest = { showActionsMenu = false } + ) { + // Primary actions + buttonTypes.filter { isPrimaryAction(it) }.forEach { buttonType -> + getActionMenuItem( + buttonType = buttonType, + task = task, + onMarkInProgressClick = onMarkInProgressClick, + onCompleteClick = onCompleteClick, + onEditClick = onEditClick, + onUncancelClick = onUncancelClick, + onUnarchiveClick = onUnarchiveClick, + onDismiss = { showActionsMenu = false } ) - Spacer(modifier = Modifier.height(8.dp)) } - "cancel" -> { - onCancelClick?.let { - CancelTaskButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() + + // Secondary actions + if (buttonTypes.any { isSecondaryAction(it) }) { + HorizontalDivider() + buttonTypes.filter { isSecondaryAction(it) }.forEach { buttonType -> + getActionMenuItem( + buttonType = buttonType, + task = task, + onArchiveClick = onArchiveClick, + onDismiss = { showActionsMenu = false } ) - Spacer(modifier = Modifier.height(8.dp)) } } - "uncancel" -> { - onUncancelClick?.let { - UncancelTaskButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() + + // Destructive actions + if (buttonTypes.any { isDestructiveAction(it) }) { + HorizontalDivider() + buttonTypes.filter { isDestructiveAction(it) }.forEach { buttonType -> + getActionMenuItem( + buttonType = buttonType, + task = task, + onCancelClick = onCancelClick, + onDismiss = { showActionsMenu = false } ) - Spacer(modifier = Modifier.height(8.dp)) - } - } - "archive" -> { - onArchiveClick?.let { - ArchiveTaskButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) - } - } - "unarchive" -> { - onUnarchiveClick?.let { - UnarchiveTaskButton( - taskId = task.id, - onCompletion = it, - onError = { error -> println("Error: $error") }, - modifier = Modifier.fillMaxWidth() - ) - Spacer(modifier = Modifier.height(8.dp)) } } } @@ -316,6 +308,138 @@ fun TaskCard( } } +// Helper functions for action classification +private fun isPrimaryAction(buttonType: String): Boolean { + return buttonType in listOf("mark_in_progress", "complete", "edit", "uncancel", "unarchive") +} + +private fun isSecondaryAction(buttonType: String): Boolean { + return buttonType == "archive" +} + +private fun isDestructiveAction(buttonType: String): Boolean { + return buttonType == "cancel" +} + +@Composable +private fun getActionMenuItem( + buttonType: String, + task: TaskDetail, + onMarkInProgressClick: (() -> Unit)? = null, + onCompleteClick: (() -> Unit)? = null, + onEditClick: (() -> Unit)? = null, + onCancelClick: (() -> Unit)? = null, + onUncancelClick: (() -> Unit)? = null, + onArchiveClick: (() -> Unit)? = null, + onUnarchiveClick: (() -> Unit)? = null, + onDismiss: () -> Unit +) { + when (buttonType) { + "mark_in_progress" -> { + onMarkInProgressClick?.let { + DropdownMenuItem( + text = { Text("Mark In Progress") }, + leadingIcon = { + Icon(Icons.Default.PlayArrow, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "complete" -> { + onCompleteClick?.let { + DropdownMenuItem( + text = { Text("Complete Task") }, + leadingIcon = { + Icon(Icons.Default.CheckCircle, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "edit" -> { + onEditClick?.let { + DropdownMenuItem( + text = { Text("Edit Task") }, + leadingIcon = { + Icon(Icons.Default.Edit, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "cancel" -> { + onCancelClick?.let { + DropdownMenuItem( + text = { Text("Cancel Task") }, + leadingIcon = { + Icon( + Icons.Default.Cancel, + contentDescription = null, + tint = MaterialTheme.colorScheme.error + ) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "uncancel" -> { + onUncancelClick?.let { + DropdownMenuItem( + text = { Text("Restore Task") }, + leadingIcon = { + Icon(Icons.Default.Undo, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "archive" -> { + onArchiveClick?.let { + DropdownMenuItem( + text = { Text("Archive Task") }, + leadingIcon = { + Icon(Icons.Default.Archive, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + "unarchive" -> { + onUnarchiveClick?.let { + DropdownMenuItem( + text = { Text("Unarchive Task") }, + leadingIcon = { + Icon(Icons.Default.Unarchive, contentDescription = null) + }, + onClick = { + it() + onDismiss() + } + ) + } + } + } +} + @Composable fun CompletionCard(completion: TaskCompletion) { var showPhotoDialog by remember { mutableStateOf(false) } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskKanbanView.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskKanbanView.kt index 021fea2..45048c2 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskKanbanView.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/components/task/TaskKanbanView.kt @@ -241,29 +241,28 @@ fun DynamicTaskKanbanView( onUncancelTask: ((TaskDetail) -> Unit)?, onMarkInProgress: ((TaskDetail) -> Unit)?, onArchiveTask: ((TaskDetail) -> Unit)?, - onUnarchiveTask: ((TaskDetail) -> Unit)? + onUnarchiveTask: ((TaskDetail) -> Unit)?, + modifier: Modifier = Modifier ) { val pagerState = rememberPagerState(pageCount = { columns.size }) - Column(modifier = Modifier.fillMaxSize()) { - HorizontalPager( - state = pagerState, - modifier = Modifier.fillMaxSize(), - pageSpacing = 16.dp, - contentPadding = PaddingValues(start = 16.dp, end = 48.dp) - ) { page -> - val column = columns[page] - DynamicTaskColumn( - column = column, - onCompleteTask = onCompleteTask, - onEditTask = onEditTask, - onCancelTask = onCancelTask, - onUncancelTask = onUncancelTask, - onMarkInProgress = onMarkInProgress, - onArchiveTask = onArchiveTask, - onUnarchiveTask = onUnarchiveTask - ) - } + HorizontalPager( + state = pagerState, + modifier = modifier.fillMaxSize(), + pageSpacing = 16.dp, + contentPadding = PaddingValues(start = 16.dp, end = 48.dp) + ) { page -> + val column = columns[page] + DynamicTaskColumn( + column = column, + onCompleteTask = onCompleteTask, + onEditTask = onEditTask, + onCancelTask = onCancelTask, + onUncancelTask = onUncancelTask, + onMarkInProgress = onMarkInProgress, + onArchiveTask = onArchiveTask, + onUnarchiveTask = onUnarchiveTask + ) } } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/AllTasksScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/AllTasksScreen.kt index 4638ca5..765f27d 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/AllTasksScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/AllTasksScreen.kt @@ -90,6 +90,14 @@ fun AllTasksScreen( ) }, actions = { + IconButton( + onClick = { viewModel.loadTasks(forceRefresh = true) } + ) { + Icon( + Icons.Default.Refresh, + contentDescription = "Refresh" + ) + } IconButton( onClick = { showNewTaskDialog = true }, enabled = myResidencesState is ApiResult.Success && @@ -141,7 +149,7 @@ fun AllTasksScreen( style = MaterialTheme.typography.bodyLarge ) Spacer(modifier = Modifier.height(8.dp)) - Button(onClick = { viewModel.loadTasks() }) { + Button(onClick = { viewModel.loadTasks(forceRefresh = true) }) { Text("Retry") } } @@ -211,53 +219,48 @@ fun AllTasksScreen( } } } else { - Box( - modifier = Modifier - .fillMaxSize() - .padding(paddingValues) - ) { - DynamicTaskKanbanView( - columns = taskData.columns, - onCompleteTask = { task -> - selectedTask = task - showCompleteDialog = true - }, - onEditTask = { task -> - onNavigateToEditTask(task) - }, - onCancelTask = { task -> + DynamicTaskKanbanView( + columns = taskData.columns, + onCompleteTask = { task -> + selectedTask = task + showCompleteDialog = true + }, + onEditTask = { task -> + onNavigateToEditTask(task) + }, + onCancelTask = { task -> // viewModel.cancelTask(task.id) { _ -> // viewModel.loadTasks() // } - }, - onUncancelTask = { task -> + }, + onUncancelTask = { task -> // viewModel.uncancelTask(task.id) { _ -> // viewModel.loadTasks() // } - }, - onMarkInProgress = { task -> - viewModel.markInProgress(task.id) { success -> - if (success) { - viewModel.loadTasks() - } - } - }, - onArchiveTask = { task -> - viewModel.archiveTask(task.id) { success -> - if (success) { - viewModel.loadTasks() - } - } - }, - onUnarchiveTask = { task -> - viewModel.unarchiveTask(task.id) { success -> - if (success) { - viewModel.loadTasks() - } + }, + onMarkInProgress = { task -> + viewModel.markInProgress(task.id) { success -> + if (success) { + viewModel.loadTasks() } } - ) - } + }, + onArchiveTask = { task -> + viewModel.archiveTask(task.id) { success -> + if (success) { + viewModel.loadTasks() + } + } + }, + onUnarchiveTask = { task -> + viewModel.unarchiveTask(task.id) { success -> + if (success) { + viewModel.loadTasks() + } + } + }, + modifier = Modifier.padding(paddingValues) + ) } } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ContractorsScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ContractorsScreen.kt index 584b7fe..4b3bd0f 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ContractorsScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ContractorsScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -42,11 +43,19 @@ fun ContractorsScreen( var showFavoritesOnly by remember { mutableStateOf(false) } var searchQuery by remember { mutableStateOf("") } var showFiltersMenu by remember { mutableStateOf(false) } + var isRefreshing by remember { mutableStateOf(false) } LaunchedEffect(Unit) { viewModel.loadContractors() } + // Handle refresh state + LaunchedEffect(contractorsState) { + if (contractorsState !is ApiResult.Loading) { + isRefreshing = false + } + } + LaunchedEffect(selectedFilter, showFavoritesOnly, searchQuery) { viewModel.loadContractors( specialty = selectedFilter, @@ -83,7 +92,7 @@ fun ContractorsScreen( Icon( if (showFavoritesOnly) Icons.Default.Star else Icons.Default.StarOutline, "Filter favorites", - tint = if (showFavoritesOnly) Color(0xFFF59E0B) else LocalContentColor.current + tint = if (showFavoritesOnly) MaterialTheme.colorScheme.tertiary else LocalContentColor.current ) } @@ -93,7 +102,7 @@ fun ContractorsScreen( Icon( Icons.Default.FilterList, "Filter by specialty", - tint = if (selectedFilter != null) Color(0xFF3B82F6) else LocalContentColor.current + tint = if (selectedFilter != null) MaterialTheme.colorScheme.primary else LocalContentColor.current ) } @@ -109,7 +118,7 @@ fun ContractorsScreen( }, leadingIcon = { if (selectedFilter == null) { - Icon(Icons.Default.Check, null, tint = Color(0xFF10B981)) + Icon(Icons.Default.Check, null, tint = MaterialTheme.colorScheme.secondary) } } ) @@ -123,7 +132,7 @@ fun ContractorsScreen( }, leadingIcon = { if (selectedFilter == specialty.name) { - Icon(Icons.Default.Check, null, tint = Color(0xFF10B981)) + Icon(Icons.Default.Check, null, tint = MaterialTheme.colorScheme.secondary) } } ) @@ -132,7 +141,7 @@ fun ContractorsScreen( } }, colors = TopAppBarDefaults.topAppBarColors( - containerColor = Color(0xFFF9FAFB) + containerColor = MaterialTheme.colorScheme.surface ) ) }, @@ -140,8 +149,8 @@ fun ContractorsScreen( Box(modifier = Modifier.padding(bottom = 80.dp)) { FloatingActionButton( onClick = { showAddDialog = true }, - containerColor = Color(0xFF2563EB), - contentColor = Color.White + containerColor = MaterialTheme.colorScheme.primary, + contentColor = MaterialTheme.colorScheme.onPrimary ) { Icon(Icons.Default.Add, "Add contractor") } @@ -152,7 +161,7 @@ fun ContractorsScreen( modifier = Modifier .fillMaxSize() .padding(padding) - .background(Color(0xFFF9FAFB)) + .background(MaterialTheme.colorScheme.background) ) { // Search bar OutlinedTextField( @@ -173,10 +182,10 @@ fun ContractorsScreen( singleLine = true, shape = RoundedCornerShape(12.dp), colors = OutlinedTextFieldDefaults.colors( - focusedContainerColor = Color.White, - unfocusedContainerColor = Color.White, - focusedBorderColor = Color(0xFF3B82F6), - unfocusedBorderColor = Color(0xFFE5E7EB) + focusedContainerColor = MaterialTheme.colorScheme.surface, + unfocusedContainerColor = MaterialTheme.colorScheme.surface, + focusedBorderColor = MaterialTheme.colorScheme.primary, + unfocusedBorderColor = MaterialTheme.colorScheme.outline ) ) @@ -209,11 +218,13 @@ fun ContractorsScreen( when (val state = contractorsState) { is ApiResult.Loading -> { - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center - ) { - CircularProgressIndicator(color = Color(0xFF2563EB)) + if (!isRefreshing) { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + CircularProgressIndicator(color = MaterialTheme.colorScheme.primary) + } } } is ApiResult.Success -> { @@ -232,36 +243,49 @@ fun ContractorsScreen( Icons.Default.PersonAdd, contentDescription = null, modifier = Modifier.size(64.dp), - tint = Color(0xFF9CA3AF) + tint = MaterialTheme.colorScheme.onSurfaceVariant ) Text( if (searchQuery.isNotEmpty() || selectedFilter != null || showFavoritesOnly) "No contractors found" else "No contractors yet", - color = Color(0xFF6B7280) + color = MaterialTheme.colorScheme.onSurfaceVariant ) if (searchQuery.isEmpty() && selectedFilter == null && !showFavoritesOnly) { Text( "Add your first contractor to get started", - color = Color(0xFF9CA3AF), + color = MaterialTheme.colorScheme.onSurfaceVariant, style = MaterialTheme.typography.bodySmall ) } } } } else { - LazyColumn( - modifier = Modifier.fillMaxSize(), - contentPadding = PaddingValues(16.dp), - verticalArrangement = Arrangement.spacedBy(12.dp) - ) { - items(contractors, key = { it.id }) { contractor -> - ContractorCard( - contractor = contractor, - onToggleFavorite = { viewModel.toggleFavorite(it) }, - onClick = { onNavigateToContractorDetail(it) } + PullToRefreshBox( + isRefreshing = isRefreshing, + onRefresh = { + isRefreshing = true + viewModel.loadContractors( + specialty = selectedFilter, + isFavorite = if (showFavoritesOnly) true else null, + search = searchQuery.takeIf { it.isNotBlank() } ) + }, + modifier = Modifier.fillMaxSize() + ) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues(16.dp), + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + items(contractors, key = { it.id }) { contractor -> + ContractorCard( + contractor = contractor, + onToggleFavorite = { viewModel.toggleFavorite(it) }, + onClick = { onNavigateToContractorDetail(it) } + ) + } } } } @@ -279,13 +303,13 @@ fun ContractorsScreen( Icons.Default.ErrorOutline, contentDescription = null, modifier = Modifier.size(64.dp), - tint = Color(0xFFEF4444) + tint = MaterialTheme.colorScheme.error ) - Text(state.message, color = Color(0xFFEF4444)) + Text(state.message, color = MaterialTheme.colorScheme.error) Button( onClick = { viewModel.loadContractors() }, colors = ButtonDefaults.buttonColors( - containerColor = Color(0xFF2563EB) + containerColor = MaterialTheme.colorScheme.primary ) ) { Text("Retry") @@ -321,7 +345,7 @@ fun ContractorCard( .clickable { onClick(contractor.id) }, shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors( - containerColor = Color.White + containerColor = MaterialTheme.colorScheme.surface ), elevation = CardDefaults.cardElevation( defaultElevation = 1.dp @@ -338,14 +362,14 @@ fun ContractorCard( modifier = Modifier .size(56.dp) .clip(CircleShape) - .background(Color(0xFFEEF2FF)), + .background(MaterialTheme.colorScheme.primaryContainer), contentAlignment = Alignment.Center ) { Icon( Icons.Default.Person, contentDescription = null, modifier = Modifier.size(32.dp), - tint = Color(0xFF3B82F6) + tint = MaterialTheme.colorScheme.onPrimaryContainer ) } @@ -357,7 +381,7 @@ fun ContractorCard( text = contractor.name, style = MaterialTheme.typography.titleMedium, fontWeight = FontWeight.SemiBold, - color = Color(0xFF111827), + color = MaterialTheme.colorScheme.onSurface, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -367,7 +391,7 @@ fun ContractorCard( Icons.Default.Star, contentDescription = "Favorite", modifier = Modifier.size(16.dp), - tint = Color(0xFFF59E0B) + tint = MaterialTheme.colorScheme.tertiary ) } } @@ -376,7 +400,7 @@ fun ContractorCard( Text( text = contractor.company, style = MaterialTheme.typography.bodyMedium, - color = Color(0xFF6B7280), + color = MaterialTheme.colorScheme.onSurfaceVariant, maxLines = 1, overflow = TextOverflow.Ellipsis ) @@ -394,13 +418,13 @@ fun ContractorCard( Icons.Default.WorkOutline, contentDescription = null, modifier = Modifier.size(14.dp), - tint = Color(0xFF6B7280) + tint = MaterialTheme.colorScheme.onSurfaceVariant ) Spacer(modifier = Modifier.width(4.dp)) Text( text = contractor.specialty, style = MaterialTheme.typography.bodySmall, - color = Color(0xFF6B7280) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -411,13 +435,13 @@ fun ContractorCard( Icons.Default.Star, contentDescription = null, modifier = Modifier.size(14.dp), - tint = Color(0xFFF59E0B) + tint = MaterialTheme.colorScheme.tertiary ) Spacer(modifier = Modifier.width(4.dp)) Text( text = "${(contractor.averageRating * 10).toInt() / 10.0}", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF6B7280), + color = MaterialTheme.colorScheme.onSurfaceVariant, fontWeight = FontWeight.Medium ) } @@ -429,13 +453,13 @@ fun ContractorCard( Icons.Default.CheckCircle, contentDescription = null, modifier = Modifier.size(14.dp), - tint = Color(0xFF10B981) + tint = MaterialTheme.colorScheme.secondary ) Spacer(modifier = Modifier.width(4.dp)) Text( text = "${contractor.taskCount} tasks", style = MaterialTheme.typography.bodySmall, - color = Color(0xFF6B7280) + color = MaterialTheme.colorScheme.onSurfaceVariant ) } } @@ -449,7 +473,7 @@ fun ContractorCard( Icon( if (contractor.isFavorite) Icons.Default.Star else Icons.Default.StarOutline, contentDescription = if (contractor.isFavorite) "Remove from favorites" else "Add to favorites", - tint = if (contractor.isFavorite) Color(0xFFF59E0B) else Color(0xFF9CA3AF) + tint = if (contractor.isFavorite) MaterialTheme.colorScheme.tertiary else MaterialTheme.colorScheme.onSurfaceVariant ) } @@ -457,7 +481,7 @@ fun ContractorCard( Icon( Icons.Default.ChevronRight, contentDescription = "View details", - tint = Color(0xFF9CA3AF) + tint = MaterialTheme.colorScheme.onSurfaceVariant ) } } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/HomeScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/HomeScreen.kt index 00bdfdf..9f9eacd 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/HomeScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/HomeScreen.kt @@ -15,7 +15,6 @@ import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel -import com.mycrib.android.ui.theme.AppColors import com.mycrib.android.ui.theme.AppRadius import com.mycrib.android.viewmodel.ResidenceViewModel import com.mycrib.shared.network.ApiResult diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt index e21a0a8..0ec255c 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/ResidencesScreen.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.material3.* +import androidx.compose.material3.pulltorefresh.PullToRefreshBox import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -36,11 +37,19 @@ fun ResidencesScreen( ) { val myResidencesState by viewModel.myResidencesState.collectAsState() var showJoinDialog by remember { mutableStateOf(false) } + var isRefreshing by remember { mutableStateOf(false) } LaunchedEffect(Unit) { viewModel.loadMyResidences() } + // Handle refresh state + LaunchedEffect(myResidencesState) { + if (myResidencesState !is ApiResult.Loading) { + isRefreshing = false + } + } + if (showJoinDialog) { JoinResidenceDialog( onDismiss = { @@ -219,18 +228,26 @@ fun ResidencesScreen( } } } else { - LazyColumn( + PullToRefreshBox( + isRefreshing = isRefreshing, + onRefresh = { + isRefreshing = true + viewModel.loadMyResidences() + }, modifier = Modifier .fillMaxSize() - .padding(paddingValues), - contentPadding = PaddingValues( - start = 16.dp, - end = 16.dp, - top = 16.dp, - bottom = 96.dp - ), - verticalArrangement = Arrangement.spacedBy(16.dp) + .padding(paddingValues) ) { + LazyColumn( + modifier = Modifier.fillMaxSize(), + contentPadding = PaddingValues( + start = 16.dp, + end = 16.dp, + top = 16.dp, + bottom = 96.dp + ), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { // Summary Card item { Card( @@ -341,20 +358,13 @@ fun ResidencesScreen( modifier = Modifier .size(56.dp) .clip(CircleShape) - .background( - Brush.linearGradient( - listOf( - Color(0xFF2563EB), - Color(0xFF8B5CF6) - ) - ) - ), + .background(MaterialTheme.colorScheme.primaryContainer), contentAlignment = Alignment.Center ) { Icon( Icons.Default.Home, contentDescription = null, - tint = Color.White, + tint = MaterialTheme.colorScheme.onPrimaryContainer, modifier = Modifier.size(28.dp) ) } @@ -403,24 +413,25 @@ fun ResidencesScreen( icon = Icons.Default.Assignment, value = "${residence.taskSummary.total}", label = "Tasks", - color = Color(0xFF3B82F6) + color = MaterialTheme.colorScheme.primary ) TaskStatChip( icon = Icons.Default.CheckCircle, value = "${residence.taskSummary.completed}", label = "Done", - color = Color(0xFF10B981) + color = MaterialTheme.colorScheme.secondary ) TaskStatChip( icon = Icons.Default.Schedule, value = "${residence.taskSummary.pending}", label = "Pending", - color = Color(0xFFF59E0B) + color = MaterialTheme.colorScheme.tertiary ) } } } } + } } } } diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/TasksScreen.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/TasksScreen.kt index d3a3948..2609e44 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/TasksScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/screens/TasksScreen.kt @@ -135,9 +135,13 @@ fun TasksScreen( } else { LazyColumn( modifier = Modifier - .fillMaxSize() - .padding(paddingValues), - contentPadding = PaddingValues(16.dp), + .fillMaxSize(), + contentPadding = PaddingValues( + top = paddingValues.calculateTopPadding() + 16.dp, + bottom = paddingValues.calculateBottomPadding() + 16.dp, + start = 16.dp, + end = 16.dp + ), verticalArrangement = Arrangement.spacedBy(12.dp) ) { // Task summary pills - dynamically generated from all columns diff --git a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/theme/Theme.kt b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/theme/Theme.kt index dd23c44..79e3f8b 100644 --- a/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/theme/Theme.kt +++ b/composeApp/src/commonMain/kotlin/com/example/mycrib/ui/theme/Theme.kt @@ -125,15 +125,3 @@ fun MyCribTheme( content = content ) } - -// Extended colors for semantic states (not part of Material3 ColorScheme) -object AppColors { - val accent = Accent - val accentLight = AccentLight - val info = Info - val taskUpcoming = TaskUpcoming - val taskInProgress = TaskInProgress - val taskCompleted = TaskCompleted - val taskCanceled = TaskCanceled - val taskArchived = TaskArchived -} diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json index 4e8d485..c68da6c 100644 --- a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "app-icon-1024.png", + "filename" : "icon.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/app-icon-1024.png deleted file mode 100644 index 53fc536fb9ac5c1dbb27c7e1da13db3760070a11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67285 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 BXNCX( diff --git a/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/icon.png b/iosApp/iosApp/Assets.xcassets/AppIcon.appiconset/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e6f70c8ef1353c23e2ecd2ab1bafd51a362df1 GIT binary patch literal 32665 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