Only use internal URL when data is also using Wi-Fi (#3015)

This commit is contained in:
Joris Pelgröm 2022-11-03 17:27:23 +01:00 committed by GitHub
parent 66bc26037c
commit c57b80b978
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 41 additions and 4 deletions

View file

@ -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,

View file

@ -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()
}

View file

@ -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 = {}

View file

@ -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>

View file

@ -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>()!!

View file

@ -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
}
}

View file

@ -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?
}

View file

@ -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