Skip to content

Commit 8ea839e

Browse files
sk7n4k3dclaude
authored andcommitted
Fix compilation errors for upstream API compatibility
Adapt to upstream refactoring: MessagingTokenProvider, servers(), kotlinx.serialization, and new SettingsPresenter interface. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 9733eff commit 8ea839e

6 files changed

Lines changed: 34 additions & 18 deletions

File tree

app/src/full/kotlin/io/homeassistant/companion/android/push/FcmPushProvider.kt

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package io.homeassistant.companion.android.push
33
import io.homeassistant.companion.android.common.data.prefs.PrefsRepository
44
import io.homeassistant.companion.android.common.push.PushProvider
55
import io.homeassistant.companion.android.common.push.PushRegistrationResult
6-
import io.homeassistant.companion.android.onboarding.getMessagingToken
6+
import io.homeassistant.companion.android.common.util.MessagingTokenProvider
77
import javax.inject.Inject
88
import javax.inject.Singleton
99
import timber.log.Timber
@@ -15,16 +15,19 @@ import timber.log.Timber
1515
* so that users with a UnifiedPush distributor will use that instead.
1616
*/
1717
@Singleton
18-
class FcmPushProvider @Inject constructor(private val prefsRepository: PrefsRepository) : PushProvider {
18+
class FcmPushProvider @Inject constructor(
19+
private val prefsRepository: PrefsRepository,
20+
private val messagingTokenProvider: MessagingTokenProvider,
21+
) : PushProvider {
1922

2023
override val name: String = NAME
2124

2225
override val priority: Int = 20
2326

2427
override suspend fun isAvailable(): Boolean {
2528
return try {
26-
val token = getMessagingToken()
27-
token.isNotBlank()
29+
val token = messagingTokenProvider()
30+
!token.isBlank()
2831
} catch (e: Exception) {
2932
Timber.e(e, "FCM is not available")
3033
false
@@ -35,22 +38,22 @@ class FcmPushProvider @Inject constructor(private val prefsRepository: PrefsRepo
3538
// FCM is active only when UnifiedPush is not enabled and a valid token exists.
3639
if (prefsRepository.isUnifiedPushEnabled()) return false
3740
return try {
38-
val token = getMessagingToken()
39-
token.isNotBlank()
41+
val token = messagingTokenProvider()
42+
!token.isBlank()
4043
} catch (e: Exception) {
4144
false
4245
}
4346
}
4447

4548
override suspend fun register(): PushRegistrationResult? {
4649
return try {
47-
val token = getMessagingToken()
50+
val token = messagingTokenProvider()
4851
if (token.isBlank()) {
4952
Timber.w("FCM token is blank")
5053
null
5154
} else {
5255
PushRegistrationResult(
53-
pushToken = token,
56+
pushToken = token.value,
5457
pushUrl = "", // Empty URL means use built-in push URL
5558
encrypt = false,
5659
)

app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,9 @@ class MessagingManager @Inject constructor(
327327
}
328328
}
329329
if (!flattened.containsKey("webhook_id")) {
330-
serverManager.getServer(serverId)?.let { server ->
330+
runBlocking {
331+
serverManager.getServer(serverId)
332+
}?.let { server ->
331333
flattened["webhook_id"] = server.connection.webhookId.toString()
332334
}
333335
}

app/src/main/kotlin/io/homeassistant/companion/android/push/WebSocketPushProvider.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class WebSocketPushProvider @Inject constructor(
3535

3636
override suspend fun isActive(): Boolean {
3737
if (!serverManager.isRegistered()) return false
38-
return serverManager.defaultServers.any { server ->
38+
return serverManager.servers().any { server ->
3939
val setting = settingsDao.get(server.id)?.websocketSetting
4040
setting != null && setting != WebsocketSetting.NEVER
4141
}

app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,10 @@ class SettingsPresenterImpl @Inject constructor(
166166

167167
override fun getUnifiedPushDistributors(): List<String> = unifiedPushManager.getDistributors()
168168

169+
override fun registerUnifiedPushDistributor(context: Context, distributor: String) {
170+
unifiedPushManager.saveDistributor(distributor)
171+
}
172+
169173
override suspend fun showChangeLog(context: Context) {
170174
changeLog.showChangeLog(context, true)
171175
}

app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import dagger.hilt.android.qualifiers.ApplicationContext
88
import io.homeassistant.companion.android.common.R as commonR
99
import io.homeassistant.companion.android.common.data.integration.DeviceRegistration
1010
import io.homeassistant.companion.android.common.data.servers.ServerManager
11+
import io.homeassistant.companion.android.common.util.MessagingToken
12+
import io.homeassistant.companion.android.common.util.MessagingTokenProvider
1113
import io.homeassistant.companion.android.notifications.MessagingManager
12-
import io.homeassistant.companion.android.onboarding.getMessagingToken
1314
import javax.inject.Inject
1415
import kotlinx.coroutines.CoroutineScope
1516
import kotlinx.coroutines.Dispatchers
@@ -24,6 +25,7 @@ class UnifiedPushManager @Inject constructor(
2425
@ApplicationContext val context: Context,
2526
private val serverManager: ServerManager,
2627
private val messagingManager: MessagingManager,
28+
private val messagingTokenProvider: MessagingTokenProvider,
2729
) {
2830
companion object {
2931
const val DISTRIBUTOR_DISABLED = "disabled"
@@ -68,10 +70,10 @@ class UnifiedPushManager @Inject constructor(
6870
val url = endpoint?.url.orEmpty()
6971
val token = if (endpoint != null) {
7072
// Use public key as push token to allow for encryption.
71-
endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: ""
73+
MessagingToken(endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "")
7274
} else {
7375
// Revert to FCM token when disabling UnifiedPush.
74-
getMessagingToken()
76+
messagingTokenProvider()
7577
}
7678
val registered = messagingManager.isUnifiedPushEnabled()
7779
messagingManager.setUnifiedPushEnabled(endpoint != null)
@@ -80,8 +82,8 @@ class UnifiedPushManager @Inject constructor(
8082
Timber.d("Not trying to update registration since we aren't authenticated.")
8183
return@launch
8284
}
83-
val encrypt = endpoint != null && token.isNotBlank()
84-
serverManager.defaultServers.forEach {
85+
val encrypt = endpoint != null && !token.isBlank()
86+
serverManager.servers().forEach {
8587
launch {
8688
try {
8789
serverManager.integrationRepository(it.id).updateRegistration(

app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.homeassistant.companion.android.unifiedpush
22

33
import android.content.Context
4-
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
5-
import com.fasterxml.jackson.module.kotlin.readValue
4+
import kotlinx.serialization.json.Json
5+
import kotlinx.serialization.json.JsonObject
6+
import kotlinx.serialization.json.contentOrNull
7+
import kotlinx.serialization.json.jsonPrimitive
68
import dagger.hilt.android.AndroidEntryPoint
79
import io.homeassistant.companion.android.notifications.MessagingManager
810
import javax.inject.Inject
@@ -28,7 +30,10 @@ class UnifiedPushReceiver : MessagingReceiver() {
2830
Timber.d("From: $instance")
2931

3032
try {
31-
val data: Map<String, Any> = jacksonObjectMapper().readValue(message.content)
33+
val jsonObject = Json.decodeFromString<JsonObject>(message.content.decodeToString())
34+
val data: Map<String, Any> = jsonObject.mapValues { (_, value) ->
35+
value.jsonPrimitive.contentOrNull ?: value.toString()
36+
}
3237
messagingManager.handleMessage(data, SOURCE)
3338
} catch (e: Exception) {
3439
Timber.e(e, "Failed to parse UnifiedPush message")

0 commit comments

Comments
 (0)