Skip to content

Commit e225ff5

Browse files
committed
项目重构更新到 2.1.0
1 parent c119112 commit e225ff5

58 files changed

Lines changed: 4796 additions & 895 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches: [ master, main ]
6+
pull_request:
7+
branches: [ master, main ]
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v4
15+
16+
- name: Set up JDK 17
17+
uses: actions/setup-java@v4
18+
with:
19+
java-version: '17'
20+
distribution: 'temurin'
21+
22+
- name: Cache Gradle
23+
uses: actions/cache@v4
24+
with:
25+
path: |
26+
~/.gradle/caches
27+
~/.gradle/wrapper
28+
key: gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
29+
restore-keys: gradle-
30+
31+
- name: Grant execute permission for gradlew
32+
run: chmod +x gradlew
33+
34+
- name: Build library
35+
run: ./gradlew :library:assembleDebug
36+
37+
- name: Run unit tests
38+
run: ./gradlew :library:testDebugUnitTest
39+
40+
- name: Run lint
41+
run: ./gradlew :library:lintDebug
42+
continue-on-error: true
43+
44+
- name: Build demo app
45+
run: ./gradlew :app:assembleDebug
46+
47+
- name: Upload lint report
48+
if: always()
49+
uses: actions/upload-artifact@v4
50+
with:
51+
name: lint-report
52+
path: library/build/reports/lint-results-debug.html
53+
if-no-files-found: ignore
54+
55+
- name: Upload test report
56+
if: always()
57+
uses: actions/upload-artifact@v4
58+
with:
59+
name: test-report
60+
path: library/build/reports/tests/testDebugUnitTest/
61+
if-no-files-found: ignore

.gitignore

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,34 @@
1-
*.iml
2-
.gradle
1+
# Gradle
2+
.gradle/
3+
/build/
4+
**/build/
5+
6+
# Local configuration
37
/local.properties
8+
local.properties
9+
10+
# Android Studio / IntelliJ
11+
*.iml
412
/.idea/workspace.xml
5-
/.idea/libraries
13+
/.idea/libraries/
14+
/.idea/caches/
15+
/.idea/modules.xml
16+
/.idea/navEditor.xml
17+
/.idea/assetWizardSettings.xml
18+
.vscode/
19+
20+
# Android build artifacts
21+
/captures/
22+
.externalNativeBuild/
23+
.cxx/
24+
*.apk
25+
*.ap_
26+
*.aab
27+
*.dex
28+
29+
# OS files
630
.DS_Store
7-
/build
8-
/captures
9-
.externalNativeBuild
31+
Thumbs.db
32+
33+
# AI tooling
34+
/.AI

