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(
|
||||
wifiSsids = viewModel.wifiSsids,
|
||||
prioritizeInternal = viewModel.prioritizeInternal,
|
||||
usingWifi = viewModel.usingWifi,
|
||||
activeSsid = viewModel.activeSsid,
|
||||
activeBssid = viewModel.activeBssid,
|
||||
onAddWifiSsid = viewModel::addHomeWifiSsid,
|
||||
|
|
|
@ -26,6 +26,9 @@ class SsidViewModel @Inject constructor(
|
|||
var prioritizeInternal by mutableStateOf(false)
|
||||
private set
|
||||
|
||||
var usingWifi by mutableStateOf(false)
|
||||
private set
|
||||
|
||||
var activeSsid by mutableStateOf<String?>(null)
|
||||
private set
|
||||
|
||||
|
@ -37,6 +40,7 @@ class SsidViewModel @Inject constructor(
|
|||
wifiSsids.clear()
|
||||
wifiSsids.addAll(urlRepository.getHomeWifiSsids())
|
||||
prioritizeInternal = urlRepository.isPrioritizeInternal()
|
||||
usingWifi = wifiHelper.isUsingWifi()
|
||||
activeSsid = wifiHelper.getWifiSsid()?.removeSurrounding("\"")
|
||||
activeBssid = wifiHelper.getWifiBssid()
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ import io.homeassistant.companion.android.common.R as commonR
|
|||
fun SsidView(
|
||||
wifiSsids: List<String>,
|
||||
prioritizeInternal: Boolean,
|
||||
usingWifi: Boolean,
|
||||
activeSsid: String?,
|
||||
activeBssid: String?,
|
||||
onAddWifiSsid: (String) -> Boolean,
|
||||
|
@ -150,8 +151,12 @@ fun SsidView(
|
|||
}
|
||||
}
|
||||
items(wifiSsids, key = { "ssid.item.$it" }) {
|
||||
val connected = remember(it, activeSsid, activeBssid) {
|
||||
it == activeSsid || (it.startsWith(UrlRepository.BSSID_PREFIX) && it.removePrefix(UrlRepository.BSSID_PREFIX).equals(activeBssid, ignoreCase = true))
|
||||
val connected = remember(it, activeSsid, activeBssid, usingWifi) {
|
||||
usingWifi &&
|
||||
(
|
||||
it == activeSsid ||
|
||||
(it.startsWith(UrlRepository.BSSID_PREFIX) && it.removePrefix(UrlRepository.BSSID_PREFIX).equals(activeBssid, ignoreCase = true))
|
||||
)
|
||||
}
|
||||
Row(
|
||||
modifier = Modifier
|
||||
|
@ -251,6 +256,7 @@ private fun PreviewSsidViewEmpty() {
|
|||
prioritizeInternal = false,
|
||||
activeSsid = "home-assistant-wifi",
|
||||
activeBssid = "02:00:00:00:00:00",
|
||||
usingWifi = true,
|
||||
onAddWifiSsid = { true },
|
||||
onRemoveWifiSsid = {},
|
||||
onSetPrioritize = {}
|
||||
|
@ -265,6 +271,7 @@ private fun PreviewSsidViewItems() {
|
|||
prioritizeInternal = false,
|
||||
activeSsid = "home-assistant-wifi",
|
||||
activeBssid = "02:00:00:00:00:00",
|
||||
usingWifi = true,
|
||||
onAddWifiSsid = { true },
|
||||
onRemoveWifiSsid = {},
|
||||
onSetPrioritize = {}
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<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" />
|
||||
</manifest>
|
|
@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data
|
|||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Context
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.wifi.WifiManager
|
||||
import android.os.Build
|
||||
import android.provider.Settings
|
||||
|
@ -121,6 +122,10 @@ abstract class DataModule {
|
|||
Settings.Secure.ANDROID_ID
|
||||
)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun connectivityManager(@ApplicationContext appContext: Context) = appContext.getSystemService<ConnectivityManager>()!!
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun wifiManager(@ApplicationContext appContext: Context) = appContext.getSystemService<WifiManager>()!!
|
||||
|
|
|
@ -171,8 +171,9 @@ class UrlRepositoryImpl @Inject constructor(
|
|||
|
||||
override suspend fun isInternal(): Boolean {
|
||||
val usesInternalSsid = isHomeWifiSsid()
|
||||
val usesWifi = wifiHelper.isUsingWifi()
|
||||
val localUrl = localStorage.getString(PREF_LOCAL_URL)
|
||||
Log.d(TAG, "localUrl is: ${!localUrl.isNullOrBlank()} and usesInternalSsid is: $usesInternalSsid")
|
||||
return !localUrl.isNullOrBlank() && usesInternalSsid
|
||||
Log.d(TAG, "localUrl is: ${!localUrl.isNullOrBlank()}, usesInternalSsid is: $usesInternalSsid, usesWifi is: $usesWifi")
|
||||
return !localUrl.isNullOrBlank() && usesInternalSsid && usesWifi
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package io.homeassistant.companion.android.common.data.wifi
|
||||
|
||||
interface WifiHelper {
|
||||
/** Returns if the active data connection is using Wi-Fi */
|
||||
fun isUsingWifi(): Boolean
|
||||
fun getWifiSsid(): String?
|
||||
fun getWifiBssid(): String?
|
||||
}
|
||||
|
|
|
@ -1,12 +1,28 @@
|
|||
package io.homeassistant.companion.android.common.data.wifi
|
||||
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.NetworkCapabilities
|
||||
import android.net.wifi.WifiManager
|
||||
import android.os.Build
|
||||
import javax.inject.Inject
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class WifiHelperImpl @Inject constructor(
|
||||
private val connectivityManager: ConnectivityManager,
|
||||
private val wifiManager: WifiManager
|
||||
) : 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? =
|
||||
wifiManager.connectionInfo.ssid
|
||||
|
||||
|
|
Loading…
Reference in a new issue