Fixed the update card reappearing for a moment after tapping it: the tap
re-ran the status check and republished NeedsUpdate before the download
service reported Loading, so the card flashed back in that gap.
Fixed the update card never returning after cancelling a download: both the
Cancelled branch and cancelDownload() forced the status to UpToDate, and the
card's tap is the only thing that re-evaluates it. The status is now
re-derived on the Cancelled to Idle transition, once the partially downloaded
archive - which carries today's date and would otherwise be read as a current
dictionary - has been cleaned up.
Fixed the download progress bar staying at 0% far too long: progress was
published in 3-percentage-point buckets and then scaled by the download stage
weight, so the bar only moved after about 7% of the archive had transferred.
Rebuilt the search field on the Material 3 TextField instead of a hand-rolled
BasicTextField inside a Surface, so it picks up the standard container, cursor
and icon treatment. Dictionary entry titles in the search field, the results
list and the article bar now share a dictionaryTitleLarge style that keeps the
font padding, so their line height lines up with the Material 3 text field.
- Fixed handling of an HTML "not found" payload served with HTTP 200 for a
missing daily build: DictionaryDownloader validates Content-Type and the
gzip magic bytes and falls back to the previous day's build.
- Fixed the update check counting a text/html HEAD response as an available
build (DictionaryChecker).
- Fixed dictionary source matching: sources are matched by normalized identity
key and the normalized template is handed to the downloader in
downloadSpecificSources (DictionaryRepository).
- Fixed the dictionary progress indicator animating backwards to 0% during its
exit animation; it now stays frozen while it fades out
(DictionaryProgressSection).
- Fixed slow first composition of every screen by extending the checked-in
baseline profile to the settings/dictionary flow and the Compose framework:
the Compose alpha AARs ship near-empty profiles, so every first composition
ran interpreted.
AboutLibraries fetched license text over the network at build time, which is unavailable on F-Droid's isolated buildserver and produced different license identifiers (SPDX id vs. hash fallback) between environments, breaking APK reproducibility.