Skip to content

Commit 19c3a58

Browse files
committed
Improve Tailscale View
1 parent f1aa61d commit 19c3a58

7 files changed

Lines changed: 91 additions & 3 deletions

File tree

app/src/main/java/io/nekohasekai/sfa/compose/screen/tools/TailscalePeerScreen.kt

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import androidx.compose.material.icons.filled.Terminal
3030
import androidx.compose.material.icons.outlined.ContentCopy
3131
import androidx.compose.material3.Card
3232
import androidx.compose.material3.CardDefaults
33+
import androidx.compose.material3.CircularProgressIndicator
3334
import androidx.compose.material3.ExperimentalMaterial3Api
3435
import androidx.compose.material3.Icon
3536
import androidx.compose.material3.IconButton
@@ -337,6 +338,20 @@ fun TailscalePeerScreen(
337338
fontWeight = FontWeight.Bold,
338339
)
339340
}
341+
if (pingState.isDirect && pingState.endpoint.isNotEmpty()) {
342+
Spacer(modifier = Modifier.height(8.dp))
343+
DetailRow(
344+
label = stringResource(R.string.tailscale_ping_endpoint),
345+
value = pingState.endpoint,
346+
)
347+
}
348+
if (!pingState.isDirect && pingState.derpRegionCode.isNotEmpty()) {
349+
Spacer(modifier = Modifier.height(8.dp))
350+
DetailRow(
351+
label = stringResource(R.string.tailscale_ping_derp_region),
352+
value = pingState.derpRegionCode,
353+
)
354+
}
340355
if (pingState.isRunning && pingState.latencyHistory.size > 1) {
341356
Spacer(modifier = Modifier.height(8.dp))
342357
Row(
@@ -386,9 +401,32 @@ fun TailscalePeerScreen(
386401
}
387402
}
388403
}
389-
} else {
404+
}
405+
if (pingState.error.isNotEmpty()) {
406+
if (pingState.hasResult) {
407+
Spacer(modifier = Modifier.height(8.dp))
408+
}
409+
Text(
410+
text = pingState.error,
411+
color = MaterialTheme.colorScheme.error,
412+
)
413+
} else if (pingState.isRunning && !pingState.hasResult) {
414+
Row(
415+
verticalAlignment = Alignment.CenterVertically,
416+
) {
417+
CircularProgressIndicator(
418+
modifier = Modifier.size(16.dp),
419+
strokeWidth = 2.dp,
420+
)
421+
Spacer(modifier = Modifier.width(8.dp))
422+
Text(
423+
text = stringResource(R.string.tailscale_ping_connecting),
424+
color = MaterialTheme.colorScheme.onSurfaceVariant,
425+
)
426+
}
427+
} else if (!pingState.hasResult) {
390428
Text(
391-
text = "No data",
429+
text = stringResource(R.string.tailscale_ping_no_data),
392430
color = MaterialTheme.colorScheme.onSurfaceVariant,
393431
)
394432
}

app/src/main/java/io/nekohasekai/sfa/compose/screen/tools/TailscalePingViewModel.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ data class TailscalePingState(
1717
val isDirect: Boolean = false,
1818
val derpRegionCode: String = "",
1919
val endpoint: String = "",
20+
val error: String = "",
2021
val latencyHistory: List<Float> = emptyList(),
2122
)
2223

