Repository navigation
v1.1.1
Fixed
- 长中文名改名必然失败:
MAX_NAME_LENGTH原来是 150 字符,而ext4/f2fs的单个文件名上限是 255 字节(一个汉字占 3 字节),86 个汉字以上就会rename失败。现在按 UTF-8 字节数截断(上限 240 字节,留出系统追加后缀的余量),并按字符边界回退,绝不会把汉字/emoji 劈成半个;扩展名始终完整保留。 - 复制失败后界面变成死路:失败时两个按钮都被禁用,状态栏却提示“点发送重试”,根本点不了。现在失败后按钮保持可点,确实可以点“发送/保存”重新复制;建目录失败同理。
- 改名会卡主线程:已交付过的文件再次改名走的是整份
copyFile,之前跑在主线程上,大文件会 ANR;而且「已交付」是在点按钮时登记的,SAF 取消保存这种“什么都没交付”的情况也会误登记。现在改名(含复制)整体派发到 IO 线程,只有真正交付成功才登记路径。 - 取消 SAF 保存后状态栏一直停在“正在保存到下载…”:现在恢复按钮并提示“已取消保存”。
statSize未知时的静默截断:pipe 型 Provider 拿不到文件大小时,原先只要传过字节就判定成功。现在这种情况直接走流复制(读到 EOF 才算完成),同目录的copyFile也补上了字节数校验。- 临时文件名直接拼接原始扩展名:
_incoming + originalExt会把对方应用给的长/含/ \ :的扩展名原样带进路径,现在先经FileNameUtils.sanitizeExt规范化。
Changed
- Toast 适配 Android 12+ 的两行限制(超出会被系统直接截断):发送提示压到两行以内并带上应用名;保存提示里的文件名过长时保留首尾、中间省略,尾部能保住扩展名。
- Android 7–9 的下载目录定位改用
DocumentsContract.buildDocumentUri();写入先试"wt",个别第三方 DocumentsProvider 不支持时退回"w"。 status_rename_failed文案改为提示“名字可能太长”(非法字符其实会被自动替换成_)。- 新增
FileNameUtils.truncateUtf8与 5 个单元测试(长中文名、emoji、字节边界截断)。
本包已签名,证书 SHA-256: 3682cce6d8fbf859b9b0a90ef8818acc747c82bb5f9d97418a4e6749cb6ccaca
校验安装包完整性: sha256sum -c SHA256SUMS.txt