Repository navigation
Releases: kuailiaojie/classtable
Releases · kuailiaojie/classtable
Release list
3.6.0
继续打磨 AI 助手面板:去掉面板左上角的返回箭头,补上日程的改 / 删与「一次建多天课程」,并把面板的确认 / 取消接上全站触感。
变更:AI 助手面板
- 去掉左上角返回箭头:面板是覆盖层而非导航页,不该用「‹ 返回」。关闭统一走下滑把手 / 点遮罩 /
系统返回三条路。 - 确认 / 取消补触感:「确认执行」用实一点的一下、「取消」用轻的一下,与全站调用点(如日程删除确认)一致。
变更:AI 助手(操作)
- 日程可改 / 可删:动作新增
agenda_update/agenda_delete(局部补丁,未给的字段保留;改时间成对给出,
改全天用allDay);配套只读工具SEARCH_AGENDA,改 / 删前先用它取真实agendaId。预览卡给出
「改前 → 改后」的标题 / 日期 / 时间 / 地点 / 备注。 - 一次建多天课程:建课动作支持
days(如[1,3]= 周一 + 周三),落成课程的多星期掩码;单个day仍可用。 - 空态示例与提示词同步更新(工具目录与动作格式随
AiFunctions/AI_ASSISTANT_PROMPT生成)。
3.5.0
助手换个形态打开:从「顶部滑下的覆盖层」改成底部弹出面板,消息按聊天气泡重排;顺手修好课表页头那一行「不齐平」。
变更:AI 助手打开方式
- 改成底部弹出面板:从课表页头的「✦ 助手」打开时,面板自屏幕底部升起,占屏高约 85%,顶部圆角 +
一道拖拽把手。抓住把手下滑即可收起(带速度判定),点遮罩 / 系统返回 / 面板返回箭头照旧能关。
相比原先从顶部滑下,底部面板更贴近「聊天」的直觉,也让入口与面板在视觉上解耦。
变更:AI 助手界面
- 助手消息改成左对齐气泡:与右侧的用户气泡对位;气泡底色是一层极淡的前景色叠加,浅色 / 深色主题
都读得出层级。身份标签「✦ 助手」与正文(Markdown)都在气泡里。 - 等待态也是气泡:「✦ 助手」+ 三点呼吸,提前占住助手气泡的位置。
- 确认卡嵌进气泡:待落库动作的明细与「确认执行 / 取消」跟随助手气泡,不再脱离「谁在说话」。
修复:课表页头不齐平
- 页头的「今天 / 添加 / ✦ 助手」此前把 44dp 触达高度直接挂在文字上,文字顶对齐在这 44dp 里,
与同行的周 / 日分段控件(34dp,文字居中)、天气图标(22dp)的中线差了约 8dp。改用居中的容器兜住
触达高度,字形落回行中线,整排对齐;触达高度不变。
3.4.0
继续打磨 AI 助手面板(设计 / 逻辑 / 动效),并重整课表顶部那一行的排布。
变更:课表顶部排布
- 周 / 日切换改用分段控件:原先是两颗各自描边的 chip,现与「日程 / 倒计时」同用一条底槽 + 会滑动的
指示块,顶部更收敛。 - 顶部按「导航簇 / 动作簇」分组:定位(今天)与视图粒度(周 / 日)收成一组,「添加」「✦ 助手」另起一组,
靠留白分开,不再是一串等距项。 - 修正大标题跨周不更新:翻到别的周时,标题改亮该周的日期区间(原先恒显示今天的日期,与表头列出的
日期对不上);当前周仍亮今天。
变更:AI 助手面板
- 消息入场动效:新到的气泡淡入 + 轻轻上移;同一次打开内不重播旧消息的入场(复用
EntranceTracker)。 - 等待态改成三点呼吸:替掉静止的一行「正在整理…」,更像「在算」。
- 回执改成浮起面小胶囊,带出入场,且不占布局(不再把输入区顶动)。
- 发送键:按下回缩、可用 / 不可用之间底色与字色缓动,并补上「发送」读屏名。
- 自动滚动收敛:只有本来就贴在底部时才自动跟到最新,向上翻历史时不再被新消息拽走;首次打开仍直接落在
最新一条。 - 助手身份标签由「✦ 整理结果」改为「✦ 助手」(提问类回答也说得通)。
变更:AI 助手(逻辑)
- 可信时钟:上下文里单独给出一块「现在」(今天 / 明天 / 昨天 / 本周 + 教学周 + 开学日),并在提示词里
要求日期与相对日期一律以此为准,不再让模型拿自己的日期知识去推「周三」是哪天。 - 本地自检 + 一次修回:模型产出的动作先过一遍本地校验(节次是否落在作息内、周次是否在学期内、日期 /
时间是否合法);不合格就把具体字段与原因喂回模型重出一份完整计划(只修一次),不再像以前那样把坏
条目静默丢弃。修完仍不合格时只说明问题,不落地、不给确认按钮。 - 确认卡改成字段级明细(名称 / 时间 / 周次 / 地点 / 教师;日程为标题 / 日期 / 时间 / 地点),
不再是一行长句。 - 解析阶段不再静默丢弃坏条目:缺字段 / 未知类型会带上下标与字段名进入问题列表,参与上面的修回。
变更:AI 助手(工具循环与改删课)
- 只读工具循环:助手不再一次性作答 —— 需要事实时先调用只读工具(
GET_CURRENT_OVERVIEW/
SEARCH_COURSES/GET_WEEK_SCHEDULE/GET_SEMESTER_SCHEDULE/GET_PERIODS/GET_SETTINGS/
GET_SCHEDULE_ADJUSTMENTS),App 执行后把结果回灌,最多 6 轮;事实够了再给动作。课程 ID 只能来自
工具返回,不能编。 - 可改 / 删已有课程:动作新增
update/delete(局部补丁,未给的字段保留;SELECTED_WEEKS只改 /
删指定周次,必要时把记录拆成「保留的周 + 改动后的周」两条)。改 / 删前先定位唯一课程,歧义就反问。 - 长期记忆:新增
memory动作,把用户偏好记下来并注入之后的对话;设置里新增「助手记忆」页,可查看 /
增删 / 清空(仅本机,不进云端设置同步)。 - 事实缓存:同一轮内相同调用只执行一次;跨轮用进程级缓存(随课程 / 日程 / 设置版本失效,5 分钟过期)。
- 轻量遥测:每轮记录轮数 / 工具调用数 / 动作数 / 字符数 / 延迟(
ai_agent_turn),不落库、不含课表正文。 - 确认卡支持改 / 删的字段级「改前 → 改后」;主按钮文案由「确认添加」改为「确认执行」。
- 系统提示词随之重写:加入输出协议(每轮
tool或actions)、工具目录,以及动作格式(建 / 改 / 删 / 记忆)。
变更:AI 助手(改设置 / 打开页面 / 原生函数调用)
- 可改设置:动作新增
setting,白名单覆盖主题 / 强调色 / 提醒开关与提前量 / 提醒形态 / 明日预告与时刻 /
日程提醒与时刻 / 上课免打扰 / 学期总周数;取值先经本地归一化与范围校验,落库走与设置页相同的 setter
—— 设置页能拒绝的,助手也拒绝。 - 打开页面:动作新增
open,把用户带到指定页(设置 / 作息 / 调休 / 记忆 / 导入…),只导航、不改数据;
确认后先关面板、动画跑完再跳转。 - 原生 function calling:只读工具改为按 provider 下发
tools(OpenAI 兼容端tools、Gemini
functionDeclarations),模型可直接返回原生工具调用;带工具请求被拒时自动退回纯文本,老的 JSON
tool协议仍是兜底。函数定义集中在data/AiFunctions.kt,提示词目录与两家 wire 格式都由它生成。 - 预览卡支持「改设置」的改前 → 改后。
新增:AppFunctions(Android 16+)
- 接入
androidx.appfunctions(实验性),把课表能力以设备端 MCP 的形式开放给系统智能体:今日课程、
按条件搜课、某周课程、作息、学期信息、加课、加日程、按 ID 删课。 - 服务
ClasstableAppFunctionService由 KSP 生成;清单已按官方契约声明(schema / v2 XML / intent-filter),
res/xml/app_metadata.xml描述能力边界与使用约束;函数与 DTO 都带 KDoc,由@AppFunctionDeclaration/
@AppFunctionSerializable描述。低版本或未授权时系统不会调用,不影响应用其余部分。 - 复用与站内助手同一套领域逻辑(
AiPlanner/ 仓库),两条入口行为一致。
3.3.0
把 AI 助手的入口与面板形态重做了一遍:入口从页顶那条隐蔽的下拉横条挪进课表页头,面板按聊天形态重排。
变更:AI 助手入口
- 入口挪进课表页头:原先藏在页顶的下拉横条改成一个看得见的「✦ 助手」按钮(可点、可读屏);
面板仍从顶部滑入,打开时隐藏底部导航,点遮罩 / 系统返回 / 面板返回箭头都能关闭。
对话在本次会话内保留。
变更:AI 助手面板形态
- 回答按聊天形态重排:用户消息是右对齐的实底气泡;AI 回答改为带「✦ 整理结果」标签的无气泡正文,
并接入站内的轻量 Markdown 渲染(列表 / 加粗 / 小标题),不再是一坨无格式的平铺文字。 - 输入区改成胶囊输入框 + 圆形发送键,替掉原先「下划线表单 + 方块按钮」的填表长相。
- 面板改用浮起面 + 投影(与悬浮底部导航同一套浮起语言),读成「浮在课表上的一层」而非一张白纸。
- 提示词放开轻量 Markdown,让助手能自己用列表 / 加粗把信息组织出来。
3.2.0
把导航栏与 AI 助手的入口、面板形态重做了一遍:助手不再占底部页签,入口挪进课表页头,面板按聊天形态重排;
顺手理清了 AI 的命名与配置位置,把「上课时间」从时间线改成清单式编辑,并补上雨课堂通知的 HTML 清洗。
变更:导航与助手入口
- 底部导航从 5 个页签精简为 4 个(课表 / 课程 / 日程 / 设置),「助手」不再占用页签 —— 借鉴
「助手是上下文入口,不是一级页面」的做法。 - AI 助手入口挪进课表页头:原先藏在页顶的那条下拉横条改成一个看得见的「✦ 助手」按钮(可点、
可读屏);面板仍从顶部滑入,打开时隐藏底部导航,点遮罩 / 系统返回 / 面板返回箭头都能关闭。
对话在本次会话内保留。
变更:AI 助手面板形态
- 回答按聊天形态重排:用户消息是右对齐的实底气泡;AI 回答改为带「✦ 整理结果」标签的无气泡正文,
并接入站内的轻量 Markdown 渲染(列表 / 加粗 / 小标题),不再是一坨无格式的平铺文字。 - 输入区改成胶囊输入框 + 圆形发送键,替掉原先「下划线表单 + 方块按钮」的填表长相。
- 面板改用浮起面 + 投影(与悬浮底部导航同一套浮起语言),读成「浮在课表上的一层」而非一张白纸。
- 提示词放开轻量 Markdown,让助手能自己用列表 / 加粗把信息组织出来。
变更:AI 命名与配置
- 配置页标题由「AI 助手」改为「AI 设置」,并从「导入课表」分组移到设置首页「常用」里直达。
- 修正指向不存在入口的文案(原为「设置 → 图片识别」);说明改为「图片识别与助手共用这份配置」。
- 默认模型 ID 换成真实值:Gemini
gemini-2.5-flash、OpenAI 兼容gpt-4o。
变更:上课时间(作息)
- 由按分钟成比例的「时间线 + 右下角拖拽手柄」改为清单式:一行一节
「第 N 节 08:00–08:45 · 45 分钟」,时长用「- / +」按 5 分钟一档调,点任意时刻弹选择器精确改;
课间单独一行,可改长短或插一节。
修复:雨课堂通知里的 HTML
- 通知出口(新公告 / 课前提醒里的公告 / 实时活动 / FCM 正文)统一再清洗一次 HTML —— 旧缓存与
转义过一层的<p>都不会再逐字显示。 - 清洗器同时补上
<script>/<style>整块剔除,并把标签识别收紧到「以字母开头」,避免把纯文本
里的尖括号(5 < 6 > 3)误当标签吃掉。
内部质量
- 清掉全部编译期废弃告警:
hiltViewModel换用新包androidx.hilt.lifecycle.viewmodel.compose、
resourceConfigurations改为androidResources.localeFilters、Hilt 限定注解显式标注@param:目标、
App Check 的Tasks.call改为TaskCompletionSource。 - 两处替代方案牵涉后端 / 存储迁移的告警也已实迁:推送标识从废弃的 FCM 注册令牌改为
Firebase Installation ID(FID)(登录后上报,去掉getToken()/onNewToken();后端仍按同一
字段定向投递——FID 可直接当令牌用);会话加密存储从废弃的androidx.security:security-crypto
换成基于 Android Keystore AES-GCM 的轻量SecurePrefs,并移除了该依赖。 - 迁移注意:旧会话(账号登录态 / 雨课堂登录态)不迁移,升级后需重登一次——会话可重新取得,
不同于课程数据。
3.1.0
一次功能 + 内部质量并重的版本:新增 AI 助手(自然语言建课 / 建日程、询问课表),
修掉雨课堂公告的 HTML 直出,并把上一版欠下的构建纪律与适配脚本去重收尾。
新增:AI 助手
- 底部导航新增「助手」页:用一句话就能建课 / 建日程,也能直接问课表安排。
例:「周三下午加一门高数,1-16 周,教三 201」「明晚 8 点提醒我交作业」「这周哪天最空?」 - 先预览、再落库:模型只负责把话解析成结构化动作,App 在聊天气泡里列成
「将执行以下操作」卡片,点「确认添加」才写进课表 —— 模型幻觉不会直接污染课表。 - 复用已有的 AI 供应商配置(Gemini / 任意 OpenAI 兼容接口);新增文本对话通道,
并把「今天 / 作息 / 现有课表 / 近期日程」作为上下文喂给模型,便于换算日期、避开冲突。 - 未配置密钥时给出明确提示;调用失败有错误行与 Crashlytics 上报。
修复:雨课堂公告 HTML 直出
- 雨课堂的
content.text/app_text偶尔带 HTML 标签与实体,此前全链路原样透传,
<p>/<br>/ 会逐字显示在课程详情页与通知里。现在入库前统一转纯文本
(段落与<br>变换行、解码实体、折叠空行),详情页与通知一并干净。
内部质量
- 统一 JVM/构建:布局 lint 的 7 个 error 全部修掉(4 处
java.time的ofInstant
新 API 误用改为atZone换算、通知notify的 MissingPermission、WebView 桥的
JavascriptInterface 误报);CI 增加 lint 步骤。 - 天气密钥移出仓库:
WEATHER_API_KEY改从local.properties/ 环境变量读取,
CI 走仓库 Secrets;留空自动退回访客额度。 - 适配脚本去重:
warehouse/resources与app/src/main/assets/.../resources原本各存一份
(265 个 .js,约 3.9MB),现在 git 只留源,构建期由syncWarehouseAssets任务生成进 assets,
APK 内容与路径不变。
3.0.0
3.0.0 系列的正式版:rc1 的首次启动介绍与文案重写、rc2 的稳定性 / 性能加固就此定稿,
并在此之上又补了一轮线程、去重与交互一致性。
数据与稳定性(rc2 起)
- 保存失败不再被吞。新增 / 编辑课程与日程、删除课程,此前把本地写失败
runCatching掉
却仍按「成功」返回上一层 —— 数据没落库、用户却以为已生效。现在只有真正写成功才返回,
失败留在表单并弹窗说明(同时上报非致命异常)。 - 同步按
nextPageToken翻页。此前固定pageSize=300且不翻页,课程 / 日程超过一页时
只会拿到前缀;现在拉全,本地清理也只在拉取完整后进行。 - 加密会话读失败不再启动即崩。主密钥失效 / 密文损坏(ROM 升级、Keystore 重置、备份还原)
时读取会抛异常,旧实现不捕获 → 每次启动都崩;现在退化为「未登录」并清掉损坏数据。 - DataStore 加 corruptionHandler;一次坏写不再永久崩。
- 导入更稳:手动表格 / AI 图片导入的读文件与解析移到 IO 线程并加兜底;图片先下采样重编码
再上传(原来整张原图进内存 + Base64,大图会 OOM)。 - 接收器 / 服务兜底:三个闹钟接收器补
catch+ 上报;实时活动「挂前台失败」时一并收掉通知。
安全(rc2 起)
- WebView 远程调试只在 debug 开放(教务登录页此前 release 也开着)。
- 应用自身后端域名在网络安全配置里收紧为仅 https;教务系统仍放行明文(否则老系统白屏)。
- 新增备份 / 换机传输规则,排除安装包、适配器缓存与加密会话文件。
性能(rc2 起)
- 冷启动:通知渠道创建与 WorkManager 排队移出
Application.onCreate主线程。 - 组合期不再做系统 IPC:引导判断的通知 / 精确闹钟 / 电池查询改快照 + 回前台刷新。
- 课程表单:颜色正则与预设色提前算好,不再每敲一键重编译 / 重解析。
- 导入页:索引改 IO 加载(带载入提示),搜索派生值按输入缓存。
- 流与映射:课程 / 日程行映射
flowOn(Default);设置流shareIn+distinctUntilChanged。 - 课表:周视图按天布局缓存;「现在」线在布局阶段读取,不再逐帧重组整个网格。
- 首次引导:入场动画进度延迟读,不再每秒 60 次整屏重组。
- 小组件:一次快照读齐设置 / 课程 / 日程。
本轮新增(rc2 → 3.0.0)
- 线程:
ReminderPlanner.rescheduleAll与withShortWakeLock改suspend,去掉内部
runBlocking(所有调用点本就在协程中)。 - 去重:删除不再使用的
Schedule.bigPeriods / currentBigPeriodIndex;新增Schedule.nowMinute,
内部多处「hour×60+minute」收敛到一处;日程编辑页的时间解析改回复用Schedule.parseClock / clockText,去掉本地重写的第二套实现。 - 交互:底部导航切换加触感、项高补到 44dp;编辑课程加「载入中…」载入态;退出登录补二次确认;
顶部返回补无障碍标签;调休确认行改开关;外链补 ↗;开屏文案「课表」→「余课」;
导入页「跳过 / 重试 / 关闭 / 首字母索引」、雨课堂登录页「后退 / 前进 / 刷新」、倒计时「已结束」
展开、日历「今天」、检查更新「取消」、作息编辑「生成 / 收起」、关于页 GitHub 等可点文字统一补到
44dp 触达区;AI 图片导入补加载 / 空态提示。 - 构建:Gradle
-Xmx提到 4G,降低 R8 + Compose 构建 OOM 风险。
版本
- 3.0.0-rc1(77) → 3.0.0-rc2(78) → 3.0.0(79),转正式版。
内部重构(3.0.0 定稿)
面向可维护性的一轮结构重整,不改用户可见行为:
- DI 统一:接收器 / 服务不再手工
new ReminderPlanner(…, SettingsRepository(ctx), AppDatabase.get(ctx)…),
统一走@EntryPoint(NotifyEntryPoint、扩充后的FcmEntryPoint);新增di/CoroutineModule.kt
提供单一@ApplicationScope协程作用域,课程 / 日程 / 认证 / 设置 / 更新 / 雨课堂六个仓库与
ClasstableApp共用它,不再各自CoroutineScope(SupervisorJob() + Dispatchers.IO)。 - 线程:
ReminderPlanner.rescheduleAll/withShortWakeLock改suspend;接收器里散落的
runBlocking(读设置 / 课表 / 公告)全部消除 —— goAsync 协程内直接挂起读。 - 去重:新增
domain/Dates.kt(中文日期 / 星期 / 相对日的唯一来源)与domain/Enums.kt
(enumOrDefault),domain/Defaults.kt(ACCENT_HEX);"一二三四五六日"[day - 1]的 11 处
内联、runCatching { X.valueOf(…) }.getOrDefault(…)的 15 处样板、#C56473的 8 处字面量、
hour * 60 + minute的多处重复全部收敛;Schedule.nowMinute()成为唯一实现。 - 拆巨型文件:
notify/Notifier.kt(583 行)拆为NotifyChannels/CourseNotifier/
AgendaNotifier/LiveUpdateNotifier/PushNotifier+NotifyShared;
ui/importer/ImportScreen.kt(1265 行)拆为ImportScreen(根屏)/ImportSteps(三步 UI)/
ImportWebView(WebView 配置与客户端)。 - 构建:Gradle
-Xmx提到 4G。
3.0.0-rc2
一次以「稳定性 + 流畅度」为主的底层加固:修掉会静默丢数据 / 启动崩溃 / 安全暴露的老问题,
清掉启动与滚动路径上的主线程重活,并补齐几处交互一致性。
数据与稳定性
- 保存失败不再被吞。新增 / 编辑课程与日程、删除课程,此前把本地写失败
runCatching掉却
仍按「成功」返回上一层 —— 数据没落库、用户却以为已生效。现在只有真正写成功才返回,
失败留在表单并弹窗说明(同时上报非致命异常)。 - 同步翻页。Firestore 拉取此前固定
pageSize=300且不翻页,课程 / 日程超过一页时只会拿到
前缀;现在按nextPageToken拉全,本地清理也只在拉取完整后进行。 - 加密会话读失败不再启动即崩。
EncryptedSharedPreferences的主密钥失效 / 密文损坏
(ROM 升级、Keystore 重置、备份还原)时读取会抛异常,旧实现不捕获 → 每次启动都崩。现在退化为
「未登录」并清掉损坏数据,应用照常可用(雨课堂会话同理)。 - DataStore 加 corruptionHandler。一次坏写会让此后每次读都抛
CorruptionException;
现在命中即退化为空设置,不再永久崩。 - 导入更稳。手动表格 / AI 图片导入的读文件与解析移到 IO 线程并加兜底(云盘 / 一次性授权
的 URI 不再把应用带崩);图片会先下采样重编码再上传(原来整张原图进内存 + Base64,大图会 OOM)。 - 接收器 / 服务异常兜底。课程提醒、下课、开机重排三个闹钟接收器此前只有
finally没有
catch,任意异常都会带着进程崩、闹钟还静默失败;现在捕获并上报。实时活动「挂前台失败」时
会一并收掉已上屏的通知,不再留下划不掉的常驻通知。
安全
- WebView 远程调试只在 debug 开放。这是用户输入教务账号密码的页面,此前 release 里也开着
setWebContentsDebuggingEnabled(true),任何连 USB 的电脑都能通过 DevTools 读到页面与控制台。 - 应用自身后端仅走 https。教务系统仍需放行 http 明文(否则老系统网页会白屏),但反代 / 天气 /
Google 服务等自有域名在网络安全配置里收紧为禁止明文。 - 备份范围收紧。新增备份 / 换机传输规则,排除下载的安装包(可达数十 MB,会把 Auto Backup
的配额撑爆)、适配器缓存与两个加密会话文件。
性能
- 冷启动:通知渠道创建与三组 WorkManager 定时任务的排队移出
Application.onCreate主线程
(建渠道是系统 IPC、WorkManager 首次调用还会初始化自己的库);首帧之前不再做这些。 - 主线程不再做系统 IPC:首次引导判断里的通知 / 精确闹钟 / 电池白名单查询改为快照,
只在回到前台时刷新,而不是每次重组都跨进程问一遍。 - 课程表单:颜色校验正则与 20 个预设色提前算好,不再每敲一键重编译 / 重解析。
- 导入页:适配器索引改到 IO 线程加载(带载入提示),搜索的过滤 / 排序 / 分组按输入缓存,
字母索引单次遍历算出(O(N) 而非 O(字母数×学校数))。 - 流与映射:课程 / 日程的行映射挪到后台线程;设置流
distinctUntilChanged+shareIn,
全应用共享一份,不再被约十个订阅者各跑一遍 40 键映射。 - 课表:周视图的按天布局结果缓存(不再每帧重算),「现在」时间线在布局阶段读取位置,
动画不再逐帧重组整个网格。 - 首次引导:入场动画的进度改为在合成层读取,七步错峰不再每秒 60 次整屏重组。
- 小组件:每帧改为一次快照读齐设置 / 课程 / 日程(原来单个组件一帧能读 4 次设置 + 3 次数据库,
改一门课还会连带刷新三个组件)。
交互
- 切底部标签有触感了(全应用最常用的控件此前一处触感都没有);导航项高度补到 44dp。
- 编辑课程不再先闪一帧空表单:等目标课程读出后再建表单,加载中给一行「载入中…」。
- 退出登录补二次确认(与雨课堂一致),说明「退出后停止云同步、本机数据仍在」。
- 顶部返回补无障碍标签(读屏此前只会念出符号「‹」)。
- 调休确认行的「已选 / 忽略」由 chip 改为开关,与「二值一律用开关」的约定一致。
- 外部链接补「↗」(检查更新的发布页、关于页的 GitHub 仓库)。
- 开屏品牌文案修正:「课表」→「余课」。
版本
- 3.0.0-rc1(77) → 3.0.0-rc2(78)。
3.0.0-rc1
一次围绕「首次启动」与「一眼看懂」的升级:新老用户首次打开都能看到一段介绍动画;后台菜单文案按「用户一眼看懂」重写;并修掉了课程结束后常驻通知不消失的老问题。
介绍
- 首次启动介绍动画。品牌开场 + 四个功能亮点(看课表 / 快速导入 / 上课提醒 / 多端同步),可左右滑动或点「下一步」,随时可跳过。播放时机在开屏之后、权限引导之前 —— 先讲清应用能做什么,再要权限。全部只动合成层(淡入 / 位移 / 缩放),并随系统「移除动画」压缩。
- 按主版本门控。新增
intro_seen_version(仅本机、不参与云同步):新用户与升级到 3.0.0 的老用户首次打开都会看到,之后同一主版本内升级不再重复。
提醒
- 修掉「课程结束后通知仍然存在」。实时活动的下课收敛此前只依赖服务内部基于单调时钟的
delay(息屏 / Doze 时不按墙上时间推进);排在下课时刻的「相位边界闹钟」又因endAt <= now被提前return吞掉,永远走不到取消分支 —— 于是手机在课程结束那一刻处于息屏时,常驻的「课程进行中」通知会一直留在通知栏。现在下课边界闹钟会真正收尾:确认当前展示的正是这节课后,收掉通知与前台服务(两门课时间重叠时也不会误收另一门)。
文案
- 后台设置区文案重写(按《Don't Make Me Think》原则):菜单名收敛到 2–4 字、描述不超过 20 字,用日常说法替换术语 ——「实时活动 → 倒计时通知」「适配器 → 识别方案」「AI 密钥 → 图片识别」「强调色 → 主色」「作息时间 → 上课时间」等。功能不变。
版本
- 2.7.2(76) → 3.0.0-rc1(77)。
2.7.2
修复手势返回时页面缩放、淡入导致的内容遮挡。
转场
- 预测性返回沿用统一转场。Navigation 2.10 起手势返回改走独立的预测性返回转场参数,此前未显式指定时会使用默认的缩放与淡入动画,导致「关于」等页面返回「设置」时缩在屏幕中央并压住底层文字。现在手势返回显式复用现有的单层滑出方案,保持一次转场只让一层在动。
版本
- 2.7.1(75) → 2.7.2(76)。