Improve code.

This commit is contained in:
Benoit Marty 2025-10-31 19:15:19 +01:00
parent df4853e1f5
commit e6934aacfa
2 changed files with 4 additions and 25 deletions

View file

@ -10,10 +10,8 @@ package io.element.android.libraries.push.impl.notifications
import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.AppScope
import dev.zacsweers.metro.ContributesBinding import dev.zacsweers.metro.ContributesBinding
import dev.zacsweers.metro.SingleIn import dev.zacsweers.metro.SingleIn
import io.element.android.libraries.core.data.tryOrNull
import io.element.android.libraries.core.log.logger.LoggerTag import io.element.android.libraries.core.log.logger.LoggerTag
import io.element.android.libraries.di.annotations.AppCoroutineScope import io.element.android.libraries.di.annotations.AppCoroutineScope
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.MatrixClientProvider import io.element.android.libraries.matrix.api.MatrixClientProvider
import io.element.android.libraries.matrix.api.core.EventId import io.element.android.libraries.matrix.api.core.EventId
import io.element.android.libraries.matrix.api.core.RoomId import io.element.android.libraries.matrix.api.core.RoomId
@ -31,7 +29,6 @@ import io.element.android.services.appnavstate.api.NavigationState
import io.element.android.services.appnavstate.api.currentSessionId import io.element.android.services.appnavstate.api.currentSessionId
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import timber.log.Timber
private val loggerTag = LoggerTag("DefaultNotificationDrawerManager", LoggerTag.NotificationLoggerTag) private val loggerTag = LoggerTag("DefaultNotificationDrawerManager", LoggerTag.NotificationLoggerTag)
@ -190,29 +187,9 @@ class DefaultNotificationDrawerManager(
// We have an avatar and a display name, use it // We have an avatar and a display name, use it
userFromCache userFromCache
} else { } else {
client.getSafeUserProfile() client.getUserProfile().getOrNull() ?: MatrixUser(sessionId)
} }
notificationRenderer.render(currentUser, useCompleteNotificationFormat, notifiableEvents, imageLoader) notificationRenderer.render(currentUser, useCompleteNotificationFormat, notifiableEvents, imageLoader)
} }
} }
private suspend fun MatrixClient.getSafeUserProfile(): MatrixUser {
return tryOrNull(
onException = { Timber.tag(loggerTag.value).e(it, "Unable to retrieve info for user ${sessionId.value}") },
operation = {
val profile = getUserProfile().getOrNull()
// displayName cannot be empty else NotificationCompat.MessagingStyle() will crash
if (profile?.displayName.isNullOrEmpty()) {
profile?.copy(displayName = sessionId.value)
} else {
profile
}
}
) ?: MatrixUser(
userId = sessionId,
displayName = sessionId.value,
avatarUrl = null
)
}
} }

View file

@ -25,6 +25,7 @@ import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.ThreadId import io.element.android.libraries.matrix.api.core.ThreadId
import io.element.android.libraries.matrix.api.timeline.item.event.EventType import io.element.android.libraries.matrix.api.timeline.item.event.EventType
import io.element.android.libraries.matrix.api.user.MatrixUser import io.element.android.libraries.matrix.api.user.MatrixUser
import io.element.android.libraries.matrix.ui.model.getBestName
import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader import io.element.android.libraries.push.api.notifications.NotificationBitmapLoader
import io.element.android.libraries.push.impl.R import io.element.android.libraries.push.impl.R
import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo import io.element.android.libraries.push.impl.notifications.RoomEventGroupInfo
@ -446,7 +447,8 @@ class DefaultNotificationCreator(
): MessagingStyle { ): MessagingStyle {
return MessagingStyle( return MessagingStyle(
Person.Builder() Person.Builder()
.setName(user.displayName?.annotateForDebug(50)) // Note: name cannot be empty else NotificationCompat.MessagingStyle() will crash
.setName(user.getBestName().annotateForDebug(50))
.setIcon(bitmapLoader.getUserIcon(user.avatarUrl, imageLoader)) .setIcon(bitmapLoader.getUserIcon(user.avatarUrl, imageLoader))
.setKey(user.userId.value) .setKey(user.userId.value)
.build() .build()