____ _ _______ __
/ __ \ | /| / / __/ |/ /
/ /_/ / |/ |/ / _// /
\____/|__/|__/___/_||_/
owenclave / app/src/main/java/com/github/shadowsocks/plugin/obfs_local/ConfigFragment.kt
/*******************************************************************************
* *
* Copyright (C) 2019 by Max Lv *
* Copyright (C) 2019 by Mygod Studio *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see . *
* *
*******************************************************************************/
package com.github.shadowsocks.plugin.obfs_local
import android.os.Bundle
import android.text.InputType
import android.view.View
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.updatePadding
import androidx.preference.EditTextPreference
import androidx.preference.ListPreference
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat
import com.github.shadowsocks.plugin.PluginOptions
import io.nekohasekai.sagernet.R
class ConfigFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
private val obfs by lazy { findPreference("obfs")!! }
private val obfsHost by lazy { findPreference("obfs-host")!! }
val options get() = PluginOptions().apply {
put("obfs", obfs.value)
putWithDefault("obfs-host", obfsHost.text, "cloudfront.net")
}
fun onInitializePluginOptions(options: PluginOptions) {
obfs.value = when {
options["mode"] == "http" -> "http"
options["obfs"] == "tls" -> "tls"
else -> "http"
}
obfsHost.text = options["host"] ?: "cloudfront.net"
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
addPreferencesFromResource(R.xml.obfs_local_config)
obfs.onPreferenceChangeListener = this
obfsHost.setOnBindEditTextListener {
it.inputType = InputType.TYPE_TEXT_VARIATION_URI
it.setSelection(it.text.length)
}
obfsHost.onPreferenceChangeListener = this
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
ViewCompat.setOnApplyWindowInsetsListener(listView) { v, insets ->
val bars = insets.getInsets(
WindowInsetsCompat.Type.systemBars()
or WindowInsetsCompat.Type.displayCutout()
)
v.updatePadding(
left = bars.left,
right = bars.right,
bottom = bars.bottom,
)
insets
}
}
override fun onPreferenceChange(preference: Preference, newValue: Any?): Boolean {
val oldValue = when (preference) {
is EditTextPreference -> preference.text
is ListPreference -> preference.value
else -> null
}
if (oldValue != newValue) {
(requireActivity() as? ConfigActivity)?.let {
it.dirty = true
it.onBackPressedCallback.isEnabled = true
}
}
return true
}
}