Allinea iOS a i18n Android 2.0.5 e aggiunge monitoraggio termico nativo.

Completa L10n su login/hub/wizard/broadcast e introduce ThermalStateManager su iOS/Android con degradazione qualità e indicatore in overlay.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Emiliano Frascaro
2026-07-24 11:19:37 +02:00
co-authored by Cursor
parent ff4de33cc5
commit ea5da1eb86
46 changed files with 2675 additions and 1241 deletions
@@ -0,0 +1,49 @@
import XCTest
@testable import MatchLiveTv
@MainActor
final class ThermalAdaptationTests: XCTestCase {
func testSeriousReducesBitrateAndFps() {
let baseline = BroadcastConfig(
rtmpUrl: "rtmp://localhost/live/key",
videoBitrate: 2_500_000,
fps: 30
)
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .serious)
XCTAssertEqual(adapted.videoBitrate, 1_875_000)
XCTAssertEqual(adapted.fps, 24)
}
func testCriticalReducesFurther() {
let baseline = BroadcastConfig(
rtmpUrl: "rtmp://localhost/live/key",
videoBitrate: 2_500_000,
fps: 30
)
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .critical)
XCTAssertEqual(adapted.videoBitrate, 1_250_000)
XCTAssertEqual(adapted.fps, 20)
}
func testNominalKeepsBaseline() {
let baseline = BroadcastConfig(
rtmpUrl: "rtmp://localhost/live/key",
videoBitrate: 2_500_000,
fps: 30
)
let adapted = ThermalStateManager.adaptedConfig(from: baseline, for: .nominal)
XCTAssertEqual(adapted.videoBitrate, baseline.videoBitrate)
XCTAssertEqual(adapted.fps, baseline.fps)
}
func testThermalStateLabels() {
AppLanguage.current = .it
XCTAssertEqual(ThermalState.nominal.displayLabel, L10n.t("thermal.state.nominal"))
XCTAssertEqual(ThermalState.fair.displayLabel, L10n.t("thermal.state.fair"))
XCTAssertEqual(ThermalState.serious.displayLabel, L10n.t("thermal.state.serious"))
XCTAssertEqual(ThermalState.critical.displayLabel, L10n.t("thermal.state.critical"))
AppLanguage.current = .en
XCTAssertEqual(ThermalState.nominal.displayLabel, "Temperature OK")
AppLanguage.current = .system
}
}