From d5625050eb1e05b3d20977f8fe97322c881d8d5f Mon Sep 17 00:00:00 2001 From: dannymccance Date: Sat, 4 Apr 2026 14:20:31 -0400 Subject: [PATCH] added calendar icon and wire up availability sheet --- .../android/ui/screens/main/ProfileScreen.kt | 32 +++++++++++++++++-- .../viewmodel/main/ProfileViewModel.kt | 20 ++++++++++-- app/src/main/res/drawable/ic_calendar.xml | 18 +++++------ 3 files changed, 55 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/cornellappdev/resell/android/ui/screens/main/ProfileScreen.kt b/app/src/main/java/com/cornellappdev/resell/android/ui/screens/main/ProfileScreen.kt index e930dee0..d22a05cf 100644 --- a/app/src/main/java/com/cornellappdev/resell/android/ui/screens/main/ProfileScreen.kt +++ b/app/src/main/java/com/cornellappdev/resell/android/ui/screens/main/ProfileScreen.kt @@ -7,7 +7,10 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import com.cornellappdev.resell.android.R @@ -18,6 +21,7 @@ import com.cornellappdev.resell.android.ui.components.profile.ProfileEmptyState import com.cornellappdev.resell.android.ui.components.profile.ProfileHeader import com.cornellappdev.resell.android.ui.components.profile.ResellRequestsScroll import com.cornellappdev.resell.android.ui.theme.simpleFadeInOut +import com.cornellappdev.resell.android.util.LocalInfiniteShimmer import com.cornellappdev.resell.android.viewmodel.main.ProfileViewModel @Composable @@ -37,10 +41,13 @@ fun ProfileScreen( vendorName = uiState.vendorName, bio = uiState.bio, selectedTab = uiState.profileTab, - rightIcon = R.drawable.ic_settings, + leftIcon = R.drawable.ic_settings, + rightIcon = R.drawable.ic_calendar, onTabSelected = { profileViewModel.onTabSelected(it) }, - onRightPressed = { profileViewModel.onSettingsPressed() }, - ) + onLeftPressed = { profileViewModel.onSettingsPressed() }, + onRightPressed = { profileViewModel.onCalendarPressed() }, + + ) AnimatedContent( targetState = uiState.profileTab, @@ -147,3 +154,22 @@ fun ProfileScreen( } } } + +@Preview(showBackground = true) +@Composable +fun ProfileScreenPreview() { + CompositionLocalProvider(value = LocalInfiniteShimmer provides Color.LightGray) { + ProfileHeader( + imageUrl = "", + shopName = "ravina.shop", + vendorName = "Ravina Patel", + bio = "selling jin's stuff! selling jin's stuff!", + selectedTab = ProfileViewModel.ProfileTab.SHOP, + leftIcon = R.drawable.ic_settings, + rightIcon = R.drawable.ic_calendar, + onTabSelected = {}, + onLeftPressed = {}, + onRightPressed = {} + ) + } +} diff --git a/app/src/main/java/com/cornellappdev/resell/android/viewmodel/main/ProfileViewModel.kt b/app/src/main/java/com/cornellappdev/resell/android/viewmodel/main/ProfileViewModel.kt index fd899ef2..ce0ebf13 100644 --- a/app/src/main/java/com/cornellappdev/resell/android/viewmodel/main/ProfileViewModel.kt +++ b/app/src/main/java/com/cornellappdev/resell/android/viewmodel/main/ProfileViewModel.kt @@ -10,6 +10,7 @@ import com.cornellappdev.resell.android.model.core.UserInfoRepository import com.cornellappdev.resell.android.model.login.GoogleAuthRepository import com.cornellappdev.resell.android.model.profile.ProfileRepository import com.cornellappdev.resell.android.model.settings.BlockedUsersRepository +import com.cornellappdev.resell.android.ui.components.availability.helper.GridSelectionType import com.cornellappdev.resell.android.ui.components.global.ResellTextButtonContainer import com.cornellappdev.resell.android.ui.components.global.ResellTextButtonState import com.cornellappdev.resell.android.ui.screens.root.ResellRootRoute @@ -18,7 +19,9 @@ import com.cornellappdev.resell.android.viewmodel.navigation.RootNavigationRepos import com.cornellappdev.resell.android.viewmodel.root.RootConfirmationRepository import com.cornellappdev.resell.android.viewmodel.root.RootDialogContent import com.cornellappdev.resell.android.viewmodel.root.RootDialogRepository +import com.cornellappdev.resell.android.viewmodel.root.RootNavigationSheetRepository import com.cornellappdev.resell.android.viewmodel.root.RootOptionsMenuRepository +import com.cornellappdev.resell.android.viewmodel.root.RootSheet import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.launch import kotlinx.serialization.encodeToString @@ -31,8 +34,9 @@ class ProfileViewModel @Inject constructor( private val rootDialogRepository: RootDialogRepository, private val rootConfirmationRepository: RootConfirmationRepository, private val profileRepository: ProfileRepository, - private val userInfoRepository: UserInfoRepository -) : ResellViewModel( + private val userInfoRepository: UserInfoRepository, + private val rootNavigationSheetRepository: RootNavigationSheetRepository // add this +): ResellViewModel( initialUiState = ProfileUiState( profileTab = ProfileTab.SHOP, loadedState = ResellApiState.Loading, @@ -86,6 +90,18 @@ class ProfileViewModel @Inject constructor( fun onSettingsPressed() { rootNavigationRepository.navigate(ResellRootRoute.SETTINGS) } + fun onCalendarPressed() { + rootNavigationSheetRepository.showBottomSheet( + RootSheet.Availability( + buttonString = "Propose", + title = "Availability", + description = "Propose a time to meet", + initialTimes = listOf(), + gridSelectionType = GridSelectionType.PROPOSAL, + callback = { /* TODO: handle selected times */ } + ) + ) + } fun onRequestPressed(request: RequestListing) { rootNavigationRepository.navigate( diff --git a/app/src/main/res/drawable/ic_calendar.xml b/app/src/main/res/drawable/ic_calendar.xml index 386ecf56..4b7576db 100644 --- a/app/src/main/res/drawable/ic_calendar.xml +++ b/app/src/main/res/drawable/ic_calendar.xml @@ -1,11 +1,9 @@ - - - - - - - - - - + +