Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
429 changes: 298 additions & 131 deletions .github/workflows/manual-release.yml

Large diffs are not rendered by default.

29 changes: 17 additions & 12 deletions README.en-US.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<p>A local-first fullscreen time dashboard for classrooms, study spaces, and personal focus.</p>

<p>
<a href="https://clock.qqhkx.com"><strong>Live Demo</strong></a>
<a href="https://github.com/Qziky/Immersive-clock/releases/latest"><strong>Download v4.0.0</strong></a>
·
<a href="docs/user-guide/en-us/user-guide.md"><strong>User Guide</strong></a>
·
Expand All @@ -17,7 +17,7 @@

<p>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-GPL--3.0--only-2fecc6" alt="GPL-3.0-only" /></a>
<a href="https://clock.qqhkx.com"><img src="https://img.shields.io/badge/PWA-ready-0f766e?logo=pwa" alt="PWA ready" /></a>
<img src="https://img.shields.io/badge/PWA-ready-0f766e?logo=pwa" alt="PWA ready" />
<a href="https://github.com/Qziky/Immersive-clock/releases"><img src="https://img.shields.io/badge/Platform-Web%20%7C%20Android%20%7C%20Win%20%7C%20Linux-0891b2" alt="Web, Android, Windows, and Linux" /></a>
</p>

Expand All @@ -40,7 +40,7 @@ controls into a low-distraction interface made for long-running displays.
| **Study** | Classrooms, study rooms, personal focus | Time, weather, progress, events, quotes, and optional environment monitoring |
| **Local first** | Account-free personal use | Settings, schedules, resources, and history stay on the current device by default |
| **Appearance** | Projection tuning and personalization | Fonts, backgrounds, time display, and component-level styling |
| **Multi-platform** | Browsers, desktops, and mobile devices | Web/PWA, Windows/Linux, and an Android Debug APK |
| **Multi-platform** | Browsers, desktops, and mobile devices | Web/PWA, Windows/Linux, and a release-signed Android APK |

> Local first does not mean every feature is fully offline. Core timers and local content work
> offline; fresh weather, city search, online quotes, external time sync, and feedback pages need a
Expand Down Expand Up @@ -75,21 +75,26 @@ per-page appearance controls.

## Quick start

### Use it directly
### Use the Web / PWA build

