android working button version

This commit is contained in:
2026-03-18 20:50:00 +07:00
parent 8ffc14dfb0
commit 3321036ae5
2 changed files with 40 additions and 30 deletions
@@ -1,39 +1,35 @@
package app.netrunner.vpn
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.VpnService
import android.os.Build
import android.os.ParcelFileDescriptor
import android.os.Parcelable
import android.os.Build
import android.util.Log
import kotlinx.parcelize.Parcelize
import app.tauri.plugin.Plugin
import app.tauri.plugin.JSObject
import app.tauri.plugin.Invoke
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.Command
import app.tauri.annotation.TauriPlugin
import app.tauri.annotation.ActivityCallback
import android.webkit.WebView
import androidx.activity.result.ActivityResult
import uniffi.netrunner_client.SessionManager
import uniffi.netrunner_client.Session
import app.tauri.annotation.ActivityCallback
import app.tauri.annotation.Command
import app.tauri.annotation.InvokeArg
import app.tauri.annotation.TauriPlugin
import app.tauri.plugin.Invoke
import app.tauri.plugin.JSObject
import app.tauri.plugin.Plugin
import com.fasterxml.jackson.annotation.JsonCreator
import com.fasterxml.jackson.annotation.JsonProperty
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import android.webkit.WebView
import kotlinx.parcelize.Parcelize
import uniffi.netrunner_client.Session
import uniffi.netrunner_client.SessionManager
import java.io.File
import java.net.URL
import java.net.HttpURLConnection
private const val TAG = "VPN_DEBUG"
@@ -526,15 +522,32 @@ class VpnPlugin(private val activity: Activity) : Plugin(activity) {
@Command
fun checkActualVpnStatus(invoke: Invoke) {
val hasPermission = VpnService.prepare(activity) == null
val isRunning = isVpnProcessRunning();
val status = if (hasPermission && isRunning) "connected" else "idle"
// Используем activity.getSystemService
val cm = activity.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
var isVpnActive = false
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
val activeNetwork = cm.activeNetwork
val capabilities = cm.getNetworkCapabilities(activeNetwork)
// Проверяем наличие TRANSPORT_VPN
isVpnActive = capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_VPN) ?: false
}
val hasTunInterface = try {
java.net.NetworkInterface.getNetworkInterfaces()?.asSequence()?.any {
it.isUp && it.name.contains("tun")
} ?: false
} catch (e: Exception) { false }
val processAlive = isVpnProcessRunning()
// Если хоть один из признаков говорит, что VPN мертв — ставим idle
val status = if (isVpnActive && hasTunInterface && processAlive) "connected" else "idle"
Log.d(TAG, "HARD CHECK: TransportVPN=$isVpnActive, Tun=$hasTunInterface, Proc=$processAlive -> Result=$status")
val res = JSObject()
res.put("status", status)
Log.d(TAG, "Checking status: permission=$hasPermission, running=$isRunning -> result=$status")
invoke.resolve(res)
}
}