@@ -31,6 +32,7 @@ class TailscalePingViewModel : BaseViewModel<TailscalePingState, Nothing>() {
3132
copy(
3233
isRunning = true,
3334
hasResult = false,
35+
error = "",
3436
latencyHistory = emptyList(),
3537
)
3638
}
@@ -47,7 +49,10 @@ class TailscalePingViewModel : BaseViewModel<TailscalePingState, Nothing>() {
4749
result ?: return
4850
viewModelScope.launch {
4951
if (!currentState.isRunning) return@launch
50-
if (result.error.isNotEmpty()) return@launch
52+
if (result.error.isNotEmpty()) {
53+
updateState { copy(error = result.error) }
54+
return@launch
55+
}
5156
val newHistory = currentState.latencyHistory.toMutableList()
5257
newHistory.add(result.latencyMs.toFloat())
5358
if (newHistory.size > maxHistorySize) {
@@ -60,6 +65,7 @@ class TailscalePingViewModel : BaseViewModel<TailscalePingState, Nothing>() {
6065
isDirect = result.isDirect,
6166
derpRegionCode = result.derpRegionCode,
6267
endpoint = result.endpoint,
68+
error = "",
6369
latencyHistory = newHistory,
6470
)
6571
}

app/src/main/res/values-fa/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,13 +465,23 @@
465465
<string name="tailscale_open_auth_url">باز کردن لینک احراز هویت</string>
466466
<string name="tailscale_open_auth_url_qr_code">نمایش QR کد لینک احراز هویت</string>
467467
<string name="tailscale_this_device">این دستگاه</string>
468+
<string name="tailscale_logout">خروج از حساب</string>
468469
<string name="tailscale_connected">متصل</string>
469470
<string name="tailscale_not_connected">متصل نیست</string>
470471
<string name="tailscale_addresses">آدرس‌های Tailscale</string>
471472
<string name="tailscale_details">جزئیات</string>
472473
<string name="tailscale_key_expiry">انقضای کلید</string>
473474
<string name="tailscale_exit_node">گره خروجی</string>
474475
<string name="tailscale_active">فعال</string>
476+
<string name="tailscale_ping">پینگ</string>
477+
<string name="tailscale_ping_start">شروع</string>
478+
<string name="tailscale_ping_stop">توقف</string>
479+
<string name="tailscale_ping_direct">اتصال مستقیم</string>
480+
<string name="tailscale_ping_derp">اتصال از طریق DERP</string>
481+
<string name="tailscale_ping_endpoint">نقطه پایانی</string>
482+
<string name="tailscale_ping_derp_region">منطقه DERP</string>
483+
<string name="tailscale_ping_connecting">در حال اتصال…</string>
484+
<string name="tailscale_ping_no_data">بدون داده</string>
475485
<string name="tailscale_shared_in">به اشتراک گذاشته شده</string>
476486
<string name="tailscale_expired">منقضی شده</string>
477487
<string name="tailscale_expires_relative">انقضا %1$s</string>

app/src/main/res/values-ru-rRU/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,13 +471,23 @@
471471
<string name="tailscale_open_auth_url">Открыть URL авторизации</string>
472472
<string name="tailscale_open_auth_url_qr_code">Показать QR-код авторизации</string>
473473
<string name="tailscale_this_device">Это устройство</string>
474+
<string name="tailscale_logout">Выйти</string>
474475
<string name="tailscale_connected">Подключено</string>
475476
<string name="tailscale_not_connected">Не подключено</string>
476477
<string name="tailscale_addresses">Адреса Tailscale</string>
477478
<string name="tailscale_details">Подробности</string>
478479
<string name="tailscale_key_expiry">Срок действия ключа</string>
479480
<string name="tailscale_exit_node">Выходной узел</string>
480481
<string name="tailscale_active">Активен</string>
482+
<string name="tailscale_ping">Пинг</string>
483+
<string name="tailscale_ping_start">Начать</string>
484+
<string name="tailscale_ping_stop">Остановить</string>
485+
<string name="tailscale_ping_direct">Прямое соединение</string>
486+
<string name="tailscale_ping_derp">Соединение через DERP</string>
487+
<string name="tailscale_ping_endpoint">Конечная точка</string>
488+
<string name="tailscale_ping_derp_region">Регион DERP</string>
489+
<string name="tailscale_ping_connecting">Подключение…</string>
490+
<string name="tailscale_ping_no_data">Нет данных</string>
481491
<string name="tailscale_shared_in">Поделено</string>
482492
<string name="tailscale_expired">Истёк</string>
483493
<string name="tailscale_expires_relative">Истекает %1$s</string>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,13 +462,23 @@
462462
<string name="tailscale_open_auth_url">打开认证链接</string>
463463
<string name="tailscale_open_auth_url_qr_code">显示认证链接二维码</string>
464464
<string name="tailscale_this_device">此设备</string>
465+
<string name="tailscale_logout">登出</string>
465466
<string name="tailscale_connected">已连接</string>
466467
<string name="tailscale_not_connected">未连接</string>
467468
<string name="tailscale_addresses">Tailscale 地址</string>
468469
<string name="tailscale_details">详情</string>
469470
<string name="tailscale_key_expiry">密钥过期</string>
470471
<string name="tailscale_exit_node">出口节点</string>
471472
<string name="tailscale_active">活跃</string>
473+
<string name="tailscale_ping">Ping</string>
474+
<string name="tailscale_ping_start">启动</string>
475+
<string name="tailscale_ping_stop">停止</string>
476+
<string name="tailscale_ping_direct">直接连接</string>
477+
<string name="tailscale_ping_derp">DERP 中继连接</string>
478+
<string name="tailscale_ping_endpoint">端点</string>
479+
<string name="tailscale_ping_derp_region">DERP 区域</string>
480+
<string name="tailscale_ping_connecting">连接中…</string>
481+
<string name="tailscale_ping_no_data">无数据</string>
472482
<string name="tailscale_shared_in">共享至此</string>
473483
<string name="tailscale_expired">已过期</string>
474484
<string name="tailscale_expires_relative">%1$s过期</string>

app/src/main/res/values-zh-rTW/strings.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,13 +465,23 @@
465465
<string name="tailscale_open_auth_url">開啟認證連結</string>
466466
<string name="tailscale_open_auth_url_qr_code">顯示認證連結 QR 碼</string>
467467
<string name="tailscale_this_device">此裝置</string>
468+
<string name="tailscale_logout">登出</string>
468469
<string name="tailscale_connected">已連線</string>
469470
<string name="tailscale_not_connected">未連線</string>
470471
<string name="tailscale_addresses">Tailscale 位址</string>
471472
<string name="tailscale_details">詳情</string>
472473
<string name="tailscale_key_expiry">金鑰到期</string>
473474
<string name="tailscale_exit_node">出口節點</string>
474475
<string name="tailscale_active">活躍</string>
476+
<string name="tailscale_ping">Ping</string>
477+
<string name="tailscale_ping_start">啟動</string>
478+
<string name="tailscale_ping_stop">停止</string>
479+
<string name="tailscale_ping_direct">直接連線</string>
480+
<string name="tailscale_ping_derp">DERP 中繼連線</string>
481+
<string name="tailscale_ping_endpoint">端點</string>
482+
<string name="tailscale_ping_derp_region">DERP 區域</string>
483+
<string name="tailscale_ping_connecting">連線中…</string>
484+
<string name="tailscale_ping_no_data">無資料</string>
475485
<string name="tailscale_shared_in">共享至此</string>
476486
<string name="tailscale_expired">已過期</string>
477487
<string name="tailscale_expires_relative">%1$s過期</string>

app/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -483,6 +483,10 @@
483483
<string name="tailscale_ping_stop">Stop</string>
484484
<string name="tailscale_ping_direct">Direct connection</string>
485485
<string name="tailscale_ping_derp">DERP-relayed connection</string>
486+
<string name="tailscale_ping_endpoint">Endpoint</string>
487+
<string name="tailscale_ping_derp_region">DERP region</string>
488+
<string name="tailscale_ping_connecting">Connecting…</string>
489+
<string name="tailscale_ping_no_data">No data</string>
486490
<string name="tailscale_shared_in">Shared in</string>
487491
<string name="tailscale_expired">Expired</string>
488492
<string name="tailscale_expires_relative">Expires %1$s</string>

0 commit comments

Comments
 (0)