try to avoid crash in conversation info

could not reproduce.
Code copied from Julius' PR https://github.com/nextcloud/talk-android/pull/5004/

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2025-05-30 16:10:20 +02:00
parent 78a88a9ce5
commit a559fd5ea6
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B

View File

@ -423,6 +423,7 @@ class ConversationInfoActivity :
} }
} }
@Suppress("Detekt.TooGenericExceptionCaught")
private fun initViewStateObserver() { private fun initViewStateObserver() {
viewModel.viewState.observe(this) { state -> viewModel.viewState.observe(this) { state ->
when (state) { when (state) {
@ -443,8 +444,10 @@ class ConversationInfoActivity :
) )
} }
if (conversation!!.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) { conversation?.let {
viewModel.getProfileData(conversationUser, conversation!!.name) if (it.type == ConversationEnums.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL) {
viewModel.getProfileData(conversationUser, it.name)
}
} }
} }
@ -459,28 +462,48 @@ class ConversationInfoActivity :
viewModel.getProfileViewState.observe(this) { state -> viewModel.getProfileViewState.observe(this) { state ->
when (state) { when (state) {
is ConversationInfoViewModel.GetProfileSuccessState -> { is ConversationInfoViewModel.GetProfileSuccessState -> {
val profile = state.profile try {
val pronouns = profile.pronouns ?: "" // Pronouns
binding.pronouns.text = pronouns val profile = state.profile
val pronouns = profile.pronouns ?: ""
binding.pronouns.text = pronouns
val concat1 = if (profile.role != null && profile.company != null) " @ " else "" // Role @ Organization
val role = profile.role ?: "" val concat1 = if (profile.role != null && profile.company != null) " @ " else ""
val company = profile.company ?: "" val role = profile.role ?: ""
val professionCompanyText = "$role$concat1$company" val company = profile.company ?: ""
binding.professionCompany.text = professionCompanyText val professionCompanyText = "$role$concat1$company"
binding.professionCompany.text = professionCompanyText
val profileZoneOffset = ZoneOffset.ofTotalSeconds(0) // Local Time: xX:xX · Address
val secondsToAdd = profile.timezoneOffset?.toLong() ?: 0 val profileZoneOffset = ZoneOffset.ofTotalSeconds(0)
val localTime = ZonedDateTime.ofInstant(Instant.now().plusSeconds(secondsToAdd), profileZoneOffset) val secondsToAdd = profile.timezoneOffset?.toLong() ?: 0
val localTimeString = localTime.format(DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)) val localTime = ZonedDateTime.ofInstant(
val concat2 = if (profile.address != null) " · " else "" Instant.now().plusSeconds(secondsToAdd),
val address = profile.address ?: "" profileZoneOffset
val localTimeLocation = "$localTimeString$concat2$address" )
binding.locationTime.text = resources.getString(R.string.local_time, localTimeLocation) val localTimeString = localTime.format(
DateTimeFormatter
.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.getDefault())
)
val concat2 = if (profile.address != null) " · " else ""
val address = profile.address ?: ""
val localTimeLocation = "$localTimeString$concat2$address"
binding.locationTime.text = resources.getString(R.string.local_time, localTimeLocation)
binding.pronouns.visibility = VISIBLE binding.pronouns.visibility = VISIBLE
binding.professionCompany.visibility = if (professionCompanyText.isNotEmpty()) VISIBLE else GONE binding.professionCompany.visibility = if (professionCompanyText.isNotEmpty()) VISIBLE else GONE
binding.locationTime.visibility = VISIBLE binding.locationTime.visibility = VISIBLE
} catch (e: Exception) {
Log.e(TAG, "Exception getting profile information", e)
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
}
}
is ConversationInfoViewModel.GetProfileErrorState -> {
Log.e(TAG, "Network error occurred getting profile information")
Snackbar.make(binding.root, R.string.nc_common_error_sorry, Snackbar.LENGTH_LONG).show()
} }
else -> {} else -> {}