mirror of
https://github.com/home-assistant/android
synced 2024-10-15 12:32:54 +00:00
Only use internal URL when data is also using Wi-Fi (#3015)
This commit is contained in:
parent
66bc26037c
commit
c57b80b978
|
@ -46,6 +46,7 @@ class SsidFragment : Fragment() {
|
||||||
SsidView(
|
SsidView(
|
||||||
wifiSsids = viewModel.wifiSsids,
|
wifiSsids = viewModel.wifiSsids,
|
||||||
prioritizeInternal = viewModel.prioritizeInternal,
|
prioritizeInternal = viewModel.prioritizeInternal,
|
||||||
|
usingWifi = viewModel.usingWifi,
|
||||||
activeSsid = viewModel.activeSsid,
|
activeSsid = viewModel.activeSsid,
|
||||||
activeBssid = viewModel.activeBssid,
|
activeBssid = viewModel.activeBssid,
|
||||||
onAddWifiSsid = viewModel::addHomeWifiSsid,
|
onAddWifiSsid = viewModel::addHomeWifiSsid,
|
||||||
|
|
|
@ -26,6 +26,9 @@ class SsidViewModel @Inject constructor(
|
||||||
var prioritizeInternal by mutableStateOf(false)
|
var prioritizeInternal by mutableStateOf(false)
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
var usingWifi by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
|
||||||
var activeSsid by mutableStateOf<String?>(null)
|
var activeSsid by mutableStateOf<String?>(null)
|
||||||
private set
|
private set
|
||||||
|
|
||||||
|
@ -37,6 +40,7 @@ class SsidViewModel @Inject constructor(
|
||||||
wifiSsids.clear()
|
wifiSsids.clear()
|
||||||
wifiSsids.addAll(urlRepository.getHomeWifiSsids())
|
wifiSsids.addAll(urlRepository.getHomeWifiSsids())
|
||||||
prioritizeInternal = urlRepository.isPrioritizeInternal()
|
prioritizeInternal = urlRepository.isPrioritizeInternal()
|
||||||
|
usingWifi = wifiHelper.isUsingWifi()
|
||||||
activeSsid = wifiHelper.getWifiSsid()?.removeSurrounding("\"")
|
activeSsid = wifiHelper.getWifiSsid()?.removeSurrounding("\"")
|
||||||
activeBssid = wifiHelper.getWifiBssid()
|
activeBssid = wifiHelper.getWifiBssid()
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,6 +63,7 @@ import io.homeassistant.companion.android.common.R as commonR
|
||||||
fun SsidView(
|
fun SsidView(
|
||||||
wifiSsids: List<String>,
|
wifiSsids: List<String>,
|
||||||
prioritizeInternal: Boolean,
|
prioritizeInternal: Boolean,
|
||||||
|
usingWifi: Boolean,
|
||||||
activeSsid: String?,
|
activeSsid: String?,
|
||||||
activeBssid: String?,
|
activeBssid: String?,
|
||||||
onAddWifiSsid: (String) -> Boolean,
|
onAddWifiSsid: (String) -> Boolean,
|
||||||
|
@ -150,8 +151,12 @@ fun SsidView(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
items(wifiSsids, key = { "ssid.item.$it" }) {
|
items(wifiSsids, key = { "ssid.item.$it" }) {
|
||||||
val connected = remember(it, activeSsid, activeBssid) {
|
val connected = remember(it, activeSsid, activeBssid, usingWifi) {
|
||||||
it == activeSsid || (it.startsWith(UrlRepository.BSSID_PREFIX) && it.removePrefix(UrlRepository.BSSID_PREFIX).equals(activeBssid, ignoreCase = true))
|
usingWifi &&
|
||||||
|
(
|
||||||
|
it == activeSsid ||
|
||||||
|
(it.startsWith(UrlRepository.BSSID_PREFIX) && it.removePrefix(UrlRepository.BSSID_PREFIX).equals(activeBssid, ignoreCase = true))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
Row(
|
Row(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
|
@ -251,6 +256,7 @@ private fun PreviewSsidViewEmpty() {
|
||||||
prioritizeInternal = false,
|
prioritizeInternal = false,
|
||||||
activeSsid = "home-assistant-wifi",
|
activeSsid = "home-assistant-wifi",
|
||||||
activeBssid = "02:00:00:00:00:00",
|
activeBssid = "02:00:00:00:00:00",
|
||||||
|
usingWifi = true,
|
||||||
onAddWifiSsid = { true },
|
onAddWifiSsid = { true },
|
||||||
onRemoveWifiSsid = {},
|
onRemoveWifiSsid = {},
|
||||||
onSetPrioritize = {}
|
onSetPrioritize = {}
|
||||||
|
@ -265,6 +271,7 @@ private fun PreviewSsidViewItems() {
|
||||||
prioritizeInternal = false,
|
prioritizeInternal = false,
|
||||||
activeSsid = "home-assistant-wifi",
|
activeSsid = "home-assistant-wifi",
|
||||||
activeBssid = "02:00:00:00:00:00",
|
activeBssid = "02:00:00:00:00:00",
|
||||||
|
usingWifi = true,
|
||||||
onAddWifiSsid = { true },
|
onAddWifiSsid = { true },
|
||||||
onRemoveWifiSsid = {},
|
onRemoveWifiSsid = {},
|
||||||
onSetPrioritize = {}
|
onSetPrioritize = {}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||||
</manifest>
|
</manifest>
|
|
@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
import android.net.wifi.WifiManager
|
import android.net.wifi.WifiManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.provider.Settings
|
import android.provider.Settings
|
||||||
|
@ -121,6 +122,10 @@ abstract class DataModule {
|
||||||
Settings.Secure.ANDROID_ID
|
Settings.Secure.ANDROID_ID
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Provides
|
||||||
|
@Singleton
|
||||||
|
fun connectivityManager(@ApplicationContext appContext: Context) = appContext.getSystemService<ConnectivityManager>()!!
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@Singleton
|
@Singleton
|
||||||
fun wifiManager(@ApplicationContext appContext: Context) = appContext.getSystemService<WifiManager>()!!
|
fun wifiManager(@ApplicationContext appContext: Context) = appContext.getSystemService<WifiManager>()!!
|
||||||
|
|
|
@ -171,8 +171,9 @@ class UrlRepositoryImpl @Inject constructor(
|
||||||
|
|
||||||
override suspend fun isInternal(): Boolean {
|
override suspend fun isInternal(): Boolean {
|
||||||
val usesInternalSsid = isHomeWifiSsid()
|
val usesInternalSsid = isHomeWifiSsid()
|
||||||
|
val usesWifi = wifiHelper.isUsingWifi()
|
||||||
val localUrl = localStorage.getString(PREF_LOCAL_URL)
|
val localUrl = localStorage.getString(PREF_LOCAL_URL)
|
||||||
Log.d(TAG, "localUrl is: ${!localUrl.isNullOrBlank()} and usesInternalSsid is: $usesInternalSsid")
|
Log.d(TAG, "localUrl is: ${!localUrl.isNullOrBlank()}, usesInternalSsid is: $usesInternalSsid, usesWifi is: $usesWifi")
|
||||||
return !localUrl.isNullOrBlank() && usesInternalSsid
|
return !localUrl.isNullOrBlank() && usesInternalSsid && usesWifi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package io.homeassistant.companion.android.common.data.wifi
|
package io.homeassistant.companion.android.common.data.wifi
|
||||||
|
|
||||||
interface WifiHelper {
|
interface WifiHelper {
|
||||||
|
/** Returns if the active data connection is using Wi-Fi */
|
||||||
|
fun isUsingWifi(): Boolean
|
||||||
fun getWifiSsid(): String?
|
fun getWifiSsid(): String?
|
||||||
fun getWifiBssid(): String?
|
fun getWifiBssid(): String?
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,28 @@
|
||||||
package io.homeassistant.companion.android.common.data.wifi
|
package io.homeassistant.companion.android.common.data.wifi
|
||||||
|
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
import android.net.wifi.WifiManager
|
import android.net.wifi.WifiManager
|
||||||
|
import android.os.Build
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
class WifiHelperImpl @Inject constructor(
|
class WifiHelperImpl @Inject constructor(
|
||||||
|
private val connectivityManager: ConnectivityManager,
|
||||||
private val wifiManager: WifiManager
|
private val wifiManager: WifiManager
|
||||||
) : WifiHelper {
|
) : WifiHelper {
|
||||||
|
override fun isUsingWifi(): Boolean =
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
connectivityManager.activeNetwork?.let {
|
||||||
|
connectivityManager
|
||||||
|
.getNetworkCapabilities(it)
|
||||||
|
?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true
|
||||||
|
} ?: false
|
||||||
|
} else {
|
||||||
|
connectivityManager.activeNetworkInfo?.isConnected == true &&
|
||||||
|
connectivityManager.activeNetworkInfo?.type == ConnectivityManager.TYPE_WIFI
|
||||||
|
}
|
||||||
|
|
||||||
override fun getWifiSsid(): String? =
|
override fun getWifiSsid(): String? =
|
||||||
wifiManager.connectionInfo.ssid
|
wifiManager.connectionInfo.ssid
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue