Fix the problem that vpn cannot be started in some cases

Fix the problem that geodata url does not take effect
This commit is contained in:
chen08209
2024-07-13 16:36:08 +08:00
parent 2dd45062f1
commit 1765576d09
7 changed files with 50 additions and 51 deletions

View File

@@ -1,6 +1,5 @@
package com.follow.clash
import android.app.Activity
import android.content.Context
import androidx.lifecycle.MutableLiveData
import com.follow.clash.plugins.AppPlugin
@@ -9,7 +8,8 @@ import com.follow.clash.plugins.TilePlugin
import io.flutter.FlutterInjector
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.embedding.engine.dart.DartExecutor
import java.util.Date
import java.util.concurrent.locks.ReentrantLock
import kotlin.concurrent.withLock
enum class RunState {
START,
@@ -17,7 +17,11 @@ enum class RunState {
STOP
}
object GlobalState {
private val lock = ReentrantLock()
val runState: MutableLiveData<RunState> = MutableLiveData<RunState>(RunState.STOP)
var flutterEngine: FlutterEngine? = null
private var serviceEngine: FlutterEngine? = null
@@ -39,19 +43,20 @@ object GlobalState {
fun initServiceEngine(context: Context) {
if (serviceEngine != null) return
val serviceEngine = FlutterEngine(context)
serviceEngine.plugins.add(ProxyPlugin())
serviceEngine.plugins.add(AppPlugin())
serviceEngine.plugins.add(TilePlugin())
val vpnService = DartExecutor.DartEntrypoint(
FlutterInjector.instance().flutterLoader().findAppBundlePath(),
"vpnService"
)
serviceEngine.dartExecutor.executeDartEntrypoint(
vpnService,
listOf("${flutterEngine == null}")
)
GlobalState.serviceEngine = serviceEngine
lock.withLock {
if (serviceEngine != null) return
serviceEngine = FlutterEngine(context)
serviceEngine?.plugins?.add(ProxyPlugin())
serviceEngine?.plugins?.add(AppPlugin())
serviceEngine?.plugins?.add(TilePlugin())
val vpnService = DartExecutor.DartEntrypoint(
FlutterInjector.instance().flutterLoader().findAppBundlePath(),
"vpnService"
)
serviceEngine?.dartExecutor?.executeDartEntrypoint(
vpnService,
)
}
}
}

View File

@@ -46,6 +46,8 @@ class ProxyPlugin : FlutterPlugin, MethodChannel.MethodCallHandler, ActivityAwar
flClashVpnService = binder.getService()
if (isStart) {
startVpn()
} else {
flClashVpnService?.initServiceEngine()
}
}

View File

@@ -114,7 +114,6 @@ class FlClashVpnService : VpnService() {
PendingIntent.FLAG_UPDATE_CURRENT
)
}
with(NotificationCompat.Builder(this, CHANNEL)) {
setSmallIcon(R.drawable.ic_stat_name)
setContentTitle("FlClash")
@@ -127,7 +126,7 @@ class FlClashVpnService : VpnService() {
setOngoing(true)
setShowWhen(false)
setOnlyAlertOnce(true)
setAutoCancel(true);
setAutoCancel(true)
}
}