fix(schedule): respect voice and system safe areas - #293
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
审阅了本 PR 的完整固定范围 diff(22debd352f833be8098f27df82b6529a8a4358c5...518abbf4ae5942e2c4f4158f08b6dde3c5b4b7c6),重点核对了悬浮语音条、通话页、日历滚动留白、详情抽屉安全区,以及回复关闭交互在各调用方之间的布局与行为契约。未发现满足审阅阈值的新增正确性、兼容性、安全性或性能问题。
验证:git diff --check 通过;定向 Jest 和 npm run typecheck 未能执行,因为当前工作区缺少可执行的本地依赖(jest/tsc 返回 Permission denied)。
518abbf to
5c39008
Compare
There was a problem hiding this comment.
Review conclusion
Reviewed the complete fixed-range diff covering the floating voice bar, immersive call screen, calendar safe-area spacing, detail-sheet insets, shared layout constants, and associated tests. I found no actionable correctness, compatibility, or reliability regressions introduced by this change.
Verification: git diff --check passes. The five targeted Jest suites could not be executed because frontend/node_modules is absent and the repository-local jest binary is unavailable in this workspace.
|
【验收标准未完成 / 阻塞合并】PR 使用 |
|
【安全区验证不足 / 阻塞合并】新增测试大多只把 |
|
【Verification 说明需补齐】PR 只列定向 Jest 5 个套件和 typecheck,没有列出 lint、Prettier、完整 frontend test、Android/iOS 构建或 Appetize/真机结果;而本次改动涉及平台分支和系统安全区,单纯 JS 单测不足以证明设备行为。 |
Wintercom
left a comment
There was a problem hiding this comment.
按照 git_rules.txt 的合并标准,本轮需要先处理以下过程与验证项:
- PR 使用
Closes #291,但 Issue 中四项核心安全区验收仍未勾选,当前不满足关闭条件。 - 测试主要断言 style 数字,通话页仍只测零 inset;缺少 top/bottom 非零、Android/iOS 分支和真实可滚动/可点击验证。
- Verification 未包含完整前端门禁、平台构建和真实 Android/iOS 安全区验收信息。
代码层面未发现额外高置信逻辑缺陷;具体过程问题已使用 gh 逐条评论。
53a4939 to
b7a8d08
Compare
…ability Code review (Wintercom): new tests mostly mocked useSafeAreaInsets as top=0/bottom=34 and only asserted the computed style numbers; VoiceCallScreen's test fixed every inset at 0, never exercising the PR's core notch/Home-Indicator behavior. Neither Platform.OS nor insets.top were ever varied anywhere, so ScheduleCalendarScreen's Android edge-to-edge branch (topSafeAreaPadding = Platform.OS === 'android' ? insets.top : 0) was never actually executed by any test. - VoiceCallScreen.test.tsx: added testID hooks on the nav/actions containers and it.each cases for both a small (clamped-to-fallback) and a large (real) top/bottom inset. - ScheduleCalendarScreen.test.tsx: added Android-applies-insets.top and iOS-stays-at-0 (native handles it) cases. - ScheduleCalendarScreen.test.tsx: strengthened the existing bottom-space test to also render a real occurrence and prove it's actually reachable and pressable (opens the detail sheet), not just that a padding number matches -- a padding number alone can't prove the last item isn't hidden behind the floating voice bar. Every new assertion was mutation-tested: broke the corresponding production line, confirmed the test failed, reverted. ScheduleDetailSheet's existing bottom-inset test (fixed field set, not a dynamic list) was left as-is -- its non-zero, non-clamped padding assertion already exercises the real computation, and there's no per-item occlusion risk to prove the way there is for the calendar's dynamic list.
Closes #291
概述
底部语音入口恢复为悬浮深色条后,固定底部间距会让它贴近 Android 手势导航;日历滚动区和详情抽屉也没有为浮动控件、系统手势区预留空间。连续通话页作为绝对全屏层,顶部收起按钮和底部操作区同样只使用固定间距。
本 PR 把悬浮语音入口、通话页、日历和详情抽屉统一按设备安全区布局,不改语音协议或日程业务行为。
改动
VoiceCallScreen:顶部收起区和底部“打断当前对话/结束对话”操作区按系统安全区布局AssistantVoiceOverlay/PushToTalkBar:按住说话入口保持悬浮深色条,并随底部 inset 上移;点击回复外的空白处关闭回复的既有交互保留floatingVoiceBarLayout.ts:集中定义悬浮条高度、底部偏移和日历所需的滚动留白,避免控件样式与页面留白脱节ScheduleCalendarScreen:底部为悬浮语音条和系统导航区预留空间;Android 边到边模式避开顶部状态栏,iOS 保留原生自动安全区调整ScheduleDetailSheet:详情末尾内容避开 Home Indicator/手势导航区验证
npx jest --runInBand定向覆盖语音入口、通话页、日历和详情抽屉:5 个套件、23 个用例全过npm run typecheck全绿本次不含
示例图
已使用小米 14 手机进行真机测试;

