mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-08-07 05:48:09 +01:00
Fix transfer control showing stale data or not responding.
This commit is contained in:
+14
-5
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user