Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

课钟 · CourseClock

适配上海工程技术大学(SUES)教学系统的课程表应用:从教学服务中心导入本学期课表,按真实时间轴 渲染,在上课前提醒。

仓库名只说明它解决的问题 —— 什么时候上课。应用本身是单校定制的:它只认 SUES 的教务 系统、分楼作息与 WebVPN,换一所学校,导入器与作息表都得重做。

本项目是个人独立开发的第三方应用,与上海工程技术大学没有隶属或合作关系,未获其授权、 审查或背书,也不是该校的官方应用。出现校名只为说明适配对象。


它和普通课表应用的区别

独立时间测试版

simulation 变体安装为“课钟测试版”(courseclock.timetable.test),不覆盖普通版。 在“设置 → 测试工具 → 时间实验室”选择日期、拖动全天时间轴,或输入时分。 松手后暂停,点击播放按所选 0.25 至 120 倍速运行;支持前后一分钟及恢复真实时间。 模拟时间同步用于课表、课程通知和小组件,不修改手机系统时间,数据与普通版隔离。 播放期间有测试控制通知并保持 CPU 运行,测试结束请恢复真实时间以停止服务。 构建:在 android 目录运行 ./gradlew.bat :app:assembleSimulation。 完整行为与验证边界见 测试版手册。

上午第 3~5 节按教学楼错峰

同一个「第 4 节」,在不同楼上是三个不同的时间:

节次 方案 A(A、F 楼,J301) 方案 B(B、C 楼,J302,其他) 方案 C(D、E 楼,J303)
第 3 节 09:55 ~ 10:35 — —
第 3、4 节 — 09:55 ~ 11:15 10:15 ~ 11:35
第 4、5 节 10:40 ~ 12:00 — —
第 5 节 — 11:20 ~ 12:00 11:40 ~ 12:20

三者两两交叠、互不包含,所以不能用折中值或嵌套区间代替 —— 只能按楼宇分别取值。应用给每条 安排带上所属楼宇的分组,各取各的时间,因此不存在「选错方案」的系统性偏差。

第 1、2 节与第 6 节及以后三套方案一致。完整的节次-时间对照见 docs/COURSETIME.md。

真实时间轴

课块的上沿按开始时刻、高度按时长定位,而不是「第 N 节 × 行高」。同一时段重叠的课程并排 显示。09:55 开始的课与 10:15 开始的课,在版面上的高低差就是它们真实的时间差。


功能

  • 从教学服务中心导入 — 引导完成学校 WebVPN 与统一身份认证,登录后自动进入课表页, 读回本学期的课程、作息时间与学期起止日期。
  • 从分享 / 导出文件导入 — 读取本应用导出的 .wakeup_schedule 文件。
  • 分楼作息 — 如上。
  • 真实时间轴 — 如上。
  • 多课表管理 — 每张课表右侧操作按钮提供课表设置、管理课程、删除课表;当前课表也可删除, 删除需确认,剩余课表自动接替。支持手动增删改课程与自定义颜色。
  • 桌面小部件 — 一周课程、当天课程两种,含课前和下课倒计时;删除最后一张课表后清除旧课程。
  • 课程通知 — 上课、下课提醒独立设置提前量,仅合并同时触发的提醒,不延后下一节课。 状态显示可选「关闭 / 自动(Android 实时通知)/ 仅通知栏」,有下一节有效课程时持续静默展示 “距离上课 X 小时 Y 分钟”,跨无课日查找,支持隐藏本次;学期内无后续课程时撤下。 自动模式在课程进行中请求 Android 16 原生实时通知;不支持或未授权时保留同一条通知栏状态。 不使用 HyperOS 焦点/超级岛专用协议。课前仍为普通状态通知,不将未来日程提升为实时通知。 日视图小组件课前状态保持蓝色:超过 60 分钟显示“约 1.5 小时”等一位小数,60 分钟以内显示 “还有60分钟上课”,不显示“待上课”。纯显示刷新不主动唤醒休眠设备,课程边界和一次性提醒 仍使用精确唤醒闹钟,实际送达时间受系统后台策略影响。 新安装默认关闭总开关、开启上课提醒偏好(提前 20 分钟)、关闭下课提醒;升级保留原开关。 在「设置 → 课程通知」检查权限、后台限制和系统声音设置。状态始终静默,普通提醒服从系统渠道设置。
  • 自定义时间表 — 可建任意数量的时间表与节次时间,用于夏令时等场景。
  • 导出与分享 — .wakeup_schedule 文件,以及 ICS 日历文件。
  • 外观 — 浅色 / 深色 / 跟随系统,主题色,课表背景图。

