v0.5.6 — 云端直接使用 + 下载遮罩动画 + 传输进度弹窗
新增
-
云端下载遮罩与退场动画 — 点击云卡片先显示整卡黑色半透明「下载中…」遮罩(
cloud_mask,防重复点击),下载成功后遮罩用ValueAnimator驱动clipBounds自上而下擦除退场(0.40s),动画结束才刷新网格并自动分享;失败即时摘遮罩并 Toast;下载状态存MemeGridAdapter伴生对象downloadingIds,reloadData重建 adapter 不丢遮罩 -
云角标改为云朵图标 — 云行左下角「云」文字角标替换为与桌面端一致的云朵描边图标(新增
ic_cloud白色描边 +bg_cloud_badge半透明黑圆底,18dp 圆形徽标) -
标签对话框美化 — 无匹配标签时显示空态提示「暂无匹配标签,输入后回车添加」(
tv_tag_empty,bind()按过滤结果切换);输入框加高、整体边距对齐标题 24dp -
云端直接使用(对齐桌面端 cloud_direct) —
ConfigStore.DEFAULTS新增cloud_direct/cloud_thumb_auto_push(均默认开);Meme.kt新增cloud字段(云行 id =-(清单位置+1)负数保证 adapter tag 唯一);CloudSync新增云模块:cloud-index.json清单缓存(内存 + dataDir 双层,loadCloudManifest/refreshCloudManifest失败保留旧缓存,clearCloudCache在sync_type/cloud_direct变更时清理)、cloudMissing差集(isSafeRemoteFname+ 64 位小写isSafeSha校验、跳过已本地,携带 tags/分组全路径/收藏)、mergeCloudOrder合并(不在清单的本地行按原序排最前,其余按清单序穿插、云行补尾)、prefetchCloudThumbs预取thumbnails/{sha}.webp(失败整体重试一遍)、autoPushThumbs补传(三重门控 cloud_direct + 开关 + sync_type,远端 listFiles 差集,缺失项用Thumbnailer.cloudThumbWebpBytes生成 150px WebP q85 上传,list 为空回退单查)、downloadCloudMeme(状态对齐桌面端download_meme,流式 SHA-256 比对 → 20MiB/2560px 上限 → 按清单文件名去重入库 →cloudBackfill后补标签并集/分组链逐段复用/收藏 INSERT OR IGNORE,busy 防重入);主界面默认视图合并云行(左下角「云」角标,隐藏「⋯」/勾选/handle),点击云卡片下载成功后刷新网格并自动走分享链路;整理模式全选与拖拽排序持久化过滤id > 0;设置页「云端同步」新增sw_cloud_direct/sw_cloud_thumb_push两开关,saveConfig首配sync_type时弹「开启云端直接使用?」确认(开启=勾选、关闭=取消勾选、取消/Esc 保持当前勾选,均经doSaveConfig落盘,对齐桌面端showConfirm) -
新增
CloudDirectTest(8 例:合并顺序 extras-first / 清单穿插 / 云尾、差集跳过本地与不安全名 / 缺 sha、名字回退 / 收藏 / 分组全路径、负数 id、清单序、isSafeSha校验、DEFAULTS默认键) -
Thumbnailer新增cloudThumbFile/cloudThumbBitmap/cloudThumbWebpBytes/decodeFit云缩略图读写辅助 -
侧栏滑动手势 — 屏幕左缘(≤16dp)右滑 ≥64dp 展开侧栏,侧栏内左滑 ≥64dp 收起(均要求水平主导),对齐桌面端侧栏条滑动手势;
MainActivity.dispatchTouchEvent仅观察不拦截子视图,触发后给子视图补发 CANCEL 并吞掉 UP,避免滑动收起时误触分组行点击 -
同步与局域网传输进度弹窗 — 进度对话框抽为共享组件
SyncProgressUi.kt(SyncProgressDialog:字节制百分比封顶 99、未知总量回退文件数、实时速度、当前文件、「后台运行」;dialog_sync_progressmeta 行拆为百分比 + 速度并排,对齐桌面端样式);设置页云端上传/下载从按钮占位改为走进度对话框(受show_upload_progress/show_download_progress门控,runCloudSync);局域网拉取/上传/配置/密钥同步(lanOp/configOp/runKeyOp)均弹进度对话框(总是显示,不接开关) -
局域网帧附带传输总量(meta) —
LanClient.pull/push按待传条目预算files_total/bytes_total并逐条目帧附带meta: {files_total, bytes_total}(pull_file/push_file/get_config/send_config,纯增量协议旧端自动忽略),电脑端累计实际收发量后在设置页显示进度;每条目finally中progress.report保证恰好一次回调 -
标签随同步清单下发与合入(对齐桌面端) —
CloudSync.buildManifest每条memes[]条目写入tags: [...]数组,受新增设置「将标签写入同步清单」(manifest_include_tags,默认开)门控,关闭时条目不含该键;不再输出顶层tag_map,读侧仍兼容旧tag_map并回退;云 pull(remove_local与正常两分支)新增applyRemoteTags(原仅 LAN pull 调用),条目tags经新增MemeDb.mergeMemeTags并集只增合入本地,本地独有标签与删除不同步,该步骤不受开关限制 -
设置页「将标签写入同步清单」开关 — 云端同步区新增
sw_manifest_tags(布局 +loadConfig/saveConfig+ 文案三件套),默认开 -
收藏随同步清单下发与合入(对齐桌面端) —
CloudSync.buildManifest新增顶层favorite文件名数组(无收藏为[],取自db.search(favoriteOnly=true)),受新增设置「将收藏夹写入同步清单」(manifest_include_favorites,默认开)门控,关闭时整个键不写入;云 pull(remove_local与正常两分支)与LanClient.pull均调用新增applyRemoteFavorites,经纯函数favoriteFilenamesFrom(非字符串/isSafeRemoteFname过滤)+ 新增MemeDb.addFavorite(INSERT OR IGNORE)并集只增合入本地收藏,该步骤不受开关限制 -
设置页「将收藏夹写入同步清单」开关 — 云端同步区新增
sw_manifest_favorites(布局 +loadConfig/saveConfig+ 文案三件套),默认开 -
新增
ManifestFavoriteTest(5 例:键缺失/非 list 为空、非字符串过滤、路径穿越/绝对路径/隐藏名拒绝、安全名保序) -
新增
ManifestTagsTest(6 例:条目 tags 优先、空数组不回退、tag_map回退、双缺失为空、非字符串/空白过滤、isSafeRemoteFname路径穿越拒绝),引入 JVM 测试依赖org.json:json
修复
- 弹窗四角露白 —
AlertDialog.OhMyMeme原用android:background提供bg_dialog圆角背景,该属性不作用于窗口,PhoneWindow 回退系统白色 inset 背景导致弹窗四角露白;改用android:windowBackground,并补android:textColorHint(muted)与android:windowTitleStyle(17sp 加粗、单行省略) - 弹窗按钮文字色不生效 — 框架
android.app.AlertDialog的 AlertController 只认android:buttonBar*Style,原主题只设无前缀 appcompat 版本导致「确定/取消」显示默认白色;两种前缀均补齐(确定 accent 蓝、取消 muted),title/colorPrimary 同步对齐 - 设置页上传/下载按钮状态 — 原
runSync完成后永远把btn_sync_push恢复为默认文本(即使本次跑的是下载),改为按btnId恢复对应按钮文本
其他
- 版本号 — versionCode 13 / versionName 0.5.6