Remove VPN related logic in toggle components

This commit is contained in:
yuhan6665
2020-09-04 18:19:51 -04:00
parent 7ea78c1840
commit 9271857b1e
10 changed files with 40 additions and 144 deletions
+1
View File
@@ -110,6 +110,7 @@
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="com.v2ray.ang.action.widget.click" />
<action android:name="com.v2ray.ang.action.activity" />
</intent-filter>
</receiver>
@@ -9,6 +9,7 @@ import android.content.Intent
import android.widget.RemoteViews
import com.v2ray.ang.R
import com.v2ray.ang.AppConfig
import com.v2ray.ang.service.V2RayServiceManager
import com.v2ray.ang.util.Utils
class WidgetProvider : AppWidgetProvider() {
@@ -17,21 +18,19 @@ class WidgetProvider : AppWidgetProvider() {
*/
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
super.onUpdate(context, appWidgetManager, appWidgetIds)
val isRunning = Utils.isServiceRun(context, "com.v2ray.ang.service.V2RayVpnService")
updateWidgetBackground(context, appWidgetManager, appWidgetIds, isRunning)
updateWidgetBackground(context, appWidgetManager, appWidgetIds, V2RayServiceManager.v2rayPoint.isRunning)
}
private fun updateWidgetBackground(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray, isRunning: Boolean) {
val remoteViews = RemoteViews(context.packageName, R.layout.widget_switch)
val intent = Intent(context, WidgetProvider::class.java)
intent.setAction(AppConfig.BROADCAST_ACTION_WIDGET_CLICK)
intent.action = AppConfig.BROADCAST_ACTION_WIDGET_CLICK
val pendingIntent = PendingIntent.getBroadcast(context, R.id.layout_switch, intent, PendingIntent.FLAG_UPDATE_CURRENT)
remoteViews.setOnClickPendingIntent(R.id.layout_switch, pendingIntent)
if (isRunning) {
remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_theme);
remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_theme)
} else {
remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_grey);
remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_grey)
}
for (appWidgetId in appWidgetIds) {
@@ -40,23 +39,28 @@ class WidgetProvider : AppWidgetProvider() {
}
/**
* 接收窗口小部件点击时发送的广播
* 接收窗口小部件发送的广播
*/
override fun onReceive(context: Context, intent: Intent) {
super.onReceive(context, intent)
if (AppConfig.BROADCAST_ACTION_WIDGET_CLICK == intent.action) {
val isRunning = Utils.isServiceRun(context, "com.v2ray.ang.service.V2RayVpnService")
if (isRunning) {
// context.toast(R.string.toast_services_stop)
if (V2RayServiceManager.v2rayPoint.isRunning) {
Utils.stopVService(context)
} else {
// context.toast(R.string.toast_services_start)
Utils.startVService(context)
Utils.startVServiceFromToggle(context)
}
} else if (AppConfig.BROADCAST_ACTION_ACTIVITY == intent.action) {
val manager = AppWidgetManager.getInstance(context)
updateWidgetBackground(context, manager, manager.getAppWidgetIds(ComponentName(context, WidgetProvider::class.java)),
!isRunning);
when (intent.getIntExtra("key", 0)) {
AppConfig.MSG_STATE_RUNNING, AppConfig.MSG_STATE_START_SUCCESS -> {
updateWidgetBackground(context, manager, manager.getAppWidgetIds(ComponentName(context, WidgetProvider::class.java)),
true)
}
AppConfig.MSG_STATE_NOT_RUNNING, AppConfig.MSG_STATE_START_FAILURE, AppConfig.MSG_STATE_STOP_SUCCESS -> {
updateWidgetBackground(context, manager, manager.getAppWidgetIds(ComponentName(context, WidgetProvider::class.java)),
false)
}
}
}
}
}
@@ -6,7 +6,6 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.graphics.drawable.Icon
import android.net.VpnService
import android.os.Build
import android.service.quicksettings.Tile
import android.service.quicksettings.TileService
@@ -15,7 +14,6 @@ import com.v2ray.ang.R
import com.v2ray.ang.extension.defaultDPreference
import com.v2ray.ang.util.MessageUtil
import com.v2ray.ang.util.Utils
import org.jetbrains.anko.toast
import java.lang.ref.SoftReference
@@ -33,7 +31,6 @@ class QSTileService : TileService() {
qsTile?.icon = Icon.createWithResource(applicationContext, R.drawable.ic_v)
}
qsTile?.updateTile()
}
@@ -56,11 +53,7 @@ class QSTileService : TileService() {
super.onClick()
when (qsTile.state) {
Tile.STATE_INACTIVE -> {
val intent = VpnService.prepare(this)
if (intent == null)
if (!Utils.startVService(this)) {
toast(R.string.app_tile_first_use)
}
Utils.startVServiceFromToggle(this)
}
Tile.STATE_ACTIVE -> {
Utils.stopVService(this)
@@ -93,4 +86,4 @@ class QSTileService : TileService() {
}
}
}
}
}
@@ -24,6 +24,7 @@ import com.v2ray.ang.util.MessageUtil
import com.v2ray.ang.util.Utils
import go.Seq
import libv2ray.Libv2ray
import libv2ray.V2RayPoint
import libv2ray.V2RayVPNServiceSupportsSet
import rx.Observable
import rx.Subscription
@@ -36,7 +37,7 @@ object V2RayServiceManager {
private const val NOTIFICATION_PENDING_INTENT_STOP_V2RAY = 1
private const val NOTIFICATION_ICON_THRESHOLD = 3000
private val v2rayPoint = Libv2ray.newV2RayPoint(V2RayCallback())
val v2rayPoint: V2RayPoint = Libv2ray.newV2RayPoint(V2RayCallback())
private val mMsgReceive = ReceiveMessageHandler()
var serviceControl: SoftReference<ServiceControl>? = null
@@ -1,104 +1,22 @@
package com.v2ray.ang.ui
import android.content.*
import android.net.VpnService
import com.v2ray.ang.R
import com.v2ray.ang.util.Utils
import android.os.Bundle
import com.v2ray.ang.AppConfig
import com.v2ray.ang.util.MessageUtil
import java.lang.ref.SoftReference
import android.content.IntentFilter
import kotlinx.android.synthetic.main.activity_main.*
import rx.Observable
import rx.android.schedulers.AndroidSchedulers
import java.util.concurrent.TimeUnit
import com.v2ray.ang.service.V2RayServiceManager
class ScSwitchActivity : BaseActivity() {
companion object {
private const val REQUEST_CODE_VPN_PREPARE = 0
}
var isRunning = false
set(value) {
field = value
if (value) {
Utils.stopVService(this)
} else {
val intent = VpnService.prepare(this)
if (intent == null) {
Utils.startVService(this)
} else {
startActivityForResult(intent, REQUEST_CODE_VPN_PREPARE)
}
}
finishActivity()
}
fun finishActivity() {
try {
Observable.timer(5000, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
finish()
}
} catch (e: Exception) {
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true)
setContentView(R.layout.activity_none)
val isRunning = Utils.isServiceRun(this, "com.v2ray.ang.service.V2RayVpnService")
if (isRunning) {
//Utils.stopVService(this)
mMsgReceive = ReceiveMessageHandler(this@ScSwitchActivity)
registerReceiver(mMsgReceive, IntentFilter(AppConfig.BROADCAST_ACTION_ACTIVITY))
MessageUtil.sendMsg2Service(this, AppConfig.MSG_REGISTER_CLIENT, "")
if (V2RayServiceManager.v2rayPoint.isRunning) {
Utils.stopVService(this)
} else {
Utils.startVService(this)
finishActivity()
Utils.startVServiceFromToggle(this)
}
finish()
}
override fun onStop() {
super.onStop()
if (mMsgReceive != null) {
unregisterReceiver(mMsgReceive)
mMsgReceive = null
}
}
private var mMsgReceive: BroadcastReceiver? = null
private class ReceiveMessageHandler(activity: ScSwitchActivity) : BroadcastReceiver() {
internal var mReference: SoftReference<ScSwitchActivity> = SoftReference(activity)
override fun onReceive(ctx: Context?, intent: Intent?) {
val activity = mReference.get()
when (intent?.getIntExtra("key", 0)) {
AppConfig.MSG_STATE_RUNNING -> {
activity?.isRunning = true
}
AppConfig.MSG_STATE_NOT_RUNNING -> {
activity?.isRunning = false
}
// AppConfig.MSG_STATE_START_SUCCESS -> {
// activity?.toast(R.string.toast_services_success)
// activity?.isRunning = true
// }
// AppConfig.MSG_STATE_START_FAILURE -> {
// activity?.toast(R.string.toast_services_failure)
// activity?.isRunning = false
// }
// AppConfig.MSG_STATE_STOP_SUCCESS -> {
// activity?.isRunning = false
// }
}
}
}
}
}
@@ -88,7 +88,7 @@ class SettingsActivity : BaseActivity() {
}
private fun isRunning(): Boolean {
return Utils.isServiceRun(activity, "com.v2ray.ang.service.V2RayVpnService")
return false //TODO no point of adding logic now since Settings will be changed soon
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -247,4 +247,4 @@ class SettingsActivity : BaseActivity() {
}
}
}
}
@@ -11,7 +11,6 @@ import com.google.zxing.qrcode.QRCodeWriter
import com.google.zxing.EncodeHintType
import java.util.*
import kotlin.collections.HashMap
import android.app.ActivityManager
import android.content.ClipData
import android.content.Intent
import android.net.Uri
@@ -273,32 +272,12 @@ object Utils {
return false
}
/**
* 判断服务是否后台运行
* @param context
* * Context
* *
* @param className
* * 判断的服务名字
* *
* @return true 在运行 false 不在运行
*/
fun isServiceRun(context: Context, className: String): Boolean {
var isRun = false
val activityManager = context
.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
val serviceList = activityManager
.getRunningServices(999)
val size = serviceList.size
for (i in 0..size - 1) {
if (serviceList[i].service.className == className) {
isRun = true
break
}
fun startVServiceFromToggle(context: Context): Boolean {
val result = startVService(context)
if (!result) {
context.toast(R.string.app_tile_first_use)
}
return isRun
return result
}
/**
@@ -3,7 +3,7 @@
<string name="app_name">v2rayNG</string>
<string name="app_widget_name">开关</string>
<string name="app_tile_name">开关</string>
<string name="app_tile_first_use">初次使用此功能请先用APP激活VPN</string>
<string name="app_tile_first_use">初次使用此功能请先用APP添加配置</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
@@ -3,7 +3,7 @@
<string name="app_name">v2rayNG</string>
<string name="app_widget_name">切換</string>
<string name="app_tile_name">切換</string>
<string name="app_tile_first_use">首次使用此功能,請使用此應用程式來啟用 VPN</string>
<string name="app_tile_first_use">首次使用此功能,請使用此應用程式新增組態</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>
+1 -1
View File
@@ -3,7 +3,7 @@
<string name="app_name">v2rayNG</string>
<string name="app_widget_name">Switch</string>
<string name="app_tile_name">Switch</string>
<string name="app_tile_first_use">First use of this feature, please use the app to activate VPN</string>
<string name="app_tile_first_use">First use of this feature, please use the app to add server</string>
<string name="navigation_drawer_open">Open navigation drawer</string>
<string name="navigation_drawer_close">Close navigation drawer</string>