f344f00e9d
Previews (CallScreenPreviews.kt): - PreviewCallingScreen: outgoing call "Calling..." state - PreviewConnectingScreen: WebRTC connecting state - PreviewCallEndedScreen: call ended state - PreviewIncomingCallScreen: incoming call with accept/reject - PreviewConnectedCallScreen: active call with controls - PreviewConnectedCallMuted: muted mic + speaker on state All use ThemeComparisonColumn for dark/light side-by-side Unit tests - quartz (CallTagsTest.kt): - CallIdTag parse/assemble/roundtrip, edge cases (empty, wrong name) - CallTypeTag parse voice/video, unknown types, roundtrip - CallType.fromString validation Unit tests - quartz (CallEventsTest.kt): - All 6 event kinds have correct constants (25050-25055) - CallOfferEvent.build includes call-id, call-type, p, expiration tags - Expiration is 20 seconds - Answer/ICE/Hangup/Reject/Renegotiate template content verification Unit tests - amethyst (IceCandidateSerializationTest.kt): - Parse ICE candidate JSON with all fields - Parse with different sdpMLineIndex - Parse with missing fields (defaults) - Serialize produces valid JSON - Roundtrip serialization preserves all fields https://claude.ai/code/session_017hZm7yu7CzmcQgZGSaqSXS