307 Commits

Author SHA1 Message Date
xfy
e1345cc071 feat: 年月视图转场添加 BottomCard 滑入动画和淡入淡出效果
- CalendarMonthView: 为 BottomCard 添加滑入/淡出动效
- 优化 AnimatedContent 过渡:fade + slideInVertically/slideOutVertically
- YearGridView: 提取 sharedKey 变量

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:46:09 +08:00
xfy
9ad619c105 feat: 优化年月视图共享元素转场动画
- 月→年切换时自动展开折叠状态
- 将 sharedElement 精确绑定到日历网格区域
- YearGridView 为每个 MiniMonth 添加共享元素转场

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 16:17:16 +08:00
xfy
f5cc4ef2e5 refactor: 完成纯 Android 迁移,清理旧 KMP 模块并添加 app/core 新模块
- 删除遗留的 androidApp/、shared/ 等 KMP 结构文件
- 将新的 app/、core/ 纯 Android 模块纳入版本控制

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:55:08 +08:00
xfy
cf9315cfe3 feat: US-007~010 实现年月视图共享元素转场动画
- 引入 SharedTransitionLayout + AnimatedContent 管理月/年视图切换
- 使用 sharedBounds + rememberSharedContentState 标记共享元素
- 转场动画 400ms,FastOutSlowInEasing
- 添加 compose-animation 依赖支持 SharedTransition API

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 15:17:18 +08:00
xfy
c19916c2ec fix: US-006 修复构建错误,首次构建验证通过
- 移除 androidApp/shared 中已弃用的 kotlinOptions 块
- material3 改为通过 Compose BOM 管理版本
- 清理残留的 composeResources 目录

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:58:06 +08:00
xfy
0806c11fcc refactor: US-002~005 迁移为纯 Android 项目
- shared/build.gradle.kts: KMP 库 → Android Library,使用 Compose BOM
- androidApp/build.gradle.kts: 移除 CMP 插件,使用标准 Android App 配置
- 源码目录: commonMain → main, commonTest → test
- expect/actual 内联: Platform.kt + ComposeTrace.kt 合并为普通实现
- 资源迁移: 152 个 GIF + app_icon → assets/
- 删除: iosApp/、androidMain/、commonMain/、commonTest/

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:51:59 +08:00
xfy
d3229f90d0 refactor: US-001 清理 Gradle 根配置,移除 KMP/CMP 插件和依赖
- build.gradle.kts: 移除 composeMultiplatform、kotlinMultiplatform 插件
- settings.gradle.kts: 移除 JetBrains maven 仓库
- libs.versions.toml: CMP 依赖替换为 AndroidX Compose BOM
- Licenses.kt: 更新依赖列表

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:47:56 +08:00
xfy
d0f4980e01 fix: 修复快速滑动时折叠/展开失效,改用 progress 阈值判定
- 移除 velocity 判定:change.position 是本地坐标,卡片移动会导致
  velocityTracker 计算的速度方向错误,快速滑动时被误判方向而回弹
- onDragEnd 改为 progress > 0.3f 判定折叠,onExpandDragEnd 改为
  progress < 0.7f 判定展开
