Skip to content

Commit f51bacc

Browse files
committed
fix: refresh statistics by-book covers
1 parent f3a9356 commit f51bacc

5 files changed

Lines changed: 26 additions & 1 deletion

File tree

app/src/main/java/moe/antimony/hoshi/features/statistics/StatisticsCalculations.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ internal fun distributionRows(
282282
DailyTargetType.Duration -> contribution.readingSeconds
283283
}
284284
BookDistributionRow(
285+
bookId = contribution.bookId,
285286
title = contribution.title,
286287
coverPath = contribution.coverPath,
287288
characters = contribution.characters,

app/src/main/java/moe/antimony/hoshi/features/statistics/StatisticsDistributionList.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.compose.material3.MaterialTheme
1515
import androidx.compose.material3.Text
1616
import androidx.compose.runtime.Composable
1717
import androidx.compose.runtime.getValue
18+
import androidx.compose.runtime.key
1819
import androidx.compose.runtime.produceState
1920
import androidx.compose.runtime.remember
2021
import androidx.compose.ui.Alignment
@@ -51,7 +52,9 @@ internal fun StatisticsDistributionList(
5152
verticalArrangement = Arrangement.spacedBy(10.dp),
5253
) {
5354
rows.forEach { row ->
54-
DistributionRow(row = row)
55+
key(row.bookId) {
56+
DistributionRow(row = row)
57+
}
5558
}
5659
}
5760
}
@@ -117,6 +120,7 @@ private fun DistributionCover(row: BookDistributionRow) {
117120
BookCoverBitmapCache.get(coverSource)
118121
}
119122
val bitmap by produceState(initialValue = cachedBitmap, key1 = coverSource) {
123+
value = cachedBitmap
120124
if (cachedBitmap == null) {
121125
value = BookCoverBitmapCache.load(coverSource)
122126
}

app/src/main/java/moe/antimony/hoshi/features/statistics/StatisticsModels.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ internal data class StatisticsTrendPoint(
141141
)
142142

143143
internal data class BookDistributionRow(
144+
val bookId: String,
144145
val title: String,
145146
val coverPath: String?,
146147
val characters: Int,

app/src/test/java/moe/antimony/hoshi/features/statistics/StatisticsCalculationsTest.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,24 @@ class StatisticsCalculationsTest {
259259
assertEquals(75, byDuration.first().percent)
260260
}
261261

262+
@Test
263+
fun distributionRowsCarryBookIdsForStableUiKeys() {
264+
val rows = distributionRows(
265+
listOf(
266+
day(
267+
"2026-06-30",
268+
contributions = listOf(
269+
contribution(bookId = "alpha-id", title = "Same Title", characters = 2_000, seconds = 600.0),
270+
contribution(bookId = "beta-id", title = "Same Title", characters = 1_000, seconds = 300.0),
271+
),
272+
),
273+
),
274+
StatisticsTargetSettings(),
275+
)
276+
277+
assertEquals(listOf("alpha-id", "beta-id"), rows.map { it.bookId })
278+
}
279+
262280
private fun day(
263281
date: String,
264282
characters: Int = 0,

docs/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Historical release notes before v1.3.0 live in [CHANGELOG_ARCHIVE.md](CHANGELOG_
1313
### Fixed
1414

1515
- Keep the Statistics tab visible after enabling it and switching away from Settings.
16+
- Refresh Statistics by-book covers when changing calendar ranges.
1617

1718
## [v1.3.0] - 2026-07-01
1819

0 commit comments

Comments
 (0)