From 8062a5425273971ee169d76b003c263633b44232 Mon Sep 17 00:00:00 2001
From: Liuxinyu176 <1041316040@qq.com>
Date: Fri, 9 Oct 2026 22:31:20 +0800
Subject: [PATCH] =?UTF-8?q?fix(trae):=20=E5=9B=BD=E9=99=85=E7=89=88?=
=?UTF-8?q?=E7=A7=BB=E9=99=A4=E7=AD=BE=E5=88=B0=E5=8D=A1=EF=BC=8C=E8=AF=A6?=
=?UTF-8?q?=E6=83=85=E9=A1=B5=E6=8C=89=E7=BE=8E=E5=85=83/=E6=9C=88?=
=?UTF-8?q?=E9=85=8D=E9=A2=9D=E5=B1=95=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- INTL 详细页不再显示每日签到卡(国际版无签到体系),改为说明卡
- Trae 账户信息卡在美元计费时显示套餐名 + Premium 快速/慢速、高级、自动补全月配额
- INTL 不再生成 0 积分权益包计数,避免残留“积分”字样
---
app/build.gradle.kts | 4 +-
.../token/data/repository/TraeRepository.kt | 2 +-
.../ui/servicedetail/ServiceDetailScreen.kt | 50 ++++++++++++++++++-
app/src/main/res/values-b+zh+Hans/strings.xml | 4 ++
app/src/main/res/values-b+zh+Hant/strings.xml | 4 ++
app/src/main/res/values/strings.xml | 4 ++
6 files changed, 63 insertions(+), 5 deletions(-)
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 66751c3..5281277 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -16,8 +16,8 @@ android {
applicationId = "com.rainy.token"
minSdk = 31
targetSdk = 35
- versionCode = 37
- versionName = "1.7.17"
+ versionCode = 38
+ versionName = "1.7.18"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
diff --git a/app/src/main/java/com/rainy/token/data/repository/TraeRepository.kt b/app/src/main/java/com/rainy/token/data/repository/TraeRepository.kt
index 2f43437..a3d2f74 100644
--- a/app/src/main/java/com/rainy/token/data/repository/TraeRepository.kt
+++ b/app/src/main/java/com/rainy/token/data/repository/TraeRepository.kt
@@ -211,7 +211,7 @@ class TraeRepository constructor(
}
}
}
- if (packCount > 0) {
+ if (packCount > 0 && !isDollarBilling) {
extras["pack_count"] = packCount.toString()
extras["general_credits"] = trimNum(generalSum)
extras["work_credits"] = trimNum(workSum)
diff --git a/app/src/main/java/com/rainy/token/ui/servicedetail/ServiceDetailScreen.kt b/app/src/main/java/com/rainy/token/ui/servicedetail/ServiceDetailScreen.kt
index 473674a..72e490b 100644
--- a/app/src/main/java/com/rainy/token/ui/servicedetail/ServiceDetailScreen.kt
+++ b/app/src/main/java/com/rainy/token/ui/servicedetail/ServiceDetailScreen.kt
@@ -235,9 +235,12 @@ fun ServiceDetailScreen(
item { OllamaUsageCard(uiState.state) }
}
ServiceType.TRAE -> {
- // 每日签到卡;未配置凭据时展示引导卡,避免暴露必然失败的签到按钮
+ // 每日签到卡;未配置凭据时展示引导卡,国际版无签到则展示说明卡
item {
- if (uiState.hasCredential) {
+ val intl = uiState.region != null && uiState.region.equals("INTL", ignoreCase = true)
+ if (intl) {
+ TraeIntlNoCheckinCard()
+ } else if (uiState.hasCredential) {
CheckinCard(
state = checkinState,
todayCheckedIn = checkinInfo?.todayCheckedIn == true,
@@ -1504,6 +1507,26 @@ internal fun TraeAccountInfoCard(state: State) {
extras["pack_count"]?.toIntOrNull()?.takeIf { it > 0 }?.let {
add(stringResource(R.string.extra_label_pack_count) to it.toString())
}
+ if (extras["billing_mode"] == "dollar") {
+ extras["intl.plan_name"]?.let {
+ add(stringResource(R.string.trae_intl_plan_title) to it)
+ }
+ extras["intl.premium_fast_limit"]?.let {
+ add(stringResource(R.string.trae_intl_premium_fast_title) to "$it " + stringResource(R.string.trae_intl_quota_unit))
+ }
+ extras["intl.premium_slow_limit"]?.let {
+ add(stringResource(R.string.trae_intl_premium_slow_title) to "$it " + stringResource(R.string.trae_intl_quota_unit))
+ }
+ extras["intl.advanced_limit"]?.let {
+ add(stringResource(R.string.trae_intl_advanced_title) to "$it " + stringResource(R.string.trae_intl_quota_unit))
+ }
+ extras["intl.auto_completion_limit"]?.let {
+ add(stringResource(R.string.trae_intl_auto_completion_title) to "$it " + stringResource(R.string.trae_intl_quota_unit))
+ }
+ extras["intl.basic_used"]?.let {
+ add(stringResource(R.string.trae_intl_basic_used_title) to it)
+ }
+ }
// 计费方式:两个英文布尔键合并为一行自然语言
val billingLabel = when {
extras["is_credits_billing"] == "true" -> stringResource(R.string.extra_value_billing_credits)
@@ -1531,6 +1554,29 @@ internal fun TraeAccountInfoCard(state: State) {
*
* 旧缓存无 wb_detail_raw 时回退为「资源 #007」简化行。无任何数据时整卡不渲染。
*/
+@Composable
+private fun TraeIntlNoCheckinCard() {
+ Card(
+ modifier = Modifier.fillMaxWidth(),
+ shape = RoundedCornerShape(20.dp),
+ colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface),
+ elevation = CardDefaults.cardElevation(defaultElevation = 0.dp)
+ ) {
+ Column(modifier = Modifier.padding(16.dp), verticalArrangement = Arrangement.spacedBy(4.dp)) {
+ Text(
+ text = stringResource(R.string.trae_intl_no_checkin_title),
+ style = MaterialTheme.typography.titleSmall,
+ fontWeight = FontWeight.SemiBold
+ )
+ Text(
+ text = stringResource(R.string.trae_intl_no_checkin_desc),
+ style = MaterialTheme.typography.bodySmall,
+ color = MaterialTheme.colorScheme.outline
+ )
+ }
+ }
+}
+
@Composable
internal fun WorkBuddyResourcesCard(state: State) {
val balance = when (state) {
diff --git a/app/src/main/res/values-b+zh+Hans/strings.xml b/app/src/main/res/values-b+zh+Hans/strings.xml
index ef3fe77..abe73b2 100644
--- a/app/src/main/res/values-b+zh+Hans/strings.xml
+++ b/app/src/main/res/values-b+zh+Hans/strings.xml
@@ -798,4 +798,8 @@
自动补全
次/月
充值 / 升级
+ 套餐
+ 基础用量已用
+ 国际版没有每日签到
+ Trae 国际版按美元计费,使用月度请求额度,没有签到积分体系。
\ No newline at end of file
diff --git a/app/src/main/res/values-b+zh+Hant/strings.xml b/app/src/main/res/values-b+zh+Hant/strings.xml
index 2fe0e33..af27a3d 100644
--- a/app/src/main/res/values-b+zh+Hant/strings.xml
+++ b/app/src/main/res/values-b+zh+Hant/strings.xml
@@ -798,4 +798,8 @@
自動補全
次/月
儲值 / 升級
+ 套餐
+ 基礎用量已用
+ 國際版沒有每日簽到
+ Trae 國際版按美元計費,使用月度請求額度,沒有簽到積分體系。
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 749e51a..2ebfed2 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -803,4 +803,8 @@
Auto completion
/mo
Upgrade / Top up
+ Plan
+ Basic usage used
+ International edition has no daily check-in
+ TRAE International uses USD billing with monthly request quotas instead of credit check-ins.
\ No newline at end of file