Compare commits

..

21 Commits

Author SHA1 Message Date
dependabot[bot] a0c72d3972 chore(deps): bump hiltAndroid from 2.56.1 to 2.56.2
Bumps `hiltAndroid` from 2.56.1 to 2.56.2.

Updates `com.google.dagger:hilt-android` from 2.56.1 to 2.56.2
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.56.1...dagger-2.56.2)

Updates `com.google.dagger:hilt-android-compiler` from 2.56.1 to 2.56.2
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.56.1...dagger-2.56.2)

Updates `com.google.dagger.hilt.android` from 2.56.1 to 2.56.2
- [Release notes](https://github.com/google/dagger/releases)
- [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/dagger/compare/dagger-2.56.1...dagger-2.56.2)

---
updated-dependencies:
- dependency-name: com.google.dagger:hilt-android
  dependency-version: 2.56.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.dagger:hilt-android-compiler
  dependency-version: 2.56.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: com.google.dagger.hilt.android
  dependency-version: 2.56.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-17 13:12:31 +00:00
Zane Schepke d3d70ab2e7 build: change from debug signing 2025-04-17 05:04:29 -04:00
Zane Schepke 9b2d4a3fb5 build: fix release building 2025-04-17 05:02:43 -04:00
Zane Schepke d7741c37c5 chore: bump version, release notes 2025-04-17 04:43:31 -04:00
Zane Schepke 6046e4131f fix: android tv sleep restore
#606
2025-04-17 04:38:15 -04:00
Zane Schepke 4b2d2d20db fix: split tunnel search and select
closes #696
2025-04-17 04:28:20 -04:00
Zane Schepke a09501aaf5 feat(lang): weblate langauge updates (#701)
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: Matthaiks <kitynska@gmail.com>
Co-authored-by: Languages add-on <noreply-addon-languages@weblate.org>
Co-authored-by: solokot <solokot@gmail.com>
Co-authored-by: Kachelkaiser <kachelkaiser@htpst.de>
Co-authored-by: ssantos <ssantos@web.de>
Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org>
Co-authored-by: mak7im01 <mak7im02@gmail.com>
Co-authored-by: nware-lab <nware.labs@gmail.com>
Co-authored-by: 翻譯得真好下次別翻了 <x86_64-pc-linux-gnu@proton.me>
Co-authored-by: Faisal Gull <mail.faisalrehman.345@gmail.com>
2025-04-17 04:08:19 -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
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
41 changed files with 248 additions and 273 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
+3 -2
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"
@@ -170,7 +171,7 @@
android:exported="false"
android:directBootAware="true">
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<action android:name="android.intent.action.SCREEN_ON" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
@@ -8,6 +8,7 @@ import com.zaneschepke.wireguardautotunnel.core.tunnel.TunnelManager
import com.zaneschepke.wireguardautotunnel.di.ApplicationScope
import com.zaneschepke.wireguardautotunnel.di.IoDispatcher
import com.zaneschepke.wireguardautotunnel.domain.repository.AppDataRepository
import com.zaneschepke.wireguardautotunnel.util.extensions.isRunningOnTv
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
@@ -29,6 +30,8 @@ class RestartReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
Timber.d("RestartReceiver triggered with action: ${intent.action}")
// screen on for Android TV only to help with sleep shutdowns
if (intent.action == Intent.ACTION_SCREEN_ON && !context.isRunningOnTv()) return
serviceManager.updateTunnelTile()
serviceManager.updateAutoTunnelTile()
applicationScope.launch(ioDispatcher) {
@@ -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()
}
@@ -35,7 +35,7 @@ class RepositoryModule {
AppDatabase::class.java,
context.getString(R.string.db_name),
)
.fallbackToDestructiveMigration()
.fallbackToDestructiveMigration(true)
.addCallback(DatabaseCallback())
.build()
}
@@ -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
@@ -50,6 +50,7 @@ constructor(
tunnelId?.let { loadInitialState(it) }
}
// TODO improve this loading experience
private fun loadInitialState(tunnelId: Int) =
viewModelScope.launch {
val tunnel = tunnelRepository.getById(tunnelId) ?: return@launch
@@ -108,6 +109,7 @@ constructor(
loading = false,
tunnelConf = tunnel,
tunneledApps = tunneledApps,
queriedApps = tunneledApps,
splitOption = splitOption,
)
}
@@ -116,14 +118,14 @@ constructor(
fun onSearchQuery(query: String) {
val filteredApps =
if (query.isBlank()) {
allTunneledApps
_uiState.value.tunneledApps
} else {
allTunneledApps.filter {
_uiState.value.tunneledApps.filter {
it.first.name.contains(query, ignoreCase = true) ||
it.first.`package`.contains(query, ignoreCase = true)
}
}
_uiState.update { it.copy(searchQuery = query, tunneledApps = filteredApps) }
_uiState.update { it.copy(searchQuery = query, queriedApps = filteredApps) }
}
fun updateSplitOption(newOption: SplitOption) {
@@ -136,7 +138,12 @@ constructor(
currentState.tunneledApps.map { (app, selected) ->
if (app.`package` == packageName) Pair(app, !selected) else Pair(app, selected)
}
_uiState.value = currentState.copy(tunneledApps = updatedApps)
val updatedQueryApps =
currentState.queriedApps.map { (app, selected) ->
if (app.`package` == packageName) Pair(app, !selected) else Pair(app, selected)
}
_uiState.value =
currentState.copy(tunneledApps = updatedApps, queriedApps = updatedQueryApps)
}
fun saveChanges() =
@@ -29,7 +29,7 @@ fun SplitTunnelContent(
)
if (uiState.splitOption != SplitOption.ALL) {
AppListSection(
apps = uiState.tunneledApps,
apps = uiState.queriedApps,
onAppSelectionToggle = onAppSelectionToggle,
onQueryChange = onQueryChange,
uiState.searchQuery,
@@ -6,6 +6,7 @@ data class SplitTunnelUiState(
val loading: Boolean = true,
val tunnelConf: TunnelConf? = null,
val tunneledApps: SplitTunnelApps = emptyList(),
val queriedApps: SplitTunnelApps = emptyList(),
val splitOption: SplitOption = SplitOption.ALL,
val searchQuery: String = "",
val success: Boolean? = null,
@@ -78,6 +78,7 @@ fun WireguardAutoTunnelTheme(theme: Theme = Theme.AUTOMATIC, content: @Composabl
val view = LocalView.current
if (!view.isInEditMode) {
@Suppress("DEPRECATION")
SideEffect {
val window = (view.context as Activity).window
WindowCompat.setDecorFitsSystemWindows(window, false)
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>
+1
View File
@@ -226,4 +226,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>
+2 -2
View File
@@ -1,7 +1,7 @@
object Constants {
const val VERSION_NAME = "3.8.2"
const val VERSION_NAME = "3.8.3"
const val JVM_TARGET = "17"
const val VERSION_CODE = 38200
const val VERSION_CODE = 38300
const val TARGET_SDK = 35
const val MIN_SDK = 26
const val APP_ID = "com.zaneschepke.wireguardautotunnel"
@@ -0,0 +1,6 @@
What's new:
- Fix DNS resolution issues
- Improve Android TV restore on sleep
- Fix split tunnel search bug
- Localization updates
- Update docs links for new app website
@@ -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 ٹوگلنگ کے لیے فوری ٹائل سپورٹ
- آٹومیشن انضمام کے لیے بنیادی سرنگ کے لیے جامد شارٹ کٹ سپورٹ
- تمام سرنگوں کے لئے ارادہ آٹومیشن سپورٹ
- ریبوٹ کے بعد خودکار سروس دوبارہ شروع
- بیٹری کے تحفظ کے اقدامات
+4 -4
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"
@@ -9,7 +9,7 @@ coreKtx = "1.16.0"
datastorePreferences = "1.1.4"
desugar_jdk_libs = "2.1.5"
espressoCore = "3.6.1"
hiltAndroid = "2.56.1"
hiltAndroid = "2.56.2"
hiltCompiler = "1.2.0"
junit = "4.13.2"
kotlinx-serialization-json = "1.8.1"
@@ -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
@@ -57,6 +57,7 @@ class LogcatManager(pid: Int, logDir: String, maxFileSize: Long, maxFolderSize:
isStarted = true
}
@OptIn(ExperimentalCoroutinesApi::class)
override fun stop() {
if (!isStarted) return
logJob?.cancel()
@@ -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