From 5b5d7805937ba5282f3cd46ae8a9b0e81b2b17b5 Mon Sep 17 00:00:00 2001 From: xfy Date: Tue, 2 Jun 2026 13:29:41 +0800 Subject: [PATCH] release: v1.1.0 --- CHANGELOG.md | 98 ++++++++++++++++++++++++++++++++++++++++++++ app/build.gradle.kts | 4 +- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d902383..7866b97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -139,10 +139,108 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Aliyun Maven mirrors (switched back to Maven Central / Google) - Unused Compose runtime ProGuard keep rules +## [1.1.0] - 2026-06-02 + +### Added + +#### Date Checker Tool +- New "Date Checker" tool page accessible from FAB → Tools menu for tracking item expiration dates +- Swipe-to-delete with animated removal and staggered enter/exit animations +- Expired status display with visual indicators +- Auto-scroll and highlight animation for new entries + +#### Tools Page +- New "Tools" entry in FAB menu linking to a dedicated tools landing page +- Date Checker as the first tool module + +#### Theme & Visual +- `YaYaTheme` introduced and applied to all Activities for unified theming +- Legal holiday badges now display with colored background and continuous edge rounded corners +- Holiday badge wave-scale entrance animation +- Personal shift badges redesigned with light circle background + centered text +- Shift badge circular base to avoid overlapping with selection ring + +#### Year ↔ Month View Transition +- BottomCard slide-in animation and fade effect during year/month view transitions +- Month→year view no longer forces collapse state to expand + +#### Performance +- LunarCache LRU cache for lunar/solar term calculations with startup pre-computation +- Macrobenchmark module with automated Baseline Profile generation +- Baseline Profile covering date checker, shift settings, tools page, and core calendar scenarios +- `ComposeTrace` cross-platform trace markers for Perfetto/Systrace +- SolarDay static cache to eliminate repeated object creation +- MiniMonth pure Canvas rendering eliminating 96 Text measurement overhead +- `graphicsLayer(translationY)` replacing `offset(Dp)` to avoid layout passes +- Aggregated `CalendarUiState` to reduce Compose recomposition +- `remember` stabilization for lambdas and computations +- Scene-based `profile.sh` with `--all` batch mode for 15 automated trace scenarios +- Perfetto trace analysis script (`analyze-trace.sh`) +- Trace build type for release + retained trace markers + +#### Build & Tooling +- Spotless 8.5.1 code formatter with ktlint integration +- `.editorconfig` for ktlint Composable function naming rules +- Dependency update checker and auto-upgrade tool integration +- `app_icon` shrunk to 512×512 and converted to WebP (446KB savings) +- 152 GIF assets batch-converted to animated WebP format +- `uiTooling` moved to `debugImplementation`; unused `@Preview` and `kotlin-test` entries removed +- `sketch` library for GIF/WebP display (`sketch-compose` + `sketch-animated-webp`) +- PowerShell performance tracing script (`profile.ps1`) + +#### Documentation +- Comprehensive `AGENTS.md` at every directory level (root, app, core, scripts, etc.) +- Updated `DEVELOPMENT.md` with Perfetto trace analysis and emulator launch commands +- Updated `CLAUDE.md` to reflect pure Android project structure + +### Changed + +- Project migrated from Kotlin Multiplatform (KMP/CMP) to pure Android (`:app` + `:core`) +- All Compose UI and business logic consolidated into `:core` module; `:app` remains a thin shell +- Removed KMP/CMP plugins, iOS app module, and `:shared` module +- `androidApp` module renamed to `app` +- Collapse animation refactored: removed fling velocity threshold, now spring-driven +- `CalendarPager` ↔ `WeekPager` switching uses `AnimatedContent` for smooth crossfade +- Year view page year calculation uses `settledPage` to prevent flicker during swipe +- ViewModel decoupled from Compose runtime, migrated to `StateFlow` +- `LunarCache` made injectable with extracted repeated computations +- MenuItem and ToolItem unified to use `Card(onClick)` pattern +- Holiday badge null checks simplified to Elvis operator +- `@Suppress` annotations cleaned up with deprecated API replacements +- Removed unnecessary P0 code (custom combine, dead StateFlow, duplicate grid algorithms, runBlocking) +- Removed debug logging from LicensesScreen and BottomCard + +### Fixed + +- Lunar first-day month name no longer appends redundant "月" suffix +- Year view stale year display on enter +- Year view page year flicker during swipe transitions +- Collapse animation flicker when switching between CalendarPager and WeekPager +- Folded state cross-month dates not grayed out in week view +- Date checker swipe-to-delete state misalignment and deprecation warning +- Shared element transition animation loss after year view page change +- Night mode theme transparency issues with explicit background colors +- Predictive back gesture failure and end-of-animation flash on certain devices +- Back animation residual transition eliminated with `snapTo` +- Fast swipe collapse/expand failure, now uses progress threshold detection +- `graphicsLayer` optimization reverted due to excessive GPU compositing overhead on real devices +- Reverted shared element transitions in favor of zoom + fade animation + +### Removed + +- iOS app module (`iosApp/`) and all related Xcode project files +- `:shared` module and `shared/build.gradle.kts` +- Shared element transition animations (replaced by zoom + fade) +- Year/month scroll wheel picker with haptic feedback (reverted) +- Aliyun Maven mirrors (switched to Maven Central / Google) +- Unused Compose runtime ProGuard keep rules +- Temporary performance monitoring logs (trace markers retained) + ## [Unreleased] - No unreleased changes at this time. --- +[1.1.0]: https://github.com/xfy/yayacal/releases/tag/v1.1.0 [1.0.0]: https://github.com/xfy/yayacal/releases/tag/v1.0.0 diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2fe124e..7f725fe 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,7 +6,7 @@ plugins { alias(libs.plugins.composeCompiler) } -val baseVersion = findProperty("app.version.base") as? String ?: "1.0.0" +val baseVersion = findProperty("app.version.base") as? String ?: "1.1.0" val gitHash = try { providers.exec { @@ -27,7 +27,7 @@ android { applicationId = "plus.rua.project" minSdk = libs.versions.android.minSdk.get().toInt() targetSdk = libs.versions.android.targetSdk.get().toInt() - versionCode = 1 + versionCode = 2 versionName = appVersionName }