Added tunnel settings

This commit is contained in:
Sylvain Berfini 2020-06-08 13:56:52 +02:00
parent bf024abdb9
commit d79c8f09e6
3 changed files with 180 additions and 2 deletions

View file

@ -19,6 +19,116 @@
*/
package org.linphone.activities.main.settings.viewmodels
import androidx.lifecycle.MutableLiveData
import org.linphone.R
import org.linphone.activities.main.settings.SettingListenerStub
import org.linphone.core.Factory
import org.linphone.core.Tunnel
import org.linphone.core.TunnelConfig
class TunnelSettingsViewModel : GenericSettingsViewModel() {
// TODO
val hostnameUrlListener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
val config = getTunnelConfig()
config.host = newValue
updateTunnelConfig(config)
}
}
val hostnameUrl = MutableLiveData<String>()
val portListener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
if (newValue.isNotEmpty()) {
val config = getTunnelConfig()
config.port = newValue.toInt()
updateTunnelConfig(config)
}
}
}
val port = MutableLiveData<Int>()
val useDualModeListener = object : SettingListenerStub() {
override fun onBoolValueChanged(newValue: Boolean) {
val tunnel = core.tunnel
tunnel.enableDualMode(newValue)
}
}
val useDualMode = MutableLiveData<Boolean>()
val hostnameUrl2Listener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
val config = getTunnelConfig()
config.host2 = newValue
updateTunnelConfig(config)
}
}
val hostnameUrl2 = MutableLiveData<String>()
val port2Listener = object : SettingListenerStub() {
override fun onTextValueChanged(newValue: String) {
if (newValue.isNotEmpty()) {
val config = getTunnelConfig()
config.port2 = newValue.toInt()
updateTunnelConfig(config)
}
}
}
val port2 = MutableLiveData<Int>()
val modeListener = object : SettingListenerStub() {
override fun onListValueChanged(position: Int) {
core.tunnel.mode = when (position) {
0 -> Tunnel.Mode.Disable
1 -> Tunnel.Mode.Enable
else -> Tunnel.Mode.Auto
}
}
}
val modeIndex = MutableLiveData<Int>()
val modeLabels = MutableLiveData<ArrayList<String>>()
init {
val tunnel = core.tunnel
val config = getTunnelConfig()
hostnameUrl.value = config.host
port.value = config.port
useDualMode.value = tunnel.dualModeEnabled()
hostnameUrl2.value = config.host2
port2.value = config.port2
initModeList()
}
private fun getTunnelConfig(): TunnelConfig {
val tunnel = core.tunnel
val configs = tunnel.servers
return if (configs.isNotEmpty()) {
configs[0]
} else {
Factory.instance().createTunnelConfig()
}
}
private fun updateTunnelConfig(config: TunnelConfig) {
val tunnel = core.tunnel
tunnel.cleanServers()
if (config.host?.isNotEmpty() == true) {
tunnel.addServer(config)
}
}
private fun initModeList() {
val labels = arrayListOf<String>()
labels.add(prefs.getString(R.string.tunnel_settings_disabled_mode))
labels.add(prefs.getString(R.string.tunnel_settings_always_mode))
labels.add(prefs.getString(R.string.tunnel_settings_auto_mode))
modeLabels.value = labels
modeIndex.value = when (core.tunnel.mode) {
Tunnel.Mode.Disable -> 0
Tunnel.Mode.Enable -> 1
else -> 2
}
}
}

View file

@ -1,8 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:linphone="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View"/>
<import type="android.text.InputType"/>
<variable
name="backClickListener"
type="android.view.View.OnClickListener"/>
@ -63,6 +65,57 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/tunnel_settings_hostname_url_title}"
linphone:subtitle="@{@string/tunnel_settings_hostname_url_summary}"
linphone:listener="@{viewModel.hostnameUrlListener}"
linphone:defaultValue="@{viewModel.hostnameUrl}"
linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"/>
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/tunnel_settings_port_title}"
linphone:subtitle="@{@string/tunnel_settings_port_summary}"
linphone:listener="@{viewModel.portListener}"
linphone:defaultValue="@{viewModel.port.toString()}"
linphone:inputType="@{InputType.TYPE_CLASS_NUMBER}"/>
<include
layout="@layout/settings_widget_switch"
linphone:title="@{@string/tunnel_settings_dual_mode_title}"
linphone:subtitle="@{@string/tunnel_settings_dual_mode_summary}"
linphone:listener="@{viewModel.useDualModeListener}"
linphone:checked="@={viewModel.useDualMode}"/>
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/tunnel_settings_dual_hostname_url_title}"
linphone:subtitle="@{@string/tunnel_settings_dual_hostname_url_summary}"
linphone:listener="@{viewModel.hostnameUrl2Listener}"
linphone:defaultValue="@{viewModel.hostnameUrl2}"
linphone:inputType="@{InputType.TYPE_TEXT_VARIATION_URI}"
linphone:enabled="@{viewModel.useDualMode}"
android:visibility="@{viewModel.useDualMode ? View.VISIBLE : View.GONE}"/>
<include
layout="@layout/settings_widget_text"
linphone:title="@{@string/tunnel_settings_dual_port_title}"
linphone:subtitle="@{@string/tunnel_settings_dual_port_summary}"
linphone:listener="@{viewModel.port2Listener}"
linphone:defaultValue="@{viewModel.port2.toString()}"
linphone:inputType="@{InputType.TYPE_CLASS_NUMBER}"
linphone:enabled="@{viewModel.useDualMode}"
android:visibility="@{viewModel.useDualMode ? View.VISIBLE : View.GONE}"/>
<include
layout="@layout/settings_widget_list"
linphone:title="@{@string/tunnel_settings_mode_title}"
linphone:subtitle="@{@string/tunnel_settings_mode_summary}"
linphone:listener="@{viewModel.modeListener}"
linphone:selectedIndex="@{viewModel.modeIndex}"
linphone:labels="@{viewModel.modeLabels}"/>
</LinearLayout>
</ScrollView>

View file

@ -429,6 +429,21 @@
<string name="advanced_settings_go_to_android_app_settings">Android app settings</string>
<!-- Tunnel settings -->
<string name="tunnel_settings_hostname_url_title">Hostname</string>
<string name="tunnel_settings_hostname_url_summary"></string>
<string name="tunnel_settings_port_title">Port</string>
<string name="tunnel_settings_port_summary"></string>
<string name="tunnel_settings_dual_mode_title">Dual mode enabled</string>
<string name="tunnel_settings_dual_mode_summary">Will use one server for upload and another one for download</string>
<string name="tunnel_settings_dual_hostname_url_title">Second server hostname</string>
<string name="tunnel_settings_dual_hostname_url_summary">Required in dual mode</string>
<string name="tunnel_settings_dual_port_title">Second server port</string>
<string name="tunnel_settings_dual_port_summary">Required in dual mode</string>
<string name="tunnel_settings_mode_title">Mode</string>
<string name="tunnel_settings_mode_summary"></string>
<string name="tunnel_settings_disabled_mode">Disabled</string>
<string name="tunnel_settings_always_mode">Always</string>
<string name="tunnel_settings_auto_mode">Auto</string>
<!-- Account settings -->
<string name="account_settings_user_name_title">Username</string>