android working button version
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user