a763592ace16f8d18232d0007727f7bbd011ede7
三处「对用户不够诚实」的措辞缺陷,各自独立修复。行为上只多了一处「少说一句」, 其余语义一字未改。 ① 分享告知两句叠加(ChatScreen.shareNoticeFor) 实机读到的原文是「有 2 个文件读不到,未发送;分享的内容是空的,没有可发送的内容」, 读起来像两个不同的问题。可这两句说的是不同的免责,而「认下了地址却读不到」本身就蕴含 「没有可发送的内容」——叠上去一个字都没多说。故丢件计数为真时不再追加「内容是空的」那句; 其余组合保持今天的行为(只有丢件计数时只说丢件计数;「读不进来」与丢件计数说的是两件事, 照样并列)。KDoc 里记下了这一档今天的真实出口:worthDelivering 要求 isEmpty 的分享必须 有丢件计数或 contentUnreadable 才值得往下走,而后者已被「读不进来」那一档接走, 所以那句加了前提之后一次都不会再出现。 ② deliver 的 WS 分支:连接未就绪不等于发送失败(ChatViewModel) sendChat 回 false 有三种成因(连接状态不是 Connected / socket 对象已空或已被 cancel / 序列化抛了异常),此前共用一句「发送失败,请重试」,用户无从分辨「这条根本没上路」 与「发出去了但失败了」,而后者在连接未就绪时不是事实。现在按失败那一刻的连接状态分开说: 不是 Connected 时说「还没连上,这条没发出去,请稍后手动重试」,仍是 Connected 时逐字保持 「发送失败,请重试」。回滚照旧(摘掉气泡、内容退回输入栏、记下幂等键),没有自动重发, 普通发送的其它语义没动。判据抽成纯函数 sendFailureMessage(WsState),用例覆盖 WsState.entries 的每一个取值。连接状态取 socket 自己的 StateFlow——那正是 sendChat 判的值, 不用界面镜像过来的 ChatUiState.connection,免得晚一帧读到 Connected 反而说错话。 ③ WsState.Offline 不再等一句永不到来的「连上」(ShareLanding / ChatScreen) Offline 是终态(握手 401 且续不上、或缺少 token / 服务器地址),它不会自动重连。 对它说「连上后自动发出」,用户等的是一个永远不会到来的连接——拿一句不兑现的承诺糊住 一个需要他动手的状况,比不说更糟。新增 ShareLanding.TellOffline:等够久、同一轮只说一次 这些时机与可恢复的那几档完全一致,只有措辞不同:「现在处于离线,需要重新登录或检查 服务器地址;分享的内容一个字节都没发出去,不会丢」。W38 的落地时机一个字没改: 仍然不 take()、不发送,连接恢复后照旧自动补发。哪档配哪句由纯函数 shareWaitingNotice 定, 不再散在 Compose 的 when 里,于是「Offline 换口径」这件事不需要组合界面就能测。 测试:ShareNoticeTest 把「两句都在」的断言改成新事实并穷举同族组合;ShareLandingTest 新增 Offline 的差异、时机与文案用例;新增 SendFailureMessageTest 覆盖每一种 WsState。 assembleDebug 成功;testDebugUnitTest 1101 条,failures 0 / errors 0。
Releases
5
Alpha_v0.1.0_4
Latest