mirror of
https://github.com/permissionlesstech/bitchat-android.git
synced 2026-08-08 06:46:11 +00:00
Preparing an APK is a five-stage operation rendered as a single 0-100 bar. Two of those stages run before the first byte -- a GitHub release lookup, then awaitSelectedNetworkRoute, which blocks on Tor bootstrap -- and neither reported anything, so a download sat at 0% with no explanation for as long as Tor took. The tail had the mirror problem: a SHA-256 pass and a signature check over ~100MB, both sitting at 100%. Carry a DownloadPhase on DownloadState.Downloading, reported from UniversalApkManager through the worker's existing setProgressAsync and mapWorkInfoToState. The About sheet names the phase instead of showing a misleading percentage, and the spinner is indeterminate except while bytes are actually moving. The notification does the same, and a phase change forces a redraw so the every-5% threshold cannot suppress it. The phase crosses a WorkManager Data boundary as a string, so fromKey falls back to Transferring for an absent or unrecognised value -- work enqueued by an older build must not crash a newer one. A stop button is wired to the cancelDownload() that already existed on the downloader interface but had no UI affordance. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> # Conflicts: # app/src/main/java/com/bitchat/android/ui/AboutSheet.kt