From 7f2ca18d9d9343e0cf8e5ad88645e10df14084d0 Mon Sep 17 00:00:00 2001 From: WaterRain <109326062+CATMIAOZHI@users.noreply.github.com> Date: Thu, 6 Aug 2026 05:47:16 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BE=E8=A1=A8=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=BF=9130=E5=A4=A9=E6=97=B6=E9=97=B4=E5=B0=BA=E5=BA=A6=20(LAS?= =?UTF-8?q?T=5F30D=5FDAILY)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.en.md | 2 +- README.md | 2 +- app/src/main/java/com/rainy/token/data/local/ChartBucket.kt | 1 + .../main/java/com/rainy/token/ui/dashboard/UsageChartScreen.kt | 1 + .../java/com/rainy/token/ui/dashboard/UsageChartViewModel.kt | 2 ++ 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.en.md b/README.en.md index b90c814..67096ca 100644 --- a/README.en.md +++ b/README.en.md @@ -42,7 +42,7 @@ RainyToken (雨晴Token) — AI Balance & Usage Quota Query · the Rainy Family | 📈 **Usage charts** | 3 Canvas-drawn charts — amount spent / API request count / token consumption (dual data sources: OCGO & CCGO); UTC+0/UTC+8 timezone switching and custom day/month/range; automatic fallback (no data in last 5h → 12h → 7 days → current month); side-by-side on tablets | | 📱 **Tablet adaptation** | Global `BoxWithConstraints` adaptive container width; ≥600dp dual-column cards, ≥700dp side-by-side charts; two-pane 35/65 split (Expanded mode); supports Android 13+ predictive back gestures | | 📋 **Detailed data** | Paginated browsing of raw records with time + model filtering; tap to view full fields | -| 🔍 **Multi-granularity filters** | 5 hours / 12 hours (10-minute buckets) / 24 hours / today / yesterday / last 7 days / current month / custom day · month · range | +| 🔍 **Multi-granularity filters** | 5 hours / 12 hours (10-minute buckets) / 24 hours / today / yesterday / last 7 days / last 30 days / current month / custom day · month · range | | 🏷️ **Model filtering** | Multi-select / single-select / select all, with dynamic legends that wrap automatically | | 📱 **Home screen widget** | Check usage without opening the app; switch between four services (OCGO/CCGO/Codex/Ollama) + DeepSeek balance; top-left corner → open app, tap elsewhere to switch, ↻ to refresh; can be added to the At a Glance screen; auto-refreshes when scrolled into view (MIUI exposure refresh) | | 🔄 **Auto sync** | Pull-to-refresh on home auto-syncs usage; auto full sync on startup when no cache; CCGO detail page supports manual clear & re-sync | diff --git a/README.md b/README.md index 5723e06..f426078 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ RainyToken(雨晴Token)— AI Balance & Usage Quota Query · the Rainy Famil | 📈 **用量图表** | 3 张 Canvas 手绘图表 — 消耗金额 / API 请求次数 / Token 消耗(OCGO & CCGO 双数据源);支持 UTC+0/UTC+8 时区切换和自定义日/月/范围;自动降级(近5h无数据→12h→7天→当月);平板并排展示 | | 📱 **平板适配** | 全局 `BoxWithConstraints` 自适应容器宽度;≥600dp 卡片双列,≥700dp 图表并排;双窗格 35/65 左右分栏(Expanded 模式);支持 Android 13+ 预见性返回手势 | | 📋 **详细数据** | 原始记录分页浏览,支持时间 + 模型筛选,点击查看完整字段 | -| 🔍 **多粒度筛选** | 5小时 / 12小时(10分钟桶) / 24小时 / 今天 / 昨天 / 最近7天 / 当月 / 自定义日·月·范围 | +| 🔍 **多粒度筛选** | 5小时 / 12小时(10分钟桶) / 24小时 / 今天 / 昨天 / 最近7天 / 最近30天 / 当月 / 自定义日·月·范围 | | 🏷️ **模型筛选** | 多选 / 单选 / 全选,动态图例自适应换行 | | 📱 **桌面小组件** | 不打开 APP 也能看用量;支持四服务切换(OCGO/CCGO/Codex/Ollama)+ DeepSeek 余额;左上角 > 进 APP、其他区域点切换、↻ 刷新;可拖入负一屏;划到即自动刷新(MIUI 曝光刷新) | | 🔄 **自动同步** | 首页下拉自动同步用量;无缓存时启动自动全量同步;CCGO 详情页支持手动清除并重新同步 | diff --git a/app/src/main/java/com/rainy/token/data/local/ChartBucket.kt b/app/src/main/java/com/rainy/token/data/local/ChartBucket.kt index b73007e..e7e299d 100644 --- a/app/src/main/java/com/rainy/token/data/local/ChartBucket.kt +++ b/app/src/main/java/com/rainy/token/data/local/ChartBucket.kt @@ -35,6 +35,7 @@ enum class ChartGranularity(@StringRes val labelRes: Int) { TODAY_HOURLY(R.string.time_today), YESTERDAY_HOURLY(R.string.time_yesterday), LAST_7D_DAILY(R.string.time_last_7d), + LAST_30D_DAILY(R.string.time_last_30d), THIS_MONTH_DAILY(R.string.time_this_month), CUSTOM_DAY_HOURLY(R.string.time_custom_day), CUSTOM_MONTH_DAILY(R.string.time_custom_month), diff --git a/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartScreen.kt b/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartScreen.kt index a1c92b8..f3170be 100644 --- a/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartScreen.kt +++ b/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartScreen.kt @@ -813,6 +813,7 @@ ChartGranularity.YESTERDAY_HOURLY, ChartGranularity.CUSTOM_DAY_HOURLY -> index == 0 || index == total - 1 // 只显示首尾小时 ChartGranularity.LAST_7D_DAILY, +ChartGranularity.LAST_30D_DAILY, ChartGranularity.THIS_MONTH_DAILY, ChartGranularity.CUSTOM_MONTH_DAILY, ChartGranularity.CUSTOM_RANGE_DAILY -> diff --git a/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartViewModel.kt b/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartViewModel.kt index 11eae35..4ac74c8 100644 --- a/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartViewModel.kt +++ b/app/src/main/java/com/rainy/token/ui/dashboard/UsageChartViewModel.kt @@ -120,6 +120,7 @@ class UsageChartViewModel @Inject constructor( ChartAggregator.aggregateHourly(filtered, offsetHours) ChartGranularity.THIS_MONTH_DAILY, ChartGranularity.LAST_7D_DAILY, + ChartGranularity.LAST_30D_DAILY, ChartGranularity.CUSTOM_MONTH_DAILY, ChartGranularity.CUSTOM_RANGE_DAILY -> ChartAggregator.aggregateDaily(filtered, offsetHours) @@ -196,6 +197,7 @@ class UsageChartViewModel @Inject constructor( ChartGranularity.TODAY_HOURLY -> todayMidnight to todayMidnight + 86400_000L - 1 ChartGranularity.YESTERDAY_HOURLY -> todayMidnight - 86400_000L to todayMidnight - 1 ChartGranularity.LAST_7D_DAILY -> todayMidnight - 6 * 86400_000L to todayMidnight + 86400_000L - 1 + ChartGranularity.LAST_30D_DAILY -> todayMidnight - 29 * 86400_000L to todayMidnight + 86400_000L - 1 ChartGranularity.CUSTOM_DAY_HOURLY -> dayRange(_customDay ?: today, zoneOffset) ChartGranularity.THIS_MONTH_DAILY -> monthRange(today.withDayOfMonth(1), zoneOffset) ChartGranularity.CUSTOM_MONTH_DAILY -> {