feat: v1.8.0 — new app icon (varroa-final.png) + fix GnssStatus model conflict + remove SSH fallback
|
|
@ -30,6 +30,15 @@ android {
|
|||
}
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
create("release") {
|
||||
storeFile = file("/keystore/varroa-release.keystore")
|
||||
storePassword = "adacam-varroa-2026"
|
||||
keyAlias = "varroa-release"
|
||||
keyPassword = "adacam-varroa-2026"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
isMinifyEnabled = false
|
||||
|
|
|
|||
|
|
@ -202,36 +202,17 @@ class BeeCollectorService : LifecycleService() {
|
|||
settingsStore.updateCachedDeviceId(deviceId)
|
||||
Log.i(TAG, "Device ID retrieved via API: $deviceId (from ${if (result.data.deviceId != null) "deviceId" else if (result.data.serial != null) "serial" else "fallback"})")
|
||||
} else {
|
||||
Log.w(TAG, "API returned unknown device ID, trying SSH fallback...")
|
||||
fetchDeviceIdViaSsh()
|
||||
Log.w(TAG, "Device ID unknown from API, using cached or unknown")
|
||||
}
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
Log.e(TAG, "Failed to get device ID via API: ${result.message}, code: ${result.code}")
|
||||
Log.i(TAG, "Trying SSH fallback...")
|
||||
fetchDeviceIdViaSsh()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchDeviceIdViaSsh() {
|
||||
Log.d(TAG, "Attempting SSH fallback for device ID...")
|
||||
when (val result = beeClient.getDeviceIdViaSsh()) {
|
||||
is ApiResult.Success -> {
|
||||
val deviceId = result.data
|
||||
_currentDeviceId.value = deviceId
|
||||
// Update persistent cache
|
||||
settingsStore.updateCachedDeviceId(deviceId)
|
||||
Log.i(TAG, "Device ID retrieved via SSH: $deviceId")
|
||||
}
|
||||
is ApiResult.Error -> {
|
||||
Log.e(TAG, "Failed to get device ID via SSH: ${result.message}")
|
||||
_currentDeviceId.value = "unknown"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun startPollLoop(intervalSeconds: Int) {
|
||||
|
||||
pollJob?.cancel()
|
||||
Log.d(TAG, "Previous poll job cancelled")
|
||||
pollJob = lifecycleScope.launch {
|
||||
|
|
|
|||
|
|
@ -364,7 +364,7 @@ private fun StorageStatusCard(storage: StorageStatus) {
|
|||
@Composable
|
||||
private fun GnssStatusCard(gnss: GnssStatus?, hasLock: Boolean?) {
|
||||
StatusCard("GPS / GNSS") {
|
||||
val hasGps = gnss?.hasLock == true || hasLock == true
|
||||
val hasGps = gnss?.fix == true || hasLock == true
|
||||
|
||||
Row(verticalAlignment = Alignment.CenterVertically) {
|
||||
Icon(
|
||||
|
|
@ -390,21 +390,21 @@ private fun GnssStatusCard(gnss: GnssStatus?, hasLock: Boolean?) {
|
|||
Spacer(Modifier.height(4.dp))
|
||||
StatusRow("HDOP", "%.2f".format(it), if (it > 5) Color.Yellow else OnSurface)
|
||||
}
|
||||
if (gnss.lat != null && gnss.lon != null) {
|
||||
if (gnss.latDeg != null && gnss.lonDeg != null) {
|
||||
Spacer(Modifier.height(4.dp))
|
||||
StatusRow("Position", "%.5f, %.5f".format(gnss.lat, gnss.lon))
|
||||
StatusRow("Position", "%.5f, %.5f".format(gnss.latDeg, gnss.lonDeg))
|
||||
}
|
||||
gnss.alt?.let {
|
||||
gnss.altM?.let {
|
||||
Spacer(Modifier.height(4.dp))
|
||||
StatusRow("Altitude", "%.1f m".format(it))
|
||||
}
|
||||
gnss.speedKmh?.let {
|
||||
gnss.speedMs?.let {
|
||||
Spacer(Modifier.height(4.dp))
|
||||
StatusRow("Speed", "%.1f km/h".format(it))
|
||||
StatusRow("Speed", "%.1f km/h".format(it * 3.6))
|
||||
}
|
||||
gnss.lastFixAgeSec?.let {
|
||||
gnss.unixMs?.let {
|
||||
Spacer(Modifier.height(4.dp))
|
||||
StatusRow("Last Fix", "${it}s ago", if (it > 30) Color.Yellow else OnSurface)
|
||||
val ageMs = System.currentTimeMillis() - it; val ageSec = (ageMs / 1000).toInt(); StatusRow("Last Fix", "${ageSec}s ago", if (ageSec > 30) Color.Yellow else OnSurface)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,2 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#000000" /></shape>
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<solid android:color="#000000" />
|
||||
</shape>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 18 KiB |