From bf2fd62154aadd8b6da81f0c5d862b59cd3ed4e2 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Fri, 11 Oct 2024 01:12:17 +0200 Subject: [PATCH] get filename of URI that are not PersistenBlobProvider --- .../util/SendRelayedMessageUtil.java | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java b/src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java index 7f696c2be..4476767e9 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java +++ b/src/main/java/org/thoughtcrime/securesms/util/SendRelayedMessageUtil.java @@ -1,8 +1,11 @@ package org.thoughtcrime.securesms.util; import android.app.Activity; +import android.content.ContentResolver; import android.content.Context; +import android.database.Cursor; import android.net.Uri; +import android.provider.OpenableColumns; import com.b44t.messenger.DcContext; import com.b44t.messenger.DcMsg; @@ -113,13 +116,32 @@ public class SendRelayedMessageUtil { private static String getRealPathFromUri(Context context, Uri uri) throws NullPointerException { DcContext dcContext = DcHelper.getContext(context); try { - String filename = uri.getPathSegments().get(PersistentBlobProvider.FILENAME_PATH_SEGMENT); + + String filename = "cannot-resolve.jpg"; + if (PartAuthority.isLocalUri(uri)) { + filename = uri.getPathSegments().get(PersistentBlobProvider.FILENAME_PATH_SEGMENT); + } else if (uri.getScheme().equals("content")) { + final ContentResolver contentResolver = context.getContentResolver(); + final Cursor cursor = contentResolver.query(uri, null, null, null, null); + try { + if (cursor != null && cursor.moveToFirst()) { + final int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME); + if (nameIndex >= 0) { + filename = cursor.getString(nameIndex); + } + } + } finally { + cursor.close(); + } + } + String ext = ""; int i = filename.lastIndexOf("."); if (i >= 0) { ext = filename.substring(i); filename = filename.substring(0, i); } + String path = DcHelper.getBlobdirFile(dcContext, filename, ext); // copy content to this file