Fix transfer control showing stale data or not responding.

This commit is contained in:
Cody Henthorne 2026-06-12 13:01:18 -04:00
parent fc856dd500
commit 16232e2f9f
2 changed files with 19 additions and 6 deletions

View File

@ -90,13 +90,22 @@ class TransferControlView @JvmOverloads constructor(context: Context, attrs: Att
val newRender = TransferControls.deriveRenderState(newState)
state = newState
if (oldRender != newRender) {
verboseLog { "render $oldRender -> $newRender slides=[${slidesAsLogString(newState.slides)}]" }
if (oldRender == newRender) {
return
}
verboseLog { "render $oldRender -> $newRender slides=[${slidesAsLogString(newState.slides)}]" }
if (oldRender is TransferControlsRenderState.InProgress && oldRender.isProgressOnlyDifference(newRender)) {
progressUpdateDebouncer.publish {
renderState = newRender
if (newRender !is TransferControlsRenderState.Gone) {
visibility = VISIBLE
}
visibility = VISIBLE
}
} else {
progressUpdateDebouncer.clear()
renderState = newRender
if (newRender !is TransferControlsRenderState.Gone) {
visibility = VISIBLE
}
}
}

View File

@ -319,7 +319,11 @@ sealed interface TransferControlsRenderState {
val showPlayButton: Boolean,
val cancelable: Boolean,
val label: TransferControls.ProgressLabel?
) : TransferControlsRenderState
) : TransferControlsRenderState {
fun isProgressOnlyDifference(other: TransferControlsRenderState): Boolean {
return other is InProgress && copy(progress = other.progress, label = other.label) == other
}
}
data class Retry(
val isUpload: Boolean