diff --git a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt index fdb38d63a..638820a10 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/data/ChatMessageData.kt @@ -25,16 +25,13 @@ import android.text.util.Linkify import androidx.core.text.util.LinkifyCompat import androidx.lifecycle.MutableLiveData import org.linphone.LinphoneApplication.Companion.coreContext -import org.linphone.LinphoneApplication.Companion.corePreferences import org.linphone.R import org.linphone.contact.GenericContactData import org.linphone.core.ChatMessage import org.linphone.core.ChatMessageListenerStub import org.linphone.core.Content import org.linphone.core.tools.Log -import org.linphone.mediastream.Version import org.linphone.utils.AppUtils -import org.linphone.utils.PermissionHelper import org.linphone.utils.TimestampUtils class ChatMessageData( @@ -75,17 +72,7 @@ class ChatMessageData( Log.i("[Chat Message] File transfer done") updateContentsList() - if (!message.isEphemeral && !corePreferences.vfsEnabled && corePreferences.makePublicMediaFilesDownloaded) { - if (Version.sdkAboveOrEqual(Version.API29_ANDROID_10) || PermissionHelper.get().hasWriteExternalStorage()) { - for (content in message.contents) { - if (content.isFile && content.filePath != null && content.userData == null) { - addContentToMediaStore(content) - } - } - } else { - Log.e("[Chat Message] Can't make file public, app doesn't have WRITE_EXTERNAL_STORAGE permission") - } - } + coreContext.exportFilesInMessageToMediaStore(message) } } diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt index 1d6dabc59..de999b667 100644 --- a/app/src/main/java/org/linphone/core/CoreContext.kt +++ b/app/src/main/java/org/linphone/core/CoreContext.kt @@ -59,10 +59,8 @@ import org.linphone.contact.ContactsManager import org.linphone.core.tools.Log import org.linphone.mediastream.Version import org.linphone.notifications.NotificationsManager -import org.linphone.utils.AppUtils -import org.linphone.utils.AudioRouteUtils +import org.linphone.utils.* import org.linphone.utils.Event -import org.linphone.utils.LinphoneUtils class CoreContext(val context: Context, coreConfig: Config) { var stopped = false @@ -240,6 +238,21 @@ class CoreContext(val context: Context, coreConfig: Config) { previousCallState = state } + + override fun onMessageReceived(core: Core, chatRoom: ChatRoom, message: ChatMessage) { + if (core.maxSizeForAutoDownloadIncomingFiles != -1) { + var hasFile = false + for (content in message.contents) { + if (content.isFile) { + hasFile = true + break + } + } + if (hasFile) { + exportFilesInMessageToMediaStore(message) + } + } + } } private val loggingServiceListener = object : LoggingServiceListenerStub() { @@ -581,6 +594,31 @@ class CoreContext(val context: Context, coreConfig: Config) { /* Coroutine related */ + fun exportFilesInMessageToMediaStore(message: ChatMessage) { + if (message.isEphemeral) { + Log.w("[Context] Do not make ephemeral file(s) public") + return + } + if (corePreferences.vfsEnabled) { + Log.w("[Context] Do not make received file(s) public when VFS is enabled") + return + } + if (!corePreferences.makePublicMediaFilesDownloaded) { + Log.w("[Context] Making received files public setting disabled") + return + } + + if (Version.sdkAboveOrEqual(Version.API29_ANDROID_10) || PermissionHelper.get().hasWriteExternalStorage()) { + for (content in message.contents) { + if (content.isFile && content.filePath != null && content.userData == null) { + addContentToMediaStore(content) + } + } + } else { + Log.e("[Context] Can't make file public, app doesn't have WRITE_EXTERNAL_STORAGE permission") + } + } + fun addContentToMediaStore(content: Content) { coroutineScope.launch { when (content.type) { diff --git a/app/src/main/res/layout/settings_chat_fragment.xml b/app/src/main/res/layout/settings_chat_fragment.xml index cc28d67db..e99877eed 100644 --- a/app/src/main/res/layout/settings_chat_fragment.xml +++ b/app/src/main/res/layout/settings_chat_fragment.xml @@ -93,7 +93,7 @@