Skip to content

Commit b30efd1

Browse files
author
Daniel García
committed
[Added] driver list summary
1 parent c9dbf99 commit b30efd1

File tree

5 files changed

+111
-8
lines changed

5 files changed

+111
-8
lines changed

app/src/main/java/com/tripletres/platformscience/ui/view/driver/DriverListScreen.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fun DriverListViewScreen(navController: NavController, viewModel: DriverListView
4242
})
4343
},
4444
content = {
45-
DriverListView(driverUiState.drivers) {
45+
DriverListView(driverUiState.drivers, driverUiState.totalSS) {
4646
navController.navigate(
4747
route = Router.DriverDetailsScreen.buildRoute(it.id.toString())
4848
)
@@ -83,13 +83,13 @@ fun DriverListViewScreen(navController: NavController, viewModel: DriverListView
8383
}
8484

8585
@Composable
86-
fun DriverListView(drivers: List<DriverItem>, onDriverSelected: (driver: DriverItem) -> Unit) {
86+
fun DriverListView(drivers: List<DriverItem>, totalSS: Float, onDriverSelected: (driver: DriverItem) -> Unit) {
8787
LazyColumn(
8888
verticalArrangement = Arrangement.spacedBy(8.dp),
8989
modifier = Modifier.padding(start = 16.dp, end = 16.dp)
9090
) {
9191
item() {
92-
Spacer(modifier = Modifier.height(16.dp))
92+
DriverSummaryRow(drivers.size, totalSS)
9393
}
9494
items(drivers) { driver ->
9595
DriverItemView(driver) {
@@ -173,6 +173,7 @@ fun DriverItemView(driver: DriverItem, onPressed: (id: Long) -> Unit) {
173173
}
174174
}
175175

176+
176177
@Preview(showBackground = true)
177178
@Composable
178179
fun DriverItemViewPreview() {
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package com.tripletres.platformscience.ui.view.driver
2+
3+
import androidx.compose.foundation.layout.*
4+
import androidx.compose.foundation.shape.RoundedCornerShape
5+
import androidx.compose.material.Card
6+
import androidx.compose.material.Icon
7+
import androidx.compose.material.MaterialTheme
8+
import androidx.compose.material.Text
9+
import androidx.compose.material.icons.Icons
10+
import androidx.compose.material.icons.outlined.Person
11+
import androidx.compose.material.icons.outlined.Place
12+
import androidx.compose.runtime.Composable
13+
import androidx.compose.ui.Alignment
14+
import androidx.compose.ui.Modifier
15+
import androidx.compose.ui.draw.alpha
16+
import androidx.compose.ui.draw.scale
17+
import androidx.compose.ui.graphics.vector.ImageVector
18+
import androidx.compose.ui.res.stringResource
19+
import androidx.compose.ui.tooling.preview.Preview
20+
import androidx.compose.ui.unit.dp
21+
import com.tripletres.platformscience.R
22+
23+
/**
24+
* Summary rows like a dashboard
25+
*/
26+
@Composable
27+
fun DriverSummaryRow(count: Int, totalSS: Float) {
28+
Row(
29+
modifier = Modifier.padding(top = 16.dp)
30+
) {
31+
32+
Box(modifier = Modifier.weight(1f)) {
33+
DriverHighlightCard(
34+
title = stringResource(id = R.string.driver_list_summary_title_count),
35+
details = count.toString(),
36+
icon = Icons.Outlined.Person)
37+
}
38+
39+
Box(modifier = Modifier.weight(1f)) {
40+
DriverHighlightCard(
41+
title = stringResource(id = R.string.driver_list_summary_title_ss),
42+
details = totalSS.toString(),
43+
icon = Icons.Outlined.Place)
44+
}
45+
46+
}
47+
}
48+
49+
@Composable
50+
fun DriverHighlightCard(title: String, details: String, icon: ImageVector) {
51+
Card(
52+
shape = RoundedCornerShape(16.dp),
53+
backgroundColor = MaterialTheme.colors.primary,
54+
elevation = 2.dp,
55+
modifier = Modifier.fillMaxWidth().padding(8.dp)
56+
) {
57+
Box(
58+
contentAlignment = Alignment.BottomEnd,
59+
modifier = Modifier.fillMaxWidth()
60+
) {
61+
Column(
62+
horizontalAlignment = Alignment.Start,
63+
modifier = Modifier.fillMaxWidth().padding(top = 16.dp, bottom = 32.dp, start = 16.dp, end = 32.dp)
64+
) {
65+
Text(text = title,
66+
style = MaterialTheme.typography.caption,
67+
modifier = Modifier.padding(bottom = 2.dp)
68+
)
69+
Text(
70+
text = details,
71+
style = MaterialTheme.typography.h5
72+
)
73+
}
74+
Icon(
75+
imageVector = icon,
76+
contentDescription = "",
77+
modifier = Modifier
78+
.padding(16.dp)
79+
.scale(1.5f)
80+
.alpha(0.8f)
81+
)
82+
}
83+
}
84+
}
85+
86+
@Preview
87+
@Composable
88+
fun DriverHighlightCardPreview() {
89+
DriverHighlightCard(title = "TITLE",
90+
details = "DETAILS",
91+
icon = Icons.Outlined.Person)
92+
}

app/src/main/java/com/tripletres/platformscience/ui/view/driver/DriverListUiState.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ import com.tripletres.platformscience.ui.model.DriverItem
55
data class DriverListUiState(
66
val isLoading: Boolean = false,
77
val drivers: List<DriverItem> = emptyList(),
8-
val isReloadDialog: Boolean = false
8+
val isReloadDialog: Boolean = false,
9+
val totalSS: Float = 0f
910
)

app/src/main/java/com/tripletres/platformscience/ui/view/driver/DriverListViewModel.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class DriverListViewModel @Inject constructor(
2626
private val getAssignedDriversToShipmentsUseCase: GetAssignedDriversToShipmentsUseCase,
2727
private val loadDriversShipmentsUseCase: LoadDriversShipmentsUseCase,
2828
private val assignDriversToShipmentsUseCase: AssignDriversToShipmentsUseCase,
29-
private val settings: SimpleSettingsUtil
29+
private val settings: SimpleSettingsUtil,
3030
) : ViewModel() {
3131
private val _uiState = MutableStateFlow(DriverListUiState())
3232
val uiState = _uiState.asStateFlow()
@@ -37,7 +37,7 @@ class DriverListViewModel @Inject constructor(
3737

3838
//Determine if "Accepted button was performed"
3939
//So we need to "reload" with new user settings
40-
if(accept){
40+
if (accept) {
4141
loadDriversShipmentsUseCase(getCachedSetting())
4242
assignDriversToShipmentsUseCase(getAlgorithmSetting())
4343
}
@@ -62,7 +62,8 @@ class DriverListViewModel @Inject constructor(
6262
private fun updateDriverList(drivers: List<DriverItem>) {
6363
_uiState.update {
6464
it.copy(
65-
drivers = drivers
65+
drivers = drivers,
66+
totalSS = getTotalSS(drivers)
6667
)
6768
}
6869
}
@@ -75,7 +76,13 @@ class DriverListViewModel @Inject constructor(
7576
}
7677
}
7778

78-
private fun getCachedSetting() = settings.getPreference(SimpleSettingsUtil.DB_OR_API) == SimpleSettingsUtil.DB_OR_API_DEF
79+
private fun getTotalSS(drivers: List<DriverItem>): Float {
80+
return drivers.map { it.ss }.reduce { acc, fl -> acc?.plus(fl!!) } ?: 0f
81+
}
82+
83+
private fun getCachedSetting() =
84+
settings.getPreference(SimpleSettingsUtil.DB_OR_API) == SimpleSettingsUtil.DB_OR_API_DEF
85+
7986
private fun getAlgorithmSetting() = settings.getPreference(SimpleSettingsUtil.ALGORITHM)
8087
}
8188

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
<string name="driver_assigned_route">Has an assigned route: </string>
1313
<string name="driver_reload_title">Do you want to reload?</string>
1414
<string name="driver_list_title">Drivers</string>
15+
<string name="driver_list_summary_title_count">Total drivers</string>
16+
<string name="driver_list_summary_title_ss">Total SS</string>
1517

1618
//Settings
1719
<string name="setting_db_or_api">Source set</string>

0 commit comments

Comments
 (0)