feat: add some override options about sniffing

This commit is contained in:
Steve Johnson 2023-11-02 18:57:55 +08:00
parent e47dca02cf
commit a58af39fae
10 changed files with 94 additions and 41 deletions

View File

@ -2,7 +2,6 @@ package com.github.kr328.clash
import android.database.Cursor import android.database.Cursor
import android.net.Uri import android.net.Uri
import android.os.Bundle
import android.provider.OpenableColumns import android.provider.OpenableColumns
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
@ -13,7 +12,6 @@ import com.github.kr328.clash.util.withClash
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.isActive import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlinx.coroutines.selects.select import kotlinx.coroutines.selects.select
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import java.io.File import java.io.File
@ -58,19 +56,19 @@ class MetaFeatureSettingsActivity : BaseActivity<MetaFeatureSettingsDesign>() {
val uri = startActivityForResult( val uri = startActivityForResult(
ActivityResultContracts.GetContent(), ActivityResultContracts.GetContent(),
"*/*") "*/*")
geoFilesImported(uri, MetaFeatureSettingsDesign.Request.ImportGeoIp) importGeoFile(uri, MetaFeatureSettingsDesign.Request.ImportGeoIp)
} }
MetaFeatureSettingsDesign.Request.ImportGeoSite -> { MetaFeatureSettingsDesign.Request.ImportGeoSite -> {
val uri = startActivityForResult( val uri = startActivityForResult(
ActivityResultContracts.GetContent(), ActivityResultContracts.GetContent(),
"*/*") "*/*")
geoFilesImported(uri, MetaFeatureSettingsDesign.Request.ImportGeoSite) importGeoFile(uri, MetaFeatureSettingsDesign.Request.ImportGeoSite)
} }
MetaFeatureSettingsDesign.Request.ImportCountry -> { MetaFeatureSettingsDesign.Request.ImportCountry -> {
val uri = startActivityForResult( val uri = startActivityForResult(
ActivityResultContracts.GetContent(), ActivityResultContracts.GetContent(),
"*/*") "*/*")
geoFilesImported(uri, MetaFeatureSettingsDesign.Request.ImportCountry) importGeoFile(uri, MetaFeatureSettingsDesign.Request.ImportCountry)
} }
} }
} }
@ -82,7 +80,7 @@ class MetaFeatureSettingsActivity : BaseActivity<MetaFeatureSettingsDesign>() {
".metadb", ".db", ".dat", ".mmdb" ".metadb", ".db", ".dat", ".mmdb"
) )
private suspend fun geoFilesImported(uri: Uri?, importType: MetaFeatureSettingsDesign.Request) { private suspend fun importGeoFile(uri: Uri?, importType: MetaFeatureSettingsDesign.Request) {
val cursor: Cursor? = uri?.let { val cursor: Cursor? = uri?.let {
contentResolver.query(it, null, null, null, null, null) contentResolver.query(it, null, null, null, null, null)
} }

View File

@ -159,6 +159,15 @@ data class ConfigurationOverride(
@SerialName("sniffing") @SerialName("sniffing")
var sniffing: List<String>? = null, var sniffing: List<String>? = null,
@SerialName("force-dns-mapping")
var forceDnsMapping: Boolean? = null,
@SerialName("parse-pure-ip")
var parsePureIp: Boolean? = null,
@SerialName("override-destination")
var overrideDestination: Boolean? = null,
@SerialName("force-domain") @SerialName("force-domain")
var forceDomain: List<String>? = null, var forceDomain: List<String>? = null,

View File

@ -117,9 +117,9 @@ class MetaFeatureSettingsDesign(
false false
), ),
valuesText = arrayOf( valuesText = arrayOf(
R.string.sniffer_config, R.string.dont_modify,
R.string.sniffer_override, R.string.enabled,
R.string.disable_sniffer, R.string.disabled
), ),
title = R.string.strategy title = R.string.strategy
) { ) {
@ -144,6 +144,30 @@ class MetaFeatureSettingsDesign(
configure = snifferDependencies::add, configure = snifferDependencies::add,
) )
selectableList(
value = configuration.sniffer::forceDnsMapping,
values = booleanValues,
valuesText = booleanValuesText,
title = R.string.force_dns_mapping,
configure = snifferDependencies::add,
)
selectableList(
value = configuration.sniffer::parsePureIp,
values = booleanValues,
valuesText = booleanValuesText,
title = R.string.parse_pure_ip,
configure = snifferDependencies::add,
)
selectableList(
value = configuration.sniffer::overrideDestination,
values = booleanValues,
valuesText = booleanValuesText,
title = R.string.override_destination,
configure = snifferDependencies::add,
)
editableTextList( editableTextList(
value = configuration.sniffer::forceDomain, value = configuration.sniffer::forceDomain,
adapter = TextAdapter.String, adapter = TextAdapter.String,
@ -170,6 +194,39 @@ class MetaFeatureSettingsDesign(
sniffer.listener?.onChanged() sniffer.listener?.onChanged()
/*
category(R.string.geox_url_setting)
val geoxUrlDependencies: MutableList<Preference> = mutableListOf()
editableText(
value = configuration.geoxurl::geoip,
adapter = NullableTextAdapter.String,
title = R.string.geox_geoip,
placeholder = R.string.dont_modify,
empty = R.string.geoip_url,
configure = geoxUrlDependencies::add,
)
editableText(
value = configuration.geoxurl::mmdb,
adapter = NullableTextAdapter.String,
title = R.string.geox_mmdb,
placeholder = R.string.dont_modify,
empty = R.string.mmdb_url,
configure = geoxUrlDependencies::add,
)
editableText(
value = configuration.geoxurl::geosite,
adapter = NullableTextAdapter.String,
title = R.string.geox_geosite,
placeholder = R.string.dont_modify,
empty = R.string.geosite_url,
configure = geoxUrlDependencies::add,
)
*/
category(R.string.geox_files) category(R.string.geox_files)
clickable ( clickable (
@ -198,38 +255,6 @@ class MetaFeatureSettingsDesign(
requests.trySend(Request.ImportCountry) requests.trySend(Request.ImportCountry)
} }
} }
/*
category(R.string.geox_url_setting)
val geoxurlDependencies: MutableList<Preference> = mutableListOf()
editableText(
value = configuration.geoxurl::geoip,
adapter = NullableTextAdapter.String,
title = R.string.geox_geoip,
placeholder = R.string.dont_modify,
empty = R.string.geoip_url,
configure = geoxurlDependencies::add,
)
editableText(
value = configuration.geoxurl::mmdb,
adapter = NullableTextAdapter.String,
title = R.string.geox_mmdb,
placeholder = R.string.dont_modify,
empty = R.string.mmdb_url,
configure = geoxurlDependencies::add,
)
editableText(
value = configuration.geoxurl::geosite,
adapter = NullableTextAdapter.String,
title = R.string.geox_geosite,
placeholder = R.string.dont_modify,
empty = R.string.geosite_url,
configure = geoxurlDependencies::add,
) */
} }
binding.content.addView(screen.root) binding.content.addView(screen.root)

View File

@ -251,4 +251,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -251,4 +251,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -316,4 +316,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -248,4 +248,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -248,4 +248,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -251,4 +251,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta 服务已启动</string> <string name="external_control_started">Clash.Meta 服务已启动</string>
<string name="external_control_stopped">Clash.Meta 服务已停止</string> <string name="external_control_stopped">Clash.Meta 服务已停止</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>

View File

@ -317,4 +317,7 @@
<string name="external_control_activity">External Control</string> <string name="external_control_activity">External Control</string>
<string name="external_control_started">Clash.Meta service started</string> <string name="external_control_started">Clash.Meta service started</string>
<string name="external_control_stopped">Clash.Meta service stopped</string> <string name="external_control_stopped">Clash.Meta service stopped</string>
<string name="force_dns_mapping">Force DNS Mapping</string>
<string name="parse_pure_ip">Parse Pure IP</string>
<string name="override_destination">Override Destination</string>
</resources> </resources>