mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 17:29:32 +01:00
Display message text in Media Preview.
This commit is contained in:
committed by
Greyson Parrelli
parent
1b7e4e047c
commit
eaeeb08987
@@ -2,23 +2,17 @@ package org.thoughtcrime.securesms.longmessage;
|
||||
|
||||
import android.content.Context;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import org.signal.core.util.StreamUtil;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage.ConversationMessageFactory;
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage;
|
||||
import org.thoughtcrime.securesms.database.MessageTable;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.mms.TextSlide;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.Optional;
|
||||
|
||||
class LongMessageRepository {
|
||||
@@ -40,15 +34,9 @@ class LongMessageRepository {
|
||||
@WorkerThread
|
||||
private Optional<LongMessage> getMmsLongMessage(@NonNull Context context, @NonNull MessageTable mmsDatabase, long messageId) {
|
||||
Optional<MmsMessageRecord> record = getMmsMessage(mmsDatabase, messageId);
|
||||
|
||||
if (record.isPresent()) {
|
||||
TextSlide textSlide = record.get().getSlideDeck().getTextSlide();
|
||||
|
||||
if (textSlide != null && textSlide.getUri() != null) {
|
||||
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get(), readFullBody(context, textSlide.getUri()))));
|
||||
} else {
|
||||
return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get())));
|
||||
}
|
||||
final ConversationMessage resolvedMessage = LongMessageResolveerKt.resolveBody(record.get(), context);
|
||||
return Optional.of(new LongMessage(resolvedMessage));
|
||||
} else {
|
||||
return Optional.empty();
|
||||
}
|
||||
@@ -61,14 +49,6 @@ class LongMessageRepository {
|
||||
}
|
||||
}
|
||||
|
||||
private @NonNull String readFullBody(@NonNull Context context, @NonNull Uri uri) {
|
||||
try (InputStream stream = PartAuthority.getAttachmentStream(context, uri)) {
|
||||
return StreamUtil.readFullyAsString(stream);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Failed to read full text body.", e);
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
interface Callback<T> {
|
||||
void onComplete(T result);
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package org.thoughtcrime.securesms.longmessage
|
||||
|
||||
import android.content.Context
|
||||
import android.net.Uri
|
||||
import org.signal.core.util.StreamUtil
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.conversation.ConversationMessage
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority
|
||||
import java.io.IOException
|
||||
|
||||
const val TAG = "LongMessageResolver"
|
||||
|
||||
fun readFullBody(context: Context, uri: Uri): String {
|
||||
try {
|
||||
PartAuthority.getAttachmentStream(context, uri).use { stream -> return StreamUtil.readFullyAsString(stream) }
|
||||
} catch (e: IOException) {
|
||||
Log.w(TAG, "Failed to read full text body.", e)
|
||||
return ""
|
||||
}
|
||||
}
|
||||
|
||||
fun MmsMessageRecord.resolveBody(context: Context): ConversationMessage {
|
||||
val textSlide = slideDeck.textSlide
|
||||
val textSlideUri = textSlide?.uri
|
||||
return if (textSlide != null && textSlideUri != null) {
|
||||
ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(context, this, readFullBody(context, textSlideUri))
|
||||
} else {
|
||||
ConversationMessage.ConversationMessageFactory.createWithUnresolvedData(context, this)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user