Allow to export received files to Android's media store if auto download is enabled

This commit is contained in:
Sylvain Berfini 2021-05-05 11:40:30 +02:00
parent d5508b6ffe
commit 8b417fe436
3 changed files with 43 additions and 18 deletions

View file

@ -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)
}
}

View file

@ -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) {

View file

@ -93,7 +93,7 @@
<include
layout="@layout/settings_widget_switch"
linphone:title="@{@string/chat_settings_downloaded_media_public_title}"
linphone:enabled="@{viewModel.autoDownloadIndex == 0 &amp;&amp; !viewModel.vfs}"
linphone:enabled="@{!viewModel.vfs}"
linphone:subtitle="@{@string/chat_settings_downloaded_media_public_summary}"
linphone:listener="@{viewModel.downloadedMediaPublicListener}"
linphone:checked="@={viewModel.downloadedMediaPublic}"/>