Skip to content

Commit 7310469

Browse files
Implemented UI for workout history page
1 parent 4e81463 commit 7310469

9 files changed

Lines changed: 471 additions & 31 deletions

File tree

app/src/main/java/com/cornellappdev/uplift/ui/MainNavigationWrapper.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import com.cornellappdev.uplift.ui.screens.onboarding.ProfileCreationScreen
4747
import com.cornellappdev.uplift.ui.screens.onboarding.SignInPromptScreen
4848
import com.cornellappdev.uplift.ui.screens.profile.ProfileScreen
4949
import com.cornellappdev.uplift.ui.screens.profile.SettingsScreen
50+
import com.cornellappdev.uplift.ui.screens.profile.WorkoutHistoryScreen
5051
import com.cornellappdev.uplift.ui.screens.reminders.CapacityReminderScreen
5152
import com.cornellappdev.uplift.ui.screens.reminders.MainReminderScreen
5253
import com.cornellappdev.uplift.ui.screens.onboarding.WorkoutReminderOnboardingScreen
@@ -265,6 +266,11 @@ fun MainNavigationWrapper(
265266
composable<UpliftRootRoute.Settings> {
266267
SettingsScreen()
267268
}
269+
composable<UpliftRootRoute.WorkoutHistory> {
270+
WorkoutHistoryScreen(
271+
onBack = { navController.popBackStack() }
272+
)
273+
}
268274
composable<UpliftRootRoute.Sports> {}
269275
composable<UpliftRootRoute.Favorites> {}
270276
}
@@ -363,4 +369,7 @@ sealed class UpliftRootRoute {
363369

364370
@Serializable
365371
data object Settings : UpliftRootRoute()
372+
373+
@Serializable
374+
data object WorkoutHistory : UpliftRootRoute()
366375
}

app/src/main/java/com/cornellappdev/uplift/ui/components/general/UpliftTabRow.kt

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
package com.cornellappdev.uplift.ui.components.general
22

3+
import androidx.compose.foundation.layout.Arrangement
4+
import androidx.compose.foundation.layout.Row
5+
import androidx.compose.foundation.layout.Spacer
6+
import androidx.compose.foundation.layout.size
7+
import androidx.compose.foundation.layout.width
38
import androidx.compose.material.TabRowDefaults.Divider
9+
import androidx.compose.material3.Icon
410
import androidx.compose.material3.Tab
511
import androidx.compose.material3.TabRow
612
import androidx.compose.material3.TabRowDefaults.SecondaryIndicator
@@ -11,8 +17,10 @@ import androidx.compose.runtime.getValue
1117
import androidx.compose.runtime.mutableStateOf
1218
import androidx.compose.runtime.remember
1319
import androidx.compose.runtime.setValue
20+
import androidx.compose.ui.Alignment
1421
import androidx.compose.ui.Modifier
1522
import androidx.compose.ui.graphics.Color
23+
import androidx.compose.ui.res.painterResource
1624
import androidx.compose.ui.text.font.FontWeight
1725
import androidx.compose.ui.tooling.preview.Preview
1826
import androidx.compose.ui.unit.dp
@@ -24,7 +32,12 @@ import com.cornellappdev.uplift.util.PRIMARY_YELLOW
2432
import com.cornellappdev.uplift.util.montserratFamily
2533

2634
@Composable
27-
fun UpliftTabRow(tabIndex: Int, tabs: List<String>, onTabChange: (Int) -> Unit = {}) {
35+
fun UpliftTabRow(
36+
tabIndex: Int,
37+
tabs: List<String>,
38+
icons: List<Int>? = null,
39+
onTabChange: (Int) -> Unit = {}
40+
) {
2841
TabRow(
2942
selectedTabIndex = tabIndex,
3043
containerColor = Color.White,
@@ -43,19 +56,35 @@ fun UpliftTabRow(tabIndex: Int, tabs: List<String>, onTabChange: (Int) -> Unit =
4356
}
4457
) {
4558
tabs.forEachIndexed { index, title ->
59+
val isSelected = tabIndex == index
60+
val color = if (isSelected) PRIMARY_BLACK else GRAY04
4661
Tab(
47-
text = {
48-
Text(
49-
text = title,
50-
color = if (tabIndex == index) PRIMARY_BLACK else GRAY04,
51-
fontFamily = montserratFamily,
52-
fontSize = 12.sp,
53-
fontWeight = FontWeight.Bold
54-
)
55-
},
56-
selected = tabIndex == index,
62+
selected = isSelected,
5763
onClick = { onTabChange(index) },
5864
selectedContentColor = GRAY01,
65+
text = {
66+
Row(
67+
verticalAlignment = Alignment.CenterVertically,
68+
horizontalArrangement = Arrangement.Center
69+
) {
70+
if (icons != null && index < icons.size) {
71+
Icon(
72+
painter = painterResource(id = icons[index]),
73+
contentDescription = null,
74+
tint = color,
75+
modifier = Modifier.size(16.dp)
76+
)
77+
Spacer(modifier = Modifier.width(16.dp))
78+
}
79+
Text(
80+
text = title,
81+
color = color,
82+
fontFamily = montserratFamily,
83+
fontSize = 12.sp,
84+
fontWeight = FontWeight.Bold
85+
)
86+
}
87+
}
5988
)
6089
}
6190
}
@@ -72,4 +101,4 @@ private fun UpliftTabRowPreview() {
72101
tabIndex = it
73102
}
74103
)
75-
}
104+
}

