oficina / meet Public

Meters and notices on the CallOverlay surface; gate the new tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Paul Campbell pushed by claude agent, operated by paul@keymail.dev 48095cb01d2f31333d56e5c6402fa65ede973aaa parent f9d98b6
2 files changed, +5 −7
  • Makefile +2 −1
  • native/apple/Sources/CallsKit/AudioMeter.swift +3 −6

CI passed — run details

CI log
=== vet ===
go vet ./...
=== fmt ===
=== test ===
go test ./...
ok  	amadan.net/oficina/calls/callscore	6.677s
?   	amadan.net/oficina/calls/cmd/calls	[no test files]
ok  	amadan.net/oficina/calls/internal/calls	1.420s
ok  	amadan.net/oficina/calls/internal/calls/apns	0.006s
ok  	amadan.net/oficina/calls/internal/calls/hub	0.275s
?   	amadan.net/oficina/calls/internal/calls/icons	[no test files]
ok  	amadan.net/oficina/calls/internal/calls/relay	0.003s
ok  	amadan.net/oficina/calls/internal/calls/seal	0.002s
ok  	amadan.net/oficina/calls/internal/callstest	8.393s
?   	amadan.net/oficina/calls/protocol	[no test files]
=== migration-check ===
go run amadan.net/rastrillo/rastrillo/cmd/rastrillo migration check
rastrillo migration check: models and migrations agree
=== race ===
CGO_ENABLED=1 go test -race ./internal/...
ok  	amadan.net/oficina/calls/internal/calls	8.470s
ok  	amadan.net/oficina/calls/internal/calls/apns	1.019s
ok  	amadan.net/oficina/calls/internal/calls/hub	2.692s
?   	amadan.net/oficina/calls/internal/calls/icons	[no test files]
ok  	amadan.net/oficina/calls/internal/calls/relay	1.015s
ok  	amadan.net/oficina/calls/internal/calls/seal	1.011s
ok  	amadan.net/oficina/calls/internal/callstest	23.982s
diff --git a/Makefile b/Makefile
index 04c8cb5..eb72cda 100644
--- a/Makefile
+++ b/Makefile
@@ -149,6 +149,7 @@ browser:
node --test test/browser/room-share.test.mjs
node --test test/browser/room-mute.test.mjs
node --test test/browser/room-space.test.mjs
+ node --test test/browser/room-hearing.test.mjs
node --test test/browser/room-lane.test.mjs
node --test test/browser/media.test.mjs
node --test test/browser/audio.test.mjs
@@ -171,7 +172,7 @@ native-browser: native-mac
# The gate runs CallsInterop, which native-mac does not build; without
# this it runs whatever binary a previous build left behind.
swift build --package-path native/apple --product CallsInterop
- CALLS_DEEPFILTER_MODEL=$(CURDIR)/native/build/DeepFilterNet3_onnx.tar.gz CGO_ENABLED=0 go test -tags browser -count=1 -timeout 10m -run 'TestNative(MacCallsBrowser|MacChat|MacScreenMotion|BrowserAuthentication)' -v ./internal/callstest/
+ CALLS_DEEPFILTER_MODEL=$(CURDIR)/native/build/DeepFilterNet3_onnx.tar.gz CGO_ENABLED=0 go test -tags browser -count=1 -timeout 10m -run 'TestNative(MacCallsBrowser|MacChat|MacScreenMotion|BrowserAuthentication|MacAudioSelfTest)' -v ./internal/callstest/
# Two apps in one call, sharing screens to each other. Separate from
# native-browser because two unsigned apps on one Mac do not reliably
diff --git a/native/apple/Sources/CallsKit/AudioMeter.swift b/native/apple/Sources/CallsKit/AudioMeter.swift
index bc62e7c..c8e48d6 100644
--- a/native/apple/Sources/CallsKit/AudioMeter.swift
+++ b/native/apple/Sources/CallsKit/AudioMeter.swift
@@ -233,7 +233,7 @@ public struct AudioLevelBars: View {
HStack(alignment: .bottom, spacing: 2) {
ForEach(0..<MeterScale.steps, id: \.self) { bar in
RoundedRectangle(cornerRadius: 1)
- .fill(bar < step ? Color.white : Color.white.opacity(0.3))
+ .fill(bar < step ? Color.white : CallOverlay.secondaryText.opacity(0.4))
.frame(width: 3, height: height * CGFloat(bar + 2) / CGFloat(MeterScale.steps + 1))
}
}
@@ -253,7 +253,7 @@ public struct TileAudioStatus: View {
case .meter(let step)?:
AudioLevelBars(step: step)
.padding(.horizontal, 7).padding(.vertical, 5)
- .background(.black.opacity(0.7), in: Capsule())
+ .callOverlaySurface(Capsule())
case .noSound(let name)?:
AudioLine(
text: AudioWords.noSound(from: name), systemImage: "speaker.slash.fill",
@@ -315,10 +315,7 @@ struct AudioLine: View {
}
.font(.caption.weight(.semibold)).foregroundStyle(.white)
.padding(.horizontal, 8).padding(.vertical, 4)
- .background(.black.opacity(0.7), in: RoundedRectangle(cornerRadius: 8, style: .continuous))
- .overlay(
- RoundedRectangle(cornerRadius: 8, style: .continuous).strokeBorder(
- .white.opacity(0.18), lineWidth: 1))
+ .callOverlaySurface(RoundedRectangle(cornerRadius: 8, style: .continuous))
}
}