WaterRain
4ed6aaa3cc
feat(heatmap): 年份选择器新增最近365天窗口(默认)
...
- RECENT_YEAR(-1) sentinel:最近365天(今天往前364天~今天),默认加载窗口
- computeAllViews 支持窗口模式:每日/每周/累计/统计/分位按窗口计算
- 下拉置顶最近365天+ 分隔线 + 选中标记,与具体年份区分
- 浮层日期跨年自动带年份前缀(formatWeekRangeText 兼容 RECENT)
- setYear 竞态 guard 改 latestRequestedYear(最后点击胜出);RECENT 缓存跨天自动失效重算
- HeatmapAllViewsTest 4 用例,全量 130 用例通过
2026-08-08 00:27:55 +00:00
WaterRain
99050554e2
feat(heatmap): 个人资料与活动洞察 + 当前连续天数逻辑修正
...
- 个人资料卡片(页面顶部):自定义头像(相册选图→私有目录持久化→降采样解码)+ 昵称/邮箱自由文本编辑,SharedPreferences 持久化
- 活动洞察卡片:总请求次数 + 最多请求时段 Top3(按小时,UTC+8/UTC 口径,全量历史)
- 当前连续天数:结尾 0 token 天跳过,从最后一个非零天往前数(最后一天 0 也计入连续)
- 三语言资源(en/Hans/Hant),HeatmapInsightsTest 7 用例,全量 126 用例通过
2026-08-07 23:01:37 +00:00
WaterRain
025f971f7a
feat(heatmap): 首页OCGO快捷入口 + 多语言兼容修复
...
- 首页:OCGO用量卡与服务卡「查看用量详情」右侧新增 Token 活动快捷入口
- 首页入口描述改为「OCGO Token 活动」;统计卡片改 2×2 布局
- 多语言:热力图月份/日期/数字单位 locale-aware(英文 K/M/B + MMM d)
- 浮层/读数条句子走 stringResource;月份名资源数组(三语言)
- 遗留修复:Codex 窗口标签中性化(weekly/usage)、Ollama plan 空串兜底、
isFiveHourLabel 语言无关判断、字段标签资源化、Widget usageLabel
- 单测同步:Codex/Ollama/FormatUtils/FormatCodexPrimaryLabel 全绿(119 用例)
2026-08-07 03:28:23 +00:00
WaterRain
03424e6184
feat(heatmap): 年度统计卡片(累计/峰值/当前连续/最长连续)
...
- computeStats 单次循环计算四项指标,存于 HeatmapUiState.stats
- 视图切换器下方一行 4 卡片,按所选年份跟随变化
- i18n 三语言(含 plurals 单复数);loading 占位显示 -
- 对抗审查修复:surfaceVariant 品牌色、en plurals、loading 占位
- 新增 HeatmapStatsTest 单测(4 用例全绿)
2026-08-07 01:53:24 +00:00
WaterRain
962d8f1215
feat(heatmap): 年份选择器 + 每周视图柱状图 + 对抗审查修复
...
- 修复 4 个 heatmap 提交的编译错误与对抗审查问题:浮层锚定与跨年日期、
Crossfade 快照、时区口径统一(useUtc8)、万级格式化溢出、周视图周日对齐
- 新增年份选择器:自然年语义、默认今年、三种视图跟随、下拉菜单、
图例固定不随热力图滚动、打开默认滚到最右、0 token 天可点击查看
- 每周视图改为离散柱状图:列=自然周,高度按 token 排名比例映射 2~7 格
(不同量级周高度可区分),0 用量周显示 Level 0 空白格(整列 7 格全绘制)
- 选中周整列主题色描边强调,浮层日期跨年带年份前缀
- 文档 docs/heatmap-plan.md 补充年份选择器/图例与滚动/柱状图章节
2026-08-06 22:33:25 +00:00
WaterRain
77cb664590
feat(heatmap): add popup tooltip, crossfade animation, accessibility, i18n
...
- Click cell shows popup with date and token count in Chinese format
- Weekly popup shows date range (start-end)
- Crossfade 150ms between view mode switches
- Canvas i18n: noDataText/lessText/moreText parameters
- Accessibility: semantics contentDescription on Canvas
- formatTokenChinese: 亿/万 Chinese units with decimal precision
- Popup: focusable, auto-dismiss, toggle on re-click
- heatmap_accessibility_desc string in EN/zh-Hans/zh-Hant
2026-08-06 07:45:15 +00:00
WaterRain
dd91e94805
feat(heatmap): add HeatmapScreen, navigation route, dashboard entry, i18n strings
...
- HeatmapScreen with TopAppBar, view switcher (Daily/Weekly/Cumulative), Canvas
- DashboardScreen: new HeatmapEntryCard with CalendarMonth icon
- RainyTokenNavHost: HEATMAP route for both Compact and Expanded layouts
- 9 new string resources across EN/zh-Hans/zh-Hant
- ArrowBack -> AutoMirrored.Filled.ArrowBack (deprecation fix)
2026-08-06 07:30:28 +00:00
WaterRain
488f08d083
fix: 主页底部版本号改为实时读取 BuildConfig.VERSION_NAME
2026-08-04 06:48:52 +00:00
WaterRain
f788d57798
fix: 同步/触发错误全链路本地化(count_times 单位 + Unknown/PartialSync/TriggerError 结构化映射)
2026-08-02 03:02:58 +00:00
WaterRain
039f27da18
fix: ParseError 原因结构化本地化,消除英文/繁体界面的中文错误透传(Codex review + 双审计)
2026-08-02 01:16:52 +00:00
WaterRain
f463751fb1
fix: 日期格式与应用内语言同步 + DeepSeek 标签动态化(Codex review)
2026-08-01 20:32:27 +00:00
WaterRain
5e7942c5cc
chore: 移除已迁移的 values-zh(简体资源已迁至 values-b+zh+Hans)
2026-08-01 13:43:37 +00:00
WaterRain
b51644048d
fix: widget 用量条左对齐(label 统一 44dp)+ 署名动态化跟随应用内语言
...
- 三套布局三行 label 统一 44dp:此前 row2/3 为 60dp、row1 44dp,
进度条起点差 16dp 导致不对齐;英文标签简化为 Week/Month 后 44dp 足够
- 署名 TextView 补 @+id/widget_brand,Provider 动态 setTextViewText:
与行标签同源(跟随应用内语言),避免宿主进程按系统语言渲染混搭
2026-08-01 13:43:05 +00:00
WaterRain
4107954080
feat: 应用内语言切换(跟随系统/简/繁/英)+ 繁体中文支持 + 应用名/署名分语言
...
- 新增 LocaleManager:语言偏好存 SharedPreferences,createConfigurationContext
+ LocaleList 包装 Application/MainActivity 的 attachBaseContext(零新依赖)
- 设置页新增语言卡片与选择对话框:跟随系统 / 简体中文 / 繁體中文 / English
- 新增繁体中文 values-b+zh+Hant(434 条,OpenCC s2twp 台湾标准转换+人工修正)
- 简体目录改为 values-b+zh+Hans(BCP-47,与繁体对称;AGP9 不接受 values-zh-Hans)
- widget_brand 可翻译:英=Rainy / 简繁=雨晴喵;app_name 可翻译:英=RainyToken / 简繁=雨晴Token
- 资源三语言 434/434/434 对齐,占位符零差异
2026-08-01 13:43:05 +00:00
WaterRain
13acca37ed
fix: 默认资源改为英文,非中/英系统语言回退英文(原回退中文)
...
原结构:values/(默认)=中文,values-en=英文。系统语言既非中文也非英文时
(如日语/法语)会回退到默认资源显示中文,不符合国际用户预期。
新结构:
- values/(默认)=英文(国际回退语言),unqualifiedResLocale=zh-CN → en
- 中文移入 values-zh/(中文系统精确匹配)
- 品牌资源(app_name/widget_brand/brand_token/dashboard_footer_version,
translatable=false)保留在默认资源,所有语言共用中文品牌名
- 删除 values-en/(不再需要,默认即英文)
验证:中英 426/426 key 对齐、lint 0 Error(MissingTranslation/ExtraTranslation 0)、
113 测试全绿、assembleDebug 成功
2026-08-01 12:28:00 +00:00
WaterRain
6ac4d06e9f
i18n 修复:消除英文环境下 5 处中文泄漏(最终审查 P1)
...
最终独立审查发现英文环境用户可见中文,全部修复:
- 激活成功弹窗:三个 parse 函数(OCGO/Codex/Ollama)改为返回结构化 TriggerSummary,
中文摘要拼接移出 Repository;UI 层 buildTriggerSummaryText() 用资源组装本地化文本
- Codex 窗口标签:formatCodexPrimaryLabel / normalizeWindowLabel 增加「每周/每月」字面量分支,
Dashboard 与 Widget 英文环境下正确显示 Weekly/Monthly
- Dashboard footer:DashboardCardUi.lastFetchError 改 UiText?,errorToUiText() 按类型映射资源
- 凭据编辑页:ParseError→error_parse_failed(RepositoryError.ParseError 新增公开 detail),
「未知」「JSON格式错误」中文 fallback 改资源
- 服务详情页:triggerUsage else 分支复用 errorMessage() 全类型映射;
TriggerError「token刷新失败」前缀资源化;「无响应体」不再展示
- 新增 TriggerSummary 数据类与 12 组中英资源(trigger_*/error_token_refresh_failed/等)
- 测试:CodexRepositoryTest 6 用例改为结构化断言,FormatUtilsTest 更新 monthly 映射;
113 个用例全绿,lint 0 Error,资源 426/426 对齐
2026-08-01 08:19:51 +00:00
WaterRain
52b86e95e5
i18n 阶段二:新增英文翻译 values-en + widget 布局英文适配
...
- 新增 values-en/strings.xml:414 条英文资源与中文完全对齐(占位符/转义/格式逐一校验,无缺失无多余,无中文残留)
- widget 三套布局(亮色/预览/暗色 night)完成资源化 + 英文布局适配:
- row2/row3 行标签宽度 44dp→60dp,避免 "This week"/"This month" 被截断
- widget_updated 增加 maxLines=1 + ellipsize=end,防最小宽度下挤占刷新按钮
- widget_name/widget_description 由 translatable=false 改为正式可翻译资源,补充英文(AI Usage Panel)
- 统一英文术语:raw_record_title 改为 Raw data 与 title_raw_data 一致
- 验证:testDebugUnitTest 78 用例通过、lintDebug 0 Error 且 MissingTranslation/ExtraTranslation/Untranslatable 全为 0、assembleDebug 成功
2026-08-01 07:53:59 +00:00
WaterRain
a26629027e
i18n 阶段一:全量字符串资源化(行为不变,仍为中文)
...
- strings.xml 扩充至 ~470 条(原 3 条),全部 UI 硬编码中文迁移为资源引用
- 新增 UiText 抽象(Resource/Dynamic + asString()/resolve()),6 个 ViewModel 错误消息 UiText 化
- AppTips 13 条改为 @StringRes 资源 ID;TimeFilter/ChartGranularity/StatusStyle/DashboardViewModel 徽章改资源 ID
- FormatUtils 保持纯函数,DurationText/标签参数注入(78 个纯 JVM 测试不受影响)
- Widget XML(2) + WidgetProvider 文字资源化;品牌名 translatable=false
- 开启 generateLocaleConfig + resources.properties(unqualifiedResLocale=zh-CN)
- 修复审查发现的每周/每月行为回归(dashboard/widget 保持'每周/每月')
- 删除死资源/死代码;ChartGranularity 粒度标签补 time_last_12h
- 验证:compileDebugKotlin / testDebugUnitTest(78) / lintDebug / assembleDebug 全绿
2026-08-01 07:32:23 +00:00
WaterRain
45e10ad063
fix: Ollama小组件logo独立命名,不影响首页图标
...
Ollama logo拆分为两个资源:
- ic_ollama_logo: 首页ServiceIcon用,无night变体,深色模式靠浅灰背景保证可见
- ic_ollama_logo_widget: 小组件用,有night变体(浅色版)
避免drawable-night-nodpi覆盖影响首页Ollama图标。
2026-07-07 22:07:09 +00:00
WaterRain
06f28c9e57
fix: 深色模式小组件logo不可见
...
新增 drawable-night-nodpi/ 目录,放入深色模式专用 PNG logo:
- ic_opencode_go_logo_widget.png (OCGO/CCGO)
- ic_codex_logo_widget.png (Codex)
- ic_ollama_logo.png (Ollama)
黑色像素替换为 #E8D8D5 暖灰色,透明通道保留。
Android 资源系统在深色模式自动选择 night-nodpi 同名资源。
DeepSeek 蓝色 logo 在深色背景上可见度足够,不需要变体。
2026-07-07 22:03:51 +00:00
WaterRain
75a5c8f81e
fix: 对抗审查修复5项问题
...
1. BalanceCache.put() 并发写丢失 — read-modify-write 搬进 dataStore.edit{} 互斥锁
2. Widget VectorDrawable → PNG — 生成 ic_opencode_go_logo_widget.png 和 ic_codex_logo_widget.png
3. SimpleDateFormat 线程安全 — 共享实例改为每次调用创建局部实例
4. 增量同步按 workspace 过滤 — 新增 getIdsByWorkspace() 避免跨 workspace ID 碰撞
5. Codex amount 语义统一为 usedPct — balance_cache 版本 v2→v3 旧缓存失效
Doc: AGENTS.md/README.md 同步更新(›→>、RemoteViews PNG文件名、增量同步描述)
2026-07-07 05:40:16 +00:00
WaterRain
c5505c896a
fix: ic_deepseek_logo.png从ICO转为真PNG,修复CI AAPT编译失败
Release / build (push) Has been cancelled
2026-07-07 02:16:11 +00:00
WaterRain
814ae61f01
feat: 使用小技巧系统 + 小组件点击提示 + 图表默认tooltip + 添加小组件权限检测
...
- 新增 AppTips.kt:13条操作技巧,Dashboard随机展示一条hint,设置页TipsScreen查看全部
- 小组件左上角加 › 箭头提示可点击进APP,其他区域点切换服务
- 图表默认选中最后一根柱子,tooltip首次可见
- 添加小组件二次确认弹窗 + Manifest权限 + MIUI AppOps检测
- Dashboard首次进入显示长按拖拽排序提示横幅
- NavHost新增Tips路由
- 同步AGENTS.md和README.md
2026-07-07 01:57:52 +00:00
WaterRain
e3d21e0a8f
fix: crop Ollama logo padding, enlarge to 14dp on widget}
2026-07-06 22:48:40 +00:00
WaterRain
d880b808d4
fix: replace DeepSeek emoji logo with official favicon, resize widget logo to 16dp}
2026-07-06 22:33:55 +00:00
WaterRain
f7662d065a
fix: use hello.png as Ollama logo, fillMaxSize for crisp display}
2026-07-06 22:29:43 +00:00
WaterRain
2926e8ebb2
fix: Ollama detail page usage card, 5h label, real logo, widget data
...
- Add OllamaUsageCard to ServiceDetailScreen (5h + weekly windows)
- Unify Session → 5h across dashboard/detail/widget
- Download Ollama llama logo (icon-32x32.png) to drawable-nodpi
- ServiceIcon: use real PNG instead of emoji
- Widget: use ic_ollama_logo, fix row label to 5h
2026-07-06 22:20:29 +00:00
WaterRain
a5ba79ea4b
feat: 首页拖拽排序 + Widget三服务切换 + 刷新优化
...
- DashboardScreen.kt: 长按自由拖动排序(原生Compose,原位节点+offset让位+中心命中模型+自动滚动补偿)
- OpenCodeGoWidgetProvider.kt: 新增三服务切换按钮(OCGO/CCGO/Codex循环)、showRefreshing()、isRefreshing互斥锁
- WidgetRefreshReceiver.kt: 只刷当前服务+DeepSeek、25s超时保护
- CodexRepository.kt: weekly→每周文案统一
- ServiceIcon.kt: CCGO复用OCGO图标
- widget_opencode_go.xml: 新增切换按钮布局
2026-07-01 15:29:34 +00:00
WaterRain
4cbf593983
feat: add Codex/ChatGPT Plus service with auth.json import and auto token refresh
...
- New ServiceType.CODEX with CodexCredential (access_token + refresh_token + expiresAt)
- CodexRepository: query chatgpt.com/backend-api/wham/usage, auto refresh token 60min before expiry
- Import full auth.json in settings, supports automatic OAuth token refresh
- ChatGPT favicon SVG icon (ic_codex_logo.xml)
- Dashboard card shows 5h/Weekly usage windows with reset times
- Update AGENTS.md and README.md with Codex service info
2026-07-01 04:59:52 +00:00
WaterRain
5a18ffc02f
feat: MIUI Widget 完整适配 + 深色模式全局修复
...
MIUI Widget 接入(负一屏 + 曝光刷新)
- AndroidManifest 新增 miuiWidget 全套标识
- intent-filter 新增 miui.appwidget.action.APPWIDGET_UPDATE
- 根布局改为 FrameLayout + @android:id/background
- minWidth 250→300dp(4x2 标准)
- onReceive() 处理 MIUI 曝光刷新
- 5min 冷却自动刷新
深色模式全面适配
- drawable-night/widget_bg.xml
- drawable-night/ic_opencode_go_logo.xml
- drawable-night/ic_deepseek_logo.png + wordmark
- layout-night/widget_opencode_go.xml
- DarkInkWarm/DarkInkMuted + inkWarm()/inkMuted()
- 全页面 51 处 InkMuted → inkMuted()
- ServiceIcon 白底 → 主题自适应
用户体验
- 顶部栏 + 按钮:一键添桌面小组件
- 负一屏底部遮挡修复(间距压缩 28dp)
2026-06-19 07:38:02 +00:00
WaterRain
3aca009290
🎉 RainyToken — AI 余额查询 APP
...
- Jetpack Compose + Material 3 仪表盘
- DeepSeek REST API 余额查询
- OpenCode Go WebView 抓取用量
- 3 张 Canvas 图表(消耗/请求/Token)
- 原始记录分页浏览
- DataStore + 内存缓存
- 桌面小组件
2026-06-16 01:46:03 +00:00