summaryrefslogtreecommitdiffhomepage
path: root/android/src
diff options
context:
space:
mode:
authorEmīls <pinkisemils@mullvad.net>2020-02-12 12:22:54 +0000
committerEmīls <pinkisemils@mullvad.net>2020-02-14 11:49:32 +0000
commit879fd9a8732311c30d4e69a21e73493b117ce680 (patch)
treefc871f69992922777e0b88bfbacc179c835716a0 /android/src
parentd38d729e518f6e23bb08266fe36cc119572ef126 (diff)
downloadmullvadvpn-879fd9a8732311c30d4e69a21e73493b117ce680.tar.xz
mullvadvpn-879fd9a8732311c30d4e69a21e73493b117ce680.zip
Add auto-connect switch to preferences
Diffstat (limited to 'android/src')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt26
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt43
-rw-r--r--android/src/main/res/layout/preferences.xml34
-rw-r--r--android/src/main/res/values/strings.xml4
4 files changed, 87 insertions, 20 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
index be27eb7b89..a79307811d 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/dataproxy/SettingsListener.kt
@@ -3,15 +3,21 @@ package net.mullvad.mullvadvpn.dataproxy
import net.mullvad.mullvadvpn.model.RelaySettings
import net.mullvad.mullvadvpn.model.Settings
import net.mullvad.mullvadvpn.service.MullvadDaemon
+import net.mullvad.talpid.util.EventNotifier
class SettingsListener(val daemon: MullvadDaemon) {
+ var settings: Settings = daemon.getSettings()
+ private set(value) {
+ settingsNotifier.notify(value)
+ field = value
+ }
+
+ private val settingsNotifier: EventNotifier<Settings> = EventNotifier(settings)
+
private val listenerId = daemon.onSettingsChange.subscribe { maybeSettings ->
maybeSettings?.let { settings -> handleNewSettings(settings) }
}
- var settings: Settings? = null
- private set
-
var onAccountNumberChange: ((String?) -> Unit)? = null
set(value) {
synchronized(this) {
@@ -43,6 +49,16 @@ class SettingsListener(val daemon: MullvadDaemon) {
if (listenerId != -1) {
daemon.onSettingsChange.unsubscribe(listenerId)
}
+
+ settingsNotifier.unsubscribeAll()
+ }
+
+ fun subscribe(listener: (Settings) -> Unit): Int {
+ return settingsNotifier.subscribe(listener)
+ }
+
+ fun unsubscribe(id: Int) {
+ settingsNotifier.unsubscribe(id)
}
private fun handleNewSettings(newSettings: Settings) {
@@ -55,10 +71,6 @@ class SettingsListener(val daemon: MullvadDaemon) {
onRelaySettingsChange?.invoke(newSettings.relaySettings)
}
- if (settings?.allowLan != newSettings.allowLan) {
- onAllowLanChange?.invoke(newSettings.allowLan)
- }
-
settings = newSettings
}
}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
index 160caafd22..387864f26c 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/PreferencesFragment.kt
@@ -9,10 +9,13 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import net.mullvad.mullvadvpn.R
+import net.mullvad.mullvadvpn.model.Settings
class PreferencesFragment : ServiceDependentFragment(OnNoService.GoBack) {
private lateinit var allowLanToggle: CellSwitch
+ private lateinit var autoConnectToggle: CellSwitch
+ private var subscriptionId: Int? = null
private var updateUiJob: Job? = null
override fun onSafelyCreateView(
@@ -28,11 +31,7 @@ class PreferencesFragment : ServiceDependentFragment(OnNoService.GoBack) {
allowLanToggle = view.findViewById<CellSwitch>(R.id.allow_lan_toggle).apply {
settingsListener.settings?.let { settings ->
- if (settings.allowLan) {
- forcefullySetState(CellSwitch.State.ON)
- } else {
- forcefullySetState(CellSwitch.State.OFF)
- }
+ forcefullySetState(boolToSwitchState(settings.allowLan))
}
listener = { state ->
@@ -43,23 +42,41 @@ class PreferencesFragment : ServiceDependentFragment(OnNoService.GoBack) {
}
}
- settingsListener.onAllowLanChange = { allowLan ->
- updateUiJob?.cancel()
- updateUiJob = updateUi(allowLan)
+ autoConnectToggle = view.findViewById<CellSwitch>(R.id.auto_connect_toggle).apply {
+ settingsListener.settings?.let { settings ->
+ forcefullySetState(boolToSwitchState(settings.autoConnect))
+ }
+
+ listener = { state ->
+ when (state) {
+ CellSwitch.State.ON -> daemon.setAutoConnect(true)
+ CellSwitch.State.OFF -> daemon.setAutoConnect(false)
+ }
+ }
}
+ settingsListener.subscribe({ settings -> updateUi(settings) })
+
return view
}
+ private fun updateUi(settings: Settings) {
+ updateUiJob?.cancel()
+ updateUiJob = GlobalScope.launch(Dispatchers.Main) {
+ allowLanToggle.state = boolToSwitchState(settings.allowLan)
+ autoConnectToggle.state = boolToSwitchState(settings.autoConnect)
+ }
+ }
+
override fun onSafelyDestroyView() {
- settingsListener.onAllowLanChange = null
+ subscriptionId?.let { id -> settingsListener.unsubscribe(id) }
}
- private fun updateUi(allowLan: Boolean) = GlobalScope.launch(Dispatchers.Main) {
- if (allowLan) {
- allowLanToggle.state = CellSwitch.State.ON
+ private fun boolToSwitchState(pref: Boolean): CellSwitch.State {
+ if (pref) {
+ return CellSwitch.State.ON
} else {
- allowLanToggle.state = CellSwitch.State.OFF
+ return CellSwitch.State.OFF
}
}
}
diff --git a/android/src/main/res/layout/preferences.xml b/android/src/main/res/layout/preferences.xml
index 59d42635fe..a03726482d 100644
--- a/android/src/main/res/layout/preferences.xml
+++ b/android/src/main/res/layout/preferences.xml
@@ -41,6 +41,40 @@
android:textStyle="bold"
android:text="@string/settings_preferences"
/>
+ <LinearLayout android:id="@+id/auto_connect"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="24dp"
+ android:paddingHorizontal="16dp"
+ android:background="@drawable/cell_button_background"
+ android:gravity="center"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:paddingHorizontal="8dp"
+ android:paddingVertical="17dp"
+ android:textColor="@color/white"
+ android:textSize="20sp"
+ android:textStyle="bold"
+ android:text="@string/auto_connect"
+ />
+ <net.mullvad.mullvadvpn.ui.CellSwitch android:id="@+id/auto_connect_toggle"
+ android:layout_width="52dp"
+ android:layout_height="32dp"
+ android:layout_weight="0"
+ />
+ </LinearLayout>
+ <TextView android:id="@+id/auto_connect_footer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="8dp"
+ android:paddingHorizontal="24dp"
+ android:textColor="@color/white60"
+ android:textSize="13sp"
+ android:text="@string/auto_connect_footer"
+ />
<LinearLayout android:id="@+id/allow_lan"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/android/src/main/res/values/strings.xml b/android/src/main/res/values/strings.xml
index 0a87ff3736..f722cb845c 100644
--- a/android/src/main/res/values/strings.xml
+++ b/android/src/main/res/values/strings.xml
@@ -45,6 +45,10 @@
<string name="allow_lan_footer">
Allows access to other devices on the same network for sharing, printing etc.
</string>
+ <string name="auto_connect">Auto-connect</string>
+ <string name="auto_connect_footer">
+ Automatically connect to a server when the app launches.
+ </string>
<string name="problem_report_description">
To help you more effectively, your app\'s log file will be attached to this message. Your