CHANGELOG.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Changelog
2+
3+
本文件记录 CountTimeProgressView 的所有重要版本变更。
4+
5+
## [2.0.0] - 2026-04-15
6+
7+
### Bug 修复
8+
- 修复 `CLOCK` 模式下 `minute >= 10` 时错误拼接 `hour` 的格式化 Bug
9+
- 修复 `startAngle` getter/setter 语义不一致(用户设 0 读回 270 的问题)
10+
- 修复 `titleCenterText` 在 SECOND 模式下的空指针崩溃风险
11+
- 修复 `DEFAULT_COUNT_TIME` 从 5ms 修正为 5000ms
12+
- 修复 Demo 中 `setBackgroundColor()` 误调用(应为 `backgroundColorCenter`
13+
14+
### 新增功能
15+
- 暂停 / 恢复 / 重置动画:`pauseCountTimeAnimation()``resumeCountTimeAnimation()``resetCountTimeAnimation()`
16+
- 进度 getter/setter:`progress` 属性(0f..1f)
17+
- 进度变化回调:`addOnProgressChangedListener { progress, remainingMillis -> }`
18+
- 自定义文本格式化器:`textFormatter = { millis -> "..." }`
19+
- 进度条端点样式:`strokeCap`(BUTT / ROUND / SQUARE),支持 XML 配置
20+
- 动画插值器配置:`interpolator` 属性
21+
- 渐变色进度条:`gradientStartColor` / `gradientEndColor`,支持 XML 配置
22+
- XML 属性扩展:`autoStart``finishedText``showCenterText``strokeCap`
23+
- `onMeasure` 支持 `wrap_content`(默认尺寸 84dp)
24+
- SavedState 支持(屏幕旋转保持进度)
25+
- 无障碍支持(AccessibilityNodeInfo)
26+
- 显式单位 API:`setBorderWidthPx()``setMarkBallWidthPx()``setTitleCenterTextSizePx()`
27+
- 公开 `remainingTime``isPaused` 属性
28+
- Jetpack Compose 适配工具类 `CountTimeProgressViewCompose`
29+
30+
### 代码质量
31+
- 设置 `LinearInterpolator` 为默认插值器
32+
- 删除库中所有 `Log.e` 调用
33+
- 移除冗余 `mContext` 字段
34+
- 移除 `attr != null` 死代码分支
35+
- `calcRadius()` 改为 `private`
36+
- `TextStyle` 添加 `@IntDef` 类型安全注解
37+
- `OnEndListener` 标记 `@Deprecated`,新增 `OnCountdownEndListener` + `setOnClickCallback`
38+
- `onDetachedFromWindow` 不再清空 listener
39+
- 重构 `onDraw` 为多个独立绘制方法
40+
- 性能:文本缓存、`postInvalidateOnAnimation()` 替代 `invalidate()`
41+
42+
### 工程化
43+
- library 模块移除 AppCompat 运行时依赖(零第三方依赖)
44+
- 迁移至 AndroidX
45+
- `minSdk` 14 → 21,`targetSdk` / `compileSdk` → 34
46+
- 仓库改为 `google()` + `mavenCentral()`
47+
- `lintOptions {}``lint {}`
48+
- `proguard-android.txt``proguard-android-optimize.txt`
49+
- `compileSdkVersion``compileSdk``minSdkVersion``minSdk`
50+
- `artifactId``library` 改为 `counttimeprogressview`
51+
- SplashActivity 从 Java 转换为 Kotlin
52+
- 布局文件 `left/right``start/end`(RTL 支持)
53+
- ScrollView 子 View 高度改为 `wrap_content`
54+
- ImageView 添加 `contentDescription`
55+
- 移除 `gradle.properties` 中硬编码的 JDK 路径
56+
- 新增 `ClockTimeFormatter` 独立工具类(便于单元测试)
57+
- 新增 `formatClockTime` 单元测试(9 个用例)
58+
59+
### 文档
60+
- README / README-ZH:`compile``implementation`,修复中英文残片、默认值说明、拼写错误
61+
- 新增 CHANGELOG.md
62+
- 新增 CONTRIBUTING.md
63+
- 添加完整 KDoc 中文注释
64+
65+
## [1.1.3] - 2017-11-11
66+
- 使用 Kotlin 重写代码
67+
68+
## [1.1.1] - 2017-03-27
69+
- 更新:退出时停止运行
70+
71+
## [1.1.0] - 2017-02-07
72+
- 更新:支持顺时针动画
73+
74+
## [1.0.0] - 2016-12-20
75+
- 首次提交

CONTRIBUTING.md

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
# 贡献指南
2+
3+
感谢你对 CountTimeProgressView 项目的关注!欢迎任何形式的贡献。
4+
5+
## 如何贡献
6+
7+
### 报告 Bug
8+
9+
1.[Issues](https://github.com/sfyc23/CountTimeProgressView/issues) 中搜索是否已有相同问题
10+
2. 如果没有,创建新 Issue,请包含:
11+
- 问题描述
12+
- 复现步骤
13+
- 期望行为 vs 实际行为
14+
- 设备信息(Android 版本、设备型号)
15+
- 相关代码片段或截图
16+
17+
### 提交代码
18+
19+
1. Fork 本项目
20+
2. 创建功能分支:`git checkout -b feature/your-feature`
21+
3. 编写代码,确保:
22+
- 遵循现有代码风格(Kotlin)
23+
- 添加必要的中文注释
24+
- 新增公开 API 需添加 KDoc
25+
- 如有新功能,更新 README 和 CHANGELOG
26+
4. 运行构建验证:`./gradlew :library:assembleDebug :library:testDebugUnitTest`
27+
5. 提交变更:`git commit -m "feat: 你的功能描述"`
28+
6. 推送并创建 Pull Request
29+
30+
### Commit 规范
31+
32+
建议使用以下前缀:
33+
- `feat:` 新功能
34+
- `fix:` Bug 修复
35+
- `docs:` 文档更新
36+
- `refactor:` 重构(不改变行为)
37+
- `perf:` 性能优化
38+
- `test:` 测试相关
39+
- `chore:` 构建/工具链变更
40+
41+
## 开发环境
42+
43+
- Android Studio Hedgehog 或更新版本
44+
- JDK 17
45+
- Gradle 7.6+
46+
- Kotlin 1.8.22+
47+
48+
## 项目结构
49+
50+
```
51+
CountTimeProgressView/
52+
├── library/ # 核心库模块(零第三方依赖)
53+
│ └── src/main/java/com/sfyc/ctpv/
54+
│ ├── CountTimeProgressView.kt # 核心控件
55+
│ ├── CountTimeProgressViewCompose.kt # Compose 适配
56+
│ └── ClockTimeFormatter.kt # 时钟格式化工具
57+
├── app/ # 示例 App 模块
58+
└── .AI/ # 重构分析文档
59+
```
60+
61+
## 编码规范
62+
63+
- 使用 Kotlin,避免 Java
64+
- 公开 API 添加 KDoc 注释(中文)
65+
- 属性 setter 中 dp/sp 转换需在注释中标明单位
66+
- `onDraw` 中避免创建对象
67+
- 新增 XML 属性需同步更新 `attrs.xml`
68+
69+
## 许可证
70+
71+
贡献的代码将遵循本项目的 [Apache License 2.0](LICENSE) 许可证。

0 commit comments

Comments
 (0)