Update/replace deprecations in common module (#3698)

This commit is contained in:
Joris Pelgröm 2023-07-24 16:29:03 +02:00 committed by GitHub
parent 2f042ae56f
commit 6d457cf718
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 90 additions and 35 deletions

View file

@ -2,6 +2,7 @@ package io.homeassistant.companion.android.common.data.wifi
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.wifi.WifiInfo
import android.net.wifi.WifiManager
import android.os.Build
import javax.inject.Inject
@ -45,8 +46,22 @@ class WifiHelperImpl @Inject constructor(
}
override fun getWifiSsid(): String? =
wifiManager?.connectionInfo?.ssid
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
connectivityManager.activeNetwork?.let {
val info = connectivityManager.getNetworkCapabilities(it)?.transportInfo ?: return null
(info as? WifiInfo)?.ssid
}
} else {
wifiManager?.connectionInfo?.ssid
}
override fun getWifiBssid(): String? =
wifiManager?.connectionInfo?.bssid
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
connectivityManager.activeNetwork?.let {
val info = connectivityManager.getNetworkCapabilities(it)?.transportInfo ?: return null
(info as? WifiInfo)?.bssid
}
} else {
wifiManager?.connectionInfo?.bssid
}
}

View file

@ -251,7 +251,7 @@ class AudioSensorManager : SensorManager {
}
}
} else {
// Use deprecated method as getDevices is API 23 and up only and we support API 21
@Suppress("DEPRECATION")
isHeadphones = audioManager.isWiredHeadsetOn
}

View file

