Skip to content

Commit 6492238

Browse files
author
adamff-dev
committed
Select server URL based on Wi-Fi connection
1 parent 01fa3dc commit 6492238

12 files changed

Lines changed: 1255 additions & 9 deletions

File tree

app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsFragment.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -338,15 +338,16 @@ class ServerSettingsFragment :
338338
}
339339
}
340340

341-
override fun updateHomeNetwork(ssids: List<String>, ethernet: Boolean?, vpn: Boolean?) {
341+
override fun updateHomeNetwork(ssids: List<String>, ethernet: Boolean?, vpn: Boolean?, anyWifi: Boolean) {
342342
findPreference<Preference>("connection_internal_ssids")?.let {
343343
it.summary =
344-
if (ssids.isEmpty() && ethernet != true && vpn != true) {
344+
if (ssids.isEmpty() && ethernet != true && vpn != true && !anyWifi) {
345345
getString(commonR.string.not_set)
346346
} else {
347347
val options = ssids.toMutableList()
348348
if (ethernet == true) options += getString(commonR.string.manage_ssids_ethernet)
349349
if (vpn == true) options += getString(commonR.string.manage_ssids_vpn)
350+
if (anyWifi) options += getString(commonR.string.pref_connection_use_any_wifi_for_internal)
350351

351352
options.joinToString()
352353
}

app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsPresenterImpl.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,17 @@ class ServerSettingsPresenterImpl @Inject constructor(
155155
val connection = serverManager.getServer(serverId)?.connection
156156
val ssids = connection?.internalSsids.orEmpty()
157157
view.enableInternalConnection(
158-
ssids.isNotEmpty() || connection?.internalEthernet == true || connection?.internalVpn == true,
158+
ssids.isNotEmpty() ||
159+
connection?.useAnyWifiForInternal == true ||
160+
connection?.internalEthernet == true ||
161+
connection?.internalVpn == true,
162+
)
163+
view.updateHomeNetwork(
164+
ssids,
165+
connection?.internalEthernet,
166+
connection?.internalVpn,
167+
connection?.useAnyWifiForInternal == true,
159168
)
160-
view.updateHomeNetwork(ssids, connection?.internalEthernet, connection?.internalVpn)
161169
}
162170
}
163171

app/src/main/kotlin/io/homeassistant/companion/android/settings/server/ServerSettingsView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ interface ServerSettingsView {
44
fun updateServerName(name: String)
55
fun enableInternalConnection(isEnabled: Boolean)
66
fun updateExternalUrl(url: String, useCloud: Boolean)
7-
fun updateHomeNetwork(ssids: List<String>, ethernet: Boolean?, vpn: Boolean?)
7+
fun updateHomeNetwork(ssids: List<String>, ethernet: Boolean?, vpn: Boolean?, anyWifi: Boolean)
88
fun onRemovedServer(success: Boolean, hasAnyRemaining: Boolean)
99
}

app/src/main/kotlin/io/homeassistant/companion/android/settings/ssid/SsidFragment.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ class SsidFragment : Fragment() {
4747
wifiSsids = viewModel.wifiSsids,
4848
canReadWifi = canReadWifi,
4949
ethernet = viewModel.ethernet,
50+
anyWifi = viewModel.anyWifi,
5051
vpn = viewModel.vpn,
5152
prioritizeInternal = viewModel.prioritizeInternal,
5253
usingWifi = viewModel.usingWifi,
@@ -56,6 +57,7 @@ class SsidFragment : Fragment() {
5657
onRemoveWifiSsid = viewModel::removeHomeWifiSsid,
5758
onRequestPermission = { onRequestLocationPermission() },
5859
onSetEthernet = viewModel::setInternalWithEthernet,
60+
onSetAnyWifi = viewModel::setInternalWithAnyWifi,
5961
onSetVpn = viewModel::setInternalWithVpn,
6062
onSetPrioritize = viewModel::setPrioritize,
6163
)

app/src/main/kotlin/io/homeassistant/companion/android/settings/ssid/SsidViewModel.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ class SsidViewModel @Inject constructor(
2929
var ethernet by mutableStateOf<Boolean?>(null)
3030
private set
3131

32+
var anyWifi by mutableStateOf(false)
33+
private set
34+
3235
var vpn by mutableStateOf<Boolean?>(null)
3336
private set
3437

@@ -53,6 +56,7 @@ class SsidViewModel @Inject constructor(
5356
wifiSsids.clear()
5457
wifiSsids.addAll(server?.connection?.internalSsids.orEmpty())
5558
ethernet = server?.connection?.internalEthernet
59+
anyWifi = server?.connection?.useAnyWifiForInternal == true
5660
vpn = server?.connection?.internalVpn
5761
server?.connection?.prioritizeInternal?.let { prioritizeInternal = it }
5862

@@ -115,6 +119,21 @@ class SsidViewModel @Inject constructor(
115119
}
116120
}
117121

122+
fun setInternalWithAnyWifi(enabled: Boolean) {
123+
viewModelScope.launch {
124+
serverManager.getServer(serverId)?.let {
125+
serverManager.updateServer(
126+
it.copy(
127+
connection = it.connection.copy(
128+
useAnyWifiForInternal = enabled,
129+
),
130+
),
131+
)
132+
anyWifi = enabled
133+
}
134+
}
135+
}
136+
118137
fun setInternalWithVpn(privateNetwork: Boolean) {
119138
viewModelScope.launch {
120139
serverManager.getServer(serverId)?.let {

app/src/main/kotlin/io/homeassistant/companion/android/settings/ssid/views/SsidView.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ fun SsidView(
7171
wifiSsids: List<String>,
7272
canReadWifi: Boolean,
7373
ethernet: Boolean?,
74+
anyWifi: Boolean,
7475
vpn: Boolean?,
7576
prioritizeInternal: Boolean,
7677
usingWifi: Boolean,
@@ -80,6 +81,7 @@ fun SsidView(
8081
onRemoveWifiSsid: (String) -> Unit,
8182
onRequestPermission: () -> Unit,
8283
onSetEthernet: (Boolean) -> Unit,
84+
onSetAnyWifi: (Boolean) -> Unit,
8385
onSetVpn: (Boolean) -> Unit,
8486
onSetPrioritize: (Boolean) -> Unit,
8587
modifier: Modifier = Modifier,
@@ -218,7 +220,16 @@ fun SsidView(
218220
}
219221
}
220222

221-
if (wifiSsids.isNotEmpty() || ethernet == true || vpn == true) {
223+
item("any_wifi") {
224+
SsidSubheader(
225+
title = stringResource(commonR.string.pref_connection_use_any_wifi_for_internal),
226+
icon = Icons.Default.Wifi,
227+
checked = anyWifi,
228+
onClicked = onSetAnyWifi,
229+
)
230+
}
231+
232+
if (wifiSsids.isNotEmpty() || ethernet == true || anyWifi || vpn == true) {
222233
item("warn") {
223234
Box(
224235
Modifier
@@ -403,6 +414,7 @@ private fun PreviewSsidViewEmpty() {
403414
wifiSsids = emptyList(),
404415
canReadWifi = true,
405416
ethernet = null,
417+
anyWifi = false,
406418
vpn = null,
407419
prioritizeInternal = false,
408420
activeSsid = "home-assistant-wifi",
@@ -412,6 +424,7 @@ private fun PreviewSsidViewEmpty() {
412424
onRemoveWifiSsid = {},
413425
onRequestPermission = {},
414426
onSetEthernet = {},
427+
onSetAnyWifi = {},
415428
onSetVpn = {},
416429
onSetPrioritize = {},
417430
)
@@ -424,6 +437,7 @@ private fun PreviewSsidViewItems() {
424437
wifiSsids = listOf("home-assistant-wifi", "wifi-one", "BSSID:1A:2B:3C:4D:5E:6F"),
425438
canReadWifi = true,
426439
ethernet = false,
440+
anyWifi = true,
427441
vpn = true,
428442
prioritizeInternal = false,
429443
activeSsid = "home-assistant-wifi",
@@ -433,6 +447,7 @@ private fun PreviewSsidViewItems() {
433447
onRemoveWifiSsid = {},
434448
onRequestPermission = {},
435449
onSetEthernet = {},
450+
onSetAnyWifi = {},
436451
onSetVpn = {},
437452
onSetPrioritize = {},
438453
)

0 commit comments

Comments
 (0)