diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index c0f97ba..3400255 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,6 +3,7 @@
xmlns:tools="http://schemas.android.com/tools">
+
diff --git a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt
index 4dd164b..0d1c823 100644
--- a/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt
+++ b/app/src/main/java/com/yuanxuan/rokid/MainActivity.kt
@@ -6,9 +6,12 @@ import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import androidx.core.view.isGone
+import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.yuanxuan.rokid.databinding.ActivityMainBinding
import com.yuanxuan.rokid.dependencies.AppDependencies
+import com.yuanxuan.rokid.device.DeviceServiceManager
import kotlinx.coroutines.launch
class MainActivity : AppCompatActivity() {
@@ -34,6 +37,19 @@ class MainActivity : AppCompatActivity() {
*/
AppDependencies.deviceServiceManager.batteryPercentage.collect {
binding.batteryLevel.text = "${it}%"
+ binding.batteryLevelIv.setImageLevel(it)
+ }
+ }
+ lifecycleScope.launch {
+ AppDependencies.deviceServiceManager.wifiState.collect {
+ when (it) {
+ is DeviceServiceManager.WifiState.Connected -> {
+ binding.wifiIv.setImageLevel(it.level)
+ binding.wifiIv.isVisible = true
+ }
+
+ DeviceServiceManager.WifiState.Unconnected -> binding.wifiIv.isGone = true
+ }
}
}
diff --git a/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt b/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt
index 63c4100..c16ab18 100644
--- a/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt
+++ b/app/src/main/java/com/yuanxuan/rokid/device/DeviceServiceManager.kt
@@ -5,6 +5,11 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
+import android.net.ConnectivityManager
+import android.net.Network
+import android.net.NetworkCapabilities
+import android.net.NetworkRequest
+import android.net.wifi.WifiManager
import android.os.BatteryManager
import com.rokid.dcg.sprite.service.IInstructListener
import com.rokid.dcg.sprite.service.IInstructService
@@ -29,7 +34,7 @@ import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
-class DeviceServiceManager(val context: Application) {
+class DeviceServiceManager(val context: Application) : ConnectivityManager.NetworkCallback() {
companion object {
/**
@@ -52,6 +57,15 @@ class DeviceServiceManager(val context: Application) {
private val _batteryPercentage = MutableStateFlow(-1)
val batteryPercentage = _batteryPercentage.asStateFlow()
+ /**
+ * wifi
+ */
+ private val _wifiState: MutableStateFlow = MutableStateFlow(WifiState.Unconnected)
+ val wifiState = _wifiState.asStateFlow()
+ private val wifiManager by lazy {
+ context.applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
+ }
+
lateinit var sn: String
private set
@@ -86,6 +100,16 @@ class DeviceServiceManager(val context: Application) {
}
}
}
+
+ /**
+ * 监听wifi状态
+ */
+ val connectivityManager =
+ context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
+ val request = NetworkRequest.Builder()
+ .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
+ .build()
+ connectivityManager.registerNetworkCallback(request, this)
}
val instructListener = object : IInstructListener.Stub() {
@@ -274,10 +298,29 @@ class DeviceServiceManager(val context: Application) {
}
}
+ override fun onLost(network: Network) {
+ _wifiState.update { WifiState.Unconnected }
+ }
+
+ override fun onCapabilitiesChanged(network: Network, networkCapabilities: NetworkCapabilities) {
+ _wifiState.update {
+ val level = wifiManager.calculateSignalLevel(networkCapabilities.signalStrength)
+ WifiState.Connected(
+ // maxSignalLevel是4 level区间应该是 0-3 这里却返回了4 限制一下
+ level = level.coerceAtMost(wifiManager.maxSignalLevel - 1)
+ )
+ }
+ }
+
sealed interface InstructState {
data object None : InstructState
data object WaitingInstructState : InstructState
}
+ sealed interface WifiState {
+ data object Unconnected : WifiState
+ data class Connected(val level: Int) : WifiState
+ }
+
}
diff --git a/app/src/main/res/drawable/battery_level_list.xml b/app/src/main/res/drawable/battery_level_list.xml
new file mode 100644
index 0000000..965d2ba
--- /dev/null
+++ b/app/src/main/res/drawable/battery_level_list.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/icon_battery_0.xml b/app/src/main/res/drawable/icon_battery_0.xml
new file mode 100644
index 0000000..90ea021
--- /dev/null
+++ b/app/src/main/res/drawable/icon_battery_0.xml
@@ -0,0 +1,12 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_battery_100.xml b/app/src/main/res/drawable/icon_battery_100.xml
new file mode 100644
index 0000000..1457af5
--- /dev/null
+++ b/app/src/main/res/drawable/icon_battery_100.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_battery_25.xml b/app/src/main/res/drawable/icon_battery_25.xml
new file mode 100644
index 0000000..59a55e9
--- /dev/null
+++ b/app/src/main/res/drawable/icon_battery_25.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_battery_50.xml b/app/src/main/res/drawable/icon_battery_50.xml
new file mode 100644
index 0000000..fd124e9
--- /dev/null
+++ b/app/src/main/res/drawable/icon_battery_50.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_battery_75.xml b/app/src/main/res/drawable/icon_battery_75.xml
new file mode 100644
index 0000000..67e6ffb
--- /dev/null
+++ b/app/src/main/res/drawable/icon_battery_75.xml
@@ -0,0 +1,15 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_wifi_1.xml b/app/src/main/res/drawable/icon_wifi_1.xml
new file mode 100644
index 0000000..c7be3e8
--- /dev/null
+++ b/app/src/main/res/drawable/icon_wifi_1.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/drawable/icon_wifi_2.xml b/app/src/main/res/drawable/icon_wifi_2.xml
new file mode 100644
index 0000000..ba19648
--- /dev/null
+++ b/app/src/main/res/drawable/icon_wifi_2.xml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_wifi_3.xml b/app/src/main/res/drawable/icon_wifi_3.xml
new file mode 100644
index 0000000..14054b0
--- /dev/null
+++ b/app/src/main/res/drawable/icon_wifi_3.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/icon_wifi_4.xml b/app/src/main/res/drawable/icon_wifi_4.xml
new file mode 100644
index 0000000..c540c5d
--- /dev/null
+++ b/app/src/main/res/drawable/icon_wifi_4.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/wifi_level_list.xml b/app/src/main/res/drawable/wifi_level_list.xml
new file mode 100644
index 0000000..53e771b
--- /dev/null
+++ b/app/src/main/res/drawable/wifi_level_list.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index b27951c..244e535 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -18,9 +18,23 @@
app:layout_constraintEnd_toEndOf="parent" />
+
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 93c7ba3..fe0303e 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -1,5 +1,5 @@
12.sp
- 12.dp
+ 16.dp
\ No newline at end of file