mirror of
https://github.com/atsunatsu/Look4Sat.git
synced 2026-10-02 03:15:37 +00:00
fix(cw): restore FFT dispatch (cond_22), CW UI settings entry, default order
Decode page showed stats but empty waterfall and no decoded text: the ported i3/d.k() FFT dispatch was broken by a jadx structure misplacement - the runtime path (k=1 -> a5=0 -> cond_22 single-thread FFT) was replaced by a hallucinated `throw null` else-branch while the real cond_22 code sat in a dead else. Verified against smali (7030-7263): j3.c.q forward FFT + post-processing loop + tail + small- array branch now live in the a5==0 branch. Also: - UiSettingsCard now lists CwDecode (toggle + drag-reorder) between Roaming and Map - unknown screenIds in persisted screenOrder fall back to defaultScreenOrder position (CwDecode lands between Roaming and Map for existing users instead of trailing after Settings) Verified: :feature:cw + :feature:settings + :app compileDebugKotlin BUILD SUCCESSFUL.
This commit is contained in:
1 parent
544515feba
commit
3c5486cc5c
3 files changed
+57
-58
No files matched your search
@@ -1212,65 +1212,54 @@ public final class d {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (i8 == 1) {
|
||||
for (int i23 = i8 - 1; i23 >= 2; i23--) {
|
||||
int i24 = i4 + i23;
|
||||
float f6 = fArr[i24];
|
||||
int i25 = i24 - 1;
|
||||
fArr[i24] = fArr[i25];
|
||||
fArr[i25] = f6;
|
||||
// smali cond_22(a5==0, k=1 时运行时路径!): 单线程 FFT + 后处理
|
||||
// jadx 原把这段错塞进 if(i8!=1) 的 else(死代码), a5==0 的 else 是幻觉(throw null)
|
||||
int i26 = this.f11700a;
|
||||
if (i26 > 4) {
|
||||
j3.c.q(i26, fArr, i4, this.c, this.f11704g, this.f11703e);
|
||||
int i27 = this.f11706i;
|
||||
float[] fArr6 = this.f11703e;
|
||||
int i28 = this.f11704g;
|
||||
int i29 = i8 >> 1;
|
||||
int i30 = (i27 * 2) / i29;
|
||||
for (int i31 = 2; i31 < i29; i31 += 2) {
|
||||
i14 += i30;
|
||||
float f7 = 0.5f - fArr6[(i28 + i27) - i14];
|
||||
float f8 = fArr6[i28 + i14];
|
||||
int i32 = i4 + i31;
|
||||
int i33 = i4 + (i8 - i31);
|
||||
float f9 = fArr[i32];
|
||||
float f10 = f9 - fArr[i33];
|
||||
int i34 = i32 + 1;
|
||||
int i35 = i33 + 1;
|
||||
float f11 = fArr[i34] + fArr[i35];
|
||||
float f12 = (f7 * f10) - (f8 * f11);
|
||||
float f13 = (f8 * f10) + (f7 * f11);
|
||||
fArr[i32] = f9 - f12;
|
||||
fArr[i34] = f13 - fArr[i34];
|
||||
fArr[i33] = fArr[i33] + f12;
|
||||
fArr[i35] = f13 - fArr[i35];
|
||||
}
|
||||
return;
|
||||
int i36 = i4 + i29 + 1;
|
||||
fArr[i36] = -fArr[i36];
|
||||
} else if (i26 == 4) {
|
||||
float f14 = fArr[i4];
|
||||
int i37 = i4 + 2;
|
||||
float f15 = fArr[i37];
|
||||
int i38 = i4 + 1;
|
||||
int i39 = i4 + 3;
|
||||
float f16 = (-fArr[i38]) + fArr[i39];
|
||||
fArr[i4] = f14 + f15;
|
||||
fArr[i38] = fArr[i38] + fArr[i39];
|
||||
fArr[i37] = f14 - f15;
|
||||
fArr[i39] = f16;
|
||||
}
|
||||
float[] fArr5 = new float[i8];
|
||||
throw null;
|
||||
float f17 = fArr[i4];
|
||||
int i40 = i4 + 1;
|
||||
float f18 = fArr[i40];
|
||||
fArr[i4] = f17 + f18;
|
||||
fArr[i40] = f17 - f18;
|
||||
}
|
||||
} else {
|
||||
int i26 = this.f11700a;
|
||||
if (i26 > 4) {
|
||||
j3.c.q(i26, fArr, i4, this.c, this.f11704g, this.f11703e);
|
||||
int i27 = this.f11706i;
|
||||
float[] fArr6 = this.f11703e;
|
||||
int i28 = this.f11704g;
|
||||
int i29 = i8 >> 1;
|
||||
int i30 = (i27 * 2) / i29;
|
||||
for (int i31 = 2; i31 < i29; i31 += 2) {
|
||||
i14 += i30;
|
||||
float f7 = 0.5f - fArr6[(i28 + i27) - i14];
|
||||
float f8 = fArr6[i28 + i14];
|
||||
int i32 = i4 + i31;
|
||||
int i33 = i4 + (i8 - i31);
|
||||
float f9 = fArr[i32];
|
||||
float f10 = f9 - fArr[i33];
|
||||
int i34 = i32 + 1;
|
||||
int i35 = i33 + 1;
|
||||
float f11 = fArr[i34] + fArr[i35];
|
||||
float f12 = (f7 * f10) - (f8 * f11);
|
||||
float f13 = (f8 * f10) + (f7 * f11);
|
||||
fArr[i32] = f9 - f12;
|
||||
fArr[i34] = f13 - fArr[i34];
|
||||
fArr[i33] = fArr[i33] + f12;
|
||||
fArr[i35] = f13 - fArr[i35];
|
||||
}
|
||||
int i36 = i4 + i29 + 1;
|
||||
fArr[i36] = -fArr[i36];
|
||||
} else if (i26 == 4) {
|
||||
float f14 = fArr[i4];
|
||||
int i37 = i4 + 2;
|
||||
float f15 = fArr[i37];
|
||||
int i38 = i4 + 1;
|
||||
int i39 = i4 + 3;
|
||||
float f16 = (-fArr[i38]) + fArr[i39];
|
||||
fArr[i4] = f14 + f15;
|
||||
fArr[i38] = fArr[i38] + fArr[i39];
|
||||
fArr[i37] = f14 - f15;
|
||||
fArr[i39] = f16;
|
||||
}
|
||||
float f17 = fArr[i4];
|
||||
int i40 = i4 + 1;
|
||||
float f18 = fArr[i40];
|
||||
fArr[i4] = f17 + f18;
|
||||
fArr[i40] = f17 - f18;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-1
@@ -567,6 +567,7 @@ private fun UiSettingsCard(
|
||||
R.string.nav_radar to "Radar",
|
||||
R.string.nav_mutual to "Mutual",
|
||||
R.string.nav_roaming to "Roaming",
|
||||
R.string.nav_cw to "CwDecode",
|
||||
R.string.nav_map to "Map",
|
||||
R.string.nav_prefs to "Settings"
|
||||
) // name 必须与 Screen.screenId 一致 (R8 安全)
|
||||
@@ -613,7 +614,12 @@ private fun DragOrderList(
|
||||
// 按 screenOrder 排序(空 = 默认顺序); remember 以 screens 参数为 key, 持久化后重组
|
||||
val ordered = remember(screens, screenOrder) {
|
||||
screens.sortedBy { (_, name) ->
|
||||
screenOrder.indexOf(name).let { if (it == -1) Int.MAX_VALUE else it }
|
||||
// 未知(新页面如 CwDecode 不在旧持久化顺序里): 用默认顺序位置, 再兜底最后
|
||||
screenOrder.indexOf(name).let {
|
||||
if (it != -1) it else com.rtbishop.look4sat.core.presentation.defaultScreenOrder.indexOf(name).let {
|
||||
if (it != -1) it else Int.MAX_VALUE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
val listState = rememberLazyListState()
|
||||
|
||||
Reference in new issue
Block a user