安装

发布包为 APK,最低支持 Android 5.0(API 21),目标 API 29。

也可以自行构建,见 docs/BUILDING.md。

测试范围(请先读):本项目只在一台 HyperOS 3.0 真机上做过实机验证,没有在其它机型或 系统版本上测试过。换一台设备后行为不保证一致 —— 风险最集中的是上课提醒与桌面小部件: 各厂商对后台唤醒、电池优化和小部件规范的处理差异很大,本应用针对这套策略做的适配 (见下文「后台运行设置」)在别的系统上未必成立。真机以外的验证是 Robolectric 单元测试 (android/app/src/test/)。

从教学服务中心导入

  1. 主界面点「导入」→「从 SUES 教务导入」。
  2. 在打开的页面里登录学校 WebVPN,完成统一身份认证。账号、密码由你本人输入,应用不读取、 不保存你的凭据。
  3. 账号密码页按下「登 录」并提交后,应用立即显示遮罩等待跳转;进入独立的滑动登录页后, 等滑块就绪才在本机识别并代拖,每份页面最多试 3 次。识别失败、达到次数上限,或接管后 等待滑块超过 20 秒时,会撤下遮罩并提示手动验证;被退回账号密码页时也会撤罩,方便修改。
  4. 登录成功后应用自动走到教学服务中心的课表页,自动读回数据并返回。
  5. 自动执行期间会盖一层半透明遮罩并说明当前状态,随时可以按「停止自动脚本」接管。

自动流程只在能确认落在预期页面时继续。一旦出现未预料的页面,会立即停止并转为手动提示, 由你自己操作后按下读取按钮 —— 这个过程不会静默失败。

关于密码过期提示:学校会不定时要求修改密码。出现该提示时,应用会自动点「跳过」以便 继续导入,这不会替你修改密码。

关于证书告警:登录页证书验证失败时,应用会停止连接,不提供绕过入口,避免登录凭据 经过不可信连接。请检查系统时间或更换网络后重试;网站证书本身异常时需等待网站修复。

添加桌面小部件

小部件只从桌面的小部件列表添加:长按桌面空白处 → 添加小部件 / 小部件列表 → 选择「课钟」, 然后选择当天课程(4×2)、当天课程(小,2×2)或一周课程(4×4)。多张课表时,周视图会让你选择;日视图跟随默认课表。

支持拖动调整大小,包括 5×2 横条和 4×4 大卡;具体格数、可用空间由桌面决定。 空间不足时先收紧间距、收起重复日期和历史摘要,优先保留课名、时间和地点。 长课名、地点尽量保留首尾,周课程块的地点优先保留末尾编号;未显示内容仍保留在无障碍描述中。 日视图整卡显示,周视图按组件实际宽度排版,纵向放不下时可在组件内上下滚动,不把整周压成小字。 2×2 不承诺显示所有课程全文,更多课程信息请在应用中查看;日视图放大后仍是当天日程,不会自动变成周课表。

应用内不提供添加入口:各厂商桌面在这件事上没有可用的通用做法 —— 要么不支持 requestPinAppWidget,要么(HyperOS 实测)接受请求却既不弹确认框、也不真的落一个实例, 点下去只会把用户丢进一个第三方列表里自己找。与其留一个走不通的按钮,不如不做。

列表顺序由桌面决定,应用不能指定排名。选择器显示静态课程示例,实际内容以所选课表为准。 桌面小部件跟随系统浅色/深色模式,不受应用内「深浅模式」选项影响。 Android 12 及以上由桌面解析表头文字和图标颜色,与底板使用同一主题;课程位图在主题配置变化时刷新。

后台运行设置

HyperOS 上首次点击「后台运行不受限制」打开厂商电池管理,将课钟设为「无限制」。 返回后确认已设置,再次点击:尚未获系统豁免时打开 Android 电池优化授权页,已获豁免时 打开系统电池优化列表,供查看或调整。入口名称始终不变,下方说明为「减少待机时提醒延迟」。 两者是独立设置:HyperOS 状态由用户确认,AOSP 状态由系统实时查询,不以历史点击记录 判断授权。其他系统直接进入 Android 系统步骤。

界面外观

设置、课表管理、课程管理及编辑表单共用浅深色文字与表面颜色,卡片和输入框使用 8dp 圆角, 底部面板使用 16dp 顶部圆角。浅色模式提高次要文字对比,深色模式使用中性灰区分页面和内容。 课程管理中的课名最多显示两行,卡片随内容和字体大小增高;时间信息使用主题文字色,避免浅色课程配色导致难以辨认。

课程详情

点击课表中的课程查看课名、起止时间、节次、周次、地点和教师;免听、重修、非本周仅在适用时显示。 重叠课程共用一个详情面板:用左右箭头切换,或点击「重叠课程 N / M」直接选择。 仅列出当前查看周有安排且时间相交的课程,按各自楼宇作息计算,首尾相接不算重叠; 时间未设置时回退到节次判断。编辑和删除对应当前选中的课程。 删除先选择「这条安排」或「全部安排」,再确认;不再通过长按直接删除整门课程。 「提醒设置」进入全局上课提醒设置。长课名、地点及大字体内容可以在面板内滚动查看。

权限与隐私

权限 用途
INTERNET 导入课表时访问学校系统
VIBRATE 上课提醒
POST_NOTIFICATIONS Android 13 及以上发送课程通知
POST_PROMOTED_NOTIFICATIONS Android 16 及以上请求实时通知,实际展示由系统决定
RECEIVE_BOOT_COMPLETED 重启后重排课程提醒(系统会清空闹钟)
REQUEST_IGNORE_BATTERY_OPTIMIZATIONS 申请 Doze 白名单,否则深度待机后早课提醒会被推迟

导入的课表只保存在本机。应用不向任何第三方服务器上传数据,也不含统计或崩溃上报 SDK。


仓库结构

.
├── android/      Android 应用。Gradle 工程,应用模块为 app/
├── coursetime/   作息换算模块。纯 Java,无第三方依赖,自带自测
├── design/       图标的矢量设计源文件(SVG)
├── docs/         文档
├── LICENSE       Apache License 2.0
└── NOTICE        上游署名与改动清单

构建与测试

前置:JDK 21、Android SDK。发布签名需要自行提供密钥库。Gradle 内置签名从环境变量 WAKEUP_KEY_PASSWORD 读取口令;已配置的本机 DPAPI 工具可独立签名 APK,详见构建手册。 调试包即使使用发布证书签名,也不能当作正式 Release 包。

目标 命令
作息换算自测 powershell -ExecutionPolicy Bypass -File coursetime/verify.ps1
App 单元测试 cd android; ./gradlew test
调试包 cd android; ./gradlew assembleDebug
发布包(签名) 设置 WAKEUP_KEY_PASSWORD 后 cd android; ./gradlew assembleRelease

细节见 docs/BUILDING.md。

文档

文档 内容
docs/BUILDING.md 构建、测试、发布签名、环境要求
docs/COURSETIME.md 作息换算:地点判定、节次解析、输出契约
docs/EAMS-IMPORT.md 教务数据来源、.wakeup_schedule 格式、编码约定
CHANGELOG.md 版本记录

许可与上游

Apache License 2.0。

本项目是 WakeupSchedule_Kotlin 的 fork, 直接上游为 Cerbur/WakeupSchedule_Kotlin (commit a69fb75)。上游产品名「WakeUp课程表」未沿用,美术资源全部重绘。版权归属、内联的 第三方代码与完整改动清单见 NOTICE。

About

适用于上海工程技术大学(SUES)分楼课时的课程表

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages