fix(radar): 过境结束后自动切换到下一个过境
根因: collectPassAndStartTickLoop() 启动时调用 findCurrentPass() 获取当前过境, 之后进入 while(isActive) 循环每秒 tickPass(),但从不重新检查过境是否结束。 结果:过境 LOS 后雷达页面继续显示旧卫星位置(冻结在地平线),用户必须 手动返回过境列表重新点击下一个过境。 触发条件: 1. 用户在过境进行中打开雷达页面 2. 过境结束时用户仍停留在雷达页面 3. passes 列表中存在后续过境 修复: 每次 tick 开始时检查 timeNow > pass.losTime,如果过境已结束则调用 findCurrentPass() 查找下一个过境。findCurrentPass() 的三级回退逻辑 (精确匹配 → 时间窗口 → 同卫星 → 第一个)保证能拿到合理的下一个过境。 如果找到且与当前 pass 不同,则重新 loadPassData() 加载新过境的电台和轨迹。 影响: 雷达页面现在会无缝切换到下一个过境,用户体验接近实时卫星跟踪软件。 如果 passes 列表为空(所有过境都结束),页面保持最后状态不崩溃。
This commit is contained in:
1 parent
9cfa238e5c
commit
a757474b06
1 file changed
+11
-2
@@ -127,9 +127,18 @@ class RadarViewModel(
|
||||
|
||||
private fun collectPassAndStartTickLoop() {
|
||||
viewModelScope.launch {
|
||||
val pass = findCurrentPass() ?: return@launch
|
||||
val allRadios = loadPassData(pass)
|
||||
var pass = findCurrentPass() ?: return@launch
|
||||
var allRadios = loadPassData(pass)
|
||||
while (isActive) {
|
||||
val timeNow = System.currentTimeMillis()
|
||||
// If current pass has ended, switch to next pass
|
||||
if (timeNow > pass.losTime) {
|
||||
val nextPass = findCurrentPass()
|
||||
if (nextPass != null && nextPass != pass) {
|
||||
pass = nextPass
|
||||
allRadios = loadPassData(pass)
|
||||
}
|
||||
}
|
||||
tickPass(pass, allRadios)
|
||||
delay(1000.milliseconds)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user