mirror of
https://github.com/wgtunnel/android.git
synced 2026-06-02 08:33:40 +02:00
Compare commits
39 Commits
3.8.2
...
weblate-changes
| Author | SHA1 | Date | |
|---|---|---|---|
| 2e6b7e65ea | |||
| 7568c87927 | |||
| d46a0653f1 | |||
| 49ee2431c2 | |||
| dfcc022257 | |||
| bc08069a64 | |||
| fb97adca4f | |||
| 41540db9b7 | |||
| a1c663233d | |||
| c520fa5ed2 | |||
| 120bde2939 | |||
| 58fcc358ce | |||
| 72722a0be5 | |||
| 29aba65690 | |||
| dfda9e8643 | |||
| 14e3290bbf | |||
| f54958e259 | |||
| a82e5d6b50 | |||
| dfeb70f85f | |||
| 08088ba1fa | |||
| 2f30a8623c | |||
| 77e7ea05da | |||
| b47f389e98 | |||
| 780e88ad18 | |||
| 05f48cd21d | |||
| 5d9a534e1c | |||
| f5dafa6bf7 | |||
| 534e4c4854 | |||
| 42eebd65b7 | |||
| 95c06344c6 | |||
| 39e2cfc79c | |||
| 4cfc00c9bb | |||
| 780dd3b984 | |||
| 2a63f6e0a9 | |||
| faacb97d89 | |||
| 6bb20184f9 | |||
| 44f0794bfb | |||
| 2251912df4 | |||
| 128796ae37 |
@@ -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
|
||||
|
||||
@@ -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)"
|
||||
@@ -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)"
|
||||
@@ -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
|
||||
|
||||
@@ -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 they’re 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
|
||||
|
||||
Vendored
-61
@@ -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 they’re 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
|
||||
@@ -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"
|
||||
|
||||
+4
-3
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 ٹوگلنگ کے لیے فوری ٹائل سپورٹ
|
||||
- آٹومیشن انضمام کے لیے بنیادی سرنگ کے لیے جامد شارٹ کٹ سپورٹ
|
||||
- تمام سرنگوں کے لئے ارادہ آٹومیشن سپورٹ
|
||||
- ریبوٹ کے بعد خودکار سروس دوبارہ شروع
|
||||
- بیٹری کے تحفظ کے اقدامات
|
||||
@@ -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
@@ -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
|
||||
|
||||
+26
-17
@@ -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
@@ -1 +1 @@
|
||||
2
|
||||
0
|
||||
Reference in New Issue
Block a user