Update v1.2.0
This commit is contained in:
@@ -2,7 +2,13 @@ package com.wdtt.client
|
||||
|
||||
import android.app.Application
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import com.wireguard.android.backend.GoBackend
|
||||
import com.wireguard.android.backend.Tunnel
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.SupervisorJob
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class WdttApplication : Application() {
|
||||
@Volatile
|
||||
@@ -14,6 +20,43 @@ class WdttApplication : Application() {
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
DeployManager.init(this)
|
||||
|
||||
// Очищаем фантомный VPN при холодном старте приложения (например, после перезагрузки телефона).
|
||||
// Если телефон перезагрузился, система Android пытается сама восстановить VpnService,
|
||||
// что приводит к фантомному ключу без интернета. Этот код мгновенно сбрасывает статус в DOWN.
|
||||
CoroutineScope(SupervisorJob() + Dispatchers.IO).launch {
|
||||
runCatching {
|
||||
val backend = getBackend(this@WdttApplication)
|
||||
val tunnel = WireGuardHelper.WgTunnel()
|
||||
backend.setState(tunnel, Tunnel.State.DOWN, null)
|
||||
Log.d("WdttApp", "Успешно очищен фантомный VPN при холодном старте")
|
||||
}.onFailure {
|
||||
Log.w("WdttApp", "Не удалось очистить фантомный VPN: ${it.message}")
|
||||
}
|
||||
}
|
||||
|
||||
// Реактивно обновляем все виджеты на домашнем экране при изменении состояния туннеля
|
||||
CoroutineScope(SupervisorJob() + Dispatchers.Main).launch {
|
||||
try {
|
||||
TunnelManager.running.collect {
|
||||
VpnWidgetProvider.updateAllWidgets(this@WdttApplication)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("WdttApp", "Не удалось обновить виджеты: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
// Реактивно отслеживаем флаг логирования
|
||||
val settingsStore = SettingsStore(this)
|
||||
CoroutineScope(SupervisorJob() + Dispatchers.Main).launch {
|
||||
try {
|
||||
settingsStore.loggingEnabled.collect { enabled ->
|
||||
TunnelManager.isLoggingEnabled = enabled
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("WdttApp", "Не удалось отслеживать флаг логирования: ${e.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun getBackend(context: Context): GoBackend {
|
||||
|
||||
Reference in New Issue
Block a user