mirror of
https://github.com/moltbot/moltbot.git
synced 2026-04-27 00:17:29 +00:00
refactor(android-node): share battery snapshot parsing across device handlers
This commit is contained in:
@@ -26,6 +26,13 @@ import kotlinx.serialization.json.put
|
|||||||
class DeviceHandler(
|
class DeviceHandler(
|
||||||
private val appContext: Context,
|
private val appContext: Context,
|
||||||
) {
|
) {
|
||||||
|
private data class BatterySnapshot(
|
||||||
|
val status: Int,
|
||||||
|
val plugged: Int,
|
||||||
|
val levelFraction: Double?,
|
||||||
|
val temperatureC: Double?,
|
||||||
|
)
|
||||||
|
|
||||||
fun handleDeviceStatus(_paramsJson: String?): GatewaySession.InvokeResult {
|
fun handleDeviceStatus(_paramsJson: String?): GatewaySession.InvokeResult {
|
||||||
return GatewaySession.InvokeResult.ok(statusPayloadJson())
|
return GatewaySession.InvokeResult.ok(statusPayloadJson())
|
||||||
}
|
}
|
||||||
@@ -43,11 +50,7 @@ class DeviceHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun statusPayloadJson(): String {
|
private fun statusPayloadJson(): String {
|
||||||
val batteryIntent = appContext.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
|
val battery = readBatterySnapshot()
|
||||||
val batteryStatus =
|
|
||||||
batteryIntent?.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)
|
|
||||||
?: BatteryManager.BATTERY_STATUS_UNKNOWN
|
|
||||||
val batteryLevel = batteryLevelFraction(batteryIntent)
|
|
||||||
val powerManager = appContext.getSystemService(PowerManager::class.java)
|
val powerManager = appContext.getSystemService(PowerManager::class.java)
|
||||||
val storage = StatFs(Environment.getDataDirectory().absolutePath)
|
val storage = StatFs(Environment.getDataDirectory().absolutePath)
|
||||||
val totalBytes = storage.totalBytes
|
val totalBytes = storage.totalBytes
|
||||||
@@ -62,8 +65,8 @@ class DeviceHandler(
|
|||||||
put(
|
put(
|
||||||
"battery",
|
"battery",
|
||||||
buildJsonObject {
|
buildJsonObject {
|
||||||
batteryLevel?.let { put("level", JsonPrimitive(it)) }
|
battery.levelFraction?.let { put("level", JsonPrimitive(it)) }
|
||||||
put("state", JsonPrimitive(mapBatteryState(batteryStatus)))
|
put("state", JsonPrimitive(mapBatteryState(battery.status)))
|
||||||
put("lowPowerModeEnabled", JsonPrimitive(powerManager?.isPowerSaveMode == true))
|
put("lowPowerModeEnabled", JsonPrimitive(powerManager?.isPowerSaveMode == true))
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -189,20 +192,7 @@ class DeviceHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun healthPayloadJson(): String {
|
private fun healthPayloadJson(): String {
|
||||||
val batteryIntent = appContext.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
|
val battery = readBatterySnapshot()
|
||||||
val batteryStatus =
|
|
||||||
batteryIntent?.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)
|
|
||||||
?: BatteryManager.BATTERY_STATUS_UNKNOWN
|
|
||||||
val batteryPlugged = batteryIntent?.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) ?: 0
|
|
||||||
val batteryTempTenths = batteryIntent?.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, Int.MIN_VALUE)
|
|
||||||
?: Int.MIN_VALUE
|
|
||||||
val batteryTempC =
|
|
||||||
if (batteryTempTenths == Int.MIN_VALUE) {
|
|
||||||
null
|
|
||||||
} else {
|
|
||||||
batteryTempTenths.toDouble() / 10.0
|
|
||||||
}
|
|
||||||
|
|
||||||
val batteryManager = appContext.getSystemService(BatteryManager::class.java)
|
val batteryManager = appContext.getSystemService(BatteryManager::class.java)
|
||||||
val currentNowUa = batteryManager?.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)
|
val currentNowUa = batteryManager?.getLongProperty(BatteryManager.BATTERY_PROPERTY_CURRENT_NOW)
|
||||||
val currentNowMa =
|
val currentNowMa =
|
||||||
@@ -237,9 +227,9 @@ class DeviceHandler(
|
|||||||
put(
|
put(
|
||||||
"battery",
|
"battery",
|
||||||
buildJsonObject {
|
buildJsonObject {
|
||||||
put("state", JsonPrimitive(mapBatteryState(batteryStatus)))
|
put("state", JsonPrimitive(mapBatteryState(battery.status)))
|
||||||
put("chargingType", JsonPrimitive(mapChargingType(batteryPlugged)))
|
put("chargingType", JsonPrimitive(mapChargingType(battery.plugged)))
|
||||||
batteryTempC?.let { put("temperatureC", JsonPrimitive(it)) }
|
battery.temperatureC?.let { put("temperatureC", JsonPrimitive(it)) }
|
||||||
currentNowMa?.let { put("currentMa", JsonPrimitive(it)) }
|
currentNowMa?.let { put("currentMa", JsonPrimitive(it)) }
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
@@ -262,6 +252,26 @@ class DeviceHandler(
|
|||||||
}.toString()
|
}.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun readBatterySnapshot(): BatterySnapshot {
|
||||||
|
val intent = appContext.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
|
||||||
|
val status =
|
||||||
|
intent?.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN)
|
||||||
|
?: BatteryManager.BATTERY_STATUS_UNKNOWN
|
||||||
|
val plugged = intent?.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) ?: 0
|
||||||
|
val temperatureC =
|
||||||
|
intent
|
||||||
|
?.getIntExtra(BatteryManager.EXTRA_TEMPERATURE, Int.MIN_VALUE)
|
||||||
|
?.takeIf { it != Int.MIN_VALUE }
|
||||||
|
?.toDouble()
|
||||||
|
?.div(10.0)
|
||||||
|
return BatterySnapshot(
|
||||||
|
status = status,
|
||||||
|
plugged = plugged,
|
||||||
|
levelFraction = batteryLevelFraction(intent),
|
||||||
|
temperatureC = temperatureC,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
private fun batteryLevelFraction(intent: Intent?): Double? {
|
private fun batteryLevelFraction(intent: Intent?): Double? {
|
||||||
val rawLevel = intent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
|
val rawLevel = intent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) ?: -1
|
||||||
val rawScale = intent?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1
|
val rawScale = intent?.getIntExtra(BatteryManager.EXTRA_SCALE, -1) ?: -1
|
||||||
|
|||||||
Reference in New Issue
Block a user