From 2f18ecb56255a9372f30758db2e49b45c5cd60ca Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Sat, 18 Nov 2023 16:52:23 +0100 Subject: [PATCH] Added auto downloaded files to notifications --- .../notifications/NotificationsManager.kt | 21 +++++------ .../main/java/org/linphone/utils/FileUtils.kt | 37 +++++++++++++++++++ 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt index 44135f5da..5da0852e0 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.kt +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.kt @@ -32,6 +32,7 @@ import android.content.pm.ServiceInfo import android.graphics.Bitmap import android.net.Uri import android.os.Bundle +import android.webkit.MimeTypeMap import androidx.annotation.AnyThread import androidx.annotation.MainThread import androidx.annotation.WorkerThread @@ -68,6 +69,7 @@ import org.linphone.core.tools.Log import org.linphone.ui.call.CallActivity import org.linphone.ui.main.MainActivity import org.linphone.utils.AppUtils +import org.linphone.utils.FileUtils import org.linphone.utils.LinphoneUtils import org.linphone.utils.ShortcutUtils @@ -661,27 +663,22 @@ class NotificationsManager @MainThread constructor(private val context: Context) ) for (content in message.contents) { - /*if (content.isFile) { // TODO: show image in notif if possible + if (content.isFile) { val path = content.filePath if (path != null) { - val contentUri: Uri = FileUtils.getFilePath(context, path) - val filePath: String = contentUri.toString() + val contentUri = FileUtils.getPublicFilePath(context, path) + val filePath = contentUri.toString() val extension = FileUtils.getExtensionFromFileName(filePath) if (extension.isNotEmpty()) { - val mime = - MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) + val mime = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension) notifiableMessage.filePath = contentUri notifiableMessage.fileMime = mime - Log.i( - "$TAG Added file $contentUri with MIME $mime to notification" - ) + Log.i("$TAG Added file $contentUri with MIME $mime to notification") } else { - Log.e( - "$TAG Couldn't find extension for incoming message with file $path" - ) + Log.e("$TAG Couldn't find extension for incoming message with file $path") } } - }*/ + } } return notifiableMessage diff --git a/app/src/main/java/org/linphone/utils/FileUtils.kt b/app/src/main/java/org/linphone/utils/FileUtils.kt index 0cf5e56c8..3c6f996cf 100644 --- a/app/src/main/java/org/linphone/utils/FileUtils.kt +++ b/app/src/main/java/org/linphone/utils/FileUtils.kt @@ -30,6 +30,7 @@ import android.system.Os import android.text.format.Formatter import android.webkit.MimeTypeMap import androidx.annotation.AnyThread +import androidx.core.content.FileProvider import java.io.File import java.io.FileInputStream import java.io.FileOutputStream @@ -38,6 +39,7 @@ import java.util.Locale import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.linphone.LinphoneApplication.Companion.coreContext +import org.linphone.R import org.linphone.core.tools.Log class FileUtils { @@ -155,6 +157,41 @@ class FileUtils { return file } + fun getPublicFilePath(context: Context, path: String): Uri { + val contentUri: Uri + when { + path.startsWith("file://") -> { + val file = File(path.substring("file://".length)) + contentUri = FileProvider.getUriForFile( + context, + context.getString(R.string.file_provider), + file + ) + } + path.startsWith("content://") -> { + contentUri = Uri.parse(path) + } + else -> { + val file = File(path) + contentUri = try { + FileProvider.getUriForFile( + context, + context.getString(R.string.file_provider), + file + ) + } catch (e: Exception) { + Log.e( + "$TAG Couldn't get URI for file $file using file provider ${context.getString( + R.string.file_provider + )}" + ) + Uri.parse(path) + } + } + } + return contentUri + } + suspend fun getFilePath(context: Context, uri: Uri, overrideExisting: Boolean): String? { return withContext(Dispatchers.IO) { val name: String = getNameFromUri(uri, context)