Compare commits

...

39 Commits

Author SHA1 Message Date
Zane Schepke 2e6b7e65ea fmt 2025-04-17 04:08:04 -04:00
Zane Schepke 7568c87927 feat(lang): add weblate changes, update urls 2025-04-17 04:04:39 -04:00
Zane Schepke d46a0653f1 ci: remove old workflows 2025-04-17 01:37:32 -04:00
Zane Schepke 49ee2431c2 refactor: revert banner for the google monopoly 2025-04-16 07:26:50 -04:00
Zane Schepke dfcc022257 refactor: minor change 2025-04-16 07:18:21 -04:00
Zane Schepke bc08069a64 ci: fix release token 2025-04-15 16:19:36 -04:00
Zane Schepke fb97adca4f fix: latest tagging 2025-04-15 16:05:55 -04:00
Zane Schepke 41540db9b7 ci: fix org changes (#698) 2025-04-15 15:44:01 -04:00
Zane Schepke a1c663233d fix: space 2025-04-15 06:00:06 -04:00
Zane Schepke c520fa5ed2 fix: ci 2025-04-15 05:59:41 -04:00
Zane Schepke 120bde2939 ci: remove old r8 rules 2025-04-15 05:20:52 -04:00
Zane Schepke 58fcc358ce build: gradle checksum update 2025-04-15 04:57:43 -04:00
Zane Schepke 72722a0be5 fix: android dns issue
closes #687
2025-04-15 03:53:17 -04:00
Zane Schepke 29aba65690 ci: change to org ci vars 2025-04-14 15:52:14 -04:00
翻譯得真好下次別翻了 dfda9e8643 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 57.1% (136 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/zh_Hant/
2025-04-14 01:01:47 +00:00
翻譯得真好下次別翻了 14e3290bbf Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 48.3% (115 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/zh_Hant/
2025-04-13 01:22:42 +02:00
Matthaiks f54958e259 Translated using Weblate (Polish)
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pl/
2025-04-13 01:20:15 +02:00
Faisal Gull a82e5d6b50 Translated using Weblate (Urdu)
Currently translated at 100.0% (8 of 8 strings)

Translation: WG Tunnel/fastlane
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/fastlane/ur/
2025-04-13 01:12:53 +02:00
Faisal Gull dfeb70f85f Translated using Weblate (Urdu)
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/ur/
2025-04-13 01:12:53 +02:00
翻譯得真好下次別翻了 08088ba1fa Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 48.3% (115 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/zh_Hant/
2025-04-13 01:12:53 +02:00
nware-lab 2f30a8623c Translated using Weblate (Dutch)
Currently translated at 67.6% (161 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/nl/
2025-04-13 01:12:52 +02:00
大王叫我来巡山 77e7ea05da Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/zh_Hans/
2025-04-13 01:12:52 +02:00
Matthaiks b47f389e98 Translated using Weblate (Polish)
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pl/
2025-04-13 01:12:52 +02:00
Kachelkaiser 780e88ad18 Translated using Weblate (German)
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/de/
2025-04-13 01:12:52 +02:00
mak7im01 05f48cd21d Translated using Weblate (Russian)
Currently translated at 100.0% (238 of 238 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/ru/
2025-04-13 01:12:52 +02:00
Tobias Wienkoop 5d9a534e1c feat: add missing monochrome app icon (#689) 2025-04-12 11:56:56 -04:00
Zane Schepke f5dafa6bf7 ci: fix fastlane 2025-04-11 22:28:59 -04:00
ssantos 534e4c4854 Translated using Weblate (Portuguese)
Currently translated at 72.1% (171 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pt/
2025-04-12 03:06:58 +02:00
大王叫我来巡山 42eebd65b7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/zh_Hans/
2025-04-12 03:06:58 +02:00
ssantos 95c06344c6 Translated using Weblate (Portuguese (Portugal))
Currently translated at 72.5% (172 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pt_PT/
2025-04-12 03:06:58 +02:00
Kachelkaiser 39e2cfc79c Translated using Weblate (German)
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/de/
2025-04-12 03:06:58 +02:00
Kachelkaiser 4cfc00c9bb Translated using Weblate (German)
Currently translated at 100.0% (8 of 8 strings)

Translation: WG Tunnel/fastlane
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/fastlane/de/
2025-04-12 03:06:58 +02:00
solokot 780dd3b984 Translated using Weblate (Russian)
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/ru/
2025-04-12 03:06:58 +02:00
Languages add-on 2a63f6e0a9 Added translation using Weblate (Portuguese) 2025-04-12 03:06:58 +02:00
Matthaiks faacb97d89 Translated using Weblate (Polish)
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pl/
2025-04-12 03:06:58 +02:00
Matthaiks 6bb20184f9 Translated using Weblate (Polish)
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pl/
2025-04-12 03:06:58 +02:00
Matthaiks 44f0794bfb Translated using Weblate (Polish)
Currently translated at 100.0% (237 of 237 strings)

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/pl/
2025-04-12 03:06:58 +02:00
Matthaiks 2251912df4 Translated using Weblate (Polish)
Currently translated at 100.0% (8 of 8 strings)

Translation: WG Tunnel/fastlane
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/fastlane/pl/
2025-04-12 03:06:58 +02:00
Hosted Weblate 128796ae37 Update translation files
Updated by "Cleanup translation files" hook in Weblate.

Translation: WG Tunnel/strings
Translate-URL: https://hosted.weblate.org/projects/wg-tunnel/strings/
2025-04-12 03:06:58 +02:00
32 changed files with 220 additions and 263 deletions
+4 -4
View File
@@ -48,9 +48,9 @@ jobs:
build:
runs-on: ubuntu-latest
env:
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }}
KEY_STORE_FILE: 'android_keystore.jks'
KEY_STORE_LOCATION: ${{ github.workspace }}/app/keystore/
outputs:
@@ -74,7 +74,7 @@ jobs:
with:
fileName: ${{ env.KEY_STORE_FILE }}
fileDir: ${{ env.KEY_STORE_LOCATION }}
encodedString: ${{ secrets.KEYSTORE }}
encodedString: ${{ secrets.ANDROID_KEYSTORE }}
# create keystore path for gradle to read
- name: Create keystore path env var
-36
View File
@@ -1,36 +0,0 @@
name: on-issue
on:
issues:
types: [ opened, closed, reopened ]
jobs:
on-issue:
name: On new issue
runs-on: ubuntu-latest
steps:
- name: Send Telegram Message
run: |
msg_text='${{ github.actor }} updated an issue:
status: ${{ github.event.issue.state }} - #${{ github.event.issue.number }} ${{ github.event.issue.title }}
https://github.com/zaneschepke/wgtunnel/issues/${{ github.event.issue.number }}'
curl -s -X POST 'https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendMessage' \
-d "chat_id=${{ secrets.TELEGRAM_TO }}&text=${msg_text}&message_thread_id=${{ vars.TELEGRAM_ACTIVITY_TOPIC }}"
- name: Send Matrix Message
run: |
msg_text='${{ github.actor }} updated an issue:
status: ${{ github.event.issue.state }} - #${{ github.event.issue.number }} ${{ github.event.issue.title }}
https://github.com/zaneschepke/wgtunnel/issues/${{ github.event.issue.number }}'
# Escape newlines and quotes for JSON
formatted_msg=$(echo -n "$msg_text" | sed ':a;N;$ba;s/\n/\\n/g' | sed 's/"/\\"/g')
curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.MATRIX_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "m.text",
"body": "'"$formatted_msg"'"
}' \
"https://matrix.org/_matrix/client/v3/rooms/${{ vars.MATRIX_ACTIVITY_TOPIC }}/send/m.room.message/$(date +%s)"
-37
View File
@@ -1,37 +0,0 @@
name: on-publish
on:
release:
types: [ published ]
jobs:
on-publish:
name: On publish
runs-on: ubuntu-latest
steps:
- name: Send Telegram Message
run: |
msg_text='${{ github.actor }} published a new release:
Release: ${{ github.event.release.tag_name }}
${{ github.event.release.body }}
https://github.com/zaneschepke/wgtunnel/releases/tag/${{ github.event.release.tag_name }}'
curl -s -X POST 'https://api.telegram.org/bot${{ secrets.TELEGRAM_TOKEN }}/sendMessage' \
-d "chat_id=${{ secrets.TELEGRAM_TO }}&text=${msg_text}&message_thread_id=${{ vars.TELEGRAM_RELEASE_TOPIC }}"
- name: Send Matrix Message
run: |
msg_text='${{ github.actor }} published a new release:
Release: ${{ github.event.release.tag_name }}
${{ github.event.release.body }}
https://github.com/zaneschepke/wgtunnel/releases/tag/${{ github.event.release.tag_name }}'
# Escape newlines and quotes for JSON
formatted_msg=$(echo -n "$msg_text" | sed ':a;N;$ba;s/\n/\\n/g' | sed 's/"/\\"/g')
curl -s -X POST \
-H "Authorization: Bearer ${{ secrets.MATRIX_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"msgtype": "m.text",
"body": "'"$formatted_msg"'"
}' \
"https://matrix.org/_matrix/client/v3/rooms/${{ vars.MATRIX_RELEASE_TOPIC }}/send/m.room.message/$(date +%s)"
+15 -19
View File
@@ -34,6 +34,9 @@ on:
env:
UPLOAD_DIR_ANDROID: android_artifacts
permissions:
contents: write
jobs:
check_commits:
name: Check for New Commits
@@ -50,7 +53,7 @@ jobs:
- name: Check for new commits
id: check
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.PAT }}
run: |
# This script checks for commits newer than 23 hours ago
NEW_COMMITS=$(git rev-list --count --after="$(date -Iseconds -d '23 hours ago')" ${{ github.sha }})
@@ -71,9 +74,9 @@ jobs:
name: publish-github
runs-on: ubuntu-latest
env:
GH_USER: ${{ secrets.GH_USER }}
GH_USER: ${{ secrets.PAT_USERNAME }}
# GH needed for gh cli
GH_TOKEN: ${{ secrets.GH_TOKEN }}
GH_TOKEN: ${{ secrets.PAT }}
GH_REPO: ${{ github.repository }}
steps:
@@ -90,6 +93,7 @@ jobs:
tag: "latest" # or any tag name you wish to use
message: "Automated tag for HEAD commit"
force_push_tag: true
github_token: ${{ secrets.GITHUB_TOKEN }}
tag_exists_error: false
- name: Get latest release
@@ -118,7 +122,7 @@ jobs:
if: ${{ inputs.release_type == '' || inputs.release_type == 'nightly' || inputs.release_type == 'prerelease' }}
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
github_token: ${{ secrets.PAT }}
branch: ${{ github.ref }}
- name: Make download dir
@@ -168,7 +172,7 @@ jobs:
id: create_release
uses: softprops/action-gh-release@v2
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
body: |
${{ env.RELEASE_NOTES }}
@@ -193,14 +197,6 @@ jobs:
files: |
${{ github.workspace }}/temp/*
# notify socials
- name: Trigger on-publish workflow
if: ${{ inputs.release_type == 'release' }}
uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.PAT }}
event-type: publish-release
publish-fdroid:
runs-on: ubuntu-latest
needs:
@@ -220,13 +216,13 @@ jobs:
runs-on: ubuntu-latest
env:
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.ANDROID_SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.ANDROID_SIGNING_STORE_PASSWORD }}
KEY_STORE_FILE: 'android_keystore.jks'
KEY_STORE_LOCATION: ${{ github.workspace }}/app/keystore/
GH_USER: ${{ secrets.GH_USER }}
GH_TOKEN: ${{ secrets.GH_TOKEN }}
GH_USER: ${{ secrets.PAT_USERNAME }}
GH_TOKEN: ${{ secrets.PAT }}
steps:
- uses: actions/checkout@v4
@@ -248,7 +244,7 @@ jobs:
with:
fileName: ${{ env.KEY_STORE_FILE }}
fileDir: ${{ env.KEY_STORE_LOCATION }}
encodedString: ${{ secrets.KEYSTORE }}
encodedString: ${{ secrets.ANDROID_KEYSTORE }}
# create keystore path for gradle to read
- name: Create keystore path env var
-42
View File
@@ -1,42 +0,0 @@
-dontwarn com.google.errorprone.annotations.**
-keepclassmembers class * extends androidx.datastore.preferences.protobuf.GeneratedMessageLite {
<fields>;
}
# Keep all classes in the org.xbill.DNS package and subpackages
-keep class org.xbill.DNS.** { *; }
-dontwarn org.xbill.DNS.**
# Preserve JNA classes if used (e.g., for IPHlpAPI on Windows)
-keep class com.sun.jna.** { *; }
-dontwarn com.sun.jna.**
# Keep DNS resolver configuration classes that might be loaded dynamically
-keep class org.xbill.DNS.config.** { *; }
-dontwarn org.xbill.DNS.config.**
-keep class org.xbill.DNS.** { *; }
# Prevent optimization issues with native or reflection-based calls
-dontoptimize
-dontshrink
# Uncomment the above if errors persist, but use sparingly as theyre broad
# Suppress warnings about missing classes if not all features are used
-dontwarn java.lang.management.**
-dontwarn sun.nio.ch.**
-dontwarn com.google.api.client.http.GenericUrl
-dontwarn com.google.api.client.http.HttpHeaders
-dontwarn com.google.api.client.http.HttpRequest
-dontwarn com.google.api.client.http.HttpRequestFactory
-dontwarn com.google.api.client.http.HttpResponse
-dontwarn com.google.api.client.http.HttpTransport
-dontwarn com.google.api.client.http.javanet.NetHttpTransport$Builder
-dontwarn com.google.api.client.http.javanet.NetHttpTransport
-dontwarn javax.lang.model.element.Modifier
-dontwarn org.joda.time.Instant
-dontwarn org.slf4j.impl.StaticLoggerBinder
-dontwarn org.slf4j.impl.StaticMDCBinder
-dontwarn org.slf4j.impl.StaticMarkerBinder
-61
View File
@@ -1,61 +0,0 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
-keepclassmembers class * extends androidx.datastore.preferences.protobuf.GeneratedMessageLite {
<fields>;
}
# Keep all classes in the org.xbill.DNS package and subpackages
-keep class org.xbill.DNS.** { *; }
-dontwarn org.xbill.DNS.**
# Preserve JNA classes if used (e.g., for IPHlpAPI on Windows)
-keep class com.sun.jna.** { *; }
-dontwarn com.sun.jna.**
# Keep DNS resolver configuration classes that might be loaded dynamically
-keep class org.xbill.DNS.config.** { *; }
-dontwarn org.xbill.DNS.config.**
-keep class org.xbill.DNS.** { *; }
# Prevent optimization issues with native or reflection-based calls
-dontoptimize
-dontshrink
# Uncomment the above if errors persist, but use sparingly as theyre broad
# Suppress warnings about missing classes if not all features are used
-dontwarn java.lang.management.**
-dontwarn sun.nio.ch.**
-dontwarn com.google.api.client.http.GenericUrl
-dontwarn com.google.api.client.http.HttpHeaders
-dontwarn com.google.api.client.http.HttpRequest
-dontwarn com.google.api.client.http.HttpRequestFactory
-dontwarn com.google.api.client.http.HttpResponse
-dontwarn com.google.api.client.http.HttpTransport
-dontwarn com.google.api.client.http.javanet.NetHttpTransport$Builder
-dontwarn com.google.api.client.http.javanet.NetHttpTransport
-dontwarn javax.lang.model.element.Modifier
-dontwarn org.joda.time.Instant
-dontwarn org.slf4j.impl.StaticLoggerBinder
-dontwarn org.slf4j.impl.StaticMDCBinder
-dontwarn org.slf4j.impl.StaticMarkerBinder
+2 -1
View File
@@ -53,7 +53,7 @@
<application
android:name=".WireGuardAutoTunnel"
android:allowBackup="false"
android:banner="@mipmap/ic_banner"
android:banner="@drawable/ic_banner"
android:dataExtractionRules="@xml/data_extraction_rules"
android:enableOnBackInvokedCallback="true"
android:fullBackupContent="@xml/backup_rules"
@@ -66,6 +66,7 @@
<activity
android:name=".MainActivity"
android:exported="true"
android:banner="@mipmap/ic_banner"
android:windowSoftInputMode="adjustNothing"
android:theme="@style/Theme.WireguardAutoTunnel"
android:configChanges="orientation|screenSize|keyboardHidden"
@@ -148,11 +148,12 @@ class TunnelControlTile : TileService(), LifecycleOwner {
private fun setTileDescription(description: String) {
runCatching {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
qsTile.subtitle = description
}
if (qsTile == null) return@runCatching
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
qsTile.subtitle = description
qsTile.stateDescription = description
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
qsTile.subtitle = description
}
qsTile.updateTile()
}
@@ -3,11 +3,7 @@ package com.zaneschepke.wireguardautotunnel.domain.entity
import com.wireguard.android.backend.Tunnel
import com.wireguard.config.Config
import com.zaneschepke.wireguardautotunnel.util.Constants
import com.zaneschepke.wireguardautotunnel.util.extensions.defaultName
import com.zaneschepke.wireguardautotunnel.util.extensions.extractNameAndNumber
import com.zaneschepke.wireguardautotunnel.util.extensions.hasNumberInParentheses
import com.zaneschepke.wireguardautotunnel.util.extensions.isReachable
import com.zaneschepke.wireguardautotunnel.util.extensions.toWgQuickString
import com.zaneschepke.wireguardautotunnel.util.extensions.*
import java.io.InputStream
import java.net.InetAddress
import java.nio.charset.StandardCharsets
@@ -30,6 +26,7 @@ data class TunnelConf(
val pingIp: String? = null,
val isEthernetTunnel: Boolean = false,
val isIpv4Preferred: Boolean = true,
val useCache: Boolean = false,
@Transient private var stateChangeCallback: ((Any) -> Unit)? = null,
) : Tunnel, org.amnezia.awg.backend.Tunnel {
@@ -95,21 +92,9 @@ data class TunnelConf(
isEthernetTunnel,
isIpv4Preferred,
)
.apply {
stateChangeCallback = this@TunnelConf.stateChangeCallback
// tunnelStatsCallback = this@TunnelConf.tunnelStatsCallback
// bounceTunnelCallback = this@TunnelConf.bounceTunnelCallback
}
.apply { stateChangeCallback = this@TunnelConf.stateChangeCallback }
}
// fun onUpdateStatistics() {
// tunnelStatsCallback?.invoke()
// }
//
// fun bounceTunnel(tunnelConf: TunnelConf, reason: TunnelStatus.StopReason) {
// bounceTunnelCallback?.invoke(tunnelConf, reason)
// }
fun toAmConfig(): org.amnezia.awg.config.Config {
return configFromAmQuick(amQuick.ifBlank { wgQuick })
}
@@ -122,6 +107,8 @@ data class TunnelConf(
override fun isIpv4ResolutionPreferred(): Boolean = isIpv4Preferred
override fun useCache(): Boolean = useCache
override fun onStateChange(newState: org.amnezia.awg.backend.Tunnel.State) {
stateChangeCallback?.invoke(newState)
}
@@ -130,12 +117,6 @@ data class TunnelConf(
stateChangeCallback?.invoke(newState)
}
fun isTunnelConfigChanged(updatedConf: TunnelConf): Boolean {
return updatedConf.wgQuick != wgQuick ||
updatedConf.amQuick != amQuick ||
updatedConf.name != name
}
fun generateUniqueName(tunnelNames: List<String>): String {
var tunnelName = this.tunName
var num = 1
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

@@ -2,4 +2,5 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
@@ -2,4 +2,5 @@
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
<monochrome android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>
+2
View File
@@ -32,6 +32,7 @@
<string name="name">Name</string>
<string name="always_on_vpn_support">Always-On VPN erlauben</string>
<string name="location_services_not_detected">Standortdienste nicht erkannt</string>
<string name="hint_search_packages">Pakete suchen</string>
<string name="vpn_on">VPN an</string>
<string name="vpn_off">VPN aus</string>
<string name="create_import">Von Grund auf neu erstellen</string>
@@ -226,4 +227,5 @@
<string name="camera_permission_required">Kameraberechtigung erforderlich</string>
<string name="wifi_name_template">Aktiv: %1$s</string>
<string name="delete">Löschen</string>
<string name="nothing_here_yet">Noch nix hier!</string>
</resources>
+21
View File
@@ -129,4 +129,25 @@
<string name="language">Taal</string>
<string name="automatic">Automatisch</string>
<string name="notifications">Meldingen</string>
<string name="quick_actions">Snelle acties</string>
<string name="ethernet_tunnel">Ethernet tunnel</string>
<string name="set_ethernet_tunnel">Instellen als ethernet tunnel</string>
<string name="allow_lan_traffic">LAN trafiek toestaan</string>
<string name="vpn_channel_description">Een kanaal voor VPN status notificaties</string>
<string name="stop">stop</string>
<string name="splt_tunneling">Gesplitste tunneling</string>
<string name="tunnel_specific_settings">Tunnel specifieke instellingen</string>
<string name="advanced_settings">Geavanceerde instellingen</string>
<string name="hide_amnezia_properties">Amnezia eigenschappen verbergen</string>
<string name="hide_scripts">Scripts verbergen</string>
<string name="remove_amnezia_compatibility">Amnezia compatibiliteit verwijderen</string>
<string name="add_from_clipboard">Toevoegen van klembord</string>
<string name="show_scripts">Toon scripts</string>
<string name="auto_tunnel_channel_name">Auto-tunnel Notificatie Kanaal</string>
<string name="enable_local_logging">lokale logging inschakelen</string>
<string name="auto_tunnel_channel_description">Een kanaal voor auto-tunnel status notificaties</string>
<string name="enable_amnezia_compatibility">Amnezia compatibiliteit inschakelen</string>
<string name="add_from_url">Toevoegen met link</string>
<string name="stop_on_no_internet">Stoppen wanneer geen internet</string>
<string name="stop_on_internet_loss">Stop tunnel bij verlies van internet</string>
</resources>
+3 -2
View File
@@ -194,7 +194,7 @@
<string name="add_from_url">Dodaj z adresu URL</string>
<string name="export_failed">Eksport nie powiódł się</string>
<string name="inactive">Nieaktywny</string>
<string name="wifi_name_template">Aktywna: %1$s</string>
<string name="wifi_name_template">Aktywny: %1$s</string>
<string name="delete_logs">Usuń i wyczyść dzienniki</string>
<string name="join_telegram">Dołącz do społeczności Telegramu</string>
<string name="error_download_failed">Nie udało się pobrać konfiguracji</string>
@@ -211,7 +211,7 @@
<string name="export_tunnels_wireguard">Eksportuj tunele jako WireGuard</string>
<string name="delete">Usuń</string>
<string name="camera_permission_required">Wymagane pozwolenie na dostęp do aparatu</string>
<string name="tunnel_error_template">Tunel nie powiódł się z powodu: %1$s</string>
<string name="tunnel_error_template">Tunel nie powiódł się z powodu: %1$s</string>
<string name="remote_key_template">Klucz: %1$s</string>
<string name="config_error">błąd konfiguracji</string>
<string name="dropdown">Rozwijane</string>
@@ -227,4 +227,5 @@
<string name="export_tunnels_amnezia">Eksportuj tunele jako Amnezia</string>
<string name="invalid_config_error">błąd nieprawidłowej konfiguracji</string>
<string name="dns_resolve_error">błąd rozwiązywania DNS</string>
<string name="nothing_here_yet">Jeszcze nic tu nie ma!</string>
</resources>
+1
View File
@@ -226,4 +226,5 @@
<string name="export_tunnels_wireguard">Экспорт туннелей как WireGuard</string>
<string name="enable_remote_app_control">Удалённое управление приложением</string>
<string name="error_download_failed">Невозможно скачать конфигурацию</string>
<string name="nothing_here_yet">Здесь пока ничего нет!</string>
</resources>
+42
View File
@@ -185,4 +185,46 @@
<string name="vpn_channel_description">VPN ریاستی اطلاعات کے لیے ایک چینل</string>
<string name="hide_scripts">اسکرپٹ چھپائیں۔</string>
<string name="add_from_clipboard">کلپ بورڈ سے شامل کریں۔</string>
<string name="remote_key_template">کلید: %1$s</string>
<string name="enable_remote_app_control">ریموٹ ایپ کنٹرول کو فعال کریں۔</string>
<string name="kernel_name_error">کرنل ماڈیول نام کی خرابی۔</string>
<string name="app_permission_title">ڈبلیو جی ٹنل کنٹرول برج</string>
<string name="app_permission_description">سرنگوں اور خودکار سرنگ کی خصوصیات کو کنٹرول کریں۔</string>
<string name="add_from_url">یو آر ایل سے شامل کریں۔</string>
<string name="enter_config_url">ترتیب یو آر ایل درج کریں۔</string>
<string name="error_download_failed">کنفیگریشن ڈاؤن لوڈ کرنے میں ناکام</string>
<string name="save">محفوظ کریں۔</string>
<string name="search">تلاش کریں۔</string>
<string name="select">منتخب کریں۔</string>
<string name="join_telegram">ٹیلیگرام کمیونٹی میں شامل ہوں۔</string>
<string name="matrix_url">https://matrix.to/#/#wg-tunnel-space:matrix.org</string>
<string name="dropdown">ڈراپ ڈاؤن</string>
<string name="add_tunnel">سرنگ شامل کریں۔</string>
<string name="export_logs">ذخیرہ شدہ نوشتہ جات برآمد کریں۔</string>
<string name="copy">نقل</string>
<string name="info">معلومات</string>
<string name="export_tunnels_wireguard">وائر گارڈ کے بطور سرنگیں برآمد کریں۔</string>
<string name="delete">حذف کریں۔</string>
<string name="camera_permission_required">کیمرے کی اجازت درکار ہے۔</string>
<string name="export_failed">ایکسپورٹ ناکام ہو گیا۔</string>
<string name="tunnel_error_template">سرنگ اس کے ساتھ ناکام ہوگئی: %1$s</string>
<string name="wifi_name_template">فعال: %1$s</string>
<string name="config_error">کنفگریشن کی خرابی</string>
<string name="dns_resolve_error">ڈی این ایس ریزولوشن کی خرابی۔</string>
<string name="invalid_config_error">غلط_تشکیل_کی_خرابی۔</string>
<string name="auth_error">غیر مجاز غلطی</string>
<string name="service_running_error">سروس نہیں چل رہی خرابی۔</string>
<string name="inactive">غیر فعال</string>
<string name="active">فعال</string>
<string name="status">حیثیت</string>
<string name="bio_not_supported">بایومیٹرکس تعاون یافتہ نہیں ہیں۔</string>
<string name="bio_not_created">بائیو میٹرکس نہیں بنائے گئے۔</string>
<string name="bio_update_required">بائیو میٹرک سیکیورٹی اپ ڈیٹ درکار ہے۔</string>
<string name="tunnel_starting">سرنگ شروع ہو رہی ہے۔</string>
<string name="nothing_here_yet">ابھی تک یہاں کچھ نہیں!</string>
<string name="join_matrix">میٹرکس کمیونٹی میں شامل ہوں۔</string>
<string name="delete_logs">نوشتہ جات کو حذف اور صاف کریں۔</string>
<string name="export_tunnels_amnezia">ایمنیزیا کے طور پر سرنگیں برآمد کریں۔</string>
<string name="bio_subtitle">اپنی بائیو میٹرک اسناد کا استعمال کرتے ہوئے لاگ ان کریں۔</string>
<string name="bio_auth_title">بائیو میٹرک تصدیق</string>
</resources>
@@ -226,4 +226,5 @@
<string name="bio_subtitle">使用你的生物特征凭据登录</string>
<string name="export_logs">导出已保存的日志</string>
<string name="bio_not_supported">生物特征不受支持</string>
<string name="nothing_here_yet">此处还什么都没有!</string>
</resources>
+28 -3
View File
@@ -73,7 +73,7 @@
<string name="automatic">自動</string>
<string name="add_wifi_name">新增WiFi SSID</string>
<string name="allow_lan_traffic">允許 LAN 流量</string>
<string name="stop_on_no_internet">沒有連上網路時停</string>
<string name="stop_on_no_internet">沒有連上網路時停</string>
<string name="stop_on_internet_loss">網路連線斷開時停止隧道</string>
<string name="add_from_clipboard">從剪貼簿新增</string>
<string name="stop">停止</string>
@@ -84,10 +84,10 @@
<string name="error_file_format">無效的隧道組態檔案格式</string>
<string name="endpoint">端點</string>
<string name="location_services_not_detected">未啟用定位服務</string>
<string name="junk_packet_maximum_size">最大無效封包</string>
<string name="junk_packet_maximum_size">無效封包最大大小</string>
<string name="no_tunnels">還沒有新增任何隧道!</string>
<string name="allowed_ips">允許的 IP</string>
<string name="junk_packet_minimum_size">最小無效封包</string>
<string name="junk_packet_minimum_size">無效封包最小大小</string>
<string name="error_no_file_explorer">未安裝任何檔案管理器</string>
<string name="unsure_how">如果您不確定如何進行</string>
<string name="see_the">請參閱</string>
@@ -100,4 +100,29 @@
<string name="vpn_off">VPN 已關閉</string>
<string name="error_root_denied">無法取得 root 權限</string>
<string name="root_accepted">已取得 root 權限</string>
<string name="enable_remote_app_control">啟用遠端應用程式控制</string>
<string name="join_telegram">加入 Telegram 社群</string>
<string name="add_from_url">從 URL 新增</string>
<string name="join_matrix">加入 Matrix 社群</string>
<string name="copy">複製</string>
<string name="base64_key">base64 格式</string>
<string name="persistent_keepalive">保持連線</string>
<string name="email_subject">WG Tunnel 支援</string>
<string name="all">全部</string>
<string name="server_ipv4">IPv4 主機名稱解析</string>
<string name="search">搜尋</string>
<string name="save">儲存</string>
<string name="prefer_ipv4">偏好 IPv4 連線</string>
<string name="select">選擇</string>
<string name="info">資訊</string>
<string name="delete">刪除</string>
<string name="export_failed">匯出失敗</string>
<string name="add_tunnel">新增隧道</string>
<string name="camera_permission_required">需要相機權限</string>
<string name="status">狀態</string>
<string name="dns_resolve_error">dns 解析錯誤</string>
<string name="kernel_name_error">核心模組名稱錯誤</string>
<string name="nothing_here_yet">這裡目前還沒有任何東西!</string>
<string name="remove_amnezia_compatibility">移除 Amnezia 相容性</string>
<string name="enable_amnezia_compatibility">啟用 Amnezia 相容性</string>
</resources>
+8 -8
View File
@@ -4,12 +4,15 @@
<string name="app_permission_description">Control tunnels and auto-tunnel features.</string>
<string name="vpn_channel_id" translatable="false">VPN Channel</string>
<string name="vpn_channel_name">VPN Notification Channel</string>
<string name="github_url" translatable="false">https://github.com/zaneschepke/wgtunnel/issues</string>
<string name="docs_url" translatable="false">https://zaneschepke.com/wgtunnel-docs/overview.html</string>
<string name="privacy_policy_url" translatable="false">https://zaneschepke.com/wgtunnel-docs/privacypolicy.html</string>
<string name="docs_wildcards" translatable="false" >https://zaneschepke.com/wgtunnel-docs/features.html#wildcard-wi-fi-name-support</string>
<string name="github_url" translatable="false">https://github.com/wgtunnel/wgtunnel/issues</string>
<string name="docs_url" translatable="false">https://wgtunnel.com/docs/</string>
<string name="getting_started_url" translatable="false">https://wgtunnel.com/docs/getting-started</string>
<string name="privacy_policy_url" translatable="false">https://wgtunnel.com/docs/privacy-policy/</string>
<string name="docs_wildcards" translatable="false" >https://wgtunnel.com/docs/auto-tunneling/#use-name-wildcards</string>
<string name="donate_url" translatable="false">https://zaneschepke.com/donate/</string>
<string name="error_file_extension">File is not a .conf or .zip</string>
<string name="matrix_url" translatable="false">https://matrix.to/#/#wg-tunnel-space:matrix.org</string>
<string name="telegram_url" translatable="false">https://t.me/wgtunnel</string>
<string name="error_file_extension">File is not a .conf or .zip</string>
<string name="turn_off_tunnel">Action requires tunnel off</string>
<string name="no_tunnels">No tunnels added yet!</string>
<string name="tunnels">Tunnels</string>
@@ -107,10 +110,8 @@
<string name="response_packet_magic_header">Response packet magic header</string>
<string name="transport_packet_magic_header">Transport packet magic header</string>
<string name="underload_packet_magic_header">Underload packet magic header</string>
<string name="telegram_url" translatable="false">https://t.me/wgtunnel</string>
<string name="unsure_how">if you are unsure how to proceed</string>
<string name="see_the">See the</string>
<string name="getting_started_url" translatable="false">https://zaneschepke.com/wgtunnel-docs/getting-started.html</string>
<string name="getting_started_guide">getting started guide</string>
<string name="error_file_format">Invalid tunnel config format</string>
<string name="restart_at_boot">Restart on boot</string>
@@ -205,7 +206,6 @@
<string name="select">Select</string>
<string name="join_telegram">Join Telegram community</string>
<string name="join_matrix">Join Matrix community</string>
<string name="matrix_url">https://matrix.to/#/#wg-tunnel-space:matrix.org</string>
<string name="dropdown">Dropdown</string>
<string name="add_tunnel">Add tunnel</string>
<string name="export_logs">Export stored logs</string>
+6
View File
@@ -3,11 +3,17 @@
<style name="Theme.WireguardAutoTunnel" parent="@style/Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@color/background</item>
<item name="android:colorPrimary">@color/background</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
</style>
<style name="Theme.App.Start" parent="@style/Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/background</item>
<item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher</item>
<item name="postSplashScreenTheme">@style/Theme.WireguardAutoTunnel</item>
<item name="android:colorPrimary">@color/background</item>
<item name="android:windowAllowReturnTransitionOverlap">true</item>
<item name="android:windowAllowEnterTransitionOverlap">true</item>
</style>
</resources>
@@ -0,0 +1,6 @@
نیا کیا ہے:
- کرنل موڈ کے لیے متعدد ٹنل سپورٹ
- WG ڈیفالٹ DNS Ipv4 ترجیح کے لیے اوور رائیڈ
- قابل اعتماد سپورٹ پر کِل سوئچ کو روکیں۔
- آٹو ٹنل کے ذریعہ مقام کے استفسار کو محدود کریں۔
- مختلف بگ کی اصلاحات اور بہتری
@@ -0,0 +1,5 @@
نیا کیا ہے:
- جامد IPv6 پیر اینڈ پوائنٹ بگ فکس
- متحرک شارٹ کٹ بگ فکس
- لوکلائزیشن
- پیئر بگ فکس شامل کریں۔
@@ -0,0 +1,5 @@
نیا کیا ہے:
- آٹو ٹنل ریگریشن فکس
- ٹائل کی مطابقت پذیری میں بہتری
- وائی فائی نام کے استفسار کو بہتر بنائیں
- نیٹ ورک کی نگرانی کی اجازت کی جانچ کو بہتر بنائیں۔
@@ -0,0 +1,8 @@
نیا کیا ہے:
- UI اپ ڈیٹ
- URL کے ذریعے سرنگ شامل کریں۔
- VPN کِل سوئچ بگ فکسز
- ٹنل سروس کریش فکسز
- پنگ اور تشکیل کی تبدیلی دوبارہ شروع کرنے کی اصلاحات
- UI میں نیٹ ورک کی معلومات
- مختلف دیگر اصلاحات اور بہتری
@@ -0,0 +1,6 @@
نیا کیا ہے:
- نیا ریموٹ ایپ انٹیگریشن
- فعال وائی فائی کا نام کلپ بورڈ میں کاپی کریں۔
- ٹنل شٹ ڈاؤن بگ کو درست کریں۔
- فون DNS کو ترجیح دیتے ہوئے ڈی این ایس ڈیفالٹ سرور بگ کو درست کریں۔
- Ipv6 جامد ہم مرتبہ میزبان کنفیگرس کے لیے درست کریں۔
@@ -0,0 +1,14 @@
خصوصیات
- .conf فائل، زپ، دستی اندراج، یا QR کوڈ کے ذریعے سرنگیں شامل کریں
- Wi-Fi SSID، ایتھرنیٹ، یا موبائل ڈیٹا کی بنیاد پر VPN سے خودکار جڑیں۔
- تلاش کے ساتھ ایپلی کیشن کے ذریعہ سرنگ کو تقسیم کریں۔
- کرنل اور یوزر اسپیس موڈز کے لیے وائر گارڈ سپورٹ
- ڈی پی آئی/سینسرشپ کے تحفظ کے لیے یوزر اسپیس موڈ کے لیے ایمنیزیا سپورٹ
- ہمیشہ آن VPN سپورٹ
- ایمنیزیا اور وائر گارڈ سرنگوں کو زپ میں ایکسپورٹ کریں۔
- VPN ٹوگلنگ کے لیے فوری ٹائل سپورٹ
- آٹومیشن انضمام کے لیے بنیادی سرنگ کے لیے جامد شارٹ کٹ سپورٹ
- تمام سرنگوں کے لئے ارادہ آٹومیشن سپورٹ
- ریبوٹ کے بعد خودکار سروس دوبارہ شروع
- بیٹری کے تحفظ کے اقدامات
+3 -3
View File
@@ -1,7 +1,7 @@
[versions]
accompanist = "0.37.2"
activityCompose = "1.10.1"
amneziawgAndroid = "1.3.4"
amneziawgAndroid = "1.3.8"
androidx-junit = "1.2.1"
appcompat = "1.7.0"
biometricKtx = "1.2.0-alpha05"
@@ -19,8 +19,8 @@ navigationCompose = "2.8.9"
pinLockCompose = "1.0.4"
roomVersion = "2.7.0"
timber = "5.0.1"
tunnel = "1.2.11"
androidGradlePlugin = "8.8.0-alpha05"
tunnel = "1.2.14"
androidGradlePlugin = "8.9.1"
kotlin = "2.1.20"
ksp = "2.1.20-2.0.0"
composeBom = "2025.04.00"
+2 -2
View File
@@ -1,8 +1,8 @@
#Wed Oct 11 22:39:21 EDT 2023
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
distributionSha256Sum=f397b287023acdba1e9f6fc5ea72d22dd63669d59ed4a289a29b1a76eee151c6
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
@@ -12,12 +12,15 @@ import android.net.NetworkRequest
import android.net.wifi.WifiManager
import android.os.Build
import com.wireguard.android.util.RootShell
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import timber.log.Timber
class AndroidNetworkMonitor(
@@ -39,6 +42,8 @@ class AndroidNetworkMonitor(
appContext.getSystemService(Context.LOCATION_SERVICE) as LocationManager
private val rootShell = RootShell(context)
private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO
@get:Synchronized @set:Synchronized var currentSsid: String? = null
@get:Synchronized @set:Synchronized var wifiConnected = false
@@ -49,21 +54,23 @@ class AndroidNetworkMonitor(
private val wifiFlow: Flow<WifiState> = callbackFlow {
@Suppress("DEPRECATION")
fun getWifiSsid(): String? {
return if (runBlocking { useRootShellCallback() }) {
rootShell.getCurrentWifiName()
} else {
if (wifiManager == null) return null
try {
wifiManager.connectionInfo?.ssid?.trim('"')?.takeIf { it.isNotEmpty() }
} catch (e: Exception) {
Timber.e(e)
null
suspend fun getWifiSsid(): String? {
return withContext(ioDispatcher) {
if (useRootShellCallback()) {
rootShell.getCurrentWifiName()
} else {
if (wifiManager == null) return@withContext null
try {
wifiManager.connectionInfo?.ssid?.trim('"')?.takeIf { it.isNotEmpty() }
} catch (e: Exception) {
Timber.e(e)
null
}
}
}
}
fun handleUnknownWifi() {
suspend fun handleUnknownWifi() {
val newSsid = getWifiSsid()
// Only update if new SSID is valid; preserve existing valid SSID otherwise
if (newSsid != null && newSsid != WifiManager.UNKNOWN_SSID) {
@@ -86,7 +93,7 @@ class AndroidNetworkMonitor(
Timber.d(
"Received update: Precise and all-the-time location permissions are enabled"
)
handleUnknownWifi()
launch { handleUnknownWifi() }
}
}
}
@@ -103,7 +110,7 @@ class AndroidNetworkMonitor(
Timber.d(
"Location Services state changed. Enabled: $isLocationServicesEnabled, GPS: $isGpsEnabled, Network: $isNetworkEnabled"
)
if (isLocationServicesEnabled) handleUnknownWifi()
if (isLocationServicesEnabled) launch { handleUnknownWifi() }
}
}
}
@@ -132,9 +139,11 @@ class AndroidNetworkMonitor(
object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
Timber.d("Wi-Fi onAvailable: network=$network")
currentSsid = getWifiSsid()
wifiConnected = true
trySend(WifiState(connected = true, ssid = currentSsid))
launch {
currentSsid = getWifiSsid()
wifiConnected = true
trySend(WifiState(connected = true, ssid = currentSsid))
}
}
override fun onLost(network: Network) {
+1 -1
View File
@@ -1 +1 @@
2
0