Repository navigation
Releases: RTXwcz/Class-Schedule
Release list
v1.8.0 — 小组件显示正在上的课与下一节课,整块可点开
我的课表 v1.8.0
桌面小组件现在按“此刻在做什么”来显示:正在上课就显示这门课,否则显示下一节课,两种状态都带上教师姓名;小组件的每一块都能点开应用。
用户可感知的变化
- 顶栏分状态:上课时间显示“正在上课”和当前课程,其余时间显示“接下来的课程”和下一门课。
- 每门课都显示教师,行文案是“地点 · 教师”,最小尺寸(180×110)也不会把教师挤掉。
- 小组件任意位置都能点开应用,包括顶栏文案与日期徽标:课表为空时进“录入”,有课程时进“课表”,已在其他页面时也能回到课表;有课程但近期无课时显示“近期没有课程”并进课表,而不是让你再录入一遍。
- 小组件会在“当前课结束”和“下一节课开始”时自动刷新,下课铃响后顶栏自己切回“接下来的课程”,不需要手动打开应用。
- 判定“正在上课”的规则与主页横幅完全一致(当日、已过开始、未到结束;重叠课程取先开始的那门),小组件与首页不会互相矛盾。
安装与验证
要求 Android 7.0+,仅支持 ARM 设备。沿用原正式签名(SHA-256 46b57717…9339f),可覆盖升级。附件为 ARM64 与 ARMv7 两种 APK、对应源码包与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
单元测试 120 项全部通过,Android 15 设备测试 82 项中 78 项通过、4 项按环境前提跳过。小组件排版在 5 种尺寸 × 2 种配色 × 深浅色 × 长名称 × 两种状态 × 两种空状态下逐条断言不裁切,点击链路由设备测试直接点按真实 RemoteViews 验证。细节见 验证记录。
v1.7.1 — 识别拆分修复与课表卡片信息收敛
我的课表 v1.7.1
这一版修掉一处识别拆分错误,并把课表卡片上的信息收敛到学生真正要读的四个字段。
用户可感知的变化
微积分(甲)I这类“标题 + 末尾短编号”的课程不再被拆成两门课,教师、教学楼、教室照常落到各自字段。- 课表卡片只显示科目、教学楼、教室、教师;非每周课程额外显示单双周。
1-8周、秋冬第1-8周3节/周这类周次与备注不再重复堆在卡片上,需要时到编辑器或“全部课程”里看。 - 图片识别写进备注的内容一并收敛:教师、教学楼、教室、周次这些已经落到独立字段的行不再进备注,只有真正额外的信息(例如“需自备实验服”)保留。
- 设置 → 图片导入不再罗列推荐模型,只保留地址与模型名的填写说明;模型是否可用以服务商文档为准。
安装与验证
要求 Android 7.0+,仅支持 ARM 设备。沿用原正式签名(SHA-256 46b57717…9339f),可覆盖升级。附件为 ARM64 与 ARMv7 两种 APK、对应源码包与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
单元测试 110 项全部通过;Android 15 设备测试 80 项中 76 项通过,4 项需要预置 OCR 模型或显式指定图片的诊断用例按环境前提跳过。卡片渲染与识别合并都有对应的设备测试断言,详细范围、边界与仍未处理项见 验证记录。
v1.7.0 · 对抗式审查修复
我的课表 v1.7.0
这一版把上一轮对抗式审查发现的问题逐条修掉:导入反馈、MCP 加固、迁移测试、冲突卡片编辑、云端作息、发布守卫与备份容错。
用户可感知的变化
- 图片导入后,复核页会显示“已追加 N 门课程,M 门待补充”,不再只看到报错。
- 全览档里同一格有多门冲突课程时,点卡片会先让你选择要编辑哪一门。
- 云端识别(OpenAI 兼容接口)也会带回一天作息,和本地 OCR 一样可以“应用为每日作息”。
- 教师姓“楼”不再被当成教学楼;节次跳号的作息表也能识别;备份里的周次写成 “1-8,10” 也能导入。
- 设置 → AI 连接新增公共网络安全提示。
开发与发布
- MCP 服务增加滑动窗口限流(每对端 10 秒 60 次)与 1 MiB 请求体积上限。
- release 构建缺少签名环境时直接失败,避免误产未签名包;CI 增加 release 变体编译与 lint。
- 新增 Room 迁移测试(3→4)与导入持久化、冲突选择、限流等回归测试。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
单元测试 109 项、Android 15 设备测试 70 项全部通过。详细范围与边界见 验证记录。
v1.6.4 · 导入不再全有或全无
我的课表 v1.6.4
修复“识别出十几门课,导入后只进去一门”:导入以前是全有或全无,只要有一门课超出当前作息就整批回滚。
修复内容
- 可用的课程照常入库;超出的课程留在复核列表并显示原因,状态栏提示「已追加 N 门课程,M 门待补充」。
- 若因节次超出当前作息失败、而图片中又识别到了作息,提示会直接告诉你可以先点「应用为每日作息」再导入。
- 节次无法从结构判断时不再留空,改为按“至少占用起始那一节”填入并标为低置信,复核页仍可修改。
- 新增真机(Room)回归测试覆盖上述三条路径。
真实截图端到端结果:先落库 13 门、保留 1 门;应用识别到的 13 节作息后,14 门全部入库。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
单元测试 103 项、Android 15 设备测试 67 项全部通过。详细范围与边界见 验证记录。
v1.6.3 · 课表读作息与云端接口修复
我的课表 v1.6.3
这一版把课表图片里的作息也读出来,并修好 OpenAI 兼容接口的可用性。
从课表读作息
- 解析图片时间轴:一天多少节课、每节课几点到几点。复核页顶部出现「识别到 N 节作息」,一键「应用为每日作息」,提醒与小组件随之更新。
- 要求每节都有起止时间、节次连续,缺行时不采用,避免把节次编号改错。
- 真实截图实测 13 节全部正确(08:00-08:45 … 20:30-21:15)。
地点不再丢括号
紫金港田径场(东)、紫金港风雨操场(羽毛球场)原样保留。紫金港东2-204仍拆成教学楼「紫金港东」+ 教室「2-204」;体育馆(东)A301保留为「体育馆(东)」+「A301」。
云端识别修复
- 地址只填服务根地址也能用,自动补全
/v1/chat/completions。 - 请求显式
stream: false,兼容默认流式的网关。 - 把服务端的错误原文和状态码一起显示;把控制台首页当 API 地址(返回网页)时会明确提示。
- 设置页新增「测试连接」,并写明模型必须支持图片输入。
- 实测可用:DeepSeek
https://api.deepseek.com+deepseek-flash;中转站https://direct.abinapi.com+Qwen3.8-Flash-Next(走/v1)。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
单元测试 102 项、Android 15 设备测试 66 项全部通过。详细范围与边界见 验证记录。
v1.6.2 · 图片识别按表格结构解析
我的课表 v1.6.2
重写图片识别的表格结构解析:同一张教务导出截图此前会识别成 98 条垃圾课程,现在得到 14 条正确课程。
修复内容
- 不再把每个文本块当成一门课:同一单元格内的课名、教师、地点被视为一门课;单元格检测失效时才退回文本规则。
- 表头缺字自动补全:OCR 把“星期一”读成“星期”时,按位置补回缺失的星期,周一的课不再落到周二。
- 单/双 子列识别:“单”“双”子列标题写入单双周规则,不再变成课程名。
- 字段归类:课名(含折行)、教师(含“张三/李四”多人写法)、教学楼与教室(“紫金港东2-204”拆成楼名 + 房间号)、周次分别填入对应字段。
- 丢弃不可映射信息:
2027年01月10日(14:00-16:00)这类单次日期时间戳与N节/周计数直接舍弃,不再堆进备注。 - 修正两处误读:把“第1-8周2节/周”的“2节”当成节次、把“周2”当成周二。
- 时间轴不进课程:节次号、08:00 之类的时钟、早晨/上午/下午/晚上都不会再被识别成课程。
- 重复节次合并:同一门课按节重复出现的行会合成一条,并给出该次课的节次跨度。
为什么不上语义模型
表格结构(行、列、格、星期、节次)用几何与规则比模型更准,也不会臆造课程;行分类靠位置、关键词与排版形状(相对字号、是否紧跟周次行)已经足够,无法确定的字段会以未确认状态进入复核页让用户确认。本地识别仍是零额外下载、离线、可解释;需要更强兜底时可继续使用已支持的云端视觉接口。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
新增「教务导出截图」形态的解析回归测试;单元测试 100 项、Android 15 设备测试 66 项(含表格网格检测、导入复核、课表与小组件回归)全部通过。详细范围与边界见 验证记录。
v1.6.1 · 最窄档可读性修复
我的课表 v1.6.1
修复 1.6.0 的最窄档列宽问题:并行课程多时列会被压到 20 多 dp,日期被折行、“教学楼 + 教室”被挤没。这一版把最窄档恢复成一天一列、七天平分屏宽。
修复内容
- 最窄档每天固定一列,列宽按七天平分(411dp 屏约 49dp、360dp 屏约 42dp),星期与日期、教学楼与教室完整可读。
- 同一天时间冲突的课程不再并排挤宽整周,而是在该天列内合成一张卡片,逐条列出课名与地点,中间用细分隔线分开。
- 星期表头拆成“周几”“日期”两个单行标签并禁止换行,日期不会再出现“09/0 / 7”。
- 标准 / 宽松档保持并排分栏,方便对照冲突课程。
- 修复切档时布局被缓存、合并结果不刷新的问题。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
Android 15(411dp)与 Android 7.0(360dp)各跑通同一套 61 项设备测试,其中包含“有冲突的一天与无冲突的一天列宽一致”“冲突卡片同时显示两门课名与两处地点”“切到标准档恢复分栏”。详细范围与边界见 验证记录。
v1.6.0 · 连堂自动合并与整周入屏
我的课表 v1.6.0
这一版处理课表的两处显示问题:连堂课被拆成多行时不再出现一叠碎卡片,最窄档保证整周都在屏幕内。
连续同门课自动合并
- 同一天里连续节次、课名/教学楼/教室/教师/周次/单双周完全相同的记录合并成一张卡片,导入或手工录入把连堂课拆成“第 1 节 / 第 2 节”也不再多出重复卡片。
- 中间缺一节、教室不同、周次或单双周不同、不同星期,都保持分开显示,不会误合并。
- 合并只发生在显示层:课程数据不变,“全部课程”仍是原始记录,点开合并卡片编辑的是其中第一节,不会把合并跨度写回。
最窄档整周入屏
- 列宽改为按当周真实列数反算:某天有并行课程时会自动收窄,七天始终整体显示在屏幕内,不用先滑到右边才能看到周日。
- 411dp 屏幕上即使出现 10 列(周一 2 栏、周三 3 栏)也能整周入屏。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
Android 15(411dp)与 Android 7.0(360dp)各跑通同一套 60 项设备测试,其中包含连堂合并的四组判定、点击合并卡片后编辑单节记录、以及并行课程下七天全部入屏。详细范围与边界见 验证记录。
v1.5.5 · 课表两轴自由平移
我的课表 v1.5.5
这一版修掉课表的手感问题:拖动不再被锁定在横或竖一个方向。
自由平移
- 手指画到哪里内容就跟到哪里:一次滑动可以同时换到别的星期和别的节次,斜向拖动不再需要分成两次操作。
- 松手后按手势速度继续惯性滑行,新一次触摸立刻停住。
- 双指捏合缩放的同时也能直接拖动定位。
- 惯性按时间积分实现,不依赖帧时钟,在不同刷新率与低端设备上滑行距离一致。
兼容性
单轴滑动、performScrollTo 定位、缩放宽档与“捏回全览”吸附行为全部保持原样;无障碍与语义滚动仍走系统滚动容器,未受影响。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
Android 15(411dp)与 Android 7.0(360dp)各跑通同一套 57 项设备测试,其中包含“一次拖动同时移动两轴”和“快速滑动比慢速拖动滑得更远”。详细范围与边界见 验证记录。
v1.5.4 · 全览与拖动两种课表浏览方式
我的课表 v1.5.4
这一版把课表的浏览方式分成两种:默认全览一屏看完整周,需要细节时切到拖动档左右滑动,两档之间还可以双指捏合连续缩放。
两种浏览方式
- 全览(默认):列宽按屏幕宽度自动计算(411dp 屏约 49dp、360dp 屏约 42dp),七天同屏,课名折行显示,先看全局再抠细节。
- 标准 92dp / 宽松 130dp:固定列宽,一屏约 4 天 / 3 天;左右拖动看不同天,上下拖动看不同时段。
- 在课表上双指捏合即可连续缩放 40–220dp,捏到比全览还窄时自动吸附回全览,不会只露出半个屏幕的缝。
- 右上角按钮显示当前档位,点按按“全览 → 标准 → 宽松 → 全览”循环,切换时保留横向浏览位置。
显示细节
- 全览档的课程卡片不再重复“第 X–Y 节”:卡片高度已经表示跨了几个节次,单双周标记仍然保留。
- 节次高度仍按内容分配,并把卡片内缩与行间距计入需求,窄列长课名在 Android 7 的折行规则下也不会被裁。
- 表头为“周几 + 日期”两行,窄列中居中;星期表头与时间刻度分轴滚动、始终对齐。
安装与验证
要求 Android 7.0+。沿用原正式签名,可覆盖升级。附件只有 ARM64 与 ARMv7 两种 APK、对应源码与 SHA256SUMS.txt,不含 x86/x86_64 与 OCR 模型权重,开源协议 GPL-3.0-only。
Android 15(411dp)与 Android 7.0(360dp)各跑通同一套 55 项设备测试,覆盖全览、拖动、双指缩放、双向滚动与小组件渲染。详细范围与边界见 验证记录。