Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,8 @@
<string name="Common_Save">Save</string>
<string name="Common_Clear">Clear</string>

<string name="Common_Today">Today</string>
<string name="Common_Yesterday">Yesterday</string>
<string name="Common_Ago">%1$s ago</string>
<plurals name="Common_Seconds">
<item quantity="one">%1$d second</item>
Expand All @@ -426,6 +428,10 @@
<item quantity="one">%1$d hour</item>
<item quantity="other">%1$d hours</item>
</plurals>
<plurals name="Common_Days">
<item quantity="one">%1$d day</item>
<item quantity="other">%1$d days</item>
</plurals>
<string name="Common_Hours_Abbreviated">%1$dh</string>
<string name="Common_Minutes_Abbreviated">%1$dm</string>
<string name="Common_Seconds_Abbreviated">%1$ds</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,24 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.graphics.luminance
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.state.ToggleableState
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import kotlinx.datetime.DateTimeUnit
import kotlinx.datetime.LocalDate
import kotlinx.datetime.LocalDate.Companion.Format
import kotlinx.datetime.format
import kotlinx.datetime.format.MonthNames
import kotlinx.datetime.format.Padding
import kotlinx.datetime.format.char
import kotlinx.datetime.minus
import ooniprobe.composeapp.generated.resources.Common_Ago
import ooniprobe.composeapp.generated.resources.Common_Days
import ooniprobe.composeapp.generated.resources.Common_Today
import ooniprobe.composeapp.generated.resources.Common_Yes
import ooniprobe.composeapp.generated.resources.Common_Yesterday
import ooniprobe.composeapp.generated.resources.Modal_Cancel
import ooniprobe.composeapp.generated.resources.Modal_Delete
import ooniprobe.composeapp.generated.resources.Modal_DoYouWantToDeleteAllTests
Expand Down Expand Up @@ -88,6 +95,7 @@ import org.jetbrains.compose.resources.pluralStringResource
import org.jetbrains.compose.resources.stringResource
import org.ooni.probe.data.models.ResultFilter
import org.ooni.probe.shared.stringMonthArrayResource
import org.ooni.probe.shared.today
import org.ooni.probe.ui.shared.LightStatusBars
import org.ooni.probe.ui.shared.TopBar
import org.ooni.probe.ui.shared.VerticalScrollbar
Expand Down Expand Up @@ -251,6 +259,7 @@ fun ResultsScreen(
state.results.forEach { (date, results) ->
stickyHeader(key = date.toString()) {
ResultDateHeader(date)
HorizontalDivider(thickness = Dp.Hairline)
}
items(items = results) { result ->
val isSelected = result.isSelected
Expand Down Expand Up @@ -288,7 +297,7 @@ fun ResultsScreen(
}
},
)
HorizontalDivider(thickness = with(LocalDensity.current) { 1.toDp() })
HorizontalDivider(thickness = Dp.Hairline)
}
}
if (state.areResultsLimited) {
Expand Down Expand Up @@ -501,13 +510,32 @@ private fun Summary(summary: ResultsViewModel.Summary?) {
private fun ResultDateHeader(date: LocalDate) {
val monthNames = stringMonthArrayResource()
Text(
date.format(
Format {
monthName(MonthNames(monthNames))
char(' ')
year()
},
),
when {
date == LocalDate.today() ->
stringResource(Res.string.Common_Today)

date == LocalDate.today().minus(1, DateTimeUnit.DAY) ->
stringResource(Res.string.Common_Yesterday)

date >= LocalDate.today().minus(5, DateTimeUnit.DAY) -> {
val daysDiff = (date - LocalDate.today().minus(5, DateTimeUnit.DAY)).days
stringResource(
Res.string.Common_Ago,
pluralStringResource(Res.plurals.Common_Days, daysDiff, daysDiff),
)
}

else ->
date.format(
Format {
day(Padding.NONE)
char(' ')
monthName(MonthNames(monthNames))
char(' ')
year()
},
)
},
style = MaterialTheme.typography.labelLarge,
modifier = Modifier
.fillMaxWidth()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class ResultsViewModel(
.flatMapLatest { getResults(it) }
.onEach { results ->
val groupedResults = results
.groupBy { it.monthAndYear }
.groupBy { it.result.startTime.date }
.mapValues { entry ->
val previouslySelectedIds = _state.value.results.values
.asSequence()
Expand Down Expand Up @@ -182,11 +182,6 @@ class ResultsViewModel(
events.tryEmit(event)
}

private val ResultListItem.monthAndYear
get() = result.startTime.let { startTime ->
LocalDate(year = startTime.year, month = startTime.month, day = 1)
}

data class State(
val filter: ResultFilter = ResultFilter(),
val descriptors: List<Descriptor> = emptyList(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ class TaskEventMapperTest {
// 2024-08-05 13:22:31
assertEquals(2024, year)
assertEquals(Month.AUGUST, month)
assertEquals(5, dayOfMonth)
assertEquals(5, day)
assertEquals(13, hour)
assertEquals(22, minute)
assertEquals(31, second)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class ResultsScreenTest {
title = item.item.descriptor.title()
}

onNodeWithText("January 2024").assertExists()
onNodeWithText("1 January 2024").assertExists()
onNodeWithText(title!!).assertExists()
onNodeWithText(item.item.network!!.networkName!!).assertExists()
}
Expand Down
Loading