diff options
| author | Emīls <pinkisemils@mullvad.net> | 2020-02-12 12:22:54 +0000 |
|---|---|---|
| committer | Emīls <pinkisemils@mullvad.net> | 2020-02-14 11:49:32 +0000 |
| commit | 879fd9a8732311c30d4e69a21e73493b117ce680 (patch) | |
| tree | fc871f69992922777e0b88bfbacc179c835716a0 /android/src/main | |
| parent | d38d729e518f6e23bb08266fe36cc119572ef126 (diff) | |
| download | mullvadvpn-879fd9a8732311c30d4e69a21e73493b117ce680.tar.xz mullvadvpn-879fd9a8732311c30d4e69a21e73493b117ce680.zip | |
Add auto-connect switch to preferences
Diffstat (limited to 'android/src/main')
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 |