@ -1,6 +1,7 @@
package io.homeassistant.companion.android.common.sensors
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import io.homeassistant.companion.android.common.bluetooth.BluetoothDevice
@ -139,6 +140,7 @@ class BluetoothSensorManager : SensorManager {
return listOf(bluetoothConnection, bluetoothState, bleTransmitter, beaconMonitor)
}
@SuppressLint("InlinedApi")
override fun requiredPermissions(sensorId: String): Array<String> {
return when {
(sensorId == bleTransmitter.id && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) -> {

View file

@ -192,12 +192,10 @@ class NetworkSensorManager : SensorManager {
var connected = false
if (checkPermission(context, wifiConnection.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
conInfo = wifiManager.connectionInfo
conInfo = getWifiConnectionInfo(context)
if (conInfo.networkId == -1) {
if (conInfo.linkSpeed == -1) {
if (conInfo == null || conInfo.networkId == -1) {
if (conInfo == null || conInfo.linkSpeed == -1) {
ssid = "<not connected>"
} else {
ssid = "<unknown>"
@ -232,12 +230,10 @@ class NetworkSensorManager : SensorManager {
var conInfo: WifiInfo? = null
if (checkPermission(context, bssidState.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
conInfo = wifiManager.connectionInfo
conInfo = getWifiConnectionInfo(context)
}
var bssid = if (conInfo!!.bssid == null) "<not connected>" else conInfo.bssid
var bssid = if (conInfo?.bssid == null) "<not connected>" else conInfo.bssid
val settingName = "network_replace_mac_var1:$bssid:"
val sensorDao = AppDatabase.getInstance(context).sensorDao()
@ -277,14 +273,23 @@ class NetworkSensorManager : SensorManager {
var deviceIp = "Unknown"
if (checkPermission(context, wifiIp.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
val conInfo = wifiManager.connectionInfo
val conInfo = getWifiConnectionInfo(context)
deviceIp = if (conInfo.networkId == -1 && conInfo.linkSpeed == -1) {
deviceIp = if (conInfo == null || (conInfo.networkId == -1 && conInfo.linkSpeed == -1)) {
"<not connected>"
} else {
getIpAddress(conInfo.ipAddress)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val connectivityManager = context.applicationContext.getSystemService<ConnectivityManager>()
connectivityManager?.activeNetwork?.let {
// Get the IPv4 address without prefix length
connectivityManager.getLinkProperties(it)?.linkAddresses
?.firstOrNull { address -> !address.toString().contains(":") }
?.toString()?.split("/")?.get(0)
} ?: ""
} else {
@Suppress("DEPRECATION")
getIpAddress(conInfo.ipAddress)
}
}
}
@ -306,23 +311,22 @@ class NetworkSensorManager : SensorManager {
var rssi = -1
if (checkPermission(context, wifiLinkSpeed.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
val conInfo = wifiManager.connectionInfo
val conInfo = getWifiConnectionInfo(context)
linkSpeed = if (conInfo.linkSpeed == -1) {
linkSpeed = if (conInfo == null || conInfo.linkSpeed == -1) {
0
} else {
conInfo.linkSpeed
}
if (conInfo.networkId != -1 || conInfo.linkSpeed != -1) {
if (conInfo != null && (conInfo.networkId != -1 || conInfo.linkSpeed != -1)) {
rssi = conInfo.rssi
}
}
var signalStrength = -1
if (rssi != -1) {
@Suppress("DEPRECATION") // Always use 4 levels instead of depending on device
signalStrength = WifiManager.calculateSignalLevel(rssi, 4)
}
@ -373,11 +377,9 @@ class NetworkSensorManager : SensorManager {
var frequency = 0
if (checkPermission(context, wifiFrequency.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
val conInfo = wifiManager.connectionInfo
val conInfo = getWifiConnectionInfo(context)
frequency = if (conInfo.networkId == -1 && conInfo.linkSpeed == -1) {
frequency = if (conInfo == null || (conInfo.networkId == -1 && conInfo.linkSpeed == -1)) {
0
} else {
conInfo.frequency
@ -401,17 +403,16 @@ class NetworkSensorManager : SensorManager {
var rssi = -1
if (checkPermission(context, wifiSignalStrength.id)) {
val wifiManager =
context.applicationContext.getSystemService<WifiManager>()!!
val conInfo = wifiManager.connectionInfo
val conInfo = getWifiConnectionInfo(context)
if (conInfo.networkId != -1 || conInfo.linkSpeed != -1) {
if (conInfo != null && (conInfo.networkId != -1 || conInfo.linkSpeed != -1)) {
rssi = conInfo.rssi
}
}
var signalStrength = -1
if (rssi != -1) {
@Suppress("DEPRECATION") // Always use 4 levels instead of depending on device
signalStrength = WifiManager.calculateSignalLevel(rssi, 4)
}
@ -520,4 +521,16 @@ class NetworkSensorManager : SensorManager {
)
)
}
private fun getWifiConnectionInfo(context: Context): WifiInfo? =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val connectivityManager = context.applicationContext.getSystemService<ConnectivityManager>()
connectivityManager?.activeNetwork?.let {
val info = connectivityManager.getNetworkCapabilities(it)?.transportInfo
return@let info as? WifiInfo
}
} else {
@Suppress("DEPRECATION")
context.applicationContext.getSystemService<WifiManager>()?.connectionInfo
}
}

View file

@ -1,6 +1,7 @@
package io.homeassistant.companion.android.common.sensors
import android.Manifest
import android.annotation.SuppressLint
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
@ -74,6 +75,7 @@ class PhoneStateSensorManager : SensorManager {
updateSimSensor(context, 1)
}
@SuppressLint("MissingPermission")
private fun checkPhoneState(context: Context) {
if (isEnabled(context, phoneState)) {
var currentPhoneState = "unknown"
@ -82,7 +84,13 @@ class PhoneStateSensorManager : SensorManager {
val telephonyManager =
context.applicationContext.getSystemService<TelephonyManager>()!!
currentPhoneState = when (telephonyManager.callState) {
val callState = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
telephonyManager.callStateForSubscription
} else {
@Suppress("DEPRECATION")
telephonyManager.callState
}
currentPhoneState = when (callState) {
TelephonyManager.CALL_STATE_IDLE -> "idle"
TelephonyManager.CALL_STATE_RINGING -> "ringing"
TelephonyManager.CALL_STATE_OFFHOOK -> "offhook"
@ -109,6 +117,7 @@ class PhoneStateSensorManager : SensorManager {
)
}
@SuppressLint("MissingPermission")
private fun updateSimSensor(context: Context, slotIndex: Int) {
val basicSimSensor = when (slotIndex) {
0 -> sim_1

View file

@ -4,6 +4,7 @@ import android.app.AppOpsManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.os.Build
import android.os.Process.myPid
import android.os.Process.myUid
import androidx.core.content.getSystemService
@ -76,9 +77,19 @@ interface SensorManager {
fun checkUsageStatsPermission(context: Context): Boolean {
val pm = context.packageManager
val appInfo = pm.getApplicationInfo(context.packageName, 0)
val appOpsManager = context.getSystemService<AppOpsManager>()!!
val mode = appOpsManager.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, appInfo.uid, appInfo.packageName)
val appInfo = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
pm.getApplicationInfo(context.packageName, PackageManager.ApplicationInfoFlags.of(0))
} else {
@Suppress("DEPRECATION")
pm.getApplicationInfo(context.packageName, 0)
}
val appOpsManager = context.getSystemService<AppOpsManager>()
val mode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
appOpsManager?.unsafeCheckOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, appInfo.uid, appInfo.packageName)
} else {
@Suppress("DEPRECATION")
appOpsManager?.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, appInfo.uid, appInfo.packageName)
}
return mode == AppOpsManager.MODE_ALLOWED
}

View file

@ -114,7 +114,11 @@ abstract class SensorReceiverBase : BroadcastReceiver() {
val allSettings = sensorDao.getSettings(LastUpdateManager.lastUpdate.id)
for (setting in allSettings) {
if (setting.value != "" && intent.action == setting.value) {
val eventData = intent.extras?.keySet()?.map { it.toString() to intent.extras?.get(it).toString() }?.toMap()?.plus("intent" to intent.action.toString())
val eventData = intent.extras?.keySet()
?.associate {
it.toString() to (intent.extras?.getString(it) ?: "")
}
?.plus("intent" to intent.action.toString())
?: mapOf("intent" to intent.action.toString())
Log.d(tag, "Event data: $eventData")
sensorDao.get(LastUpdateManager.lastUpdate.id).forEach { sensor ->

View file

@ -76,6 +76,7 @@ class TrafficStatsManager : SensorManager {
return emptyArray()
}
@Suppress("DEPRECATION") // No synchronous option to get all networks
override fun hasSensor(context: Context): Boolean {
val cm = context.getSystemService<ConnectivityManager>()!!
val networkInfo = cm.allNetworks