|
|
3ab50ec900
|
assets: add dog park easter egg background video
|
2026-06-16 15:41:28 +08:00 |
|
|
|
1caea057c5
|
build: add media3 exoplayer dependency for dog park easter egg
|
2026-06-16 15:38:46 +08:00 |
|
|
|
5714802c89
|
design: add dog park easter egg spec
|
2026-06-16 15:29:34 +08:00 |
|
|
|
bd4dad4794
|
chore(profile): 重新生成 Baseline/Startup Profile
benchmark buildType 已关闭 R8 混淆,重新生成 profile 后
plus.rua.project 下类名保持原始可读签名,避免 release
打包时 profile 匹配风险。
|
2026-06-16 14:41:25 +08:00 |
|
|
|
a731507b3b
|
feat: 月视图年月支持日期选择器跳转
- MonthHeader 新增 onYearMonthClick 回调,点击年月文字打开日期选择器
- CalendarMonthView 集成 DatePickerDialog,选择日期后调用 selectDate
- 复用现有 CalendarPager 动画,跨月跳转时自动平滑翻页
同时包含之前的改动:
- 临时隐藏 SplashActivity 入口,改由 MainActivity 作为 LAUNCHER
- benchmark build type 关闭 R8 混淆与资源压缩,保证 profile 可读性
|
2026-06-16 14:19:41 +08:00 |
|
|
|
85bfba241c
|
fix(splash): use dedicated raster icon asset for splash screen
|
2026-06-16 13:32:00 +08:00 |
|
|
|
fd8e1fc1cb
|
fix(splash): use raster launcher icon to avoid adaptive-icon crash
|
2026-06-16 13:25:19 +08:00 |
|
|
|
be46d4b512
|
chore(splash): remove unused core-splashscreen catalog entries and fix docs
|
2026-06-16 13:20:19 +08:00 |
|
|
|
b5a2ccf151
|
refactor(splash): remove unused SplashScreen API dependency and theme
|
2026-06-16 13:17:17 +08:00 |
|
|
|
b5e60e8bf8
|
docs(app): update AGENTS.md for SplashActivity
|
2026-06-16 13:14:35 +08:00 |
|
|
|
21327d572b
|
feat(splash): add custom SplashActivity with background image
|
2026-06-16 13:11:43 +08:00 |
|
|
|
de329c2020
|
feat(splash): add dimmed dark-mode splash background
|
2026-06-16 12:36:49 +08:00 |
|
|
|
8204ae15cf
|
feat(splash): use SplashScreen API with custom background
|
2026-06-16 12:27:12 +08:00 |
|
|
|
fab3c2d763
|
feat(splash): make SplashActivity the launcher entry
|
2026-06-16 12:11:53 +08:00 |
|
|
|
423e68ec19
|
feat(splash): add splash theme with opaque windowBackground
|
2026-06-16 12:09:26 +08:00 |
|
|
|
0edcc005bc
|
feat(splash): add SplashActivity with 400ms delay
|
2026-06-16 12:00:02 +08:00 |
|
|
|
1f2fc8644f
|
feat(splash): add reusable SplashScreen composable
|
2026-06-16 11:51:00 +08:00 |
|
|
|
d98579c2bf
|
feat(splash): add launch background webp asset
|
2026-06-16 11:43:56 +08:00 |
|
|
|
f6b1ed7368
|
chore(baseline): 重新生成 Baseline Profile 与 Startup Profile
|
2026-06-16 10:51:38 +08:00 |
|
|
|
b242fb8ecc
|
feat(benchmark): 拆分 Baseline Profile 与 Startup Profile 生成方法
|
2026-06-16 10:37:58 +08:00 |
|
|
|
ade852208b
|
docs: 同步 Baseline Profile 与 Startup Profile 双产物说明
|
2026-06-16 10:17:21 +08:00 |
|
|
|
6f4fa68f0d
|
build(benchmark): 同时复制 Baseline Profile 与 Startup Profile 到 :core
|
2026-06-16 09:50:13 +08:00 |
|
|
|
bcc59ca7a0
|
refactor(benchmark): remove dead code and polish comments
|
2026-06-15 19:18:12 +08:00 |
|
|
|
91068ded1c
|
chore(baseline): regenerate baseline profile after startup optimizations
|
2026-06-15 19:17:16 +08:00 |
|
|
|
499a2eb0c7
|
build(benchmark): make baseline generation stable on emulator
|
2026-06-15 19:17:11 +08:00 |
|
|
|
66be0be3c4
|
test(benchmark): add StartupBenchmark for cold launch timing
|
2026-06-15 17:30:27 +08:00 |
|
|
|
ccffcfb052
|
feat(app): integrate SplashScreen and reportFullyDrawn in MainActivity
|
2026-06-15 17:17:20 +08:00 |
|
|
|
7ae0e80baf
|
feat(theme): add Theme.YaYa.Starting aligned with Compose background
|
2026-06-15 17:08:17 +08:00 |
|
|
|
e97c2f3015
|
build: add androidx.core:core-splashscreen 1.0.1
|
2026-06-15 17:00:53 +08:00 |
|
|
|
5bf8a85f7a
|
Merge branch 'feature-birthday-crown'
|
2026-06-15 16:48:24 +08:00 |
|
|
|
3ca0d334e7
|
refactor: remove redundant icon content description and reorder DayCellImpl params
|
2026-06-15 16:45:58 +08:00 |
|
|
|
94861dc2f7
|
style: apply spotless formatting
|
2026-06-15 16:41:07 +08:00 |
|
|
|
de47509a32
|
feat: show tilted birthday crown with click bounce animation
|
2026-06-15 16:36:13 +08:00 |
|
|
|
564e4e3960
|
refactor: 清理无效 ProGuard 规则、调试日志,trace 解耦 VM
P0 正确性与工程卫生修复:
- 删除 core/proguard-rules.pro 中全部无效的 -keepclassmembers 规则
(LunarCache.getOrCompute 实为实例 suspend 方法,generateMonthDays 实为
private,签名均不匹配,属 placebo);同时移除 core/build.gradle.kts
release block 内重复的 consumerProguardFiles 声明
- 将 7 处 composeTrace 调用从 CalendarViewModel 移至 Compose 层
(MenuItem.onClick / onMonthClick / BottomCard 回调),VM 不再依赖
android.os.Trace,可在纯 JVM 环境测试无需兜底
- 删除 CalendarViewModel 与 4 个 UI 文件中约 30 处 logd 调用及其辅助
变量/ SideEffect/ DisposableEffect (AnimLog.kt 工具函数保留)
- 删除 CalendarViewModel.getIsoWeekNumber 不可达的 weekNumber < 1 递归分支
- 修正 MainActivity.kt setContent 块缩进错位
- 同步 README: sketch 渲染 GIF→动画 WebP,补提 :macrobenchmark 模块;
删除 AGENTS.md 顶部过时的「README 与实际不符」注释
验证: spotlessApply UP-TO-DATE, testDebugUnitTest 全过,
assembleDebug + assembleRelease (R8) 均成功
|
2026-06-15 16:24:38 +08:00 |
|
|
|
f33e68d1db
|
feat: compute birthday flag in LunarCache
|
2026-06-15 16:22:47 +08:00 |
|
|
|
ef785a3ca7
|
docs: correct tyme4kt API details in birthday crown spec and plan
|
2026-06-15 16:18:38 +08:00 |
|
|
|
06ac30e6d2
|
feat: compute birthday flag in LunarCache
|
2026-06-15 16:10:22 +08:00 |
|
|
|
7404bdfc28
|
feat: add birthday crown vector drawable
|
2026-06-15 16:03:41 +08:00 |
|
|
|
5c8839dea2
|
chore: ignore .worktrees directory
|
2026-06-15 16:01:38 +08:00 |
|
|
|
2427ae18a4
|
docs: add birthday crown implementation plan
|
2026-06-15 15:59:17 +08:00 |
|
|
|
c82ab26944
|
docs: add birthday crown feature design spec
|
2026-06-15 15:53:37 +08:00 |
|
|
|
825eb526de
|
feat(about): 将关于页面背景图优化为 WebP
|
2026-06-15 15:40:34 +08:00 |
|
|
|
9a09be56ef
|
feat(about): 将 xiaogou_bg1.jpg 设为关于页面背景
|
2026-06-15 15:04:58 +08:00 |
|
|
|
9d1999661c
|
refactor(app): 缩小 Adaptive Icon 前景鸭子尺寸
- 将鸭子+日历缩放至 60dp 安全圆内,留出更多浅蓝背景边距
- 保持透明前景,背景由 @drawable/ic_launcher_background 单独提供
|
2026-06-15 14:51:10 +08:00 |
|
|
|
3f8eb1db05
|
fix(app): 修复 Adaptive Icon 前景加载失败及前景含背景问题
- mipmap-anydpi-v26 XML 直接引用 @mipmap/ic_launcher_foreground
- 删除非法的 drawable/ic_launcher_foreground.xml(<mipmap> 不是合法 drawable 根元素)
- 移除无效的 <monochrome> 引用(彩色位图不能用作主题化单色层)
- 重新生成带透明通道的前景 WebP,仅保留鸭子+日历
|
2026-06-15 14:46:12 +08:00 |
|
|
|
aba2086c22
|
Merge branch 'fix/image-management-cleanup' into main
图片资源管理优化: 清理无用资源、消除硬编码、补齐 Adaptive Icon、校正文档
7 个提交:
- 删除 app/assets 中无引用的 app_icon PNG (设备 -516KB)
- 删除 core/assets/gifs/.omc 工具残留 (gitignored, 物理清理)
- gifs/→animations/、AnimatedGif→AnimatedWebp (名实相符)
- WebP 文件列表改构建期 BuildConfig 注入 + 测试守卫 (消除 (1..152) 硬编码)
- 新增 Adaptive Icon (anydpi-v26, 修复 API 26+ 启动器裁切)
- 校正 4 份 assets/AGENTS.md (消除 GIF/镜像错误描述)
- 修复审查发现 (README 坏链 + 原图归宿说明)
验证:
- 146 单元测试 0 失败
- :app:assembleDebug + spotlessCheck 全过
- APK -489KB (24,416,752 → 23,915,583)
- Adaptive Icon 模拟器实机验证 (圆形遮罩下背景填满、主体居中无裁切)
- Task 4 守卫突变验证 (硬编码 1..150 时测试立即 FAIL)
|
2026-06-15 14:15:49 +08:00 |
|
|
|
c591bc389b
|
docs: 修复代码审查发现的问题(README 坏链 + 原图归宿说明)
审查发现 2 个问题:
1. README.md:6 坏链 [必须修]
- <img src="app/src/main/assets/app_icon.png"> 指向 Task 1 已删的 PNG
- 改为 core/src/main/assets/app_icon.webp (现存的应用内图标, 512px)
- 加 width/height=128 限制展示尺寸 (原图无尺寸约束会撑满)
2. app/assets/AGENTS.md 原图归宿说明模糊 [建议修]
- 原写"源文件放仓库外或 .assets-source/" 但两者都不存在, 误导
- 改为明确: 原图 app_icon_original.png (2048px) 保留在 git 历史
commit a36f6c4, 用 git show 恢复, 生成脚本见实施计划 Task 5
审查驳回的建议 (附理由):
- <mipmap> 间接引用: 审查自承"通常能工作", 且 Task 5 已模拟器实机
验证渲染正常 (analyze_image 确认黄色主体居中无裁切)。
<mipmap> 标签按密度选桶是启动器前景的标准做法, 不改。
- baseline-prof lambda hash: Task 3 commit 已说明"下次 updateBaselineProfile
校准", 且 hash 失效是静默降级不报错, 不阻塞合并。
验证: ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
|
2026-06-15 14:13:26 +08:00 |
|
|
|
6e1c2a39ae
|
docs: 校正 assets AGENTS.md,消除 GIF/镜像等错误描述
问题
- 4 份 assets/AGENTS.md 与 Task 1-5 后的实际状态全部相反:
- 声称 core/app "内容同步/镜像" → 实际职责不同 (core 管 UI/WebP, app 管启动器)
- 声称文件是 .gif → 实际是 .webp 动画
- 声称由 AnimatedGif 加载 → 实际是 AnimatedWebp
- app/assets/gifs/ 只剩过时 AGENTS.md (PNG 已被 Task 1 删)
改动
- core/assets/AGENTS.md: 移除"与 app 镜像"错误说法, 说明职责划分, 列 app_icon.webp
- core/assets/animations/AGENTS.md: GIF→WebP 正名, 说明构建期扫描机制 + 测试守卫,
保留"历史命名曾为 gifs/"历史说明
- app/assets/AGENTS.md: 反映清理后为空, 警告勿再放图标源 PNG
- 删除 app/assets/gifs/ 过时空目录 (仅剩 1 个过时 AGENTS.md)
验证
- grep 全 assets 无真正错误描述 (剩余命中均为有意的纠正/历史说明)
- ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
|
2026-06-15 14:08:18 +08:00 |
|
|
|
ac41eef37b
|
feat: 新增 Adaptive Icon(anydpi-v26),修复 API 26+ 启动器裁切
问题
- minSdk 24, 但只有 mipmap-*/ic_launcher.png (无 anydpi-v26)
- ic_launcher.png 与 ic_launcher_round.png MD5 完全相同, 圆形版只是方形副本
- API 26+ 用户在 OEM 圆形/水滴/方形启动器上图标会被硬切, 主体缺失
新增资源
- drawable/ic_launcher_background.xml: 矢量色块 #83D0F1 (原图四角采样 RGB 131,208,241)
- drawable/ic_launcher_foreground.xml: <mipmap> 引用密度分桶位图
- mipmap-anydpi-v26/ic_launcher.xml + ic_launcher_round.xml: adaptive-icon 定义
(含 <monochrome> 支持 Android 13+ 主题化图标)
- mipmap-{xhdpi,xxhdpi,xxxhdpi}/ic_launcher_foreground.webp:
从 app_icon_original.png (2048px) 中心裁 80% + cwebp -q 90 生成
体积比对应 ic_launcher.png 小 60-70% (xxhdpi: 7.4KB vs 22.5KB)
设计决策
- foreground 用位图而非矢量: 原图主体是写实风格, 矢量化会损失质量
- foreground 源图用 git 历史临时恢复生成, 不重新入库 (保持 Task 1 清理成果)
- 保留 mipmap-*/ic_launcher.png 作 API 24-25 回退 (不删)
- AndroidManifest.xml 无需改: @mipmap/ic_launcher 在 API 26+ 自动取 anydpi-v26
设备验证 (emulator API 37, Pixel Launcher)
- 安装 + 回桌面, hotseat 最右 YaYa 图标显示正常
- analyze_image 确认: 圆形遮罩下背景填满, 黄色主体居中无裁切
- 颜色与原设计一致 (主体 RGB~254,213,74, 背景 #83D0F1)
构建验证
- unzip -l 确认 APK 含 anydpi-v26/*.xml + drawable/ic_launcher_*.xml + 各密度 foreground.webp
- ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
- APK 累计 -489KB (baseline 24,416,752 → 23,915,694, 主要是 Task 1 删 PNG)
|
2026-06-15 14:06:21 +08:00 |
|
|
|
58a97d1725
|
refactor: WebP 文件列表改由构建期 BuildConfig 注入,消除 (1..152) 硬编码
问题
- AnimatedWebp.kt 原写死 WEBP_FILES = (1..152).map{...}, 与磁盘文件耦合却无校验
- 加 153.webp → 永远不会被随机到; 删某个 → random() 偶发命中不存在的资源
- 这是静默失败, 运行期无报错, 难排查
改动
- core/build.gradle.kts defaultConfig: 构建期扫描 assets/animations/ 生成
buildConfigField("String[]", "WEBP_FILES", "new String[]{...}")
含 require(webpFiles.isNotEmpty()) 防空目录构建
- AnimatedWebp.kt: WEBP_FILES 从 private 硬编码改为 internal val = BuildConfig.WEBP_FILES.toList()
(internal 让同模块测试可访问)
- 新增 AnimatedWebpFilesTest: 2 个守卫测试
1. webpFilesMatchDirectoryContents: WEBP_FILES 必须与 assets/animations/ 一一对应
2. webpFilesUseZeroPaddedThreeDigitNames: 锁定 NNN.webp 命名约定
TDD 流程
- 先写测试 → 编译失败(WEBP_FILES 是 private) → 红灯成立
- 改实现 → 测试 PASS → 绿灯
- 突变验证: 临时改 WEBP_FILES = (1..150) 漏掉 151/152
→ webpFilesMatchDirectoryContents 立即 FAIL, 守卫有效
- 恢复后全量 146 个测试 0 失败
设计说明
- 当前实现里 WEBP_FILES 与目录都来自同一次构建期扫描, 二者天然一致
- 测试的核心价值是锁定「两者一致」不变量, 防止有人回退成硬编码
(突变验证已证明: 回退后测试立即失败)
- BuildConfig 生成结果验证: String[] 含 152 个元素 001~152.webp
验证
- ./gradlew :core:testDebugUnitTest → 146 tests, 0 failures, 0 errors
- ./gradlew :app:assembleDebug → BUILD SUCCESSFUL
- BuildConfig.java: public static final String[] WEBP_FILES = new String[]{"001.webp",...,"152.webp"}
|
2026-06-15 14:02:21 +08:00 |
|