diff --git a/app/android/src/main/kotlin/io/github/cubsync/android/ConnectScreen.kt b/app/android/src/main/kotlin/io/github/cubsync/android/ConnectScreen.kt
index 042085c..d39210c 100644
--- a/app/android/src/main/kotlin/io/github/cubsync/android/ConnectScreen.kt
+++ b/app/android/src/main/kotlin/io/github/cubsync/android/ConnectScreen.kt
@@ -92,15 +92,16 @@ fun ConnectScreen(state: AndroidAppState) {
"0.0 MB/s"
}
- // The design leads with the adb loopback: a channel the protocol promises
- // and this build has not opened. It is drawn and it is tappable, and tapping
- // it says which of those two things is true.
+ // The design leads with the adb loopback. The link is opened by the desktop
+ // (`adb forward` runs on the host, not here), so on the phone this row is a
+ // view of the cable rather than a switch: the phone is already serving, and
+ // the switch stays off because nothing on this side turns it on.
CardRow(
title = Channels.USB_ADB_NAME,
detail = "${Channels.USB_ADB_ADDRESS} · $rate",
icon = IconPaths.DEVICE,
- onClick = { state.notify(Channels.ADB_RESERVED, NoticeKind.INFO) },
- trailing = { Toggle(false) { state.notify(Channels.ADB_RESERVED, NoticeKind.INFO) } },
+ onClick = {},
+ trailing = { Toggle(false) {} },
)
for (nic in nics) {
CardRow(
diff --git a/app/android/src/test/resources/screenshots/phone/windows/01-connect.png b/app/android/src/test/resources/screenshots/phone/windows/01-connect.png
index 7f7ec2c..faf589e 100644
Binary files a/app/android/src/test/resources/screenshots/phone/windows/01-connect.png and b/app/android/src/test/resources/screenshots/phone/windows/01-connect.png differ
diff --git a/app/android/src/test/resources/screenshots/phone/windows/07-logs.png b/app/android/src/test/resources/screenshots/phone/windows/07-logs.png
index a306196..ac9d792 100644
Binary files a/app/android/src/test/resources/screenshots/phone/windows/07-logs.png and b/app/android/src/test/resources/screenshots/phone/windows/07-logs.png differ
diff --git a/app/desktop/src/main/kotlin/io/github/cubsync/desktop/ui/ConnectScreen.kt b/app/desktop/src/main/kotlin/io/github/cubsync/desktop/ui/ConnectScreen.kt
index 75e7197..ff5c3a9 100644
--- a/app/desktop/src/main/kotlin/io/github/cubsync/desktop/ui/ConnectScreen.kt
+++ b/app/desktop/src/main/kotlin/io/github/cubsync/desktop/ui/ConnectScreen.kt
@@ -284,7 +284,9 @@ private fun ChannelsCard(state: AppState, server: ServerState) {
address = Channels.USB_ADB_ADDRESS,
rate = if (adbOn) rate else "0.0 MB/s",
enabled = adbOn,
- onClick = { state.notify(Channels.ADB_RESERVED, NoticeKind.INFO) },
+ // The link is real now: this row is the `adb forward` it opened, so tapping it
+ // looks for devices instead of apologising for a promise.
+ onClick = { state.refreshAdb() },
)
for (nic in nics) {
ChannelRow(
diff --git a/app/desktop/src/test/resources/screenshots/windows/00-transfer.png b/app/desktop/src/test/resources/screenshots/windows/00-transfer.png
index 580addb..dfef7bc 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/00-transfer.png and b/app/desktop/src/test/resources/screenshots/windows/00-transfer.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/01-connect.png b/app/desktop/src/test/resources/screenshots/windows/01-connect.png
index 419c5ca..04a1191 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/01-connect.png and b/app/desktop/src/test/resources/screenshots/windows/01-connect.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/02-sync.png b/app/desktop/src/test/resources/screenshots/windows/02-sync.png
index e305969..4a8bdd7 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/02-sync.png and b/app/desktop/src/test/resources/screenshots/windows/02-sync.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/03-jobs.png b/app/desktop/src/test/resources/screenshots/windows/03-jobs.png
index 4942a79..d2f351f 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/03-jobs.png and b/app/desktop/src/test/resources/screenshots/windows/03-jobs.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/04-job-detail.png b/app/desktop/src/test/resources/screenshots/windows/04-job-detail.png
index da257f6..27e38be 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/04-job-detail.png and b/app/desktop/src/test/resources/screenshots/windows/04-job-detail.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/05-logs.png b/app/desktop/src/test/resources/screenshots/windows/05-logs.png
index cc10985..5b9048d 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/05-logs.png and b/app/desktop/src/test/resources/screenshots/windows/05-logs.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/06-settings.png b/app/desktop/src/test/resources/screenshots/windows/06-settings.png
index 7b150c1..70ca358 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/06-settings.png and b/app/desktop/src/test/resources/screenshots/windows/06-settings.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/07-transfer-light.png b/app/desktop/src/test/resources/screenshots/windows/07-transfer-light.png
index 960bf74..6b2797c 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/07-transfer-light.png and b/app/desktop/src/test/resources/screenshots/windows/07-transfer-light.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/08-transfer-compare.png b/app/desktop/src/test/resources/screenshots/windows/08-transfer-compare.png
index 067f790..066dfea 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/08-transfer-compare.png and b/app/desktop/src/test/resources/screenshots/windows/08-transfer-compare.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/09-transfer-card.png b/app/desktop/src/test/resources/screenshots/windows/09-transfer-card.png
index 43e0923..3b124d8 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/09-transfer-card.png and b/app/desktop/src/test/resources/screenshots/windows/09-transfer-card.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/10-transfer-viewmenu.png b/app/desktop/src/test/resources/screenshots/windows/10-transfer-viewmenu.png
index 678480f..b9bc022 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/10-transfer-viewmenu.png and b/app/desktop/src/test/resources/screenshots/windows/10-transfer-viewmenu.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/11-transfer-compact.png b/app/desktop/src/test/resources/screenshots/windows/11-transfer-compact.png
index e16f081..95c06e5 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/11-transfer-compact.png and b/app/desktop/src/test/resources/screenshots/windows/11-transfer-compact.png differ
diff --git a/app/desktop/src/test/resources/screenshots/windows/12-transfer-thumb.png b/app/desktop/src/test/resources/screenshots/windows/12-transfer-thumb.png
index 98c5750..37dadb9 100644
Binary files a/app/desktop/src/test/resources/screenshots/windows/12-transfer-thumb.png and b/app/desktop/src/test/resources/screenshots/windows/12-transfer-thumb.png differ
diff --git a/docs/releases/v0.3.15.md b/docs/releases/v0.3.15.md
new file mode 100644
index 0000000..2a6b0f6
--- /dev/null
+++ b/docs/releases/v0.3.15.md
@@ -0,0 +1,53 @@
+
+中文说明
+
+#### 下载
+
+| 平台 | 文件 |
+|---|---|
+| Windows 安装 | `CubSync-0.3.15.msi` |
+| Windows 绿色 | `CubSync-v0.3.15-windows-x64.zip` |
+| Android | `CubSync-v0.3.15.apk` |
+
+#### 这一版改了什么
+
+**深色模式能看清了。** 上一版把桌面深色换成了手机的颜色表,结果窗口底色和卡片底色是同一个值 —— 整窗一块黑板,卡片只剩一圈细线,说明文字糊在上面。现在回到设计稿里桌面自己的深色:画布 `#0F1116`、卡片 `#181B21`,中间的层次重新分得开;两档次要文字也提亮了,卡片里的整句说明不再需要凑近看。
+
+**USB-ADB 不再是"已留位"。** 插上数据线,在「连接方式」里就能看到设备并发起连接:电脑端用 `adb forward` 把设备端口映射到本机,之后走的是和局域网完全一样的连接。手机端那一行现在是纯展示 —— 转发在电脑上做,手机只需要保持共享开启。
+
+**协议协商**:没连上远端时,「远端版本」显示 `—`,不再显示 `0`(那个 0 读起来像协议之前的构建)。
+
+#### 注意
+
+- 两端请保持同一协议版本(v1)。旧版连新版会按 v3 兼容规则降级到单向。
+- 桌面深色/浅色可在设置里切换;这一版只动了深色。
+- Android 需要「所有文件访问」权限才能传输,首次打开会提示。
+
+
+
+
+English
+
+#### Download
+
+| Platform | File |
+|---|---|
+| Windows installer | `CubSync-0.3.15.msi` |
+| Windows portable | `CubSync-v0.3.15-windows-x64.zip` |
+| Android | `CubSync-v0.3.15.apk` |
+
+#### What changed
+
+**Dark mode is readable again.** The previous version gave the desktop the phone's colour table, where the window background and the card background are the same value — one flat black field, cards held apart only by a hairline, and every explanatory line smeared into it. Dark now uses the design's own desktop tokens: canvas `#0F1116`, cards `#181B21`, with the layer between them visible again. The two secondary text weights were raised as well, so a sentence inside a card no longer needs to be leaned into.
+
+**USB-ADB is no longer "reserved".** Plug in a cable and the device appears under 连接方式 and can be connected: the desktop runs `adb forward` to map the device's port onto this machine, and what follows is the same connection the local network uses. On the phone that row is a view rather than a switch — forwarding happens on the host, and the phone only has to keep sharing on.
+
+**Protocol negotiation**: with no peer, the remote version reads `—` instead of `0`, which looked like a build from before the protocol existed.
+
+#### Notes
+
+- Keep both ends on the same protocol version (v1). An older peer falls back to one-way by the v3 compatibility rules.
+- Dark and light are switchable in Settings; only dark changed here.
+- Android needs all-files access to transfer; the first launch asks for it.
+
+
diff --git a/gradle.properties b/gradle.properties
index 29ab769..097a082 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,7 +3,7 @@
# The project version lives here so that build scripts, packaging and CI all read
# a single value. See docs/VERSIONING.md for the versioning policy.
-cubsync.version=0.3.14
+cubsync.version=0.3.15
org.gradle.jvmargs=-Xmx3g -XX:MaxMetaspaceSize=768m -Dfile.encoding=UTF-8
org.gradle.parallel=true
diff --git a/service/src/main/kotlin/io/github/cubsync/service/UiSpec.kt b/service/src/main/kotlin/io/github/cubsync/service/UiSpec.kt
index 06bf54b..ce28f42 100644
--- a/service/src/main/kotlin/io/github/cubsync/service/UiSpec.kt
+++ b/service/src/main/kotlin/io/github/cubsync/service/UiSpec.kt
@@ -178,9 +178,6 @@ object Channels {
const val USB_ADB_NAME = "USB_ADB"
const val USB_ADB_ADDRESS = "127.0.0.1:5740"
- /** What tapping the adb row says while the link is still a promise. */
- const val ADB_RESERVED = "USB-ADB 已留位:协议支持,链路尚未打通,传输目前仍走局域网"
-
/** The same, for 多链路. */
const val MULTI_LINK_RESERVED = "多链路已留位:协议支持多链路,传输目前仍走其中一条"
}