mirror of https://git.sr.ht/~oppen/ariane
60 lines
2.2 KiB
Kotlin
60 lines
2.2 KiB
Kotlin
package oppen.ariane.ui.settings
|
|
|
|
import android.os.Bundle
|
|
import androidx.preference.Preference
|
|
import androidx.preference.PreferenceCategory
|
|
import androidx.preference.PreferenceFragmentCompat
|
|
import androidx.preference.SwitchPreferenceCompat
|
|
import java.security.SecureRandom
|
|
import java.util.*
|
|
import javax.net.ssl.SSLContext
|
|
import javax.net.ssl.SSLSocket
|
|
import javax.net.ssl.SSLSocketFactory
|
|
|
|
class SettingsFragment: PreferenceFragmentCompat(), Preference.OnPreferenceChangeListener {
|
|
|
|
lateinit var protocols: Array<String>
|
|
|
|
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
|
|
val context = preferenceManager.context
|
|
val screen = preferenceManager.createPreferenceScreen(context)
|
|
|
|
val tlsCategory = PreferenceCategory(context)
|
|
tlsCategory.key = "tls_category"
|
|
tlsCategory.title = "TLS Config"
|
|
screen.addPreference(tlsCategory)
|
|
|
|
val sslContext = SSLContext.getInstance("TLS")
|
|
sslContext.init(null, null, SecureRandom())
|
|
val factory: SSLSocketFactory = sslContext.socketFactory
|
|
val socket = factory.createSocket() as SSLSocket
|
|
protocols = socket.supportedProtocols
|
|
protocols.forEach { protocol ->
|
|
val tlsPreference = SwitchPreferenceCompat(context)
|
|
tlsPreference.key = "tls_${protocol.toLowerCase(Locale.getDefault())}"
|
|
tlsPreference.title = protocol
|
|
tlsPreference.onPreferenceChangeListener = this
|
|
tlsCategory.addPreference(tlsPreference)
|
|
}
|
|
|
|
preferenceScreen = screen
|
|
}
|
|
|
|
override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean {
|
|
|
|
preference?.key?.let{ key ->
|
|
if(key.startsWith("tls_")){
|
|
protocols.forEach {protocol ->
|
|
val tlsSwitchKey = "tls_${protocol.toLowerCase(Locale.getDefault())}"
|
|
if(tlsSwitchKey != key){
|
|
val otherTLSSwitch = preferenceScreen.findPreference<SwitchPreferenceCompat>(tlsSwitchKey)
|
|
otherTLSSwitch?.isChecked = false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true
|
|
}
|
|
}
|