|
|
c665adfeff
|
release: v1.3.0
v1.3.0
|
2026-07-09 17:21:57 +08:00 |
|
|
|
afea8bf109
|
feat: refactor shift pattern with atomic rephase and swipeable calendar
班次设置页重构与体验增强:
数据模型重构:
- phaseBreaks + override 两独立字段 → 原子 RephaseFlip(date, flippedTo, rephaseFrom)
- 解决幽灵重排/撤销误删/断点链不级联三大问题
体验改进:
- 角标颜色按类别配对(onPrimary/onError/onTertiary)
- 迷你月历动态行数(复用 getMonthGridInfo)
- 恢复默认改 Snackbar 撤销(首次引入 SnackbarHost)
- 锚点日期与周期行右侧对齐修复
- 点击年月标题弹 DatePicker 选月份跳转
- HorizontalPager 滑动翻月 + 高度插值平滑过渡
|
2026-07-09 17:16:45 +08:00 |
|
|
|
2a3089bf47
|
feat(shift): smooth height interpolation for mini calendar swipe
滑动翻月时高度平滑过渡,不再跳变:
- 复用主日历的 interpolatedWeeks 行数插值逻辑
(currentPageOffsetFraction 在当前页与目标页行数间 lerp)
- 行高由 BoxWithConstraints 宽度推算(格宽=宽/7,aspectRatio(1f) 使行高=格宽)
- HorizontalPager 套 Modifier.height(px).clipToBounds(),跟随手指实时变高
- 迷你月历简化版:无折叠动画,只保留展开态 gridHeightPx = rowH * weeks
|
2026-07-09 17:14:54 +08:00 |
|
|
|
7b1290dd66
|
feat(shift): swipeable mini calendar via HorizontalPager
迷你月历接入 HorizontalPager,支持左右滑动翻月:
- 复用主日历 START_PAGE/pageToYearMonth/yearMonthToPage 工具
- viewYear/viewMonth 由 pagerState.currentPage 派生
- 箭头按钮改为 animateScrollToPage
- DatePicker 选月后 animateScrollToPage 跳转
- 网格提取为 MonthGrid 单页组件
|
2026-07-09 17:07:38 +08:00 |
|
|
|
1cf950817e
|
feat(shift): tap year-month title to pick date in mini calendar
点击迷你月历顶部"年 月"标题弹出 DatePicker,
选定日期后跳转到对应月份,比连点箭头快。
|
2026-07-09 16:55:22 +08:00 |
|
|
|
62ed8bd09a
|
fix(shift): align anchor date with cycle row and trim top padding
- 顶部内边距过高:Scaffold padding 已含 TopAppBar 间距,
Column 去掉多余 vertical=8.dp,避免叠加
- 锚点日期右侧不齐:TextButton 自带内边距导致右边缘内缩,
改为 Text+clickable 与"周期"行纯 Text 结构一致,右侧对齐
|
2026-07-09 16:46:38 +08:00 |
|
|
|
c68944bd55
|
feat(shift): undoable reset-to-default via Snackbar
恢复默认改为 Snackbar 撤销模式:
- 点恢复默认立即生效 + 显示 5 秒"撤销"Snackbar
- 点撤销恢复之前的 pattern
- 删除 AlertDialog 确认框(更现代,防误操作)
- 首次在项目引入 SnackbarHost
|
2026-07-09 16:38:57 +08:00 |
|
|
|
4b098442c4
|
fix(shift): badge color contrast and dynamic calendar rows
- 角标文字色按背景类别配对:班=onPrimary,休=onError,起=onTertiary
- 迷你月历复用 getMonthGridInfo 动态算行数(4/5/6),不再固定 6 行
|
2026-07-09 16:36:36 +08:00 |
|
|
|
f8df108bf3
|
refactor(shift): replace phaseBreaks with atomic RephaseFlip
数据模型重构:把"翻转+重排"从两个独立字段(override+phaseBreak)
改为单一原子结构 RephaseFlip(date, flippedTo, rephaseFrom)。
- 删除 PhaseBreak / phaseBreaks / cycleOffset(UI 未使用 offset!=0)
- kindAt:overrides → rephaseFlip 当天 → 活跃锚点(从 rephaseFrom 取)
- Storage:KEY_BREAKS → KEY_REPHASE,编码 翻转日:值:重排起点
- ShiftCalendarGrid:toggleFlipAndRephase 产出原子记录,撤销按 date 精确匹配
- toggleOverride 加保护:rephaseFlip 翻转日被点时整体移除,防幽灵重排
解决问题:撤销误删独立断点、单独点翻转留幽灵、连续长按断点链不级联。
|
2026-07-09 16:33:29 +08:00 |
|
|
|
d8014b5154
|
test(shift): add safety-net tests for long-press rephase scenarios
锁定重构前行为:单次长按重排、连续两次长按、撤销。
作为 RephaseFlip 重构的回归基线。
|
2026-07-09 16:25:23 +08:00 |
|
|
|
66a054f2d8
|
feat(shift): long-press flips and rephases subsequent days
长按语义从"设相位断点"改为"翻转该天并从次日起重排":
- 翻转当天 override + 次日插入 PhaseBreak(重排起点)
- 后续按 cycle 自动顺延,匹配用户直觉
- 再次长按同一天可撤销(移除 override + 关联断点)
- 角标"断"改为"起",文案同步更新
|
2026-07-09 16:14:41 +08:00 |
|
|
|
14a3239b39
|
feat: shift pattern settings page
个人轮班设置页:独立 Activity + SharedPreferences 持久化 + onResume 立即生效。
数据模型支持:
- 基础周期(锚点 + 班次序列)
- 单日翻转 overrides(调班)
- 相位断点 phaseBreaks(从某天起重排周期相位)
UI:
- FAB 菜单"班次设置"入口
- 基础周期预设(1班1休/2班2休/3班3休/4班4休)+ 锚点 DatePicker
- 迷你月历(点=翻转班休,长按=设/清断点)
- 恢复默认
实现:TDD,6 任务逐个 spec + 代码质量审查。
|
2026-07-07 09:36:44 +08:00 |
|
|
|
7f080f2d90
|
fix(shift): add color legend and restore manifest trailing newline
- Add legend text (班/休/断点 color meanings) below mini calendar
- Restore trailing newline in AndroidManifest.xml
|
2026-07-06 19:10:27 +08:00 |
|
|
|
32d66f0a42
|
fix(shift): subscribe shiftPattern to trigger recomposition on refresh
|
2026-07-06 19:09:26 +08:00 |
|
|
|
a5795b16dc
|
feat(shift): add ShiftPatternActivity, Screen, and mini calendar grid
|
2026-07-06 18:52:16 +08:00 |
|
|
|
d528b98cde
|
feat(shift): wire VM factory, onResume reload, settings menu entry
|
2026-07-06 18:41:07 +08:00 |
|
|
|
e08243d0fa
|
test(shift): cover refreshShiftPattern reload after storage change
|
2026-07-06 18:37:47 +08:00 |
|
|
|
ef55ffcf64
|
feat(shift): inject ShiftPatternStorage into CalendarViewModel
|
2026-07-06 18:34:12 +08:00 |
|
|
|
1f1db17384
|
fix(shift): persist name field, guard empty cycle, test corrupt-data path
|
2026-07-06 18:30:40 +08:00 |
|
|
|
e4834a52c9
|
feat(shift): add ShiftPatternStorage for persistence
|
2026-07-06 18:24:28 +08:00 |
|
|
|
eca6c61058
|
test(shift): cover non-zero cycleOffset and multiple phase breaks; add kindAt KDoc
|
2026-07-06 18:20:48 +08:00 |
|
|
|
778d5dc8be
|
feat(shift): support overrides and phase breaks in ShiftPattern
|
2026-07-06 18:14:24 +08:00 |
|
|
|
5afac5dd04
|
docs: add shift pattern settings design spec
个人轮班设置页设计:独立 Activity + SharedPreferences + onResume 重读。
数据模型支持单日 override + 相位断点重排,完整覆盖调班场景。
|
2026-07-06 16:43:03 +08:00 |
|
|
|
08a6016479
|
chore(deps): bump stable dependencies
- composeBom 2026.05.01 -> 2026.06.01
- androidx-lifecycle 2.10.0 -> 2.11.0
- androidx-uiautomator 2.3.0 -> 2.4.0
- tyme4kt 1.4.5 -> 1.5.0
- spotless 8.5.1 -> 8.8.0
Verified via :app:assembleDebug and :core:testDebugUnitTest.
|
2026-07-06 14:26:48 +08:00 |
|
|
|
db31b9eaed
|
chore: add project-level yayacal-release skill
|
2026-06-18 15:21:48 +08:00 |
|
|
|
fae7654452
|
release: v1.2.0
v1.2.0
|
2026-06-18 15:07:09 +08:00 |
|
|
|
4be8cada86
|
调整应用图标小黄鸭占比
|
2026-06-18 13:43:50 +08:00 |
|
|
|
0fbbdfa444
|
feat: show rose day icon with priority over birthday crown
|
2026-06-16 18:06:50 +08:00 |
|
|
|
25885d84b3
|
feat: compute rose day flag in LunarCache
|
2026-06-16 17:59:00 +08:00 |
|
|
|
a8c2637a0c
|
feat: add rose day vector drawable
|
2026-06-16 17:56:49 +08:00 |
|
|
|
283a474eb1
|
docs: add rose day icon design spec
|
2026-06-16 17:38:55 +08:00 |
|
|
|
e07ccd8b4e
|
docs: update ui AGENTS.md for DogParkScreen
|
2026-06-16 16:38:20 +08:00 |
|
|
|
3fcdeab702
|
feat: navigate to DogParkActivity from AboutActivity
|
2026-06-16 16:31:01 +08:00 |
|
|
|
ac48a56465
|
feat: add DogParkActivity with fade-in entry transition
|
2026-06-16 16:24:10 +08:00 |
|
|
|
6532363cdb
|
feat: add DogParkScreen for full-screen easter egg video
|
2026-06-16 16:15:09 +08:00 |
|
|
|
9d2f67b9fb
|
feat: wire up version click easter egg in AboutScreen
|
2026-06-16 16:03:51 +08:00 |
|
|
|
6830c1e510
|
feat: add easter egg toast message logic with tests
|
2026-06-16 15:50:46 +08:00 |
|
|
|
1e43638fbc
|
res: add fade_in and fade_out animations for dog park entry
|
2026-06-16 15:47:59 +08:00 |
|
|
|
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 |
|