github OhMyMeme/OhMyMeme-Android 0.5.6

3 hours ago

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_progress meta 行拆为百分比 + 速度并排,对齐桌面端样式);设置页云端上传/下载从按钮占位改为走进度对话框(受 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

Don't miss a new OhMyMeme-Android release

NewReleases is sending notifications on new releases.