Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,6 @@ dependencies {
implementation(libs.subsampling.scale.image.view) {
exclude(group = "com.android.support", module = "support-annotations")
}
implementation(libs.stream)
implementation(libs.androidx.sqlite.ktx)
implementation(libs.sqlcipher.android)
implementation(libs.kotlinx.serialization.json)
Expand Down
42 changes: 0 additions & 42 deletions app/src/main/java/org/session/libsession/avatars/AvatarHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,14 @@
import android.content.Context;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.annimon.stream.Stream;

import org.session.libsession.utilities.Address;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;

/**
* @deprecated We no longer use these address-based avatars. All avatars are now stored as sha256 of
* urls encrypted locally. Look at {@link org.thoughtcrime.securesms.attachments.LocalEncryptedFileOutputStream},
* {@link org.thoughtcrime.securesms.attachments.AvatarDownloadWorker},
* {@link org.thoughtcrime.securesms.glide.RecipientAvatarDownloadManager} for more information.
*
* Once the migration grace period is over, this class shall be removed.
Expand All @@ -31,20 +20,6 @@ public class AvatarHelper {

private static final String AVATAR_DIRECTORY = "avatars";

public static InputStream getInputStreamFor(@NonNull Context context, @NonNull Address address)
throws FileNotFoundException
{
return new FileInputStream(getAvatarFile(context, address));
}

public static List<File> getAvatarFiles(@NonNull Context context) {
File avatarDirectory = new File(context.getFilesDir(), AVATAR_DIRECTORY);
File[] results = avatarDirectory.listFiles();

if (results == null) return new LinkedList<>();
else return Stream.of(results).toList();
}

public static void delete(@NonNull Context context, @NonNull Address address) {
getAvatarFile(context, address).delete();
}
Expand All @@ -56,21 +31,4 @@ public static void delete(@NonNull Context context, @NonNull Address address) {
return new File(avatarDirectory, new File(address.toString()).getName());
}

public static boolean avatarFileExists(@NonNull Context context , @NonNull Address address) {
File avatarFile = getAvatarFile(context, address);
return avatarFile.exists();
}

public static void setAvatar(@NonNull Context context, @NonNull Address address, @Nullable byte[] data)
throws IOException
{
if (data == null) {
delete(context, address);
} else {
try (FileOutputStream out = new FileOutputStream(getAvatarFile(context, address))) {
out.write(data);
}
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@

import androidx.annotation.Nullable;

import com.annimon.stream.Stream;

import org.session.libsignal.utilities.JsonUtil;
import org.session.libsignal.utilities.Log;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

import network.loki.messenger.R;

Expand Down Expand Up @@ -64,9 +63,9 @@ public RecentEmojiPageModel(Context context) {
return new ArrayList<>(recentlyUsed);
}

@Override public List<Emoji> getDisplayEmoji() {
return Stream.of(getEmoji()).map(Emoji::new).toList();
}
@Override public List<Emoji> getDisplayEmoji() {
return getEmoji().stream().map(Emoji::new).collect(Collectors.toList());
}

@Override public boolean hasSpriteMap() { return false; }

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.annimon.stream.Collectors;
import com.annimon.stream.Stream;

import org.thoughtcrime.securesms.emoji.EmojiCategory;

Expand All @@ -19,10 +17,6 @@ public class StaticEmojiPageModel implements EmojiPageModel {
private final @NonNull List<Emoji> emoji;
private final @Nullable Uri sprite;

public StaticEmojiPageModel(@NonNull EmojiCategory category, @NonNull String[] strings, @Nullable Uri sprite) {
this(category, Stream.of(strings).map(s -> new Emoji(Collections.singletonList(s))).collect(Collectors.toList()), sprite);
}

public StaticEmojiPageModel(@NonNull EmojiCategory category, @NonNull List<Emoji> emoji, @Nullable Uri sprite) {
this.category = category;
this.emoji = Collections.unmodifiableList(emoji);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,6 @@ import androidx.loader.content.Loader
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.LinearSmoothScroller
import androidx.recyclerview.widget.RecyclerView
import com.annimon.stream.Stream
import com.bumptech.glide.Glide
import com.squareup.phrase.Phrase
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -2984,14 +2983,21 @@ class ConversationActivityV2 : ScreenLockActionBarActivity(), InputBarDelegate,
}

private fun saveAttachments(message: MmsMessageRecord) {
val attachments: List<SaveAttachmentTask.Attachment?> = Stream.of(message.slideDeck.slides)
.filter { s: Slide -> s.uri != null && (s.hasImage() || s.hasVideo() || s.hasAudio() || s.hasDocument()) }
.map { s: Slide -> SaveAttachmentTask.Attachment(s.uri!!, s.contentType, message.dateReceived, s.filename) }
.toList()
val attachments: List<SaveAttachmentTask.Attachment> =
message.slideDeck.slides
.asSequence()
.filter { s ->
s.uri != null && (s.hasImage() || s.hasVideo() || s.hasAudio() || s.hasDocument())
}
.map { s ->
SaveAttachmentTask.Attachment(s.uri!!, s.contentType, message.dateReceived, s.filename)
}
.toList()

if (attachments.isNotEmpty()) {
val saveTask = SaveAttachmentTask(this)
saveTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, *attachments.toTypedArray())
if (!message.isOutgoing) { sendMediaSavedNotification() }
if (!message.isOutgoing) sendMediaSavedNotification()
return
}
// Implied else that there were no attachment(s)
Expand Down
111 changes: 0 additions & 111 deletions app/src/main/java/org/thoughtcrime/securesms/conversation/v2/Util.kt
Original file line number Diff line number Diff line change
Expand Up @@ -16,117 +16,11 @@
*/
package org.thoughtcrime.securesms.conversation.v2

import android.content.Context
import android.net.Uri
import android.text.TextUtils
import android.view.View
import com.annimon.stream.Stream
import java.util.Collections
import org.session.libsignal.utilities.Log

object Util {
private val TAG: String = Log.tag(Util::class.java)

fun <T> asList(vararg elements: T): List<T> {
val result = mutableListOf<T>() // LinkedList()
Collections.addAll(result, *elements)
return result
}

fun join(list: Array<String?>, delimiter: String?): String {
return join(listOf(*list), delimiter)
}

fun <T> join(list: Collection<T>, delimiter: String?): String {
val result = StringBuilder()
var i = 0

for (item in list) {
result.append(item)
if (++i < list.size) result.append(delimiter)
}

return result.toString()
}

fun join(list: LongArray, delimeter: String?): String {
val boxed: MutableList<Long> = ArrayList(list.size)

for (i in list.indices) {
boxed.add(list[i])
}

return join(boxed, delimeter)
}

@SafeVarargs
fun <E> join(vararg lists: List<E>): List<E> {
val totalSize = Stream.of(*lists).reduce(0) { sum: Int, list: List<E> -> sum + list.size }
val joined: MutableList<E> = ArrayList(totalSize)

for (list in lists) {
joined.addAll(list)
}

return joined
}

fun join(list: List<Long>, delimeter: String?): String {
val sb = StringBuilder()

for (j in list.indices) {
if (j != 0) sb.append(delimeter)
sb.append(list[j])
}

return sb.toString()
}

fun wait(lock: Any, timeout: Long) {
try {
(lock as Object).wait(timeout)
} catch (ie: InterruptedException) {
throw AssertionError(ie)
}
}

fun split(source: String, delimiter: String): List<String> {
val results = mutableListOf<String>()

if (TextUtils.isEmpty(source)) {
return results
}

val elements = source.split(delimiter.toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
Collections.addAll(results, *elements)

return results
}

fun split(input: ByteArray?, firstLength: Int, secondLength: Int): Array<ByteArray?> {
val parts = arrayOfNulls<ByteArray>(2)

parts[0] = ByteArray(firstLength)
System.arraycopy(input, 0, parts[0], 0, firstLength)

parts[1] = ByteArray(secondLength)
System.arraycopy(input, firstLength, parts[1], 0, secondLength)

return parts
}

fun trim(input: ByteArray?, length: Int): ByteArray {
val result = ByteArray(length)
System.arraycopy(input, 0, result, 0, result.size)

return result
}

fun uri(uri: String?): Uri? {
return if (uri == null) null
else Uri.parse(uri)
}

/**
* Returns half of the difference between the given length, and the length when scaled by the
* given scale.
Expand All @@ -136,9 +30,4 @@ object Util {
return (length - scaledLength) / 2
}

// Method to determine if we're currently in a left-to-right or right-to-left language like Arabic
fun usingLeftToRightLanguage(context: Context): Boolean {
val config = context.resources.configuration
return config.layoutDirection == View.LAYOUT_DIRECTION_LTR
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,32 +6,28 @@
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.annimon.stream.Stream;

import net.zetetic.database.sqlcipher.SQLiteDatabase;

import org.session.libsession.utilities.Address;
import org.session.libsession.utilities.AddressKt;
import org.session.libsession.utilities.GroupRecord;
import org.session.libsession.utilities.TextSecurePreferences;
import org.session.libsession.utilities.Util;
import org.session.libsignal.database.LokiOpenGroupDatabaseProtocol;
import org.session.libsignal.messages.SignalServiceAttachmentPointer;
import org.session.libsignal.utilities.guava.Optional;
import org.thoughtcrime.securesms.auth.LoginStateRepository;
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
import org.thoughtcrime.securesms.util.BitmapUtil;

import java.io.Closeable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;

import javax.inject.Provider;

Expand Down Expand Up @@ -100,7 +96,10 @@ public class GroupDatabase extends Database implements LokiOpenGroupDatabaseProt
TIMESTAMP, ACTIVE, MMS, AVATAR_URL, ADMINS, UPDATED
};

static final List<String> TYPED_GROUP_PROJECTION = Stream.of(GROUP_PROJECTION).map(columnName -> TABLE_NAME + "." + columnName).toList();
static final List<String> TYPED_GROUP_PROJECTION =
Arrays.stream(GROUP_PROJECTION)
.map(columnName -> TABLE_NAME + "." + columnName)
.collect(Collectors.toList());

public static String getCreateUpdatedTimestampCommand() {
return "ALTER TABLE "+ TABLE_NAME + " " +
Expand Down Expand Up @@ -275,10 +274,6 @@ public void updateTitle(String groupID, String newValue) {
}
}

public void updateProfilePicture(String groupID, Bitmap newValue) {
updateProfilePicture(groupID, BitmapUtil.toByteArray(newValue));
}

@Override
public void updateProfilePicture(String groupID, byte[] newValue) {
long avatarId;
Expand Down
Loading