- 修复 onDrag/onExpandDrag 的 race condition:将 _collapseAnimatable.value
  的读取从 launch 外部移到协程内部,避免快速滑动时多回调并发读到旧值

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 14:14:18 +08:00
xfy
df0aa16d8e feat: 新增关于页面与开源许可页面
- 新增 AboutActivity、LicensesActivity 及对应的 Slide 转场动画
- MainActivity 接入 CalendarMonthView,支持导航到关于页面
- 移除 composeResources 下的 AGENTS.md

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:55:21 +08:00
xfy
50a42be9bc docs: 新增项目各目录 AGENTS.md 文档
为各模块和子目录添加 AGENTS.md,便于 AI 助手理解项目结构。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 13:26:19 +08:00
xfy
68e6748735 docs: 新增 CHANGELOG.md,记录 1.0.0 版本完整变更历史
按主题分类整理从项目初始化到当前版本的所有变更:
- 项目基础架构与工程配置
- 日历核心视图系统(月/周/年)
- 折叠动画与手势交互
- 中式日历(农历、节气、节日)
- 个人排班系统
- 视觉设计与动画系统
- 底部卡片与信息展示
- 页面导航与预测性返回手势
- 性能优化与构建测试

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:38:48 +08:00
xfy
933918ae96 style: 格式化代码,移除未使用的 import
- App.kt: 换行长函数调用参数
- AboutScreen.kt / LicensesScreen.kt: 移除未使用的 Color import

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:30:55 +08:00
xfy
5d038932d9 feat: 年视图标题栏改为农历干支年份+「今年」按钮,移除箭头导航
- YearHeader 从 Row 改为 Column 布局
- 移除左右箭头年份切换,改为横向滑动翻页
- 添加农历干支+生肖年显示(如「丙午马年」)
- 非当前年份时显示「今年」按钮,点击快速返回今年
- 同步移除 AppInfo.VERSION(已由动态版本号替代)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:28:36 +08:00
xfy
841a186e0f fix: 返回动画使用 snapTo 消除残留过渡
预测性返回动画结束后直接 snapTo(0f),避免 spring 动画残留。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:11:26 +08:00
xfy
380056bf48 feat: 底部卡片显示班次状态提示
根据选中日期的班次类型(WORK/OFF)在底部卡片展示对应提示语。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:11:24 +08:00
xfy
a0b1b4b569 feat: 支持动态版本号生成与读取
- build.gradle.kts 根据 baseVersion + git hash + buildDate 生成 versionName
- gradle.properties 添加 app.version.base=1.0.0
- 新增 expect/actual getAppVersion(),Android 从 PackageInfo 读取,iOS 从 NSBundle 读取
- AboutScreen 使用 getAppVersion() 替代硬编码 AppInfo.VERSION

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 01:11:12 +08:00
xfy
5bb0cc7071 chore: 更新应用图标资源,添加 WebP 格式并同步各平台
- 替换所有尺寸的 app_icon.png 为新版设计
- 新增 composeResources app_icon.webp
- 同步 Android mipmap 和 iOS AppIcon 资源
- 更新 getAppIconUri 缓存版本号 (?v=2)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 00:56:10 +08:00
xfy
557390068e fix: 图标颜色适配 MaterialTheme 主题色
将 AboutScreen、LicensesScreen 返回箭头和 CalendarMonthView 菜单图标的
硬编码 Color.White 替换为 MaterialTheme.colorScheme 对应主题色,
使图标在深色/浅色主题下均能正确显示。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 00:41:21 +08:00
9d0d8bbfb0
Merge pull request #5 from xunrua/main
预测性返回
2026-05-20 00:14:14 +08:00
meyou
6ef51a4879
refactor: 迁移至官方 PredictiveBackHandler,移除 navigationevent-compose 依赖
使用 androidx.activity.compose.PredictiveBackHandler (Flow<BackEventCompat> 模式)
替换 JetBrains NavigationBackHandler,提升设备兼容性。
2026-05-19 23:47:29 +08:00
meyou
6542362f6f
fix: 预测性返回兼容性、跟手感与防重入
- 添加 BackHandler 降级,确保 OPPO/ColorOS 等设备基本返回可用
- handleBack 加 isHandlingBack 防重入,避免双 handler 触发
- 完成动画改用 spring 替代 tween,根据手势释放位置自然调速
- dismiss/reveal 变换使用二次缓动(progress²),小幅滑动更柔和跟手
2026-05-19 23:35:43 +08:00
meyou
4219527428
fix: 修复预测性返回手势失效和结束闪屏
- 移除 enabled 条件中的 backProgress == 0f,该条件在手势开始时
  会立即禁用 handler 导致系统直接执行返回
