From a97231e1d0e93c9f8313e24b9bf58c6677d25243 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=AD=9F=E5=B0=A7?= <147088706+Justingwo@users.noreply.github.com> Date: Sun, 13 Sep 2026 11:30:58 +0800 Subject: [PATCH 1/7] Create monochrome launcher icon drawable Added a monochrome vector drawable for the app launcher icon. --- .../res/drawable/ic_launcher_monochrome.xml | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 app/src/main/res/drawable/ic_launcher_monochrome.xml diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 0000000..9b894c1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + From 3673b6787d46b73d2fd58fb59e177ab8a599cb96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E5=AD=9F=E5=B0=A7?= <147088706+Justingwo@users.noreply.github.com> Date: Sun, 13 Sep 2026 11:34:16 +0800 Subject: [PATCH 2/7] Add monochrome drawable to adaptive icon --- app/src/main/res/mipmap-anydpi-v26/logo.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/mipmap-anydpi-v26/logo.xml b/app/src/main/res/mipmap-anydpi-v26/logo.xml index 16a18b9..c0ccd7a 100644 --- a/app/src/main/res/mipmap-anydpi-v26/logo.xml +++ b/app/src/main/res/mipmap-anydpi-v26/logo.xml @@ -2,4 +2,5 @@ - \ No newline at end of file + + From 956e07a490402a85d7860e081a92c96bda86fecb Mon Sep 17 00:00:00 2001 From: guomengyao Date: Sun, 13 Sep 2026 13:04:31 +0800 Subject: [PATCH 3/7] feat(ui): add themed launcher icon support --- .../res/drawable/ic_launcher_monochrome.xml | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/app/src/main/res/drawable/ic_launcher_monochrome.xml b/app/src/main/res/drawable/ic_launcher_monochrome.xml index 9b894c1..f2b0d5c 100644 --- a/app/src/main/res/drawable/ic_launcher_monochrome.xml +++ b/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -4,54 +4,54 @@ android:viewportWidth="108" android:viewportHeight="108"> - + + android:pathData="M 54,28 + C 63,33 72,35 80,35 + C 80,50 75,64 54,79 + C 33,64 28,50 28,35 + C 36,35 45,33 54,28 Z" /> - + + android:pathData="M 36.5,43.5 C 41.5,39.5 47.5,38 54,38 C 60.5,38 66.5,39.5 71.5,43.5" /> - + + android:pathData="M 40.5,49.5 C 44.5,46 49,44.5 54,44.5 C 59,44.5 63.5,46 67.5,49.5" /> - + + android:pathData="M 44.5,55.5 C 47.5,52.8 50.5,51.5 54,51.5 C 57.5,51.5 60.5,52.8 63.5,55.5" /> - + + android:pathData="M 48.5,61.5 C 50.2,59.8 52,59 54,59 C 56,59 57.8,59.8 59.5,61.5" /> - + - + android:pathData="M 54,66 + A 2.5,2.5 0 1,0 54.01,66 Z" /> + \ No newline at end of file From 2ab7f7bca348eb973bcfc44b757c42718b1ba04c Mon Sep 17 00:00:00 2001 From: guomengyao Date: Sun, 13 Sep 2026 16:53:29 +0800 Subject: [PATCH 4/7] feat(i18n): add Simplified Chinese (zh-rCN) translations --- app/src/main/res/values-zh-rCN/strings.xml | 139 +++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 app/src/main/res/values-zh-rCN/strings.xml diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000..fa7d4fd --- /dev/null +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,139 @@ + + + 关于 + 关于 LANShield + 同意 + 全部 + 允许 + 已允许 + 允许通知 + 打开通知设置 + 通知已启用 + 允许本地网络访问 + 已授予权限 + 打开应用设置 + 本地网络访问 + 授予“附近设备”权限后,LANShield 才能为您的应用转发本地网络流量。 + 按单个应用修改拦截策略 + 匿名共享 + 检测到的所有局域网流量\n都将在此处显示 + LANShield + 开机自启动 + 返回 + 拦截 + 默认拦截或允许局域网流量 + 已拦截 + 取消 + 取消搜索 + 修改局域网访问策略 + 确定要清除 %1$s 的所有受监控局域网流量记录吗?此操作无法撤销。 + 选择默认应允许还是拦截局域网流量 + 全部清除 + 清除局域网流量记录 + "配置局域网访问权限:" + 确认 + 默认策略 + 默认 + 检测到协议:%1$s + 检测到协议:%1$s + 不同意 + 忽略 + 启用始终开启 + 结束时间:%1$s + "欢迎使用 LANShield!" + 例外规则 + 反馈 + 完成 + 接收通知 + 提交反馈 + 入站:%1$s + 单个应用局域网流量 + 待补充 individual_lan_traffic_explanation + 信息 + "首先,您需要选择默认是拦截还是允许局域网访问。之后您可以针对各个应用单独覆盖此规则。" + "有任何反馈意见吗?您可以在“设置”标签页中向我们提交!" + "当应用首次尝试访问您的本地网络时,LANShield 会发送通知,以便您决定允许或拦截。通知仅用于此类本地网络访问事件。" + "为了让我们更深入地了解应用行为,我们希望获知哪些应用在使用过程中并未尝试访问局域网。为此,您可以选择与我们共享您的应用使用情况数据。" + 共享应用使用情况 + "LANShield 是比利时鲁汶大学(KU Leuven)的一项学术研究项目。通过共享设备上应用与本地网络交互的数据,您可以帮助我们了解应用访问局域网的原因。所有数据均完全匿名化,绝不会外泄或出售。" + "您连接的本地网络中通常连接有打印机、摄像头、音响等各类设备。LANShield 可以让您自主掌控哪些应用可以访问它们,哪些不能。" + LANShield 通过建立本地虚拟 VPN 接口在设备端过滤局域网流量。您会在状态栏看到 VPN 图标,但没有任何数据会被发送至外部互联网。 + 参与我们的学术研究 + 参与用户调研 + 参与鲁汶大学(KU Leuven)学术研究 + 局域网流量 + 局域网流量拦截 + 您可以在此配置 LANShield 应如何拦截或允许局域网流量。在“单应用例外”页面中,您可以为设备上的每个应用单独设定规则。若未设定单独规则,则应用“默认策略”。建议不要拦截系统应用,否则可能导致某些系统功能异常。 + 来自 %1$s 的局域网流量 + 此处概览了所有发送或接收过局域网流量的应用。在某些情况下,LANShield 无法确定具体是哪个应用发送了特定数据包,这些流量将被归类为“未知”。 + LANShield 已启用 + 无法启动 LANShield + 局域网防火墙未能启动,请重试。 + LANShield 不再具备作为 VPN 运行的权限。点按即可打开 LANShield 并重新启用。 + LANShield 助您管控\n其他应用的局域网访问权限 + LANShield 徽标 + 过去 24 小时:%1$s + 最近活跃:%1$s + 前往 lanshield.eu 了解更多 + 徽标 + 管理通知 + 手动允许了 %1$s 个应用%2$s + 手动拦截了 %1$s 个应用%2$s + 更多信息 + 下一步 + 未检测到局域网流量 + 通知 + 出站:%1$s + 概览 + 若要在设备重启后自动启动 LANShield,请在下一步的 LANShield VPN 设置界面中勾选“始终开启的 VPN”选项。 + 为了防护您的局域网流量,LANShield 使用虚拟本地 VPN 连接来管控设备上其他应用的局域网访问。虽然您会看到系统 VPN 通知,但不会建立连接到外部互联网的 VPN 隧道。 + 为了防护您的局域网流量,LANShield 需要建立一个虚拟本地 VPN 接口。在下一步中,系统将请求您授予此权限。应用不会建立连接到外部互联网的 VPN 隧道。 + 对端:%1$s - %2$s + 单应用例外 + + 允许组播流量 + 允许 DNS 流量 + 隐藏组播通知 + 隐藏 DNS 通知 + + "您可以在此为各个应用单独配置允许或拦截局域网流量。" + 策略:允许局域网流量 + 策略:拦截局域网流量 + 上一步 + 隐私政策 + 搜索 + 共享 + 设置默认策略 + 设置 + 跳过 + 继续 + 共享应用使用情况可帮助我们识别哪些应用从未尝试访问本地网络。若要继续,请在接下来的界面中找到 LANShield 并选择“允许”。 + 共享匿名应用使用情况 + 共享匿名局域网指标 + 共享中\n + 共享应用使用情况 + 显示系统应用 + 开始时间:%1$s + 系统应用 + MainActivity + 总计:%1$s + 未知 + VPN 通知 + 为什么会有 VPN 图标? + VPN 权限申请 + LANShield 需要通知权限才能运行。请启用通知以开启防护。 + LANShield 需要“附近设备”权限才能向本地网络转发流量。 + 缺少本地网络权限 + LANShield 需要“附近设备”权限才能向本地网络转发流量。点按即可打开 LANShield 并授予该权限。 + 准备就绪! + 导出局域网流量 + 高级设置 + 常规设置 + 检测到的所有开放端口都将在此处显示 + 未检测到开放端口 + 开放端口 + 此处列出了其他应用打开的端口。这些端口通常用于与同一局域网内的其他设备通信,例如设备发现或媒体串流。 + 下拉即可刷新 + 前往 lanshield.eu 了解详情(在浏览器中打开) + 为什么会显示 VPN 通知?(打开说明弹窗) + \ No newline at end of file From a9965e097d14fd2b876a1de62e85db5a8237069e Mon Sep 17 00:00:00 2001 From: guomengyao Date: Sun, 13 Sep 2026 19:00:40 +0800 Subject: [PATCH 5/7] ci: re-trigger tests after maven artifact timeout From 1959dac835bbbf2c36d00e5170611beb5d9faea1 Mon Sep 17 00:00:00 2001 From: guomengyao Date: Mon, 14 Sep 2026 20:03:37 +0800 Subject: [PATCH 6/7] add chinese strings --- .../org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt | 2 +- .../org/distrinet/lanshield/ui/overview/OverviewScreen.kt | 5 ++++- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt b/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt index a1471ac..0c96e86 100644 --- a/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt +++ b/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt @@ -186,7 +186,7 @@ private fun LANShieldNotActive(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(48.dp)) Text( - text = "LANShield not active", + stringResource(LANShield_not_active), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, diff --git a/app/src/main/java/org/distrinet/lanshield/ui/overview/OverviewScreen.kt b/app/src/main/java/org/distrinet/lanshield/ui/overview/OverviewScreen.kt index 4d30089..b23a542 100644 --- a/app/src/main/java/org/distrinet/lanshield/ui/overview/OverviewScreen.kt +++ b/app/src/main/java/org/distrinet/lanshield/ui/overview/OverviewScreen.kt @@ -235,7 +235,10 @@ internal fun OverviewScreen( contentDescription = vpnNotificationContentDescription } ) { - Text("Why is there a VPN notification?", textAlign = TextAlign.Center) + Text( + stringResource(R.string.why_is_there_a_vpn_notification), + textAlign = TextAlign.Center + ) } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fa7d4fd..b98a76d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -75,6 +75,7 @@ 过去 24 小时:%1$s 最近活跃:%1$s 前往 lanshield.eu 了解更多 + 为什么会显示 VPN 通知? 徽标 管理通知 手动允许了 %1$s 个应用%2$s @@ -132,6 +133,7 @@ 检测到的所有开放端口都将在此处显示 未检测到开放端口 开放端口 + LANShield 未开启 此处列出了其他应用打开的端口。这些端口通常用于与同一局域网内的其他设备通信,例如设备发现或媒体串流。 下拉即可刷新 前往 lanshield.eu 了解详情(在浏览器中打开) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 74f333d..7291b44 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -75,6 +75,7 @@ Last 24h: %1$s Last seen: %1$s Learn more on lanshield.eu + Why is there a VPN notification? Logo Manage notifications Manually allowed %1$s app%2$s @@ -132,6 +133,7 @@ Any detected open ports will be shown here No open ports detected Open Ports + LANShield not active Here you can see a list of ports opened by other apps. These are typically used to communicate with other devices on the same local network, such as for device discovery or media streaming. ⬇ Pull down to refresh Learn more on lanshield.eu, opens in browser From b642bcbbf8e3fd9535097b715ee0bba9aed75fc3 Mon Sep 17 00:00:00 2001 From: guomengyao Date: Mon, 14 Sep 2026 20:24:53 +0800 Subject: [PATCH 7/7] fix strings in openport page --- .../org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt b/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt index 0c96e86..ef0d0eb 100644 --- a/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt +++ b/app/src/main/java/org/distrinet/lanshield/ui/openports/OpenPortsScreen.kt @@ -186,7 +186,7 @@ private fun LANShieldNotActive(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(48.dp)) Text( - stringResource(LANShield_not_active), + stringResource(R.string.LANShield_not_active), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium,