Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b571e2a94 | ||
|
|
ba30697309 | ||
|
|
17c858d24c | ||
|
|
71a6531835 | ||
|
|
5d760382d7 | ||
|
|
4dda36673a | ||
|
|
5aca55cb8f | ||
|
|
82f14f0d07 |
@@ -55,8 +55,7 @@ class V2RayVpnService : VpnService() {
|
||||
}
|
||||
}
|
||||
|
||||
private val v2rayPoint = Libv2ray.newV2RayPoint()
|
||||
private val v2rayCallback = V2RayCallback()
|
||||
private val v2rayPoint = Libv2ray.newV2RayPoint(V2RayCallback())
|
||||
private lateinit var configContent: String
|
||||
private lateinit var mInterface: ParcelFileDescriptor
|
||||
val fd: Int get() = mInterface.fd
|
||||
@@ -110,9 +109,13 @@ class V2RayVpnService : VpnService() {
|
||||
stopV2Ray()
|
||||
}
|
||||
|
||||
override fun onLowMemory() {
|
||||
stopV2Ray()
|
||||
super.onLowMemory()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
super.onDestroy()
|
||||
|
||||
cancelNotification()
|
||||
}
|
||||
|
||||
@@ -180,22 +183,11 @@ class V2RayVpnService : VpnService() {
|
||||
// Create a new interface using the builder and save the parameters.
|
||||
mInterface = builder.establish()
|
||||
sendFd()
|
||||
|
||||
if (defaultDPreference.getPrefBoolean(SettingsActivity.PREF_SPEED_ENABLED, false)) {
|
||||
mSubscription = Observable.interval(3, java.util.concurrent.TimeUnit.SECONDS)
|
||||
.subscribe {
|
||||
val uplink = v2rayPoint.queryStats("socks", "uplink")
|
||||
val downlink = v2rayPoint.queryStats("socks", "downlink")
|
||||
updateNotification("${(uplink / 3).toSpeedString()} ↑ ${(downlink / 3).toSpeedString()} ↓")
|
||||
}
|
||||
}
|
||||
startSpeedNotification()
|
||||
}
|
||||
|
||||
fun shutdown() {
|
||||
try {
|
||||
mInterface.close()
|
||||
} catch (ignored: Exception) {
|
||||
}
|
||||
stopV2Ray(true)
|
||||
}
|
||||
|
||||
fun sendFd() {
|
||||
@@ -231,12 +223,15 @@ class V2RayVpnService : VpnService() {
|
||||
if (!v2rayPoint.isRunning) {
|
||||
|
||||
try {
|
||||
registerReceiver(mMsgReceive, IntentFilter(AppConfig.BROADCAST_ACTION_SERVICE))
|
||||
val mFilter = IntentFilter(AppConfig.BROADCAST_ACTION_SERVICE)
|
||||
mFilter.addAction(Intent.ACTION_SCREEN_ON)
|
||||
mFilter.addAction(Intent.ACTION_SCREEN_OFF)
|
||||
mFilter.addAction(Intent.ACTION_USER_PRESENT)
|
||||
registerReceiver(mMsgReceive, mFilter)
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
|
||||
configContent = defaultDPreference.getPrefString(AppConfig.PREF_CURR_CONFIG, "")
|
||||
v2rayPoint.supportSet = v2rayCallback
|
||||
v2rayPoint.configureFileContent = configContent
|
||||
v2rayPoint.enableLocalDNS = defaultDPreference.getPrefBoolean(SettingsActivity.PREF_LOCAL_DNS_ENABLED, false)
|
||||
v2rayPoint.forwardIpv6 = defaultDPreference.getPrefBoolean(SettingsActivity.PREF_FORWARD_IPV6, false)
|
||||
@@ -321,7 +316,6 @@ class V2RayVpnService : VpnService() {
|
||||
mBuilder = NotificationCompat.Builder(applicationContext, channelId)
|
||||
.setSmallIcon(R.drawable.ic_v)
|
||||
.setContentTitle(defaultDPreference.getPrefString(AppConfig.PREF_CURR_CONFIG_NAME, ""))
|
||||
.setContentText(getString(R.string.notification_action_more))
|
||||
.setPriority(NotificationCompat.PRIORITY_MIN)
|
||||
.setOngoing(true)
|
||||
.setShowWhen(false)
|
||||
@@ -359,7 +353,7 @@ class V2RayVpnService : VpnService() {
|
||||
|
||||
private fun updateNotification(contentText: String) {
|
||||
if (mBuilder != null) {
|
||||
mBuilder?.setContentText(contentText)
|
||||
mBuilder?.setContentTitle(contentText)
|
||||
getNotificationManager().notify(NOTIFICATION_ID, mBuilder?.build())
|
||||
}
|
||||
}
|
||||
@@ -371,8 +365,41 @@ class V2RayVpnService : VpnService() {
|
||||
return mNotificationManager!!
|
||||
}
|
||||
|
||||
fun startSpeedNotification() {
|
||||
if (mSubscription == null &&
|
||||
v2rayPoint.isRunning &&
|
||||
defaultDPreference.getPrefBoolean(SettingsActivity.PREF_SPEED_ENABLED, false)) {
|
||||
val cf_name = defaultDPreference.getPrefString(AppConfig.PREF_CURR_CONFIG_NAME, "")
|
||||
var last_zero_speed = false
|
||||
|
||||
mSubscription = Observable.interval(3, java.util.concurrent.TimeUnit.SECONDS)
|
||||
.subscribe {
|
||||
val uplink = v2rayPoint.queryStats("socks", "uplink")
|
||||
val downlink = v2rayPoint.queryStats("socks", "downlink")
|
||||
val zero_speed = (uplink == 0L && downlink == 0L)
|
||||
if (!zero_speed || !last_zero_speed) {
|
||||
updateNotification("${cf_name} • ${(uplink / 3).toSpeedString()}↑ ${(downlink / 3).toSpeedString()}↓")
|
||||
}
|
||||
last_zero_speed = zero_speed
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun stopSpeedNotification() {
|
||||
if (mSubscription != null) {
|
||||
mSubscription?.unsubscribe() //stop queryStats
|
||||
mSubscription = null
|
||||
|
||||
val cf_name = defaultDPreference.getPrefString(AppConfig.PREF_CURR_CONFIG_NAME, "")
|
||||
updateNotification(cf_name)
|
||||
}
|
||||
}
|
||||
|
||||
private inner class V2RayCallback : V2RayVPNServiceSupportsSet {
|
||||
override fun shutdown(): Long {
|
||||
// called by go
|
||||
// shutdown the whole vpn service
|
||||
try {
|
||||
this@V2RayVpnService.shutdown()
|
||||
return 0
|
||||
@@ -447,6 +474,17 @@ class V2RayVpnService : VpnService() {
|
||||
vpnService?.startV2ray()
|
||||
}
|
||||
}
|
||||
|
||||
when (intent?.action) {
|
||||
Intent.ACTION_SCREEN_OFF -> {
|
||||
Log.d(AppConfig.ANG_PACKAGE, "SCREEN_OFF, stop querying stats")
|
||||
vpnService?.stopSpeedNotification()
|
||||
}
|
||||
Intent.ACTION_SCREEN_ON -> {
|
||||
Log.d(AppConfig.ANG_PACKAGE, "SCREEN_ON, start querying stats")
|
||||
vpnService?.startSpeedNotification()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user