- 将 handleBack 结尾的 snapTo(0f) 改为 animateTo(0f, tween(100))
  避免进度瞬间跳变引起的闪屏
2026-05-19 23:20:42 +08:00
meyou
911b8f2293
fix: 返回动画结束时 alpha 完全归零,消除闪屏 2026-05-19 22:34:02 +08:00
meyou
bde143a25b
feat: 迁移 NavigationBackHandler + 替换应用图标
- 将 PredictiveBackHandler 迁移到 NavigationBackHandler (navigationevent-compose 1.0.1)
- 添加 org.jetbrains.androidx.navigationevent:navigationevent-compose 依赖
- 提取 applyDismissTransform/applyRevealTransform/applyEnterTransform 辅助函数
- 替换所有密度的启动图标和关于页图标
- 移除旧的自适应图标 XML 配置
2026-05-19 22:24:26 +08:00
meyou
bde922080a
feat: 预测性返回动画 — Box 分层布局替换 AnimatedContent
- 用 Box 三层堆叠替代 AnimatedContent,底层页面始终可见
- 返回手势跟手驱动顶层页面滑移+缩放+圆角+阴影,底层同步放大显现
- Animatable 驱动手势提交/取消的平滑过渡动画
- 前向导航从右侧滑入,底层页面同步缩小
2026-05-19 21:12:02 +08:00
promise
7fc333eef4
Merge branch 'DefectingCat:main' into main 2026-05-19 20:03:44 +08:00
xfy
e5ce11128a style: 代码清理 — 移除未使用的 import 和变量
- Platform.android.kt: 移除未使用的 kotlinx.coroutines.launch import
  和未使用的 scope 变量
