Skip to content

Commit f1274e4

Browse files
committed
fix: satisfy lint network permission checks in monitor
1 parent bf5a142 commit f1274e4

File tree

2 files changed

+50
-18
lines changed

2 files changed

+50
-18
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
66
tools:ignore="QueryAllPackagesPermission" />
77
<uses-permission android:name="android.permission.INTERNET" />
8+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
9+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
810
<uses-permission android:name="moe.shizuku.manager.permission.API_V23" />
911

1012
<application

app/src/main/java/com/appcontrolx/domain/SystemMonitor.kt

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.appcontrolx.domain
22

3+
import android.Manifest
34
import android.app.ActivityManager
45
import android.app.usage.StorageStatsManager
56
import android.content.Context
@@ -18,6 +19,7 @@ import android.os.SystemClock
1819
import android.os.storage.StorageManager
1920
import android.telephony.TelephonyManager
2021
import android.view.WindowManager
22+
import androidx.core.content.ContextCompat
2123
import com.appcontrolx.model.*
2224
import dagger.hilt.android.qualifiers.ApplicationContext
2325
import java.io.File
@@ -516,16 +518,32 @@ class SystemMonitor @Inject constructor(
516518
private fun getNetworkStats(): NetworkStats {
517519
return try {
518520
val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
521+
val hasNetworkStatePermission = ContextCompat.checkSelfPermission(
522+
context,
523+
Manifest.permission.ACCESS_NETWORK_STATE
524+
) == PackageManager.PERMISSION_GRANTED
525+
val hasWifiStatePermission = ContextCompat.checkSelfPermission(
526+
context,
527+
Manifest.permission.ACCESS_WIFI_STATE
528+
) == PackageManager.PERMISSION_GRANTED
529+
val hasReadPhoneStatePermission = ContextCompat.checkSelfPermission(
530+
context,
531+
Manifest.permission.READ_PHONE_STATE
532+
) == PackageManager.PERMISSION_GRANTED
519533

520534
// Check permissions for WifiManager and TelephonyManager access
521535
// If we don't handle this, it crashes on restricted devices
522536
val wifiStats = try {
523-
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
524-
val network = connectivityManager.activeNetwork
525-
val capabilities = network?.let { connectivityManager.getNetworkCapabilities(it) }
526-
val wifiConnected = capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true
537+
val wifiConnected = if (hasNetworkStatePermission) {
538+
val network = connectivityManager.activeNetwork
539+
val capabilities = network?.let { connectivityManager.getNetworkCapabilities(it) }
540+
capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true
541+
} else {
542+
false
543+
}
527544

528-
if (wifiConnected) {
545+
if (wifiConnected && hasWifiStatePermission) {
546+
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
529547
@Suppress("DEPRECATION")
530548
val wifiInfo = wifiManager.connectionInfo
531549
val ssid = wifiInfo.ssid?.replace("\"", "") ?: "Unknown"
@@ -554,24 +572,36 @@ class SystemMonitor @Inject constructor(
554572

555573
val (mobileConnected, mobileType, simPresent) = try {
556574
val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
557-
val network = connectivityManager.activeNetwork
558-
val capabilities = network?.let { connectivityManager.getNetworkCapabilities(it) }
559-
val mobConnected = capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true
575+
val mobConnected = if (hasNetworkStatePermission) {
576+
val network = connectivityManager.activeNetwork
577+
val capabilities = network?.let { connectivityManager.getNetworkCapabilities(it) }
578+
capabilities?.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) == true
579+
} else {
580+
false
581+
}
560582

561583
val type = if (mobConnected) {
562-
@Suppress("DEPRECATION")
563-
when (telephonyManager.networkType) {
564-
TelephonyManager.NETWORK_TYPE_LTE -> "LTE"
565-
TelephonyManager.NETWORK_TYPE_NR -> "5G"
566-
TelephonyManager.NETWORK_TYPE_HSPAP -> "HSPA+"
567-
TelephonyManager.NETWORK_TYPE_HSPA -> "HSPA"
568-
TelephonyManager.NETWORK_TYPE_EDGE -> "EDGE"
569-
TelephonyManager.NETWORK_TYPE_GPRS -> "GPRS"
570-
else -> "Mobile"
584+
if (hasReadPhoneStatePermission) {
585+
@Suppress("DEPRECATION")
586+
when (telephonyManager.networkType) {
587+
TelephonyManager.NETWORK_TYPE_LTE -> "LTE"
588+
TelephonyManager.NETWORK_TYPE_NR -> "5G"
589+
TelephonyManager.NETWORK_TYPE_HSPAP -> "HSPA+"
590+
TelephonyManager.NETWORK_TYPE_HSPA -> "HSPA"
591+
TelephonyManager.NETWORK_TYPE_EDGE -> "EDGE"
592+
TelephonyManager.NETWORK_TYPE_GPRS -> "GPRS"
593+
else -> "Mobile"
594+
}
595+
} else {
596+
"Mobile"
571597
}
572598
} else ""
573599

574-
val sim = telephonyManager.simState == TelephonyManager.SIM_STATE_READY
600+
val sim = if (hasReadPhoneStatePermission) {
601+
telephonyManager.simState == TelephonyManager.SIM_STATE_READY
602+
} else {
603+
false
604+
}
575605
Triple(mobConnected, type, sim)
576606
} catch (e: Exception) {
577607
Triple(false, "", false)

0 commit comments

Comments
 (0)