proxy mode ui

This commit is contained in:
Kr328 committed 2019-12-02 22:53:16 +08:00
1 parent 961f9c7633
commit 996d82dfbf
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 {
+2
View File
@@ -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>
+6 -2
View File
@@ -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