1. Open the [live demo (external deployment)](https://clock.qqhkx.com).
1. Download `immersive-clock-web-4.0.0.zip` from
[GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest), then deploy it to an
HTTPS web server with SPA fallback support.
2. Use the HUD in the lower-right corner to switch between clock, countdown, stopwatch, and study.
3. In a supported browser, choose “Install app” or “Add to Home Screen” to launch it as a PWA.

> External website deployments are outside the v4.0.0 release scope. This README does not guarantee
> their current version or availability.

### Installable builds

| Platform | Get it | Current boundary |
| --------- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| Web / PWA | [Live demo](https://clock.qqhkx.com) | Installation and offline behavior depend on browser support and cached resources |
| Windows | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | x64 installer and portable builds, subject to actual release assets |
| Linux | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | AppImage, deb, and rpm, subject to actual release assets |
| Android | [Debug APK guide](docs/technical/engineering/android-debug-build.md) | Debug-signed APK only; this is not a production app-store package |
| macOS | Use Web / PWA | No native macOS package is currently published |
| Platform | Get it | Current boundary |
| --------- | --------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| Web / PWA | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | Download the versioned Web ZIP and self-host it |
| Windows | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | x64 installer and portable builds, subject to actual release assets |
| Linux | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | AppImage, deb, and rpm, subject to actual release assets |
| Android | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | Release-signed sideload APK; not distributed through an app store |
| macOS | Self-host the Web / PWA build | No native macOS package is currently published |

## Privacy and capability boundaries

Expand Down
43 changes: 23 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<p>为教室、自习空间与个人专注打造的本地优先全屏时间看板。</p>

<p>
<a href="https://clock.qqhkx.com"><strong>在线体验</strong></a>
<a href="https://github.com/Qziky/Immersive-clock/releases/latest"><strong>下载 v4.0.0</strong></a>
·
<a href="docs/user-guide/README.md"><strong>使用文档</strong></a>
·
Expand All @@ -17,7 +17,7 @@

<p>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-GPL--3.0--only-2fecc6" alt="GPL-3.0-only" /></a>
<a href="https://clock.qqhkx.com"><img src="https://img.shields.io/badge/PWA-ready-0f766e?logo=pwa" alt="PWA ready" /></a>
<img src="https://img.shields.io/badge/PWA-ready-0f766e?logo=pwa" alt="PWA ready" />
<a href="https://github.com/Qziky/Immersive-clock/releases"><img src="https://img.shields.io/badge/Platform-Web%20%7C%20Android%20%7C%20Win%20%7C%20Linux-0891b2" alt="Web、Android、Windows 与 Linux" /></a>
</p>

Expand All @@ -32,15 +32,15 @@
沉浸式时钟将四种时间模式、自习信息、环境提示和外观定制组织在一个适合长时间展示的
低干扰界面中。

| 能力 | 适用场景 | 说明 |
| ------------ | ---------------------- | ------------------------------------------ |
| **时钟** | 桌面、投屏、常驻显示 | 大字时间、日期、秒数开关与自动隐藏 HUD |
| **倒计时** | 考试、演讲、番茄钟 | 快捷时长、自定义时间与结束提醒 |
| **秒表** | 活动、训练、课堂计时 | 开始、暂停、继续与归零 |
| **自习** | 教室、自习室、个人专注 | 时间、天气、进度、事件、语录与可选环境监测 |
| **本地优先** | 无账号的个人使用 | 设置、课表、资源和历史默认保存在当前设备 |
| **外观定制** | 投屏适配与个性化 | 字体、背景、时间显示和组件级样式 |
| **多平台** | 浏览器、桌面与移动设备 | Web/PWA、Windows/Linux、Android Debug APK |
| 能力 | 适用场景 | 说明 |
| ------------ | ---------------------- | -------------------------------------------- |
| **时钟** | 桌面、投屏、常驻显示 | 大字时间、日期、秒数开关与自动隐藏 HUD |
| **倒计时** | 考试、演讲、番茄钟 | 快捷时长、自定义时间与结束提醒 |
| **秒表** | 活动、训练、课堂计时 | 开始、暂停、继续与归零 |
| **自习** | 教室、自习室、个人专注 | 时间、天气、进度、事件、语录与可选环境监测 |
| **本地优先** | 无账号的个人使用 | 设置、课表、资源和历史默认保存在当前设备 |
| **外观定制** | 投屏适配与个性化 | 字体、背景、时间显示和组件级样式 |
| **多平台** | 浏览器、桌面与移动设备 | Web/PWA、Windows/Linux、正式签名 Android APK |

> 本地优先不等于所有功能完全离线。核心计时与本地内容可离线使用;新天气、城市搜索、在线
> 语录、外部校时和反馈页面需要网络。
Expand Down Expand Up @@ -71,21 +71,24 @@

## 快速开始

### 直接使用
### 使用 Web / PWA

1. 打开[在线体验(外部部署)](https://clock.qqhkx.com)。
1. 从 [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) 下载
`immersive-clock-web-4.0.0.zip`,部署到支持 HTTPS 和 SPA fallback 的 Web 服务。
2. 通过页面右下角 HUD 切换时钟、倒计时、秒表和自习模式。
3. 在支持的浏览器中选择“安装应用”或“添加到主屏幕”,即可作为 PWA 启动。

> 仓库外的在线站点不在 v4.0.0 发布范围内;本页不对其当前版本或可用性作保证。

### 安装版本

| 平台 | 获取方式 | 当前边界 |
| --------- | --------------------------------------------------------------------------- | ------------------------------------------ |
| Web / PWA | [在线体验](https://clock.qqhkx.com) | 安装和离线表现取决于浏览器及缓存状态 |
| Windows | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | x64 安装版与便携版,以发布附件为准 |
| Linux | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | AppImage、deb 与 rpm,以发布附件为准 |
| Android | [Debug APK 构建说明](docs/technical/engineering/android-debug-build.md) | 当前仅提供调试签名 APK,不是应用商店正式包 |
| macOS | 使用 Web / PWA | 当前没有对外发布原生安装包 |
| 平台 | 获取方式 | 当前边界 |
| --------- | --------------------------------------------------------------------------- | ------------------------------------ |
| Web / PWA | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | 下载版本化 Web ZIP 后自托管 |
| Windows | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | x64 安装版与便携版,以发布附件为准 |
| Linux | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | AppImage、deb 与 rpm,以发布附件为准 |
| Android | [GitHub Releases](https://github.com/Qziky/Immersive-clock/releases/latest) | 正式签名侧载 APK,不是应用商店分发包 |
| macOS | 自托管 Web / PWA | 当前没有对外发布原生安装包 |

## 隐私与能力边界

Expand Down
3 changes: 3 additions & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
.gradle/
build/
local.properties
keystore.properties
*.jks
*.keystore
captures/
.cxx/
*.iml
Expand Down
40 changes: 38 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
apply plugin: 'com.android.application'

def releaseStoreFile = System.getenv('ANDROID_RELEASE_STORE_FILE')
def releaseStorePassword = System.getenv('ANDROID_RELEASE_KEYSTORE_PASSWORD')
def releaseKeyAlias = System.getenv('ANDROID_RELEASE_KEY_ALIAS')
def releaseKeyPassword = System.getenv('ANDROID_RELEASE_KEY_PASSWORD')
def releaseSigningConfigured = [
releaseStoreFile,
releaseStorePassword,
releaseKeyAlias,
releaseKeyPassword
].every { value -> value != null && !value.trim().isEmpty() }
def releaseTaskRequested = gradle.startParameter.taskNames.any { taskName ->
taskName.toLowerCase().contains('release')
}

if (releaseTaskRequested && !releaseSigningConfigured) {
throw new GradleException(
'Android release signing requires ANDROID_RELEASE_STORE_FILE, ' +
'ANDROID_RELEASE_KEYSTORE_PASSWORD, ANDROID_RELEASE_KEY_ALIAS, and ' +
'ANDROID_RELEASE_KEY_PASSWORD.'
)
}

android {
namespace = "io.github.qziky.immersiveclock"
compileSdk = rootProject.ext.compileSdkVersion
Expand All @@ -8,16 +30,30 @@ android {
applicationId "io.github.qziky.immersiveclock"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 31303
versionName "3.13.3"
versionCode 40000
versionName "4.0.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
aaptOptions {
ignoreAssetsPattern = '!.svn:!.git:!.ds_store:!*.scc:.*:!CVS:!thumbs.db:!picasa.ini:!*~'
}
}

signingConfigs {
if (releaseSigningConfigured) {
release {
storeFile file(releaseStoreFile)
storePassword releaseStorePassword
keyAlias releaseKeyAlias
keyPassword releaseKeyPassword
}
}
}

buildTypes {
release {
if (releaseSigningConfigured) {
signingConfig signingConfigs.release
}
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
Expand Down
69 changes: 69 additions & 0 deletions docs/marketing/releases/v4.0.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# 沉浸式时钟 v4.0.0

发布日期:2026 年 8 月 5 日

v4.0.0 是沉浸式时钟的一次大版本升级。相较 v3.13.3,本版本重建了统一 UI 与响应式设置体验,
加入 Android 原生容器和正式签名 APK,并系统升级了外观、本地数据、环境监测、天气与自习信息编排。

## 下载附件

| 平台 | Release 附件 | 说明 |
| ----------- | ------------------------------------------- | --------------------------------------------------------------- |
| Web / PWA | `immersive-clock-web-4.0.0.zip` | 供自托管的生产构建,需要 HTTPS、SPA fallback 与天气同源代理。 |
| Windows x64 | `immersive-clock-4.0.0-x64-Setup.exe` | NSIS 安装版。 |
| Windows x64 | `immersive-clock-4.0.0-x64-Portable.exe` | 便携版。 |
| Linux x64 | `immersive-clock-4.0.0-*.AppImage` | AppImage 包,实际架构标识以附件名为准。 |
| Linux x64 | `immersive-clock-4.0.0-*.deb` | Debian/Ubuntu 系安装包。 |
| Linux x64 | `immersive-clock-4.0.0-*.rpm` | Fedora/RHEL 系安装包。 |
| Android | `immersive-clock-4.0.0-android-release.apk` | 使用项目长期发布证书正式签名的侧载 APK。 |
| 校验和 | `SHA256SUMS.txt` | 本次全部附件的 SHA-256 校验值。 |
| Container | `ghcr.io/qziky/immersive-clock` | 公开的 amd64/arm64 镜像,标签为 `4.0.0`、`4.0`、`4`、`latest`。 |

本次不提供 macOS 原生安装包。macOS 用户可自行部署 Web/PWA 构建。

## 主要变化

- 统一时钟、倒计时、秒表、自习、设置及弹层的 UI,改善移动端响应式布局、键盘操作、焦点管理与读屏体验。
- 新增 Capacitor Android 原生容器,并统一 Web/PWA、Electron 与 Android 的屏幕常亮控制。
- 升级主显示字体、信息字体、背景与页面级外观配置,支持本地资源、预览和引用清理。
- 新增本地数据检查、选择性导出、导入预检、恢复和彻底清理,覆盖设置、资源、噪音历史、缓存、诊断与设备状态。
- 环境监测升级为 0–100 环境安静评分,加入设备校准、原始特征归档、历史重算、分段统计和多标签页 Leader 协调。
- 改进天气、城市定位、分钟级降水、空气质量、天气提醒、固定时间、课程事件和倒计时提醒的编排。
- 语录支持本地内容及多个独立在线渠道,可配置启停、权重、顺序、缓存和故障转移。

## 更新方法

升级前建议在“设置 → 系统数据”创建完整 JSON 备份,并单独导出需要保留的噪音原始特征归档。

- Web/PWA:用 Web ZIP 内容替换自托管站点,再确认 Service Worker 已取得新版本;必要时关闭所有旧标签页后重新打开。
- Windows 安装版:退出旧版本后运行新安装程序。便携版请解压或替换到新目录。
- Linux:退出旧版本后按原包格式安装新版,或替换 AppImage 并重新授予执行权限。
- Android:从本 Release 下载 APK 后覆盖安装。后续版本必须继续使用同一发布证书才能直接升级。
- Docker:固定生产环境到 `4.0.0`,或按需使用 `4.0`、`4`、`latest`;部署后检查健康端点和天气代理。

旧设置会自动迁移至设置 schema v12,IndexedDB 会升级至 v7。自动迁移不替代备份;浏览器、
桌面客户端和 Android WebView 的本地数据彼此独立,也不会自动云同步。

## Android 安装与权限

Android APK 不是应用商店包,需要允许浏览器或文件管理器“安装未知应用”。系统出现来源提示属于侧载流程,
请只使用本 GitHub Release 附件,并用 `SHA256SUMS.txt` 核对文件。

首次使用定位或环境监测时,系统会分别请求前台位置和麦克风权限。应用不进行后台录音;拒绝权限不会影响
时钟、倒计时和秒表。当前没有连接 Android 真机,因此本次验收以 APK 构建、application ID、版本清单和
签名指纹检查为准,不将真机安装冒烟测试描述为已完成。

## 数据与指标边界

- 设置、课程、语录、自定义字体、背景和噪音历史默认保存在当前客户端。
- 导出文件是明文,可能包含位置、课程安排、语录和噪音活动时间,请妥善保存。
- 环境安静评分用于同一设备、相近条件下的相对比较,不是专业声级计。
- 估算 dB(A) 需要外部参考校准,不能用于执法、职业健康、设备验收或科学实验结论。
- 新天气、在线语录、网络校时和反馈页面仍依赖网络及相应第三方服务。

## 发布范围说明

本 Release 的 Web ZIP 是本次 Web 端正式制品,但仓库外的在线站点不属于本次发布、部署或验收范围;
本发布说明不表示 `clock.qqhkx.com` 已升级至 v4.0.0,也不对其当前可用性作保证。

完整历史请查看应用内“更新日志”或仓库中的 `public/docs/changelog.md`。
2 changes: 1 addition & 1 deletion docs/technical/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
- [测试策略](engineering/testing-strategy.md):Vitest、Playwright、Browser 验证和选择测试范围。
- [测试覆盖地图](engineering/testing-coverage-map.md):代码与测试的稳定映射。
- [构建、发布与部署](engineering/build-release-and-deployment.md):Web、PWA、Electron、Docker 和发布流水线。
- [Android Debug APK 构建](engineering/android-debug-build.md):本地依赖、CI Artifact、真机安装与已知限制
- [Android APK 构建与发布](engineering/android-debug-build.md):Debug CI、正式签名、侧载、恢复与真机验收
- [排障指南](engineering/troubleshooting.md):本地开发、存储、网络、噪音和打包故障排查。

## 文档边界
Expand Down
Loading
Loading