proxy mode ui
This commit is contained in:
7 files changed
+80
-9
No files matched your search
@@ -5,7 +5,10 @@ import android.content.Intent
|
||||
import android.net.VpnService
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.github.kr328.clash.core.event.*
|
||||
import com.github.kr328.clash.core.event.BandwidthEvent
|
||||
import com.github.kr328.clash.core.event.Event
|
||||
import com.github.kr328.clash.core.event.ProcessEvent
|
||||
import com.github.kr328.clash.core.event.ProfileChangedEvent
|
||||
import com.github.kr328.clash.core.utils.ByteFormatter
|
||||
import com.github.kr328.clash.service.TunService
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
|
||||
@@ -5,6 +5,12 @@ import com.github.kr328.clash.core.utils.Log
|
||||
import com.google.firebase.FirebaseApp
|
||||
|
||||
class MainApplication : Application() {
|
||||
companion object {
|
||||
const val KEY_PROXY_MODE = "key_proxy_mode"
|
||||
const val PROXY_MODE_VPN = "vpn"
|
||||
const val PROXY_MODE_PROXY_ONLY = "proxy_only"
|
||||
}
|
||||
|
||||
override fun onCreate() {
|
||||
super.onCreate()
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package com.github.kr328.clash
|
||||
import android.os.Bundle
|
||||
import com.github.kr328.clash.adapter.ProxyAdapter
|
||||
import com.github.kr328.clash.core.model.ProxyPacket
|
||||
import com.github.kr328.clash.core.utils.Log
|
||||
import com.github.kr328.clash.model.ListProxy
|
||||
import kotlinx.android.synthetic.main.activity_proxies.*
|
||||
|
||||
|
||||
@@ -1,15 +1,50 @@
|
||||
package com.github.kr328.clash
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import androidx.core.content.edit
|
||||
import androidx.preference.CheckBoxPreference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import kotlinx.android.synthetic.main.activity_setting_proxy.*
|
||||
|
||||
class SettingProxyActivity : BaseActivity() {
|
||||
companion object {
|
||||
private const val KEY_BYPASS_PRIVATE_NETWORK = "key_vpn_setting_bypass_private_network"
|
||||
private const val KEY_IPV6_SUPPORT = "key_vpn_setting_ipv6_support"
|
||||
}
|
||||
|
||||
class Fragment : PreferenceFragmentCompat() {
|
||||
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
||||
setPreferencesFromResource(R.xml.setting_proxy, rootKey)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
(requireActivity() as SettingProxyActivity).runClash {
|
||||
val settings = it.settingService
|
||||
|
||||
val ipv6 = settings.isIPv6Enabled
|
||||
val privateNetwork = settings.isBypassPrivateNetwork
|
||||
|
||||
requireActivity().runOnUiThread {
|
||||
findPreference<CheckBoxPreference>(KEY_IPV6_SUPPORT)?.isChecked = ipv6
|
||||
findPreference<CheckBoxPreference>(KEY_BYPASS_PRIVATE_NETWORK)?.isChecked = privateNetwork
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
|
||||
(requireActivity() as SettingProxyActivity).runClash {
|
||||
val settings = it.settingService
|
||||
|
||||
settings.isIPv6Enabled = findPreference<CheckBoxPreference>(KEY_IPV6_SUPPORT)?.isChecked ?: true
|
||||
settings.isBypassPrivateNetwork = findPreference<CheckBoxPreference>(KEY_BYPASS_PRIVATE_NETWORK)?.isChecked ?: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
@@ -33,5 +68,27 @@ class SettingProxyActivity : BaseActivity() {
|
||||
activity_setting_proxy_divider.visibility = View.GONE
|
||||
activity_setting_proxy_content.visibility = View.GONE
|
||||
}
|
||||
|
||||
getSharedPreferences("application", Context.MODE_PRIVATE).apply {
|
||||
when ( getString(MainApplication.KEY_PROXY_MODE, MainApplication.PROXY_MODE_VPN) ) {
|
||||
MainApplication.PROXY_MODE_VPN ->
|
||||
activity_setting_proxy_vpn_mode.performClick()
|
||||
MainApplication.PROXY_MODE_PROXY_ONLY ->
|
||||
activity_setting_proxy_proxy_only_mode.performClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
|
||||
getSharedPreferences("application", Context.MODE_PRIVATE).edit {
|
||||
when {
|
||||
activity_setting_proxy_vpn_mode.isChecked ->
|
||||
putString(MainApplication.KEY_PROXY_MODE, MainApplication.PROXY_MODE_VPN)
|
||||
activity_setting_proxy_proxy_only_mode.isChecked ->
|
||||
putString(MainApplication.KEY_PROXY_MODE, MainApplication.PROXY_MODE_PROXY_ONLY)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,7 +2,6 @@ package com.github.kr328.clash.adapter
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@@ -13,7 +12,6 @@ import com.github.kr328.clash.R
|
||||
import com.github.kr328.clash.core.model.ProxyPacket
|
||||
import com.github.kr328.clash.model.ListProxy
|
||||
import com.google.android.material.card.MaterialCardView
|
||||
import java.lang.IllegalArgumentException
|
||||
|
||||
class ProxyAdapter(private val context: Context, val listener: (String, String) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||
var elements: List<ListProxy> = emptyList()
|
||||
@@ -90,13 +88,15 @@ class ProxyAdapter(private val context: Context, val listener: (String, String)
|
||||
holder.card.isFocusable = true
|
||||
holder.card.isClickable = true
|
||||
holder.card.setOnClickListener {
|
||||
val old = current.header.now
|
||||
current.header.now = position
|
||||
val element = (elements[position] as ListProxy.ListProxyItem)
|
||||
|
||||
val old = element.header.now
|
||||
element.header.now = position
|
||||
|
||||
notifyItemChanged(old)
|
||||
notifyItemChanged(position)
|
||||
|
||||
listener(current.header.name, current.name)
|
||||
listener(element.header.name, element.name)
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -55,6 +55,8 @@
|
||||
<string name="proxy_setting_vpn_setting">VPN Settings</string>
|
||||
<string name="proxy_setting_vpn_setting_access_control">Access Control</string>
|
||||
<string name="proxy_setting_vpn_setting_access_control_summary">Configure access permission for apps</string>
|
||||
<string name="proxy_setting_vpn_setting_bypass_private_network">Bypass Private Network</string>
|
||||
<string name="proxy_setting_vpn_setting_bypass_private_network_summary">Bypass private network subnet</string>
|
||||
<string name="proxy_setting_vpn_setting_ipv6">IPv6 Support</string>
|
||||
<string name="proxy_setting_vpn_setting_ipv6_summary">Routing IPv6 traffic</string>
|
||||
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:title="@string/proxy_setting_vpn_setting">
|
||||
<CheckBoxPreference
|
||||
android:key="key_vpn_setting_bypass_private_network"
|
||||
android:title="@string/proxy_setting_vpn_setting_bypass_private_network"
|
||||
android:summary="@string/proxy_setting_vpn_setting_bypass_private_network_summary"/>
|
||||
<CheckBoxPreference
|
||||
android:key="key_vpn_setting_ipv6_support"
|
||||
android:title="@string/proxy_setting_vpn_setting_ipv6"
|
||||
android:summary="@string/proxy_setting_vpn_setting_ipv6_summary" />
|
||||
<Preference
|
||||
|
||||
Reference in new issue
Block a user