From c709c720e4821b9c26c83d70a50db060b2498701 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 10 Mar 2025 10:16:06 +0100 Subject: [PATCH] Prevent being stuck while media list is processed --- .../compatibility/Api34Compatibility.kt | 3 +- .../ConversationDocumentsListViewModel.kt | 4 +- .../ConversationMediaListViewModel.kt | 9 +- .../chat/viewmodel/ConversationViewModel.kt | 14 +-- .../SendMessageInConversationViewModel.kt | 2 +- .../viewmodel/AddressSelectionViewModel.kt | 2 +- .../java/org/linphone/utils/DialogUtils.kt | 6 +- .../java/org/linphone/utils/ImageUtils.kt | 5 - .../java/org/linphone/utils/ShortcutUtils.kt | 4 +- .../main/res/layout/chat_media_fragment.xml | 113 ++++++++++-------- 10 files changed, 88 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt b/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt index e2a036801..4bcdbc661 100644 --- a/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt +++ b/app/src/main/java/org/linphone/compatibility/Api34Compatibility.kt @@ -27,7 +27,6 @@ import android.content.Intent import android.os.Build import android.provider.Settings import androidx.annotation.RequiresApi -import androidx.core.content.ContextCompat import org.linphone.core.tools.Log import androidx.core.net.toUri @@ -72,7 +71,7 @@ class Api34Compatibility { intent.data = "package:${context.packageName}".toUri() intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) Log.i("$TAG Starting ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT") - ContextCompat.startActivity(context, intent, null) + context.startActivity(intent, null) } } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationDocumentsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationDocumentsListViewModel.kt index e703677b6..82ceaab0b 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationDocumentsListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationDocumentsListViewModel.kt @@ -42,7 +42,8 @@ class ConversationDocumentsListViewModel MutableLiveData>() } - override fun beforeNotifyingChatRoomFound(sameOne: Boolean) { + @WorkerThread + override fun afterNotifyingChatRoomFound(sameOne: Boolean) { loadDocumentsList() } @@ -98,6 +99,7 @@ class ConversationDocumentsListViewModel list.add(model) } } + Log.i("$TAG [${documents.size}] documents have been processed") documentsList.postValue(list) operationInProgress.postValue(false) diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationMediaListViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationMediaListViewModel.kt index f05ff724f..bad0ea672 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationMediaListViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationMediaListViewModel.kt @@ -36,11 +36,14 @@ class ConversationMediaListViewModel val mediaList = MutableLiveData>() + val operationInProgress = MutableLiveData() + val openMediaEvent: MutableLiveData> by lazy { MutableLiveData>() } - override fun beforeNotifyingChatRoomFound(sameOne: Boolean) { + @WorkerThread + override fun afterNotifyingChatRoomFound(sameOne: Boolean) { loadMediaList() } @@ -52,6 +55,8 @@ class ConversationMediaListViewModel @WorkerThread private fun loadMediaList() { + operationInProgress.postValue(true) + val list = arrayListOf() Log.i( "$TAG Loading media contents for conversation [${LinphoneUtils.getConversationId( @@ -85,7 +90,9 @@ class ConversationMediaListViewModel list.add(model) } } + Log.i("$TAG [${media.size}] media have been processed") mediaList.postValue(list) + operationInProgress.postValue(false) } } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index a8cf0192a..b97e7df55 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -291,7 +291,7 @@ class ConversationViewModel list.remove(found) eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } else { Log.e("$TAG Failed to find matching message in conversation events list") } @@ -432,7 +432,7 @@ class ConversationViewModel list.remove(found) eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } else { Log.e( "$TAG Failed to find chat message id [${chatMessageModel.id}] in events list!" @@ -528,7 +528,7 @@ class ConversationViewModel list.addAll(eventsList) eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } } } @@ -651,7 +651,7 @@ class ConversationViewModel Log.i("$TAG Extracted [${list.size}] events from conversation history in database") eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } @WorkerThread @@ -698,7 +698,7 @@ class ConversationViewModel list.addAll(newList) eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } @WorkerThread @@ -730,7 +730,7 @@ class ConversationViewModel list.addAll(eventsList) eventsList = list updateEvents.postValue(Event(true)) - isEmpty.postValue(eventsList.isEmpty) + isEmpty.postValue(eventsList.isEmpty()) } @WorkerThread @@ -801,7 +801,7 @@ class ConversationViewModel eventsList.addAll(processGroupedEvents(arrayListOf(event))) } else { for (event in history) { - if (groupedEventLogs.isEmpty) { + if (groupedEventLogs.isEmpty()) { groupedEventLogs.add(event) continue } diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt index ae35f1517..ecae462b5 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/SendMessageInConversationViewModel.kt @@ -433,7 +433,7 @@ class SendMessageInConversationViewModel attachments.value = list maxNumberOfAttachmentsReached.value = list.size >= MAX_FILES_TO_ATTACH - if (list.isEmpty) { + if (list.isEmpty()) { isFileAttachmentsListOpen.value = false } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt index c495b5976..fae45f014 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt @@ -328,7 +328,7 @@ abstract class AddressSelectionViewModel list.addAll(contactsList) list.addAll(suggestionsList) modelsList.postValue(list) - isEmpty.postValue(list.isEmpty) + isEmpty.postValue(list.isEmpty()) Log.i( "$TAG Processed [${results.size}] results: [${conversationsList.size}] conversations, [${favoritesList.size}] favorites, [${contactsList.size}] contacts and [${suggestionsList.size}] suggestions" ) diff --git a/app/src/main/java/org/linphone/utils/DialogUtils.kt b/app/src/main/java/org/linphone/utils/DialogUtils.kt index e41ae3264..0b7b1bb87 100644 --- a/app/src/main/java/org/linphone/utils/DialogUtils.kt +++ b/app/src/main/java/org/linphone/utils/DialogUtils.kt @@ -21,7 +21,6 @@ package org.linphone.utils import android.app.Dialog import android.content.Context -import android.graphics.drawable.ColorDrawable import android.graphics.drawable.Drawable import android.text.method.LinkMovementMethod import android.view.LayoutInflater @@ -67,6 +66,7 @@ import org.linphone.ui.call.model.ZrtpSasConfirmationDialogModel import org.linphone.ui.main.contacts.model.ContactTrustDialogModel import org.linphone.ui.main.contacts.model.NumberOrAddressPickerDialogModel import org.linphone.ui.main.model.GroupSetOrEditSubjectDialogModel +import androidx.core.graphics.drawable.toDrawable class DialogUtils { companion object { @@ -543,9 +543,7 @@ class DialogUtils { ) setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE) - val d: Drawable = ColorDrawable( - context.getColor(R.color.bc_black) - ) + val d: Drawable = context.getColor(R.color.bc_black).toDrawable() d.alpha = 153 // 60% opacity setBackgroundDrawable(d) } diff --git a/app/src/main/java/org/linphone/utils/ImageUtils.kt b/app/src/main/java/org/linphone/utils/ImageUtils.kt index 20d6579c8..746016d7b 100644 --- a/app/src/main/java/org/linphone/utils/ImageUtils.kt +++ b/app/src/main/java/org/linphone/utils/ImageUtils.kt @@ -64,11 +64,6 @@ class ImageUtils { if (path != null) { try { val fromPictureUri = path.toUri() - if (fromPictureUri == null) { - Log.e("$TAG Failed to parse path [$path] as URI") - return null - } - // We make a copy to ensure Bitmap will be Software and not Hardware, required for shortcuts val bitmap = ImageDecoder.decodeBitmap( ImageDecoder.createSource(context.contentResolver, fromPictureUri) diff --git a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt index 05709d181..381a1baef 100644 --- a/app/src/main/java/org/linphone/utils/ShortcutUtils.kt +++ b/app/src/main/java/org/linphone/utils/ShortcutUtils.kt @@ -67,7 +67,9 @@ class ShortcutUtils { var count = 0 for (chatRoom in defaultAccount.chatRooms) { - if (defaultAccount.params.instantMessagingEncryptionMandatory && !chatRoom.currentParams.isEncryptionEnabled) { + if (defaultAccount.params.instantMessagingEncryptionMandatory && + !chatRoom.hasCapability(ChatRoom.Capabilities.Encrypted.toInt()) + ) { Log.w( "$TAG Account is in secure mode, skipping not encrypted conversation [${LinphoneUtils.getConversationId( chatRoom diff --git a/app/src/main/res/layout/chat_media_fragment.xml b/app/src/main/res/layout/chat_media_fragment.xml index e77b4e939..6afb7e345 100644 --- a/app/src/main/res/layout/chat_media_fragment.xml +++ b/app/src/main/res/layout/chat_media_fragment.xml @@ -1,6 +1,7 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:bind="http://schemas.android.com/tools"> @@ -12,61 +13,71 @@ type="org.linphone.ui.main.chat.viewmodel.ConversationMediaListViewModel" /> - + android:layout_height="match_parent"> - + - + - + - + - + + + + + + + \ No newline at end of file