- CalendarMonthView.kt: 移除未使用的 density 变量
- App.kt: 格式化缩进

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 18:29:41 +08:00
xfy
c651a74b9f refactor: 提取 CalendarPagerArea 与 BottomCardArea 独立 Composable
将 CalendarMonthView 中翻页区域与底部卡片逻辑提取为独立
Composable,减少主函数复杂度,移除不再使用的尺寸测量状态。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 18:24:51 +08:00
promise
a9c4fe493b
Merge branch 'DefectingCat:main' into main 2026-05-19 18:14:50 +08:00
xfy
fc3c8ec882 feat: Android 13+ 预测性返回手势(Predictive Back)
- BackHandler 升级为 PredictiveBackHandler expect/actual
- Android 13+ 启用系统级预测返回,跟手阶段同步位移/缩放页面
- Android 低版本回退至普通 BackHandler
- iOS 保持空实现(无系统返回手势)
- 页面返回动画统一 250ms 时长,提升流畅感
- AndroidManifest 启用 enableOnBackInvokedCallback
2026-05-19 17:58:49 +08:00
xfy
58ab7eab4e feat: 页面切换添加滑入滑出动效
使用 AnimatedContent 为 Main/About/Licenses 导航添加方向感知的
slide + fade 转场动画,向前导航从右滑入,返回从左滑入。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:45:24 +08:00
xfy
0b1d89f06d feat: 新增 BackHandler expect/actual 拦截系统返回手势
Android 通过 androidx.activity.compose.BackHandler 接管返回键,
在关于页与许可页返回上一级;iOS 无系统返回键,actual 为空实现。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:34:43 +08:00
xfy
43579b2866 feat: 关于页面与开源许可声明
- 新增 AboutScreen:应用图标、名称、版本、开源许可入口
- 新增 LicensesScreen 与 Licenses 数据源,展示第三方依赖许可证
- App 内页面导航(Main/About/Licenses)
- 双平台 getAppIconUri() 及 app_icon.png 资源
- 菜单"关于"项接入 AboutScreen 跳转
- iOS Info.plist 补充 CFBundleShortVersionString / CFBundleVersion

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 17:31:26 +08:00
xfy
e93d575f02 feat: 菜单新增"关于"项与分隔线
为后续接入设置页预留入口。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:39:49 +08:00
xfy
08eada4991 docs: 同步 README 与 CLAUDE.md 至最新依赖与构建命令
补充 sketch GIF、tyme4kt、R8 full mode 等依赖说明,
新增 installDebug/allTests/generateDummyFramework 构建命令,
并记录 ComposeTrace 性能追踪机制。README 重写为特性+技术栈结构。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:39:38 +08:00
xfy
f7c3df4b19 fix: 替换 String.format 为 padStart 以兼容 KMP commonMain
String.format 是 JVM 专属 API,在 commonMain 中不可用,
导致 GIF_FILES 类型推断失败及连锁编译错误。
padStart 是 Kotlin stdlib 跨平台 API,行为一致。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:18:55 +08:00
xfy
b5debbe74d refactor: 用 associateWith 简化星期标签 map 构造
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:17:40 +08:00
xfy
0d76b44c4e style: 菜单遮罩改为全透明并移除淡入淡出动画
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:17:30 +08:00
xfy
1395e9666f feat: GIF 切换添加入场缩放弹性动画
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 16:17:09 +08:00
xfy
ce64526125 build: 移除 Compose runtime 的 ProGuard keep 规则
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:53:50 +08:00
xfy
19ae5b6b52 fix: 年视图 MiniMonth 添加标题与星期行间距
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:50:46 +08:00
xfy
fb52d30509 fix: 标题文本显式指定 onBackground 颜色,适配深色主题
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:46:30 +08:00
xfy
26e977401f fix: 给日历根容器和日期标签添加背景色,修复主题切换透底
- CalendarMonthView 根 Box 添加 background(MaterialTheme.colorScheme.background)
- DayCell 班次标签和农历标签添加同色背景

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 15:41:45 +08:00
xfy
c1e8653941 feat: 引入 152 张 GIF 素材,按选中日期随机展示
- 移除单张 puppy_1.gif,替换为 001.gif~152.gif 的 GIF 素材池
- 新增 getGifUri expect/actual 函数,Android 通过 assets 加载、iOS 通过 compose 资源加载
- AnimatedGif 接收 seed 参数,随选中日期变化重新随机选取
- BottomCard 在底部信息下方展示 140dp 高度的随机 GIF

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 14:49:50 +08:00
promise
c262572eee
Merge branch 'DefectingCat:main' into main 2026-05-19 14:25:52 +08:00
xfy
63da397fc9 style: 移除班次标签背景圆,清理未使用导入
DayCell 中右上角班次("班"/"休")标签去除 surface 背景圆,
文字直接浮在单元格上,视觉更轻量。同步清理
CalendarViewModel、AnimatedGif、BottomCard 的未使用导入,
并格式化 YearGridView 与 CalendarUtilsExtraTest。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 14:17:53 +08:00
xfy
fae6e3eb72 feat: 支持系统深色主题切换
新增 values/values-night 主题资源 Theme.YaYa,AndroidManifest 切换为该主题;
Compose 端根据 isSystemInDarkTheme 切换 light/dark ColorScheme。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:52:41 +08:00
xfy
e6898df400 style: 浮动按钮改为圆形形状
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:43:18 +08:00
xfy
22464d9ca6 build: 优化 APK 打包与 AAB 分包配置
排除冗余的 META-INF 许可证与 Kotlin 元数据资源,挑选首次出现的 INDEX.LIST,避免合并冲突;启用按语言、密度、ABI 拆分的 App Bundle。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:41:51 +08:00
xfy
feb7db718e feat: 引入 sketch4 显示 GIF 动画,新增 AnimatedGif 组件
- 添加 sketch4 依赖(compose / animated-gif / compose-resources)
- 升级 tyme4kt 1.4.4 → 1.4.5
- 新增 puppy_1.gif 资源与 AnimatedGif 通用组件

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-19 13:36:14 +08:00