app/src/main/java/com/cornellappdev/uplift/ui/components/profile/workouts/HistorySection.kt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package com.cornellappdev.uplift.ui.components.profile.workouts
22

33
import androidx.compose.foundation.Image
44
import androidx.compose.foundation.layout.Arrangement
5-
import androidx.compose.foundation.layout.Box
65
import androidx.compose.foundation.layout.Column
76
import androidx.compose.foundation.layout.Row
87
import androidx.compose.foundation.layout.Spacer
@@ -18,7 +17,6 @@ import androidx.compose.material3.Text
1817
import androidx.compose.runtime.Composable
1918
import androidx.compose.ui.Alignment
2019
import androidx.compose.ui.Modifier
21-
import androidx.compose.ui.focus.focusModifier
2220
import androidx.compose.ui.graphics.Color
2321
import androidx.compose.ui.res.painterResource
2422
import androidx.compose.ui.text.font.FontWeight
@@ -28,9 +26,9 @@ import androidx.compose.ui.unit.sp
2826
import com.cornellappdev.uplift.R
2927
import com.cornellappdev.uplift.ui.components.profile.SectionTitleText
3028
import com.cornellappdev.uplift.util.GRAY01
29+
import com.cornellappdev.uplift.util.GRAY04
30+
import com.cornellappdev.uplift.util.PRIMARY_BLACK
3131
import com.cornellappdev.uplift.util.montserratFamily
32-
import com.cornellappdev.uplift.util.timeAgoString
33-
import java.util.Calendar
3432

3533
data class HistoryItem(
3634
val gymName: String,
@@ -68,22 +66,22 @@ fun HistorySection(
6866
}
6967

7068
@Composable
71-
private fun HistoryList(
69+
fun HistoryList(
7270
historyItems: List<HistoryItem>,
7371
modifier: Modifier = Modifier
7472
) {
7573
Column(modifier = modifier) {
7674
historyItems.take(5).forEachIndexed { index, historyItem ->
7775
HistoryItemRow(historyItem = historyItem)
7876
if (index != historyItems.size - 1) {
79-
HorizontalDivider(color = GRAY01)
77+
HorizontalDivider(color = GRAY01, thickness = 1.dp)
8078
}
8179
}
8280
}
8381
}
8482

8583
@Composable
86-
private fun HistoryItemRow(
84+
fun HistoryItemRow(
8785
historyItem: HistoryItem
8886
) {
8987
val gymName = historyItem.gymName
@@ -94,23 +92,28 @@ private fun HistoryItemRow(
9492
Row(
9593
modifier = Modifier
9694
.fillMaxWidth()
95+
.height(60.dp)
9796
.padding(vertical = 12.dp),
98-
horizontalArrangement = Arrangement.SpaceBetween
97+
horizontalArrangement = Arrangement.SpaceBetween,
98+
verticalAlignment = Alignment.Bottom
9999
) {
100-
Column(){
100+
Column(
101+
modifier = Modifier.weight(1f),
102+
verticalArrangement = Arrangement.spacedBy(4.dp)
103+
){
101104
Text(
102105
text = gymName,
103106
fontFamily = montserratFamily,
104-
fontSize = 14.sp,
107+
fontSize = 12.sp,
105108
fontWeight = FontWeight.Medium,
106-
color = Color.Black
109+
color = PRIMARY_BLACK
107110
)
108111
Text(
109112
text = "$date · $time",
110113
fontFamily = montserratFamily,
111114
fontSize = 12.sp,
112-
fontWeight = FontWeight.Light,
113-
color = Color.Gray
115+
fontWeight = FontWeight.Medium,
116+
color = GRAY04
114117
)
115118
}
116119
Text(
@@ -124,7 +127,7 @@ private fun HistoryItemRow(
124127
}
125128

126129
@Composable
127-
private fun EmptyHistorySection(){
130+
fun EmptyHistorySection(){
128131
Column(
129132
modifier = Modifier.fillMaxSize(),
130133
verticalArrangement = Arrangement.Center,
@@ -178,4 +181,4 @@ private fun HistorySectionPreview() {
178181
)
179182
}
180183

181-
}
184+
}

0 commit comments

Comments
 (0)