[6.6.0][状态栏] 优化状态管理逻辑

This commit is contained in:
renwj
2024-09-10 15:57:54 +08:00
parent da8dd37c19
commit ae8f0be700
2 changed files with 19 additions and 10 deletions

View File

@@ -180,6 +180,10 @@ object StatusManager {
return
}
listeners[tag] = listener
try {
val all = model.status.value?.second ?: emptyList()
listener.onStatusChanged(all, all)
} catch (ignore: Throwable) {}
}
fun removeListener(tag: String) {

View File

@@ -34,6 +34,21 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra
init()
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> rv.adapter = adapter }
adapter?.let { _ ->
observer?.also { model.status.removeObserver(it) }
model.status.observeForever(Observer<Pair<Status?, ArrayList<Status>>> { data ->
val old = adapter.data
val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) }
val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update))
adapter.data = update
result.dispatchUpdatesTo(adapter)
}.also { observer = it })
}
}
private fun init() {
rv.also { itx ->
itx.itemAnimator?.run {
@@ -49,16 +64,6 @@ internal class StatusView(private val model: StatusModel, ctx: Context): Constra
.horizontalInnerSpace(10.PX)
.build()
)
val adapter = model.status.value?.let { data -> StatusAdapter(context, data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus)}) }?.also { adapter -> itx.adapter = adapter }
adapter?.let { _ ->
model.status.observeForever(Observer<Pair<Status?, ArrayList<Status>>> { data ->
val old = adapter.data
val update = data.second.filter { (it !is IAutopilotPreLaunchStatus) || (it is FSMStatus) }
val result = DiffUtil.calculateDiff(StatusDiffCallback(old, update))
adapter.data = update
result.dispatchUpdatesTo(adapter)
}.also { observer = it })
}
}
// onDetach {