mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-19 23:00:22 +01:00
Remove all remaining usages of annimon.stream.
This commit is contained in:
committed by
jeffrey-signal
parent
7f6e96a522
commit
82df20190d
@@ -87,6 +87,7 @@ import org.thoughtcrime.securesms.util.views.SimpleProgressDialog;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@@ -340,7 +341,7 @@ public final class ContactSelectionListFragment extends LoggingFragment {
|
||||
this,
|
||||
currentSelection.stream()
|
||||
.map(r -> new ContactSearchKey.RecipientSearchKey(r, false))
|
||||
.collect(java.util.stream.Collectors.toSet()),
|
||||
.collect(Collectors.toSet()),
|
||||
selectionLimit,
|
||||
isMulti,
|
||||
new ContactSearchAdapter.DisplayOptions(
|
||||
@@ -467,7 +468,7 @@ public final class ContactSelectionListFragment extends LoggingFragment {
|
||||
return contactSearchMediator.getSelectedContacts()
|
||||
.stream()
|
||||
.map(ContactSearchKey::requireSelectedContact)
|
||||
.collect(java.util.stream.Collectors.toList());
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public int getSelectedContactsCount() {
|
||||
@@ -662,7 +663,7 @@ public final class ContactSelectionListFragment extends LoggingFragment {
|
||||
.filter(r -> !contactSearchMediator.getSelectedContacts()
|
||||
.contains(new ContactSearchKey.RecipientSearchKey(r, false)))
|
||||
.map(SelectedContact::forRecipientId)
|
||||
.collect(java.util.stream.Collectors.toSet());
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (toMarkSelected.isEmpty()) {
|
||||
return;
|
||||
|
||||
@@ -19,8 +19,7 @@ package org.thoughtcrime.securesms;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.contacts.SelectedContact;
|
||||
@@ -59,7 +58,7 @@ public class PushContactSelectionActivity extends ContactSelectionActivity {
|
||||
protected final void onFinishedSelection() {
|
||||
Intent resultIntent = getIntent();
|
||||
List<SelectedContact> selectedContacts = contactsFragment.getSelectedContacts();
|
||||
List<RecipientId> recipients = Stream.of(selectedContacts).map(sc -> sc.getOrCreateRecipientId()).collect(Collectors.toList());
|
||||
List<RecipientId> recipients = selectedContacts.stream().map(sc -> sc.getOrCreateRecipientId()).collect(Collectors.toList());
|
||||
|
||||
resultIntent.putParcelableArrayListExtra(KEY_SELECTED_RECIPIENTS, new ArrayList<>(recipients));
|
||||
|
||||
|
||||
@@ -16,15 +16,14 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
import org.signal.glide.decryptableuri.DecryptableUri;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.contactshare.Contact;
|
||||
import org.thoughtcrime.securesms.contactshare.ContactUtil;
|
||||
import org.thoughtcrime.securesms.database.RecipientTable;
|
||||
import org.signal.glide.decryptableuri.DecryptableUri;
|
||||
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientForeverObserver;
|
||||
@@ -116,7 +115,7 @@ public class SharedContactView extends LinearLayout implements RecipientForeverO
|
||||
this.locale = locale;
|
||||
this.contact = contact;
|
||||
|
||||
Stream.of(activeRecipients.values()).forEach(recipient -> recipient.removeForeverObserver(this));
|
||||
activeRecipients.values().stream().forEach(recipient -> recipient.removeForeverObserver(this));
|
||||
this.activeRecipients.clear();
|
||||
|
||||
presentContact(contact);
|
||||
|
||||
@@ -7,13 +7,12 @@ import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.Util;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.signal.core.util.Util;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
@@ -140,7 +139,7 @@ public class TypingStatusRepository {
|
||||
|
||||
notifier.postValue(new TypingState(new ArrayList<>(uniqueTypists), isReplacedByIncomingMessage));
|
||||
|
||||
Set<Long> activeThreads = Stream.of(typistMap.keySet()).filter(t -> !typistMap.get(t).isEmpty()).collect(Collectors.toSet());
|
||||
Set<Long> activeThreads = typistMap.keySet().stream().filter(t -> !typistMap.get(t).isEmpty()).collect(Collectors.toSet());
|
||||
threadsNotifier.postValue(activeThreads);
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -9,8 +9,7 @@ import androidx.annotation.MainThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.fasterxml.jackson.databind.type.CollectionType;
|
||||
import com.fasterxml.jackson.databind.type.TypeFactory;
|
||||
|
||||
@@ -73,7 +72,7 @@ public class RecentEmojiPageModel implements EmojiPageModel {
|
||||
}
|
||||
|
||||
@Override public List<Emoji> getDisplayEmoji() {
|
||||
return Stream.of(getEmoji()).map(Emoji::new).collect(Collectors.toList());
|
||||
return getEmoji().stream().map(Emoji::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override public @Nullable Uri getSpriteUri() {
|
||||
|
||||
+4
-4
@@ -8,14 +8,14 @@ import android.text.Spanned;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* This wraps an Android standard {@link Annotation} so it can leverage the built in
|
||||
@@ -52,8 +52,8 @@ public final class MentionAnnotation {
|
||||
public static @NonNull List<Mention> getMentionsFromAnnotations(@Nullable CharSequence text) {
|
||||
if (text instanceof Spanned) {
|
||||
Spanned spanned = (Spanned) text;
|
||||
return Stream.of(getMentionAnnotations(spanned))
|
||||
.map(annotation -> {
|
||||
return getMentionAnnotations(spanned).stream()
|
||||
.map(annotation -> {
|
||||
int spanStart = spanned.getSpanStart(annotation);
|
||||
int spanLength = spanned.getSpanEnd(annotation) - spanStart;
|
||||
return new Mention(RecipientId.from(annotation.getValue()), spanStart, spanLength);
|
||||
|
||||
@@ -7,7 +7,6 @@ import android.content.Context;
|
||||
import android.content.SyncResult;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.contacts.SystemContactsRepository;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -70,10 +69,10 @@ public class ContactsSyncAdapter extends AbstractThreadedSyncAdapter {
|
||||
Log.w(TAG, e);
|
||||
}
|
||||
} else if (unknownSystemE164s.size() > 0) {
|
||||
List<Recipient> recipients = Stream.of(unknownSystemE164s)
|
||||
.filter(s -> s.startsWith("+"))
|
||||
.map(s -> Recipient.external(s))
|
||||
.filter(it -> it != null).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Recipient> recipients = unknownSystemE164s.stream()
|
||||
.filter(s -> s.startsWith("+"))
|
||||
.map(s -> Recipient.external(s))
|
||||
.filter(it -> it != null).collect(Collectors.toList());
|
||||
|
||||
Log.i(TAG, "There are " + unknownSystemE164s.size() + " unknown E164s, which are now " + recipients.size() + " recipients. Only syncing these specific contacts.");
|
||||
|
||||
|
||||
@@ -14,8 +14,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy;
|
||||
|
||||
@@ -76,9 +75,9 @@ class ContactFieldAdapter extends RecyclerView.Adapter<ContactFieldAdapter.Conta
|
||||
fields.add(new Field(avatar));
|
||||
}
|
||||
|
||||
fields.addAll(Stream.of(phoneNumbers).map(phone -> new Field(context, phone, locale)).collect(Collectors.toList()));
|
||||
fields.addAll(Stream.of(emails).map(email -> new Field(context, email)).collect(Collectors.toList()));
|
||||
fields.addAll(Stream.of(postalAddresses).map(address -> new Field(context, address)).collect(Collectors.toList()));
|
||||
fields.addAll(phoneNumbers.stream().map(phone -> new Field(context, phone, locale)).collect(Collectors.toList()));
|
||||
fields.addAll(emails.stream().map(email -> new Field(context, email)).collect(Collectors.toList()));
|
||||
fields.addAll(postalAddresses.stream().map(address -> new Field(context, address)).collect(Collectors.toList()));
|
||||
|
||||
notifyDataSetChanged();
|
||||
}
|
||||
|
||||
+2
-3
@@ -8,8 +8,7 @@ import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.contactshare.Contact.Name;
|
||||
import org.thoughtcrime.securesms.util.SingleLiveEvent;
|
||||
@@ -83,7 +82,7 @@ class ContactShareEditViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
private <E extends Selectable> List<E> trimSelectables(List<E> selectables) {
|
||||
return Stream.of(selectables).filter(Selectable::isSelected).collect(Collectors.toList());
|
||||
return selectables.stream().filter(Selectable::isSelected).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.i18n.phonenumbers.NumberParseException;
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil;
|
||||
@@ -98,7 +97,7 @@ public final class ContactUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
List<Phone> mobileNumbers = Stream.of(contact.getPhoneNumbers()).filter(number -> number.getType() == Phone.Type.MOBILE).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Phone> mobileNumbers = contact.getPhoneNumbers().stream().filter(number -> number.getType() == Phone.Type.MOBILE).collect(Collectors.toList());
|
||||
if (mobileNumbers.size() > 0) {
|
||||
return mobileNumbers.get(0);
|
||||
}
|
||||
|
||||
+2
-1
@@ -17,6 +17,7 @@ import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.adapter.StableIdGenerator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -75,7 +76,7 @@ class AttachmentKeyboardMediaAdapter extends RecyclerView.Adapter<AttachmentKeyb
|
||||
|
||||
public void setMedia(@NonNull List<Media> media, boolean addFooter) {
|
||||
this.media.clear();
|
||||
this.media.addAll(media.stream().map(MediaContent::new).collect(java.util.stream.Collectors.toList()));
|
||||
this.media.addAll(media.stream().map(MediaContent::new).collect(Collectors.toList()));
|
||||
if (addFooter) {
|
||||
this.media.add(new MediaContent(true));
|
||||
}
|
||||
|
||||
+8
-8
@@ -30,8 +30,7 @@ import androidx.core.view.ViewKt;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.vectordrawable.graphics.drawable.AnimatorInflaterCompat;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.signal.core.ui.compose.SignalIcons;
|
||||
import org.signal.core.util.DimensionUnit;
|
||||
@@ -52,6 +51,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.LongStream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import kotlin.Unit;
|
||||
|
||||
@@ -673,15 +673,15 @@ public final class ConversationReactionOverlay extends FrameLayout {
|
||||
}
|
||||
|
||||
private static @Nullable String getOldEmoji(@NonNull MessageRecord messageRecord) {
|
||||
return Stream.of(messageRecord.getReactions())
|
||||
.filter(record -> record.getAuthor()
|
||||
return messageRecord.getReactions().stream()
|
||||
.filter(record -> record.getAuthor()
|
||||
.serialize()
|
||||
.equals(Recipient.self()
|
||||
.getId()
|
||||
.serialize()))
|
||||
.findFirst()
|
||||
.map(ReactionRecord::getEmoji)
|
||||
.orElse(null);
|
||||
.findFirst()
|
||||
.map(ReactionRecord::getEmoji)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
private @NonNull List<ActionItem> getMenuActionItems(@NonNull ConversationMessage conversationMessage) {
|
||||
@@ -785,7 +785,7 @@ public final class ConversationReactionOverlay extends FrameLayout {
|
||||
anim.setTarget(emojiViews[idx.intValue()]);
|
||||
anim.setStartDelay(idx * animationEmojiStartDelayFactor);
|
||||
return anim;
|
||||
}).collect(java.util.stream.Collectors.toList());
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
Animator backgroundRevealAnim = AnimatorInflaterCompat.loadAnimator(getContext(), android.R.animator.fade_in);
|
||||
backgroundRevealAnim.setTarget(backgroundView);
|
||||
|
||||
@@ -13,7 +13,6 @@ import androidx.lifecycle.Lifecycle;
|
||||
import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -128,7 +127,7 @@ public class MarkReadHelper {
|
||||
|
||||
if (item != null) {
|
||||
MessageRecord record = item.getMessageRecord();
|
||||
long latestReactionReceived = Stream.of(record.getReactions())
|
||||
long latestReactionReceived = record.getReactions().stream()
|
||||
.map(ReactionRecord::getDateReceived)
|
||||
.max(Long::compareTo)
|
||||
.orElse(0L);
|
||||
|
||||
+9
-9
@@ -22,8 +22,7 @@ import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -34,6 +33,7 @@ import org.thoughtcrime.securesms.verify.VerifyIdentityActivity;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public final class SafetyNumberChangeDialog extends DialogFragment implements SafetyNumberChangeAdapter.Callbacks {
|
||||
|
||||
@@ -72,10 +72,10 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa
|
||||
}
|
||||
|
||||
public static void showForGroupCall(@NonNull FragmentManager fragmentManager, @NonNull List<IdentityRecord> identityRecords) {
|
||||
List<String> ids = Stream.of(identityRecords)
|
||||
.filter(identityRecord -> !identityRecord.isFirstUse())
|
||||
.map(record -> record.getRecipientId().serialize())
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<String> ids = identityRecords.stream()
|
||||
.filter(identityRecord -> !identityRecord.isFirstUse())
|
||||
.map(record -> record.getRecipientId().serialize())
|
||||
.distinct().collect(Collectors.toList());
|
||||
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putStringArray(RECIPIENT_IDS_EXTRA, ids.toArray(new String[0]));
|
||||
@@ -92,9 +92,9 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa
|
||||
return;
|
||||
}
|
||||
|
||||
List<String> ids = Stream.of(recipientIds)
|
||||
.map(RecipientId::serialize)
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<String> ids = recipientIds.stream()
|
||||
.map(RecipientId::serialize)
|
||||
.distinct().collect(Collectors.toList());
|
||||
|
||||
Bundle arguments = new Bundle();
|
||||
arguments.putStringArray(RECIPIENT_IDS_EXTRA, ids.toArray(new String[0]));
|
||||
|
||||
+4
-6
@@ -8,8 +8,7 @@ import androidx.annotation.WorkerThread;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.Util;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.libsignal.protocol.IdentityKey;
|
||||
@@ -28,7 +27,6 @@ import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
import org.thoughtcrime.securesms.safety.SafetyNumberRecipient;
|
||||
import org.thoughtcrime.securesms.sms.MessageSender;
|
||||
import org.signal.core.util.Util;
|
||||
import org.whispersystems.signalservice.api.SignalSessionLock;
|
||||
import org.whispersystems.signalservice.api.push.SignalServiceAddress;
|
||||
|
||||
@@ -89,10 +87,10 @@ public final class SafetyNumberChangeRepository {
|
||||
messageRecord = getMessageRecord(messageId, messageType);
|
||||
}
|
||||
|
||||
List<Recipient> recipients = Stream.of(recipientIds).map(Recipient::resolved).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Recipient> recipients = recipientIds.stream().map(Recipient::resolved).collect(Collectors.toList());
|
||||
|
||||
List<ChangedRecipient> changedRecipients = Stream.of(AppDependencies.getProtocolStore().aci().identities().getIdentityRecords(recipients).getIdentityRecords())
|
||||
.map(record -> new ChangedRecipient(Recipient.resolved(record.getRecipientId()), record)).collect(com.annimon.stream.Collectors.toList());
|
||||
List<ChangedRecipient> changedRecipients = AppDependencies.getProtocolStore().aci().identities().getIdentityRecords(recipients).getIdentityRecords().stream()
|
||||
.map(record -> new ChangedRecipient(Recipient.resolved(record.getRecipientId()), record)).collect(Collectors.toList());
|
||||
|
||||
Log.d(TAG, "Safety number change state, message: " + (messageRecord != null ? messageRecord.getId() : "null") + " records: " + Util.join(changedRecipients, ","));
|
||||
|
||||
|
||||
+2
-3
@@ -3,8 +3,7 @@ package org.thoughtcrime.securesms.conversation.ui.error;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||
@@ -29,7 +28,7 @@ public class TrustAndVerifyResult {
|
||||
}
|
||||
|
||||
TrustAndVerifyResult(@NonNull List<ChangedRecipient> changedRecipients, @Nullable MessageRecord messageRecord, @NonNull Result result) {
|
||||
this.changedRecipients = Stream.of(changedRecipients).map(changedRecipient -> changedRecipient.getRecipient().getId()).collect(Collectors.toList());
|
||||
this.changedRecipients = changedRecipients.stream().map(changedRecipient -> changedRecipient.getRecipient().getId()).collect(Collectors.toList());
|
||||
this.messageRecord = messageRecord;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
+2
-3
@@ -8,8 +8,7 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.conversation.ui.mentions.MentionsPickerRepository.MentionQuery;
|
||||
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
||||
@@ -41,7 +40,7 @@ public class MentionsPickerViewModel extends ViewModel {
|
||||
|
||||
LiveData<MentionQuery> mentionQuery = LiveDataUtil.combineLatest(liveQuery, fullMembers, (q, m) -> new MentionQuery(q.query, m));
|
||||
|
||||
this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> Stream.of(mentionsPickerRepository.search(q)).<MappingModel<?>>map(MentionViewState::new).collect(Collectors.toList()));
|
||||
this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> mentionsPickerRepository.search(q).stream().<MappingModel<?>>map(MentionViewState::new).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@NonNull LiveData<List<MappingModel<?>>> getMentionList() {
|
||||
|
||||
@@ -5,7 +5,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.Base64;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -99,7 +98,7 @@ public class SealedSenderAccessUtil {
|
||||
return Optional.ofNullable(unidentifiedAccess);
|
||||
}).collect(Collectors.toList());
|
||||
|
||||
int unidentifiedCount = Stream.of(access).filter(Optional::isPresent).collect(com.annimon.stream.Collectors.toList()).size();
|
||||
int unidentifiedCount = access.stream().filter(Optional::isPresent).collect(Collectors.toList()).size();
|
||||
int otherCount = access.size() - unidentifiedCount;
|
||||
|
||||
if (log) {
|
||||
|
||||
@@ -8,7 +8,6 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.function.Function;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
@@ -117,12 +116,12 @@ public final class MentionUtil {
|
||||
|
||||
public static @NonNull List<Mention> bodyRangeListToMentions(@Nullable BodyRangeList bodyRanges) {
|
||||
if (bodyRanges != null) {
|
||||
return Stream.of(bodyRanges.ranges)
|
||||
.filter(bodyRange -> bodyRange.mentionUuid != null)
|
||||
.map(mention -> {
|
||||
return bodyRanges.ranges.stream()
|
||||
.filter(bodyRange -> bodyRange.mentionUuid != null)
|
||||
.map(mention -> {
|
||||
RecipientId id = Recipient.externalPush(ServiceId.parseOrThrow(mention.mentionUuid)).getId();
|
||||
return new Mention(id, mention.start, mention.length);
|
||||
}).collect(com.annimon.stream.Collectors.toList());
|
||||
}).collect(Collectors.toList());
|
||||
} else {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.database;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.mobilecoin.lib.KeyImage;
|
||||
import com.mobilecoin.lib.Receipt;
|
||||
import com.mobilecoin.lib.RistrettoPublic;
|
||||
|
||||
+1
-4
@@ -13,8 +13,6 @@ import android.os.SystemClock
|
||||
import android.preference.PreferenceManager
|
||||
import android.text.TextUtils
|
||||
import androidx.core.content.contentValuesOf
|
||||
import com.annimon.stream.Collectors
|
||||
import com.annimon.stream.Stream
|
||||
import org.signal.core.models.ServiceId.ACI
|
||||
import org.signal.core.util.Base64
|
||||
import org.signal.core.util.CursorUtil
|
||||
@@ -649,9 +647,8 @@ object V149_LegacyMigrations : SignalDatabaseMigration {
|
||||
|
||||
if (oldVersion < NOTIFICATION_RECIPIENT_IDS && Build.VERSION.SDK_INT >= 26) {
|
||||
val notificationManager = ServiceUtil.getNotificationManager(context)
|
||||
val channels = Stream.of(notificationManager.notificationChannels)
|
||||
val channels = notificationManager.notificationChannels
|
||||
.filter { c: NotificationChannel -> c.id.startsWith("contact_") }
|
||||
.collect(Collectors.toList())
|
||||
|
||||
Log.i(TAG, "Migrating " + channels.size + " channels to use RecipientId's.")
|
||||
|
||||
|
||||
@@ -11,8 +11,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.fonts.SignalSymbols;
|
||||
import org.thoughtcrime.securesms.fonts.SignalSymbols.Glyph;
|
||||
@@ -42,8 +41,8 @@ public final class LiveUpdateMessage {
|
||||
return LiveDataUtil.just(toSpannable(context, updateDescription, updateDescription.getStaticSpannable(), defaultTint, adjustPosition));
|
||||
}
|
||||
|
||||
List<LiveData<Recipient>> allMentionedRecipients = Stream.of(updateDescription.getMentioned())
|
||||
.map(uuid -> Recipient.resolved(RecipientId.from(uuid)).live().getLiveData()).collect(Collectors.toList());
|
||||
List<LiveData<Recipient>> allMentionedRecipients = updateDescription.getMentioned().stream()
|
||||
.map(uuid -> Recipient.resolved(RecipientId.from(uuid)).live().getLiveData()).collect(Collectors.toList());
|
||||
|
||||
LiveData<?> mentionedRecipientChangeStream = allMentionedRecipients.isEmpty() ? LiveDataUtil.just(new Object())
|
||||
: LiveDataUtil.merge(allMentionedRecipients);
|
||||
|
||||
@@ -30,8 +30,7 @@ import androidx.annotation.VisibleForTesting;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.Base64;
|
||||
import org.signal.core.util.BidiUtil;
|
||||
@@ -594,9 +593,9 @@ public abstract class MessageRecord extends DisplayRecord {
|
||||
public static @NonNull UpdateDescription getGroupCallUpdateDescription(@NonNull Context context, @NonNull String body, boolean withTime) {
|
||||
GroupCallUpdateDetails groupCallUpdateDetails = GroupCallUpdateDetailsUtil.parse(body);
|
||||
|
||||
List<ServiceId> joinedMembers = Stream.of(groupCallUpdateDetails.inCallUuids)
|
||||
.map(UuidUtil::parseOrNull).filter(Objects::nonNull)
|
||||
.<ServiceId>map(ACI::from).collect(Collectors.toList());
|
||||
List<ServiceId> joinedMembers = groupCallUpdateDetails.inCallUuids.stream()
|
||||
.map(UuidUtil::parseOrNull).filter(Objects::nonNull)
|
||||
.<ServiceId>map(ACI::from).collect(Collectors.toList());
|
||||
|
||||
UpdateDescription.SpannableFactory stringFactory = new GroupCallUpdateMessageFactory(context, joinedMembers, withTime, groupCallUpdateDetails);
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.delete;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil;
|
||||
|
||||
import org.signal.core.util.E164Util;
|
||||
|
||||
@@ -10,7 +10,6 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.i18n.phonenumbers.NumberParseException;
|
||||
import com.google.i18n.phonenumbers.PhoneNumberUtil;
|
||||
import com.google.i18n.phonenumbers.Phonenumber;
|
||||
|
||||
@@ -10,7 +10,6 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.paging.LivePagedData;
|
||||
import org.signal.paging.PagedData;
|
||||
|
||||
@@ -9,8 +9,7 @@ import androidx.lifecycle.LiveData;
|
||||
import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.Transformations;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.models.ServiceId;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
@@ -88,12 +87,12 @@ public final class LiveGroup {
|
||||
|
||||
protected static LiveData<List<GroupMemberEntry.FullMember>> mapToFullMembers(@NonNull LiveData<GroupRecord> groupRecord) {
|
||||
return LiveDataUtil.mapAsync(groupRecord,
|
||||
g -> Stream.of(g.getMembers())
|
||||
.map(m -> {
|
||||
g -> g.getMembers().stream()
|
||||
.map(m -> {
|
||||
Recipient recipient = Recipient.resolved(m);
|
||||
return new GroupMemberEntry.FullMember(recipient, g.isAdmin(recipient));
|
||||
})
|
||||
.sorted(MEMBER_ORDER).collect(Collectors.toList()));
|
||||
.sorted(MEMBER_ORDER).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
protected static LiveData<List<GroupMemberEntry.RequestingMember>> mapToRequestingMembers(@NonNull LiveData<GroupRecord> groupRecord) {
|
||||
@@ -106,8 +105,8 @@ public final class LiveGroup {
|
||||
boolean selfAdmin = g.isAdmin(Recipient.self());
|
||||
List<DecryptedRequestingMember> requestingMembersList = g.requireV2GroupProperties().getDecryptedGroup().requestingMembers;
|
||||
|
||||
return Stream.of(requestingMembersList)
|
||||
.map(requestingMember -> {
|
||||
return requestingMembersList.stream()
|
||||
.map(requestingMember -> {
|
||||
Recipient recipient = Recipient.externalPush(ServiceId.parseOrThrow(requestingMember.aciBytes));
|
||||
return new GroupMemberEntry.RequestingMember(recipient, selfAdmin);
|
||||
}).collect(Collectors.toList());
|
||||
@@ -194,8 +193,8 @@ public final class LiveGroup {
|
||||
|
||||
public LiveData<List<GroupMemberEntry.FullMember>> getNonAdminFullMembers() {
|
||||
return Transformations.map(fullMembers,
|
||||
members -> Stream.of(members)
|
||||
.filter(fullMember -> !fullMember.isAdmin()).collect(Collectors.toList()));
|
||||
members -> members.stream()
|
||||
.filter(fullMember -> !fullMember.isAdmin()).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public LiveData<List<GroupMemberEntry.FullMember>> getFullMembers() {
|
||||
|
||||
@@ -10,8 +10,7 @@ import androidx.lifecycle.LifecycleOwner;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -82,7 +81,7 @@ public final class GroupMemberListView extends RecyclerView {
|
||||
}
|
||||
|
||||
public void setDisplayOnlyMembers(@NonNull List<Recipient> recipients) {
|
||||
membersAdapter.updateData(Stream.of(recipients).map(r -> new GroupMemberEntry.FullMember(r, false)).collect(Collectors.toList()));
|
||||
membersAdapter.updateData(recipients.stream().map(r -> new GroupMemberEntry.FullMember(r, false)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -62,7 +61,7 @@ public final class LeaveGroupDialog {
|
||||
|
||||
if (groupProperties != null && groupProperties.isAdmin(Recipient.self())) {
|
||||
List<Recipient> otherMemberRecipients = groupProperties.getMemberRecipients(GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
|
||||
long otherAdminsCount = Stream.of(otherMemberRecipients).filter(groupProperties::isAdmin).count();
|
||||
long otherAdminsCount = otherMemberRecipients.stream().filter(groupProperties::isAdmin).count();
|
||||
|
||||
return otherAdminsCount == 0 && !otherMemberRecipients.isEmpty();
|
||||
}
|
||||
|
||||
+5
-6
@@ -11,8 +11,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.MainActivity;
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
||||
@@ -74,10 +73,10 @@ public final class ChooseNewAdminActivity extends PassphraseRequiredActivity {
|
||||
initializeViewModel();
|
||||
|
||||
groupList.initializeAdapter(this);
|
||||
groupList.setRecipientSelectionChangeListener(selection -> viewModel.setSelection(Stream.of(selection)
|
||||
.filter(x -> x instanceof GroupMemberEntry.FullMember)
|
||||
.map(x-> (GroupMemberEntry.FullMember)x)
|
||||
.collect(Collectors.toSet())));
|
||||
groupList.setRecipientSelectionChangeListener(selection -> viewModel.setSelection(selection.stream()
|
||||
.filter(x -> x instanceof GroupMemberEntry.FullMember)
|
||||
.map(x-> (GroupMemberEntry.FullMember)x)
|
||||
.collect(Collectors.toSet())));
|
||||
|
||||
done.setOnClickListener(v -> {
|
||||
done.setSpinning();
|
||||
|
||||
+2
-3
@@ -7,8 +7,7 @@ import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
@@ -51,7 +50,7 @@ final class ChooseNewAdminViewModel extends ViewModel {
|
||||
|
||||
void updateAdminsAndLeave(@NonNull Consumer<GroupChangeResult> consumer) {
|
||||
//noinspection ConstantConditions
|
||||
List<RecipientId> recipientIds = Stream.of(selection.getValue()).map(entry -> entry.getMember().getId()).collect(Collectors.toList());
|
||||
List<RecipientId> recipientIds = selection.getValue().stream().map(entry -> entry.getMember().getId()).collect(Collectors.toList());
|
||||
SimpleTask.run(() -> repository.updateAdminsAndLeave(groupId, recipientIds), consumer::accept);
|
||||
}
|
||||
|
||||
|
||||
+2
-3
@@ -6,7 +6,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -28,7 +27,7 @@ import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executor;
|
||||
import com.annimon.stream.Collectors;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import okio.ByteString;
|
||||
|
||||
@@ -60,7 +59,7 @@ final class PendingMemberInvitesRepository {
|
||||
ByteString self = SignalStore.account().requireAci().toByteString();
|
||||
boolean selfIsAdmin = v2GroupProperties.isAdmin(Recipient.self());
|
||||
|
||||
Stream.of(pendingMembersList)
|
||||
pendingMembersList.stream()
|
||||
.collect(Collectors.groupingBy(m -> m.addedByAci))
|
||||
.entrySet()
|
||||
.forEach(g ->
|
||||
|
||||
@@ -15,7 +15,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.text.util.LinkifyCompat;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiTextView;
|
||||
|
||||
@@ -22,7 +22,6 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.navigation.Navigation;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.ResourceUtil;
|
||||
import org.signal.core.ui.logging.LoggingFragment;
|
||||
@@ -110,7 +109,7 @@ public class HelpFragment extends LoggingFragment {
|
||||
|
||||
private void initializeListeners() {
|
||||
problem.addTextChangedListener(new AfterTextChanged(e -> helpViewModel.onProblemChanged(e.toString())));
|
||||
Stream.of(emoji).forEach(view -> view.setOnClickListener(this::handleEmojiClicked));
|
||||
emoji.stream().forEach(view -> view.setOnClickListener(this::handleEmojiClicked));
|
||||
faq.setOnClickListener(v -> launchFaq());
|
||||
debugLogInfo.setOnClickListener(v -> launchDebugLogInfo());
|
||||
next.setOnClickListener(v -> submitForm());
|
||||
@@ -150,7 +149,7 @@ public class HelpFragment extends LoggingFragment {
|
||||
if (clicked.isSelected()) {
|
||||
clicked.setSelected(false);
|
||||
} else {
|
||||
Stream.of(emoji).forEach(view -> view.setSelected(false));
|
||||
emoji.stream().forEach(view -> view.setSelected(false));
|
||||
clicked.setSelected(true);
|
||||
}
|
||||
}
|
||||
@@ -185,10 +184,10 @@ public class HelpFragment extends LoggingFragment {
|
||||
}
|
||||
|
||||
private void submitFormWithDebugLog(@Nullable String debugLog) {
|
||||
Feeling feeling = Stream.of(emoji)
|
||||
.filter(View::isSelected)
|
||||
.map(view -> Feeling.getByViewId(view.getId()))
|
||||
.findFirst().orElse(null);
|
||||
Feeling feeling = emoji.stream()
|
||||
.filter(View::isSelected)
|
||||
.map(view -> Feeling.getByViewId(view.getId()))
|
||||
.findFirst().orElse(null);
|
||||
|
||||
|
||||
CommunicationActions.openEmail(requireContext(),
|
||||
|
||||
@@ -5,7 +5,6 @@ import android.os.HandlerThread;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -40,7 +39,7 @@ class InAppScheduler implements Scheduler {
|
||||
|
||||
@Override
|
||||
public void schedule(long delay, @NonNull List<Constraint> constraints) {
|
||||
if (delay > 0 && Stream.of(constraints).allMatch(Constraint::isMet)) {
|
||||
if (delay > 0 && constraints.stream().allMatch(Constraint::isMet)) {
|
||||
Log.i(TAG, "Scheduling a retry in " + delay + " ms.");
|
||||
handler.postDelayed(() -> {
|
||||
Log.i(TAG, "Triggering a job retry.");
|
||||
|
||||
@@ -7,8 +7,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.jobmanager.persistence.ConstraintSpec;
|
||||
@@ -120,7 +119,7 @@ class JobController {
|
||||
@WorkerThread
|
||||
void submitNewJobChain(@NonNull List<List<Job>> chain) {
|
||||
synchronized (this) {
|
||||
chain = Stream.of(chain).filter(jobs -> !jobs.isEmpty()).collect(Collectors.toList());
|
||||
chain = chain.stream().filter(jobs -> !jobs.isEmpty()).collect(Collectors.toList());
|
||||
|
||||
if (chain.isEmpty()) {
|
||||
Log.w(TAG, "Tried to submit an empty job chain. Skipping.");
|
||||
@@ -163,13 +162,13 @@ class JobController {
|
||||
}
|
||||
|
||||
Set<String> allDependsOn = new HashSet<>(dependsOn);
|
||||
Set<String> aliveDependsOn = Stream.of(dependsOn)
|
||||
.filter(id -> jobStorage.getJobSpec(id) != null)
|
||||
.collect(Collectors.toSet());
|
||||
Set<String> aliveDependsOn = dependsOn.stream()
|
||||
.filter(id -> jobStorage.getJobSpec(id) != null)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
if (dependsOnQueue != null) {
|
||||
List<String> inQueue = Stream.of(jobStorage.getJobsInQueue(dependsOnQueue))
|
||||
.map(JobSpec::getId).collect(Collectors.toList());
|
||||
List<String> inQueue = jobStorage.getJobsInQueue(dependsOnQueue).stream()
|
||||
.map(JobSpec::getId).collect(Collectors.toList());
|
||||
|
||||
allDependsOn.addAll(inQueue);
|
||||
aliveDependsOn.addAll(inQueue);
|
||||
@@ -220,7 +219,7 @@ class JobController {
|
||||
return;
|
||||
}
|
||||
|
||||
List<FullSpec> fullSpecs = canRun.stream().map(it -> buildFullSpec(it, Collections.emptyList())).collect(java.util.stream.Collectors.toList());
|
||||
List<FullSpec> fullSpecs = canRun.stream().map(it -> buildFullSpec(it, Collections.emptyList())).collect(Collectors.toList());
|
||||
jobStorage.insertJobs(fullSpecs);
|
||||
|
||||
scheduleJobs(canRun);
|
||||
@@ -268,7 +267,7 @@ class JobController {
|
||||
// We have no control over what happens in jobs' onFailure method, so we drop our lock to reduce the possibility of a deadlock
|
||||
if (inactiveJob != null) {
|
||||
inactiveJob.onFailure();
|
||||
Stream.of(inactiveJobDependents).forEach(Job::onFailure);
|
||||
inactiveJobDependents.stream().forEach(Job::onFailure);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -279,7 +278,7 @@ class JobController {
|
||||
jobsInQueue = jobStorage.getJobsInQueue(queue);
|
||||
}
|
||||
|
||||
Stream.of(jobsInQueue)
|
||||
jobsInQueue.stream()
|
||||
.map(JobSpec::getId)
|
||||
.forEach(this::cancelJob);
|
||||
}
|
||||
@@ -307,9 +306,9 @@ class JobController {
|
||||
jobStorage.updateJobAfterRetry(job.getId(), System.currentTimeMillis(), nextRunAttempt, backoffInterval, serializedData);
|
||||
jobTracker.onStateChange(job, JobTracker.JobState.PENDING);
|
||||
|
||||
List<Constraint> constraints = Stream.of(jobStorage.getConstraintSpecs(job.getId()))
|
||||
.map(ConstraintSpec::getFactoryKey)
|
||||
.map(constraintInstantiator::instantiate).collect(Collectors.toList());
|
||||
List<Constraint> constraints = jobStorage.getConstraintSpecs(job.getId()).stream()
|
||||
.map(ConstraintSpec::getFactoryKey)
|
||||
.map(constraintInstantiator::instantiate).collect(Collectors.toList());
|
||||
|
||||
|
||||
Log.i(TAG, JobLogger.format(job, "Scheduling a retry in " + backoffInterval + " ms."));
|
||||
@@ -325,10 +324,10 @@ class JobController {
|
||||
@WorkerThread
|
||||
synchronized void onSuccess(@NonNull Job job, @Nullable byte[] outputData) {
|
||||
if (outputData != null) {
|
||||
List<JobSpec> updates = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(job.getId()))
|
||||
.map(DependencySpec::getJobId)
|
||||
.map(jobStorage::getJobSpec)
|
||||
.map(jobSpec -> mapToJobWithInputData(jobSpec, outputData)).collect(Collectors.toList());
|
||||
List<JobSpec> updates = jobStorage.getDependencySpecsThatDependOnJob(job.getId()).stream()
|
||||
.map(DependencySpec::getJobId)
|
||||
.map(jobStorage::getJobSpec)
|
||||
.map(jobSpec -> mapToJobWithInputData(jobSpec, outputData)).collect(Collectors.toList());
|
||||
|
||||
jobStorage.updateJobs(updates);
|
||||
}
|
||||
@@ -343,10 +342,10 @@ class JobController {
|
||||
*/
|
||||
@WorkerThread
|
||||
synchronized @NonNull List<Job> onFailure(@NonNull Job job) {
|
||||
List<Job> dependents = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(job.getId()))
|
||||
.map(DependencySpec::getJobId)
|
||||
.map(jobStorage::getJobSpec).filter(Objects::nonNull)
|
||||
.map(jobSpec -> {
|
||||
List<Job> dependents = jobStorage.getDependencySpecsThatDependOnJob(job.getId()).stream()
|
||||
.map(DependencySpec::getJobId)
|
||||
.map(jobStorage::getJobSpec).filter(Objects::nonNull)
|
||||
.map(jobSpec -> {
|
||||
List<ConstraintSpec> constraintSpecs = jobStorage.getConstraintSpecs(jobSpec.getId());
|
||||
return createJob(jobSpec, constraintSpecs);
|
||||
}).collect(Collectors.toList());
|
||||
@@ -355,8 +354,8 @@ class JobController {
|
||||
all.add(job);
|
||||
all.addAll(dependents);
|
||||
|
||||
jobStorage.deleteJobs(Stream.of(all).map(Job::getId).collect(Collectors.toList()));
|
||||
Stream.of(all).forEach(j -> jobTracker.onStateChange(j, JobTracker.JobState.FAILURE));
|
||||
jobStorage.deleteJobs(all.stream().map(Job::getId).collect(Collectors.toList()));
|
||||
all.stream().forEach(j -> jobTracker.onStateChange(j, JobTracker.JobState.FAILURE));
|
||||
|
||||
return dependents;
|
||||
}
|
||||
@@ -408,7 +407,7 @@ class JobController {
|
||||
*/
|
||||
@WorkerThread
|
||||
synchronized @NonNull String getDebugInfo() {
|
||||
List<JobSpec> running = runningJobs.keySet().stream().map(jobStorage::getJobSpec).collect(java.util.stream.Collectors.toList());
|
||||
List<JobSpec> running = runningJobs.keySet().stream().map(jobStorage::getJobSpec).collect(Collectors.toList());
|
||||
List<JobSpec> jobs = jobStorage.debugGetJobSpecs(1000);
|
||||
List<ConstraintSpec> constraints = jobStorage.debugGetConstraintSpecs(1000);
|
||||
List<DependencySpec> dependencies = jobStorage.debugGetAllDependencySpecs();
|
||||
@@ -429,21 +428,21 @@ class JobController {
|
||||
|
||||
info.append("\n-- Jobs\n");
|
||||
if (!jobs.isEmpty()) {
|
||||
Stream.of(jobs).forEach(j -> info.append(j.toString()).append('\n'));
|
||||
jobs.stream().forEach(j -> info.append(j.toString()).append('\n'));
|
||||
} else {
|
||||
info.append("None\n");
|
||||
}
|
||||
|
||||
info.append("\n-- Constraints\n");
|
||||
if (!constraints.isEmpty()) {
|
||||
Stream.of(constraints).forEach(c -> info.append(c.toString()).append('\n'));
|
||||
constraints.stream().forEach(c -> info.append(c.toString()).append('\n'));
|
||||
} else {
|
||||
info.append("None\n");
|
||||
}
|
||||
|
||||
info.append("\n-- Dependencies\n");
|
||||
if (!dependencies.isEmpty()) {
|
||||
Stream.of(dependencies).forEach(d -> info.append(d.toString()).append('\n'));
|
||||
dependencies.stream().forEach(d -> info.append(d.toString()).append('\n'));
|
||||
} else {
|
||||
info.append("None\n");
|
||||
}
|
||||
@@ -574,8 +573,8 @@ class JobController {
|
||||
|
||||
@WorkerThread
|
||||
private void triggerOnSubmit(@NonNull List<List<Job>> chain) {
|
||||
Stream.of(chain)
|
||||
.forEach(list -> Stream.of(list).forEach(job -> {
|
||||
chain.stream()
|
||||
.forEach(list -> list.stream().forEach(job -> {
|
||||
job.setContext(application);
|
||||
job.onSubmit();
|
||||
}));
|
||||
@@ -590,7 +589,7 @@ class JobController {
|
||||
for (Job job : jobList) {
|
||||
fullSpecs.add(buildFullSpec(job, dependsOn));
|
||||
}
|
||||
dependsOn = Stream.of(jobList).map(Job::getId).collect(Collectors.toList());
|
||||
dependsOn = jobList.stream().map(Job::getId).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
jobStorage.insertJobs(fullSpecs);
|
||||
@@ -617,11 +616,11 @@ class JobController {
|
||||
job.getParameters().getQueuePriority(),
|
||||
job.getParameters().getInitialDelay());
|
||||
|
||||
List<ConstraintSpec> constraintSpecs = Stream.of(job.getParameters().getConstraintKeys())
|
||||
.map(key -> new ConstraintSpec(jobSpec.getId(), key, jobSpec.isMemoryOnly())).collect(Collectors.toList());
|
||||
List<ConstraintSpec> constraintSpecs = job.getParameters().getConstraintKeys().stream()
|
||||
.map(key -> new ConstraintSpec(jobSpec.getId(), key, jobSpec.isMemoryOnly())).collect(Collectors.toList());
|
||||
|
||||
List<DependencySpec> dependencySpecs = Stream.of(dependsOn)
|
||||
.map(depends -> {
|
||||
List<DependencySpec> dependencySpecs = dependsOn.stream()
|
||||
.map(depends -> {
|
||||
JobSpec dependsOnJobSpec = jobStorage.getJobSpec(depends);
|
||||
boolean memoryOnly = job.getParameters().isMemoryOnly() || (dependsOnJobSpec != null && dependsOnJobSpec.isMemoryOnly());
|
||||
|
||||
@@ -652,11 +651,11 @@ class JobController {
|
||||
}
|
||||
|
||||
List<ConstraintSpec> constraintSpecs = jobStorage.getConstraintSpecs(minimalJobSpec.getId());
|
||||
List<Constraint> constraints = Stream.of(constraintSpecs)
|
||||
.map(ConstraintSpec::getFactoryKey)
|
||||
.map(constraintInstantiator::instantiate).collect(Collectors.toList());
|
||||
List<Constraint> constraints = constraintSpecs.stream()
|
||||
.map(ConstraintSpec::getFactoryKey)
|
||||
.map(constraintInstantiator::instantiate).collect(Collectors.toList());
|
||||
|
||||
return Stream.of(constraints).allMatch(Constraint::isMet);
|
||||
return constraints.stream().allMatch(Constraint::isMet);
|
||||
});
|
||||
|
||||
if (jobSpec == null) {
|
||||
@@ -682,8 +681,8 @@ class JobController {
|
||||
} catch (RuntimeException e) {
|
||||
Log.e(TAG, "Failed to instantiate job! Failing it and its dependencies without calling Job#onFailure. Crash imminent.");
|
||||
|
||||
List<String> failIds = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(jobSpec.getId()))
|
||||
.map(DependencySpec::getJobId).collect(Collectors.toList());
|
||||
List<String> failIds = jobStorage.getDependencySpecsThatDependOnJob(jobSpec.getId()).stream()
|
||||
.map(DependencySpec::getJobId).collect(Collectors.toList());
|
||||
|
||||
jobStorage.deleteJob(jobSpec.getId());
|
||||
jobStorage.deleteJobs(failIds);
|
||||
@@ -700,7 +699,7 @@ class JobController {
|
||||
.setLifespan(jobSpec.getLifespan())
|
||||
.setMaxAttempts(jobSpec.getMaxAttempts())
|
||||
.setQueue(jobSpec.getQueueKey())
|
||||
.setConstraints(Stream.of(constraintSpecs).map(ConstraintSpec::getFactoryKey).collect(Collectors.toList()))
|
||||
.setConstraints(constraintSpecs.stream().map(ConstraintSpec::getFactoryKey).collect(Collectors.toList()))
|
||||
.setInputData(jobSpec.getSerializedInputData())
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -10,8 +10,7 @@ import android.content.ComponentName;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -38,11 +37,11 @@ public final class JobSchedulerScheduler implements Scheduler {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
JobScheduler jobScheduler = application.getSystemService(JobScheduler.class);
|
||||
|
||||
String constraintNames = constraints.isEmpty() ? ""
|
||||
: Stream.of(constraints)
|
||||
.map(Constraint::getJobSchedulerKeyPart).filter(Objects::nonNull)
|
||||
.sorted()
|
||||
.collect(Collectors.joining("-"));
|
||||
String constraintNames;
|
||||
constraintNames = constraints.isEmpty() ? "" : constraints.stream()
|
||||
.map(Constraint::getJobSchedulerKeyPart).filter(Objects::nonNull)
|
||||
.sorted()
|
||||
.collect(Collectors.joining("-"));
|
||||
|
||||
int jobId = constraintNames.hashCode();
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ import androidx.annotation.AnyThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.LRUCache;
|
||||
@@ -72,7 +71,7 @@ public class JobTracker {
|
||||
synchronized void onStateChange(@NonNull Job job, @NonNull JobState state) {
|
||||
getOrCreateJobInfo(job).setJobState(state);
|
||||
|
||||
Stream.of(jobListeners)
|
||||
jobListeners.stream()
|
||||
.filter(info -> info.getFilter().matches(job))
|
||||
.map(ListenerInfo::getListener)
|
||||
.forEach(listener -> {
|
||||
|
||||
@@ -6,8 +6,7 @@ import android.net.Uri;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiPageModel;
|
||||
@@ -36,6 +35,7 @@ import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Downloads Emoji JSON and Images to local persistent storage.
|
||||
@@ -127,9 +127,9 @@ public class DownloadLatestEmojiDataJob extends BaseJob {
|
||||
EmojiData emojiData = downloadJson(context, targetVersion);
|
||||
List<String> supportedDensities = emojiData.getDensities();
|
||||
String format = emojiData.getFormat();
|
||||
List<String> imagePaths = Stream.of(emojiData.getDataPages())
|
||||
.map(EmojiPageModel::getSpriteUri)
|
||||
.map(Uri::getLastPathSegment).collect(Collectors.toList());
|
||||
List<String> imagePaths = emojiData.getDataPages().stream()
|
||||
.map(EmojiPageModel::getSpriteUri)
|
||||
.map(Uri::getLastPathSegment).collect(Collectors.toList());
|
||||
|
||||
String density = resolveDensity(supportedDensities, targetVersion.getDensity());
|
||||
targetVersion = new EmojiFiles.Version(targetVersion.getVersion(), targetVersion.getUuid(), density);
|
||||
|
||||
@@ -4,7 +4,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
@@ -61,9 +60,9 @@ public class GroupCallUpdateSendJob extends BaseJob {
|
||||
throw new AssertionError("We have a recipient, but it's not a V2 Group");
|
||||
}
|
||||
|
||||
List<RecipientId> recipientIds = Stream.of(RecipientUtil.getEligibleForSending(Recipient.resolvedList(conversationRecipient.getParticipantIds())))
|
||||
.filter(recipient -> !recipient.isSelf())
|
||||
.map(Recipient::getId).collect(com.annimon.stream.Collectors.toList());
|
||||
List<RecipientId> recipientIds = RecipientUtil.getEligibleForSending(Recipient.resolvedList(conversationRecipient.getParticipantIds())).stream()
|
||||
.filter(recipient -> !recipient.isSelf())
|
||||
.map(Recipient::getId).collect(Collectors.toList());
|
||||
|
||||
return new GroupCallUpdateSendJob(recipientId,
|
||||
eraId,
|
||||
@@ -126,7 +125,7 @@ public class GroupCallUpdateSendJob extends BaseJob {
|
||||
return;
|
||||
}
|
||||
|
||||
List<Recipient> destinations = Stream.of(recipients).map(Recipient::resolved).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Recipient> destinations = recipients.stream().map(Recipient::resolved).collect(Collectors.toList());
|
||||
List<Recipient> completions = deliver(conversationRecipient, destinations);
|
||||
|
||||
for (Recipient completion : completions) {
|
||||
|
||||
@@ -6,8 +6,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.Util;
|
||||
import org.signal.core.util.UuidUtil;
|
||||
@@ -278,7 +277,7 @@ public class IndividualSendJob extends PushSendJob {
|
||||
|
||||
SignalServiceMessageSender messageSender = AppDependencies.getSignalServiceMessageSender();
|
||||
SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, messageRecipient);
|
||||
List<Attachment> attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(Collectors.toList());
|
||||
List<Attachment> attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList());
|
||||
List<SignalServiceAttachment> serviceAttachments = getAttachmentPointersFor(attachments);
|
||||
Optional<byte[]> profileKey = getProfileKey(messageRecipient);
|
||||
Optional<SignalServiceDataMessage.Sticker> sticker = getStickerFor(message);
|
||||
|
||||
@@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.jobs;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import org.signal.core.util.ListUtil;
|
||||
|
||||
@@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.jobs;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import org.signal.core.util.ListUtil;
|
||||
|
||||
@@ -6,7 +6,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
@@ -178,7 +177,7 @@ public final class PushDistributionListSendJob extends PushSendJob {
|
||||
targets.addAll(filterRecipientIds.stream().map(Recipient::resolved).collect(Collectors.toList()));
|
||||
targets.addAll(existingNetworkFailures.stream().map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList()));
|
||||
} else if (!existingNetworkFailures.isEmpty()) {
|
||||
targets = Stream.of(existingNetworkFailures).map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(com.annimon.stream.Collectors.toList());
|
||||
targets = existingNetworkFailures.stream().map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList());
|
||||
} else {
|
||||
Stories.SendData data = Stories.getRecipientsToSendTo(messageId, message.getSentTimeMillis(), message.getStoryType().isStoryWithReplies());
|
||||
targets = data.getTargets();
|
||||
@@ -206,11 +205,11 @@ public final class PushDistributionListSendJob extends PushSendJob {
|
||||
throws IOException, UntrustedIdentityException, UndeliverableMessageException
|
||||
{
|
||||
try {
|
||||
List<Attachment> attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Attachment> attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList());
|
||||
List<SignalServiceAttachment> attachmentPointers = getAttachmentPointersFor(attachments);
|
||||
List<BodyRange> bodyRanges = getBodyRanges(message);
|
||||
boolean isRecipientUpdate = Stream.of(SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId))
|
||||
.anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED);
|
||||
boolean isRecipientUpdate = SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId).stream()
|
||||
.anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED);
|
||||
|
||||
final SignalServiceStoryMessage storyMessage;
|
||||
if (message.getStoryType().isTextStory()) {
|
||||
|
||||
@@ -6,8 +6,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.SetUtil;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -234,10 +233,10 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
|
||||
if (Util.hasItems(filterRecipients)) {
|
||||
target = new ArrayList<>(filterRecipients.size() + existingNetworkFailures.size());
|
||||
target.addAll(Stream.of(filterRecipients).map(Recipient::resolved).collect(Collectors.toList()));
|
||||
target.addAll(Stream.of(existingNetworkFailures).map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList()));
|
||||
target.addAll(filterRecipients.stream().map(Recipient::resolved).collect(Collectors.toList()));
|
||||
target.addAll(existingNetworkFailures.stream().map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList()));
|
||||
} else if (!existingNetworkFailures.isEmpty()) {
|
||||
target = Stream.of(existingNetworkFailures).map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList());
|
||||
target = existingNetworkFailures.stream().map(NetworkFailure::getRecipientId).distinct().map(Recipient::resolved).collect(Collectors.toList());
|
||||
} else {
|
||||
GroupRecipientResult result = getGroupMessageRecipients(groupRecipient.requireGroupId(), messageId);
|
||||
|
||||
@@ -288,10 +287,10 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
SignalServiceDataMessage.PollCreate pollCreate = getPollCreate(message);
|
||||
SignalServiceDataMessage.PollTerminate pollTerminate = getPollTerminate(message);
|
||||
SignalServiceDataMessage.PinnedMessage pinnedMessage = getPinnedMessage(message);
|
||||
List<Attachment> attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(Collectors.toList());
|
||||
List<Attachment> attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList());
|
||||
List<SignalServiceAttachment> attachmentPointers = getAttachmentPointersFor(attachments);
|
||||
boolean isRecipientUpdate = Stream.of(SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId))
|
||||
.anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED);
|
||||
boolean isRecipientUpdate = SignalDatabase.groupReceipts().getGroupReceiptInfo(messageId).stream()
|
||||
.anyMatch(info -> info.getStatus() > GroupReceiptTable.STATUS_UNDELIVERED);
|
||||
|
||||
if (message.getStoryType().isStory()) {
|
||||
Optional<GroupRecord> groupRecord = SignalDatabase.groups().getGroup(groupId);
|
||||
@@ -444,17 +443,17 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
MessageTable database = SignalDatabase.messages();
|
||||
RecipientAccessList accessList = new RecipientAccessList(target);
|
||||
|
||||
List<NetworkFailure> networkFailures = Stream.of(results).filter(SendMessageResult::isNetworkFailure).map(result -> new NetworkFailure(accessList.requireIdByAddress(result.getAddress()))).collect(Collectors.toList());
|
||||
List<IdentityKeyMismatch> identityMismatches = Stream.of(results).filter(result -> result.getIdentityFailure() != null)
|
||||
.map(result -> new IdentityKeyMismatch(accessList.requireIdByAddress(result.getAddress()), result.getIdentityFailure().getIdentityKey())).collect(Collectors.toList());
|
||||
ProofRequiredException proofRequired = Stream.of(results).filter(r -> r.getProofRequiredFailure() != null).reduce((a,b) -> b).map(SendMessageResult::getProofRequiredFailure).orElse(null);
|
||||
List<SendMessageResult> successes = Stream.of(results).filter(result -> result.getSuccess() != null).collect(Collectors.toList());
|
||||
List<Pair<RecipientId, Boolean>> successUnidentifiedStatus = Stream.of(successes).map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).collect(Collectors.toList());
|
||||
Set<RecipientId> successIds = Stream.of(successUnidentifiedStatus).map(Pair::getFirst).collect(Collectors.toSet());
|
||||
Set<NetworkFailure> resolvedNetworkFailures = Stream.of(existingNetworkFailures).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
|
||||
Set<IdentityKeyMismatch> resolvedIdentityFailures = Stream.of(existingIdentityMismatches).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
|
||||
List<RecipientId> unregisteredRecipients = Stream.of(results).filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList());
|
||||
List<RecipientId> invalidPreKeyRecipients = Stream.of(results).filter(SendMessageResult::isInvalidPreKeyFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList());
|
||||
List<NetworkFailure> networkFailures = results.stream().filter(SendMessageResult::isNetworkFailure).map(result -> new NetworkFailure(accessList.requireIdByAddress(result.getAddress()))).collect(Collectors.toList());
|
||||
List<IdentityKeyMismatch> identityMismatches = results.stream().filter(result -> result.getIdentityFailure() != null)
|
||||
.map(result -> new IdentityKeyMismatch(accessList.requireIdByAddress(result.getAddress()), result.getIdentityFailure().getIdentityKey())).collect(Collectors.toList());
|
||||
ProofRequiredException proofRequired = results.stream().filter(r -> r.getProofRequiredFailure() != null).reduce((a, b) -> b).map(SendMessageResult::getProofRequiredFailure).orElse(null);
|
||||
List<SendMessageResult> successes = results.stream().filter(result -> result.getSuccess() != null).collect(Collectors.toList());
|
||||
List<Pair<RecipientId, Boolean>> successUnidentifiedStatus = successes.stream().map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).collect(Collectors.toList());
|
||||
Set<RecipientId> successIds = successUnidentifiedStatus.stream().map(Pair::getFirst).collect(Collectors.toSet());
|
||||
Set<NetworkFailure> resolvedNetworkFailures = existingNetworkFailures.stream().filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
|
||||
Set<IdentityKeyMismatch> resolvedIdentityFailures = existingIdentityMismatches.stream().filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
|
||||
List<RecipientId> unregisteredRecipients = results.stream().filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList());
|
||||
List<RecipientId> invalidPreKeyRecipients = results.stream().filter(SendMessageResult::isInvalidPreKeyFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList());
|
||||
Set<RecipientId> skippedRecipients = new HashSet<>();
|
||||
|
||||
skippedRecipients.addAll(skipped);
|
||||
@@ -522,9 +521,9 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
database.markAsSentFailed(messageId);
|
||||
notifyMediaMessageDeliveryFailed(context, messageId);
|
||||
|
||||
Set<RecipientId> mismatchRecipientIds = Stream.of(existingIdentityMismatches)
|
||||
.map(mismatch -> mismatch.getRecipientId())
|
||||
.collect(Collectors.toSet());
|
||||
Set<RecipientId> mismatchRecipientIds = existingIdentityMismatches.stream()
|
||||
.map(mismatch -> mismatch.getRecipientId())
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
RetrieveProfileJob.enqueue(mismatchRecipientIds, true);
|
||||
} else if (!networkFailures.isEmpty()) {
|
||||
@@ -548,20 +547,20 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||
List<Recipient> possible;
|
||||
|
||||
if (!destinations.isEmpty()) {
|
||||
possible = Stream.of(destinations)
|
||||
.map(GroupReceiptInfo::getRecipientId)
|
||||
.map(Recipient::resolved)
|
||||
.distinct().collect(Collectors.toList());
|
||||
possible = destinations.stream()
|
||||
.map(GroupReceiptInfo::getRecipientId)
|
||||
.map(Recipient::resolved)
|
||||
.distinct().collect(Collectors.toList());
|
||||
} else {
|
||||
Log.w(TAG, "No destinations found for group message " + groupId + " using current group membership");
|
||||
possible = Stream.of(SignalDatabase.groups()
|
||||
.getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF))
|
||||
.map(Recipient::resolve)
|
||||
.distinct().collect(Collectors.toList());
|
||||
possible = SignalDatabase.groups()
|
||||
.getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF).stream()
|
||||
.map(Recipient::resolve)
|
||||
.distinct().collect(Collectors.toList());
|
||||
}
|
||||
|
||||
List<Recipient> eligible = RecipientUtil.getEligibleForSending(possible);
|
||||
List<RecipientId> skipped = Stream.of(SetUtil.difference(possible, eligible)).map(Recipient::getId).collect(Collectors.toList());
|
||||
List<RecipientId> skipped = SetUtil.difference(possible, eligible).stream().map(Recipient::getId).collect(Collectors.toList());
|
||||
|
||||
return new GroupRecipientResult(eligible, skipped);
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ import android.text.TextUtils;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.signal.blurhash.BlurHash;
|
||||
import org.signal.core.models.ServiceId.ACI;
|
||||
@@ -216,16 +214,18 @@ public abstract class PushSendJob extends SendJob {
|
||||
|
||||
attachments.addAll(message.getAttachments());
|
||||
|
||||
attachments.addAll(Stream.of(message.getLinkPreviews())
|
||||
.map(LinkPreview::getThumbnail)
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get).collect(com.annimon.stream.Collectors.toList()));
|
||||
attachments.addAll(message.getLinkPreviews().stream()
|
||||
.map(LinkPreview::getThumbnail)
|
||||
.filter(Optional::isPresent)
|
||||
.map(Optional::get)
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
attachments.addAll(Stream.of(message.getSharedContacts())
|
||||
.map(Contact::getAvatar).filter(Objects::nonNull)
|
||||
.map(Contact.Avatar::getAttachment).filter(Objects::nonNull).collect(com.annimon.stream.Collectors.toList()));
|
||||
attachments.addAll(message.getSharedContacts().stream()
|
||||
.map(Contact::getAvatar).filter(Objects::nonNull)
|
||||
.map(Contact.Avatar::getAttachment).filter(Objects::nonNull)
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
HashSet<String> jobs = new HashSet<>(Stream.of(attachments).map(a -> {
|
||||
HashSet<String> jobs = new HashSet<>(attachments.stream().map(a -> {
|
||||
final AttachmentId attachmentId = ((DatabaseAttachment) a).attachmentId;
|
||||
Log.d(TAG, "Enqueueing job chain to upload " + attachmentId);
|
||||
AttachmentUploadJob attachmentUploadJob = new AttachmentUploadJob(attachmentId);
|
||||
@@ -235,7 +235,8 @@ public abstract class PushSendJob extends SendJob {
|
||||
.enqueue();
|
||||
|
||||
return attachmentUploadJob.getId();
|
||||
}).collect(com.annimon.stream.Collectors.toList()));
|
||||
})
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
if (message.getOutgoingQuote() != null && message.getOutgoingQuote().getAttachment() != null) {
|
||||
AttachmentId attachmentId = ((DatabaseAttachment) message.getOutgoingQuote().getAttachment()).attachmentId;
|
||||
@@ -251,7 +252,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
|
||||
protected @NonNull List<SignalServiceAttachment> getAttachmentPointersFor(List<Attachment> attachments) {
|
||||
return Stream.of(attachments).map(this::getAttachmentPointerFor).filter(a -> a != null).collect(com.annimon.stream.Collectors.toList());
|
||||
return attachments.stream().map(this::getAttachmentPointerFor).filter(a -> a != null).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
protected @Nullable SignalServiceAttachment getAttachmentPointerFor(Attachment attachment) {
|
||||
@@ -371,7 +372,7 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
|
||||
protected Optional<SignalServiceDataMessage.Sticker> getStickerFor(OutgoingMessage message) {
|
||||
Attachment stickerAttachment = Stream.of(message.getAttachments()).filter(Attachment::isSticker).findFirst().orElse(null);
|
||||
Attachment stickerAttachment = message.getAttachments().stream().filter(Attachment::isSticker).findFirst().orElse(null);
|
||||
|
||||
if (stickerAttachment == null) {
|
||||
return Optional.empty();
|
||||
@@ -428,15 +429,15 @@ public abstract class PushSendJob extends SendJob {
|
||||
}
|
||||
|
||||
List<SignalServicePreview> getPreviewsFor(OutgoingMessage mediaMessage) {
|
||||
return Stream.of(mediaMessage.getLinkPreviews()).map(lp -> {
|
||||
return mediaMessage.getLinkPreviews().stream().map(lp -> {
|
||||
SignalServiceAttachment attachment = lp.getThumbnail().isPresent() ? getAttachmentPointerFor(lp.getThumbnail().get()) : null;
|
||||
return new SignalServicePreview(lp.getUrl(), lp.getTitle(), lp.getDescription(), lp.getDate(), Optional.ofNullable(attachment));
|
||||
}).collect(com.annimon.stream.Collectors.toList());
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
List<SignalServiceDataMessage.Mention> getMentionsFor(@NonNull List<Mention> mentions) {
|
||||
return Stream.of(mentions)
|
||||
.map(m -> new SignalServiceDataMessage.Mention(Recipient.resolved(m.getRecipientId()).requireAci(), m.getStart(), m.getLength())).collect(com.annimon.stream.Collectors.toList());
|
||||
return mentions.stream()
|
||||
.map(m -> new SignalServiceDataMessage.Mention(Recipient.resolved(m.getRecipientId()).requireAci(), m.getStart(), m.getLength())).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Nullable SignalServiceDataMessage.GiftBadge getGiftBadgeFor(@NonNull OutgoingMessage message) throws UndeliverableMessageException {
|
||||
|
||||
@@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.jobs;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
@@ -50,8 +49,8 @@ public abstract class SendJob extends BaseJob {
|
||||
List<Attachment> attachments = new LinkedList<>();
|
||||
|
||||
attachments.addAll(message.getAttachments());
|
||||
attachments.addAll(Stream.of(message.getLinkPreviews()).map(lp -> lp.getThumbnail().orElse(null)).filter(Objects::nonNull).collect(com.annimon.stream.Collectors.toList()));
|
||||
attachments.addAll(Stream.of(message.getSharedContacts()).map(Contact::getAvatarAttachment).filter(Objects::nonNull).collect(com.annimon.stream.Collectors.toList()));
|
||||
attachments.addAll(message.getLinkPreviews().stream().map(lp -> lp.getThumbnail().orElse(null)).filter(Objects::nonNull).collect(Collectors.toList()));
|
||||
attachments.addAll(message.getSharedContacts().stream().map(Contact::getAvatarAttachment).filter(Objects::nonNull).collect(Collectors.toList()));
|
||||
|
||||
if (message.getOutgoingQuote() != null && message.getOutgoingQuote().getAttachment() != null) {
|
||||
attachments.add(message.getOutgoingQuote().getAttachment());
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package org.thoughtcrime.securesms.jobs
|
||||
|
||||
import android.content.Context
|
||||
import com.annimon.stream.Stream
|
||||
import org.signal.core.models.storageservice.StorageKey
|
||||
import org.signal.core.util.Base64
|
||||
import org.signal.core.util.SqlUtil
|
||||
@@ -331,7 +330,7 @@ class StorageSyncJob private constructor(parameters: Parameters, private var loc
|
||||
processKnownRecords(context, remoteOnly)
|
||||
|
||||
val unknownInserts: List<SignalStorageRecord> = remoteOnly.unknown
|
||||
val unknownDeletes = Stream.of(idDifference.localOnlyIds).filter { obj: StorageId -> obj.isUnknown }.collect(com.annimon.stream.Collectors.toList())
|
||||
val unknownDeletes = idDifference.localOnlyIds.stream().filter { obj: StorageId -> obj.isUnknown }.collect(Collectors.toList())
|
||||
|
||||
Log.i(TAG, "[Remote Sync] Unknowns :: " + unknownInserts.size + " inserts, " + unknownDeletes.size + " deletes")
|
||||
|
||||
@@ -377,7 +376,7 @@ class StorageSyncJob private constructor(parameters: Parameters, private var loc
|
||||
val localStorageIds = getAllLocalStorageIds(self)
|
||||
val idDifference = StorageSyncHelper.findIdDifference(remoteManifest.storageIds, localStorageIds)
|
||||
val remoteInserts = buildLocalStorageRecords(context, self, idDifference.localOnlyIds.stream().filter { it: StorageId -> !it.isUnknown }.collect(Collectors.toList()))
|
||||
val remoteDeletes = Stream.of(idDifference.remoteOnlyIds).map { obj: StorageId -> obj.raw }.collect(com.annimon.stream.Collectors.toList())
|
||||
val remoteDeletes = idDifference.remoteOnlyIds.stream().map { obj: StorageId -> obj.raw }.collect(Collectors.toList())
|
||||
|
||||
Log.i(TAG, "ID Difference :: $idDifference")
|
||||
|
||||
|
||||
@@ -3,8 +3,7 @@ package org.thoughtcrime.securesms.jobs;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.GroupTable;
|
||||
@@ -128,8 +127,8 @@ public class TypingSendJob extends BaseJob {
|
||||
groupId = Optional.of(recipient.requireGroupId().getDecodedId());
|
||||
}
|
||||
|
||||
recipients = RecipientUtil.getEligibleForSending(Stream.of(recipients)
|
||||
.map(Recipient::resolve).collect(Collectors.toList()));
|
||||
recipients = RecipientUtil.getEligibleForSending(recipients.stream()
|
||||
.map(Recipient::resolve).collect(Collectors.toList()));
|
||||
|
||||
SignalServiceTypingMessage typingMessage = new SignalServiceTypingMessage(typing ? Action.STARTED : Action.STOPPED, System.currentTimeMillis(), groupId);
|
||||
|
||||
|
||||
@@ -10,8 +10,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.core.text.HtmlCompat;
|
||||
import androidx.core.text.util.LinkifyCompat;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.LinkUtil;
|
||||
@@ -26,6 +25,7 @@ import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import okhttp3.HttpUrl;
|
||||
|
||||
@@ -155,10 +155,10 @@ public final class LinkPreviewUtil {
|
||||
|
||||
@SuppressLint("ObsoleteSdkInt")
|
||||
public long getDate() {
|
||||
return Stream.of(new String[] { values.get(KEY_PUBLISHED_TIME_1),
|
||||
values.get(KEY_PUBLISHED_TIME_2),
|
||||
values.get(KEY_MODIFIED_TIME_1),
|
||||
values.get(KEY_MODIFIED_TIME_2) })
|
||||
return Stream.of(values.get(KEY_PUBLISHED_TIME_1),
|
||||
values.get(KEY_PUBLISHED_TIME_2),
|
||||
values.get(KEY_MODIFIED_TIME_1),
|
||||
values.get(KEY_MODIFIED_TIME_2))
|
||||
.map(DateUtils::parseIso8601)
|
||||
.filter(time -> time > 0)
|
||||
.findFirst()
|
||||
@@ -178,9 +178,9 @@ public final class LinkPreviewUtil {
|
||||
|
||||
private Links(@NonNull List<Link> links) {
|
||||
this.links = links;
|
||||
this.urlSet = Stream.of(links)
|
||||
.map(link -> trimTrailingSlash(link.url))
|
||||
.collect(Collectors.toSet());
|
||||
this.urlSet = links.stream()
|
||||
.map(link -> trimTrailingSlash(link.url))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
public Optional<Link> findFirst() {
|
||||
|
||||
@@ -4,12 +4,10 @@ import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.Util;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.jobmanager.Constraint;
|
||||
import org.thoughtcrime.securesms.jobs.JobManagerFactories;
|
||||
import org.signal.core.util.Util;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -24,7 +22,7 @@ final class LogSectionConstraints implements LogSection {
|
||||
public @NonNull CharSequence getContent(@NonNull Context context) {
|
||||
StringBuilder output = new StringBuilder();
|
||||
Map<String, Constraint.Factory> factories = JobManagerFactories.getConstraintFactories(AppDependencies.getApplication());
|
||||
int keyLength = Stream.of(factories.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int keyLength = factories.keySet().stream().map(String::length).max(Integer::compareTo).orElse(0);
|
||||
|
||||
for (Map.Entry<String, Constraint.Factory> entry : factories.entrySet()) {
|
||||
output.append(Util.rightPad(entry.getKey(), keyLength)).append(": ").append(entry.getValue().create().isMet()).append("\n");
|
||||
|
||||
@@ -4,10 +4,8 @@ import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig;
|
||||
import org.signal.core.util.Util;
|
||||
import org.thoughtcrime.securesms.util.RemoteConfig;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -24,9 +22,9 @@ public class LogSectionRemoteConfig implements LogSection {
|
||||
Map<String, Object> memory = RemoteConfig.getMemoryValues();
|
||||
Map<String, Object> disk = RemoteConfig.getDebugDiskValues();
|
||||
Map<String, Object> pending = RemoteConfig.getDebugPendingDiskValues();
|
||||
int remoteLength = Stream.of(memory.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int diskLength = Stream.of(disk.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int pendingLength = Stream.of(pending.keySet()).map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int remoteLength = memory.keySet().stream().map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int diskLength = disk.keySet().stream().map(String::length).max(Integer::compareTo).orElse(0);
|
||||
int pendingLength = pending.keySet().stream().map(String::length).max(Integer::compareTo).orElse(0);
|
||||
|
||||
out.append("-- Memory\n");
|
||||
for (Map.Entry<String, Object> entry : memory.entrySet()) {
|
||||
|
||||
+2
-3
@@ -10,9 +10,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.signal.core.util.StreamUtil;
|
||||
@@ -41,6 +38,8 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.zip.GZIPOutputStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
+7
-12
@@ -32,18 +32,15 @@ import androidx.annotation.Nullable;
|
||||
import androidx.lifecycle.Observer;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.bumptech.glide.RequestManager;
|
||||
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.signal.core.util.ByteSize;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
|
||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
||||
import org.thoughtcrime.securesms.components.AudioView;
|
||||
import org.thoughtcrime.securesms.components.ThumbnailView;
|
||||
@@ -51,17 +48,15 @@ import org.thoughtcrime.securesms.components.voice.VoiceNotePlaybackState;
|
||||
import org.thoughtcrime.securesms.database.MediaTable;
|
||||
import org.thoughtcrime.securesms.database.MediaTable.MediaRecord;
|
||||
import org.thoughtcrime.securesms.database.loaders.GroupedThreadMediaLoader.GroupedThreadMedia;
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mediapreview.MediaPreviewCache;
|
||||
import org.thoughtcrime.securesms.mms.AudioSlide;
|
||||
import org.thoughtcrime.securesms.mms.Slide;
|
||||
import org.thoughtcrime.securesms.recipients.LiveRecipient;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
|
||||
import org.thoughtcrime.securesms.util.DateUtils;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.signal.core.util.Util;
|
||||
import org.thoughtcrime.securesms.util.livedata.LiveDataPair;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -236,8 +231,8 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
|
||||
}
|
||||
|
||||
public long getSelectedMediaTotalFileSize() {
|
||||
return Stream.of(selected.values())
|
||||
.collect(Collectors.summingLong(a -> a.getAttachment() != null ? a.getAttachment().size : 0));
|
||||
return selected.values().stream()
|
||||
.collect(Collectors.summingLong(a -> a.getAttachment() != null ? a.getAttachment().size : 0));
|
||||
}
|
||||
|
||||
@NonNull
|
||||
|
||||
+2
-1
@@ -62,6 +62,7 @@ import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
@@ -523,7 +524,7 @@ public final class MediaOverviewPageFragment extends LoggingFragment
|
||||
return;
|
||||
} else if (someOffloaded) {
|
||||
OffloadedMediaDialogUtil.showPartiallyOffloaded(requireContext(), () -> {
|
||||
Collection<MediaTable.MediaRecord> saveable = selected.stream().filter(r -> r.getAttachment() == null || r.getAttachment().hasData).collect(java.util.stream.Collectors.toList());
|
||||
Collection<MediaTable.MediaRecord> saveable = selected.stream().filter(r -> r.getAttachment() == null || r.getAttachment().hasData).collect(Collectors.toList());
|
||||
lifecycleDisposable.add(
|
||||
MediaActions
|
||||
.handleSaveMedia(MediaOverviewPageFragment.this, saveable)
|
||||
|
||||
@@ -9,29 +9,26 @@ import android.provider.MediaStore;
|
||||
import android.provider.MediaStore.Images;
|
||||
import android.provider.MediaStore.Video;
|
||||
import android.provider.OpenableColumns;
|
||||
import kotlin.Pair;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.signal.core.models.media.Media;
|
||||
import org.signal.core.models.media.MediaFolder;
|
||||
import org.signal.core.models.media.TransformProperties;
|
||||
import org.signal.core.ui.util.StorageUtil;
|
||||
import org.signal.core.util.SqlUtil;
|
||||
import org.signal.core.util.Stopwatch;
|
||||
import org.signal.core.util.Util;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.mms.PartAuthority;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.signal.core.util.SqlUtil;
|
||||
import org.signal.core.util.Stopwatch;
|
||||
import org.signal.core.ui.util.StorageUtil;
|
||||
import org.signal.core.util.Util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
@@ -46,7 +43,7 @@ import java.util.stream.Collectors;
|
||||
|
||||
import io.reactivex.rxjava3.core.Single;
|
||||
import io.reactivex.rxjava3.schedulers.Schedulers;
|
||||
import kotlin.collections.MapsKt;
|
||||
import kotlin.Pair;
|
||||
|
||||
/**
|
||||
* Handles the retrieval of media present on the user's device.
|
||||
@@ -108,7 +105,7 @@ public class MediaRepository {
|
||||
* much data as we have, like width/height.
|
||||
*/
|
||||
public void getPopulatedMedia(@NonNull Context context, @NonNull List<Media> media, @NonNull Callback<List<Media>> callback) {
|
||||
if (Stream.of(media).allMatch(this::isPopulated)) {
|
||||
if (media.stream().allMatch(this::isPopulated)) {
|
||||
callback.onComplete(media);
|
||||
return;
|
||||
}
|
||||
@@ -157,14 +154,14 @@ public class MediaRepository {
|
||||
|
||||
String cameraBucketId = imageFolders.getCameraBucketId() != null ? imageFolders.getCameraBucketId() : videoFolders.getCameraBucketId();
|
||||
FolderData cameraFolder = cameraBucketId != null ? folders.remove(cameraBucketId) : null;
|
||||
List<MediaFolder> mediaFolders = Stream.of(folders.values())
|
||||
.filter(folder -> folder.getTitle() != null)
|
||||
.map(folder -> new MediaFolder(folder.getThumbnail(),
|
||||
List<MediaFolder> mediaFolders = folders.values().stream()
|
||||
.filter(folder -> folder.getTitle() != null)
|
||||
.map(folder -> new MediaFolder(folder.getThumbnail(),
|
||||
folder.getTitle(),
|
||||
folder.getCount(),
|
||||
folder.getBucketId(),
|
||||
MediaFolder.FolderType.NORMAL))
|
||||
.sorted((o1, o2) -> o1.getTitle().toLowerCase().compareTo(o2.getTitle().toLowerCase())).collect(com.annimon.stream.Collectors.toList());
|
||||
.sorted((o1, o2) -> o1.getTitle().toLowerCase().compareTo(o2.getTitle().toLowerCase())).collect(Collectors.toList());
|
||||
|
||||
Uri allMediaThumbnail = imageFolders.getThumbnailTimestamp() > videoFolders.getThumbnailTimestamp() ? imageFolders.getThumbnail() : videoFolders.getThumbnail();
|
||||
|
||||
|
||||
@@ -6,16 +6,14 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.models.media.Media;
|
||||
import org.signal.core.models.media.TransformProperties;
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
import org.thoughtcrime.securesms.attachments.AttachmentId;
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.signal.core.models.media.Media;
|
||||
import org.signal.core.models.media.TransformProperties;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
import org.thoughtcrime.securesms.jobmanager.JobManager;
|
||||
@@ -168,7 +166,7 @@ public class MediaUploadRepository {
|
||||
|
||||
if (result != null) {
|
||||
Log.d(TAG, "Canceling attachment upload job for " + result.getAttachmentId());
|
||||
Stream.of(result.getJobIds()).forEach(jobManager::cancel);
|
||||
result.getJobIds().stream().forEach(jobManager::cancel);
|
||||
uploadResults.remove(media);
|
||||
SignalDatabase.attachments().deleteAttachment(result.getAttachmentId());
|
||||
}
|
||||
|
||||
@@ -8,8 +8,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.database.MegaphoneDatabase;
|
||||
@@ -21,6 +20,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Synchronization of data structures is done using a serial executor. Do not access or change
|
||||
@@ -123,8 +123,8 @@ public class MegaphoneRepository {
|
||||
@WorkerThread
|
||||
private void init() {
|
||||
List<MegaphoneRecord> records = database.getAllAndDeleteMissing();
|
||||
Set<Event> events = Stream.of(records).map(MegaphoneRecord::getEvent).collect(Collectors.toSet());
|
||||
Set<Event> missing = Stream.of(Megaphones.Event.values()).filter(o -> !events.contains(o)).collect(Collectors.toSet());
|
||||
Set<Event> events = records.stream().map(MegaphoneRecord::getEvent).collect(Collectors.toSet());
|
||||
Set<Event> missing = Stream.of(Event.values()).filter(o -> !events.contains(o)).collect(Collectors.toSet());
|
||||
|
||||
database.insert(missing);
|
||||
resetDatabaseCache();
|
||||
@@ -139,7 +139,7 @@ public class MegaphoneRepository {
|
||||
@WorkerThread
|
||||
private void resetDatabaseCache() {
|
||||
databaseCache.clear();
|
||||
databaseCache.putAll(Stream.of(database.getAllAndDeleteMissing()).collect(Collectors.toMap(MegaphoneRecord::getEvent, m -> m)));
|
||||
databaseCache.putAll(database.getAllAndDeleteMissing().stream().collect(Collectors.toMap(MegaphoneRecord::getEvent, m -> m)));
|
||||
}
|
||||
|
||||
public interface Callback<E> {
|
||||
|
||||
@@ -11,8 +11,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.bumptech.glide.Glide;
|
||||
|
||||
import org.signal.core.util.DiskUtil;
|
||||
@@ -90,17 +89,17 @@ public final class Megaphones {
|
||||
static @Nullable Megaphone getNextMegaphone(@NonNull Context context, @NonNull Map<Event, MegaphoneRecord> records) {
|
||||
long currentTime = System.currentTimeMillis();
|
||||
|
||||
List<Megaphone> megaphones = Stream.of(buildDisplayOrder(context, records))
|
||||
.filter(e -> {
|
||||
List<Megaphone> megaphones = buildDisplayOrder(context, records).entrySet().stream()
|
||||
.filter(e -> {
|
||||
MegaphoneRecord record = Objects.requireNonNull(records.get(e.getKey()));
|
||||
MegaphoneSchedule schedule = e.getValue();
|
||||
|
||||
return !record.isFinished() && schedule.shouldDisplay(record.getSeenCount(), record.getLastSeen(), record.getFirstVisible(), currentTime);
|
||||
})
|
||||
.map(Map.Entry::getKey)
|
||||
.map(records::get)
|
||||
.map(record -> Megaphones.forRecord(context, record))
|
||||
.filter(Objects::nonNull).collect(Collectors.toList());
|
||||
.map(Map.Entry::getKey)
|
||||
.map(records::get)
|
||||
.map(record -> Megaphones.forRecord(context, record))
|
||||
.filter(Objects::nonNull).collect(Collectors.toList());
|
||||
|
||||
if (megaphones.size() > 0) {
|
||||
return megaphones.get(0);
|
||||
|
||||
+3
-3
@@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.migrations;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
@@ -52,7 +52,7 @@ public class StickerAdditionMigrationJob extends MigrationJob {
|
||||
|
||||
@Override
|
||||
public @Nullable byte[] serialize() {
|
||||
String[] packsRaw = Stream.of(packs).map(BlessedPacks.Pack::toJson).toArray(String[]::new);
|
||||
String[] packsRaw = packs.stream().map(BlessedPacks.Pack::toJson).toArray(String[]::new);
|
||||
return new JsonJobData.Builder().putStringArray(KEY_PACKS, packsRaw).serialize();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,12 +19,11 @@ package org.thoughtcrime.securesms.mms;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.Util;
|
||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.signal.core.util.Util;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
@@ -111,7 +110,7 @@ public class SlideDeck {
|
||||
}
|
||||
|
||||
public @NonNull List<Slide> getThumbnailSlides() {
|
||||
return Stream.of(slides).filter(Slide::hasImage).collect(Collectors.toList());
|
||||
return slides.stream().filter(Slide::hasImage).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public @Nullable AudioSlide getAudioSlide() {
|
||||
|
||||
@@ -4,8 +4,7 @@ import android.text.TextUtils;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import com.bumptech.glide.util.ContentLengthInputStream;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
@@ -139,8 +138,8 @@ public class ChunkedDataFetcher {
|
||||
List<ByteRange> requestPattern;
|
||||
try {
|
||||
if (firstChunk.isPresent()) {
|
||||
requestPattern = Stream.of(getRequestPattern(contentLength - firstChunk.get().getSecond()))
|
||||
.map(b -> new ByteRange(b.start + firstChunk.get().getSecond(),
|
||||
requestPattern = getRequestPattern(contentLength - firstChunk.get().getSecond()).stream()
|
||||
.map(b -> new ByteRange(b.start + firstChunk.get().getSecond(),
|
||||
b.end + firstChunk.get().getSecond(),
|
||||
b.ignoreFirst)).collect(Collectors.toList());
|
||||
} else {
|
||||
@@ -153,14 +152,14 @@ public class ChunkedDataFetcher {
|
||||
}
|
||||
|
||||
SignalExecutors.UNBOUNDED.execute(() -> {
|
||||
List<CallRequestController> controllers = Stream.of(requestPattern).map(range -> makeChunkRequest(client, url, range)).collect(Collectors.toList());
|
||||
List<CallRequestController> controllers = requestPattern.stream().map(range -> makeChunkRequest(client, url, range)).collect(Collectors.toList());
|
||||
List<InputStream> streams = new ArrayList<>(controllers.size() + (firstChunk.isPresent() ? 1 : 0));
|
||||
|
||||
if (firstChunk.isPresent()) {
|
||||
streams.add(firstChunk.get().getFirst());
|
||||
}
|
||||
|
||||
Stream.of(controllers).forEach(compositeController::addController);
|
||||
controllers.stream().forEach(compositeController::addController);
|
||||
|
||||
for (CallRequestController controller : controllers) {
|
||||
Optional<InputStream> stream = controller.getStream();
|
||||
|
||||
@@ -2,8 +2,6 @@ package org.thoughtcrime.securesms.net;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -23,7 +21,7 @@ public class CompositeRequestController implements RequestController {
|
||||
@Override
|
||||
public synchronized void cancel() {
|
||||
canceled = true;
|
||||
Stream.of(controllers).forEach(RequestController::cancel);
|
||||
controllers.stream().forEach(RequestController::cancel);
|
||||
}
|
||||
|
||||
public synchronized boolean isCanceled() {
|
||||
|
||||
@@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.net;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.xbill.DNS.ARecord;
|
||||
|
||||
@@ -7,8 +7,7 @@ import android.content.Intent;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -29,8 +28,6 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import kotlin.Pair;
|
||||
|
||||
public class MarkReadReceiver extends BroadcastReceiver {
|
||||
|
||||
private static final String TAG = Log.tag(MarkReadReceiver.class);
|
||||
@@ -76,25 +73,27 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
public static void process(@NonNull List<MarkedMessageInfo> markedReadMessages) {
|
||||
if (markedReadMessages.isEmpty()) return;
|
||||
|
||||
List<SyncMessageId> syncMessageIds = Stream.of(markedReadMessages)
|
||||
.map(MarkedMessageInfo::getSyncMessageId).collect(Collectors.toList());
|
||||
List<ExpirationInfo> expirationInfo = Stream.of(markedReadMessages)
|
||||
.map(MarkedMessageInfo::getExpirationInfo)
|
||||
.filter(info -> info.getExpiresIn() > 0 && info.getExpireStarted() <= 0).collect(Collectors.toList());
|
||||
List<SyncMessageId> syncMessageIds = markedReadMessages.stream()
|
||||
.map(MarkedMessageInfo::getSyncMessageId)
|
||||
.collect(Collectors.toList());
|
||||
List<ExpirationInfo> expirationInfo = markedReadMessages.stream()
|
||||
.map(MarkedMessageInfo::getExpirationInfo)
|
||||
.filter(info -> info.getExpiresIn() > 0 && info.getExpireStarted() <= 0)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
scheduleDeletion(expirationInfo);
|
||||
|
||||
MultiDeviceReadUpdateJob.enqueue(syncMessageIds);
|
||||
|
||||
Map<Long, List<MarkedMessageInfo>> threadToInfo = Stream.of(markedReadMessages)
|
||||
.collect(Collectors.groupingBy(MarkedMessageInfo::getThreadId));
|
||||
Map<Long, List<MarkedMessageInfo>> threadToInfo = markedReadMessages.stream()
|
||||
.collect(Collectors.groupingBy(MarkedMessageInfo::getThreadId));
|
||||
|
||||
Stream.of(threadToInfo).forEach(threadToInfoEntry -> {
|
||||
Map<RecipientId, List<MarkedMessageInfo>> recipientIdToInfo = Stream.of(threadToInfoEntry.getValue())
|
||||
.map(info -> info)
|
||||
.collect(Collectors.groupingBy(info -> info.getSyncMessageId().getRecipientId()));
|
||||
threadToInfo.entrySet().stream().forEach(threadToInfoEntry -> {
|
||||
Map<RecipientId, List<MarkedMessageInfo>> recipientIdToInfo = threadToInfoEntry.getValue().stream()
|
||||
.map(info -> info)
|
||||
.collect(Collectors.groupingBy(info -> info.getSyncMessageId().getRecipientId()));
|
||||
|
||||
Stream.of(recipientIdToInfo).forEach(entry -> {
|
||||
recipientIdToInfo.entrySet().stream().forEach(entry -> {
|
||||
long threadId = threadToInfoEntry.getKey();
|
||||
RecipientId recipientId = entry.getKey();
|
||||
List<MarkedMessageInfo> infos = entry.getValue();
|
||||
@@ -108,7 +107,7 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
List<RecipientId> peers = SignalDatabase.threads().getRecipientIdsForThreadIds(threads.stream()
|
||||
.filter(it -> it.getGroupStoryId() == null)
|
||||
.map(ConversationId::getThreadId)
|
||||
.collect(java.util.stream.Collectors.toList()));
|
||||
.collect(Collectors.toList()));
|
||||
|
||||
for (RecipientId peer : peers) {
|
||||
CallTable.Call lastCallInThread = SignalDatabase.calls().markAllCallEventsWithPeerBeforeTimestampRead(peer, timestamp);
|
||||
@@ -121,10 +120,10 @@ public class MarkReadReceiver extends BroadcastReceiver {
|
||||
private static void scheduleDeletion(@NonNull List<ExpirationInfo> expirationInfo) {
|
||||
if (expirationInfo.size() > 0) {
|
||||
long now = System.currentTimeMillis();
|
||||
SignalDatabase.messages().markExpireStarted(Stream.of(expirationInfo).map(info -> new Pair<>(info.getId(), now)).collect(Collectors.toList()));
|
||||
SignalDatabase.messages().markExpireStarted(expirationInfo.stream().map(info -> new kotlin.Pair<>(info.getId(), now)).collect(Collectors.toList()));
|
||||
|
||||
AppDependencies.getExpiringMessageManager()
|
||||
.scheduleDeletion(Stream.of(expirationInfo).map(info -> info.copy(info.getId(), info.getExpiresIn(), now, info.isMms())).collect(Collectors.toList()));
|
||||
.scheduleDeletion(expirationInfo.stream().map(info -> info.copy(info.getId(), info.getExpiresIn(), now, info.isMms())).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-2
@@ -9,8 +9,6 @@ import android.service.notification.StatusBarNotification;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.dependencies.AppDependencies;
|
||||
@@ -25,6 +23,7 @@ import java.util.Collections;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* Consolidates Notification Cancellation logic to one class.
|
||||
|
||||
+2
-3
@@ -22,8 +22,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
@@ -575,7 +574,7 @@ public class NotificationChannels {
|
||||
}
|
||||
}
|
||||
|
||||
Set<String> existingChannelIds = Stream.of(notificationManager.getNotificationChannels()).map(NotificationChannel::getId).collect(Collectors.toSet());
|
||||
Set<String> existingChannelIds = notificationManager.getNotificationChannels().stream().map(NotificationChannel::getId).collect(Collectors.toSet());
|
||||
|
||||
for (NotificationChannel existingChannel : notificationManager.getNotificationChannels()) {
|
||||
if ((existingChannel.getId().startsWith(CONTACT_PREFIX) || existingChannel.getId().startsWith(MESSAGES_PREFIX)) &&
|
||||
|
||||
@@ -3,9 +3,10 @@ package org.thoughtcrime.securesms.payments;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A payment may be comprised of zero or more defrag transactions and the payment transaction.
|
||||
* <p>
|
||||
@@ -22,7 +23,7 @@ public final class PaymentSubmissionResult {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
this.defrags = transactions.stream()
|
||||
.filter(TransactionSubmissionResult::isDefrag).collect(Collectors.toList());
|
||||
.filter(TransactionSubmissionResult::isDefrag).collect(Collectors.toList());
|
||||
final List<TransactionSubmissionResult> nonDefragTransactions = transactions.stream().filter(x -> !x.isDefrag()).collect(Collectors.toList());
|
||||
if (nonDefragTransactions.size() > 1) throw new IllegalStateException("Too many defrag transaction results!");
|
||||
this.nonDefrag = nonDefragTransactions.isEmpty() ? null : nonDefragTransactions.get(0);
|
||||
|
||||
+2
-1
@@ -35,6 +35,7 @@ import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class PaymentsRecoveryPhraseFragment extends Fragment {
|
||||
|
||||
@@ -71,7 +72,7 @@ public class PaymentsRecoveryPhraseFragment extends Fragment {
|
||||
|
||||
List<MnemonicPart> parts = IntStream.range(0, words.size()).boxed()
|
||||
.map(index -> new MnemonicPart(index, words.get(index)))
|
||||
.sorted(new MnemonicPartComparator(words.size(), SPAN_COUNT)).collect(java.util.stream.Collectors.toList());
|
||||
.sorted(new MnemonicPartComparator(words.size(), SPAN_COUNT)).collect(Collectors.toList());
|
||||
|
||||
MnemonicPartAdapter adapter = new MnemonicPartAdapter();
|
||||
|
||||
|
||||
+1
-2
@@ -18,7 +18,6 @@ import androidx.navigation.fragment.NavHostFragment;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.airbnb.lottie.LottieAnimationView;
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.snackbar.Snackbar;
|
||||
|
||||
@@ -139,7 +138,7 @@ public class PaymentsHomeFragment extends LoggingFragment {
|
||||
});
|
||||
|
||||
viewModel.getList().observe(getViewLifecycleOwner(), list -> {
|
||||
boolean hadPaymentItems = Stream.of(adapter.getCurrentList()).anyMatch(model -> model instanceof PaymentItem);
|
||||
boolean hadPaymentItems = adapter.getCurrentList().stream().anyMatch(model -> model instanceof PaymentItem);
|
||||
|
||||
if (!hadPaymentItems) {
|
||||
adapter.submitList(list, () -> recycler.scrollToPosition(0));
|
||||
|
||||
+4
-5
@@ -7,8 +7,7 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.core.util.money.FiatMoney;
|
||||
@@ -196,9 +195,9 @@ public class PaymentsHomeViewModel extends ViewModel {
|
||||
private @NonNull PaymentsHomeState updateRecentPayments(@NonNull List<Payment> payments,
|
||||
@NonNull PaymentsHomeState state)
|
||||
{
|
||||
List<PaymentItem> paymentItems = Stream.of(payments)
|
||||
.limit(MAX_PAYMENT_ITEMS)
|
||||
.map(PaymentItem::fromPayment).collect(Collectors.toList());
|
||||
List<PaymentItem> paymentItems = payments.stream()
|
||||
.limit(MAX_PAYMENT_ITEMS)
|
||||
.map(PaymentItem::fromPayment).collect(Collectors.toList());
|
||||
|
||||
return state.updatePayments(paymentItems, payments.size());
|
||||
}
|
||||
|
||||
+6
-7
@@ -6,8 +6,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.lifecycle.LiveData;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.database.PaymentTable;
|
||||
@@ -57,9 +56,9 @@ public class PaymentsRepository {
|
||||
}
|
||||
|
||||
private void updateDatabaseWithNewBlockInformation(@NonNull List<Payment> reconcileOutput) {
|
||||
List<LedgerReconcile.BlockOverridePayment> blockOverridePayments = Stream.of(reconcileOutput)
|
||||
.filter(x -> x instanceof LedgerReconcile.BlockOverridePayment)
|
||||
.map(x -> (LedgerReconcile.BlockOverridePayment)x).collect(Collectors.toList());
|
||||
List<LedgerReconcile.BlockOverridePayment> blockOverridePayments = reconcileOutput.stream()
|
||||
.filter(x -> x instanceof LedgerReconcile.BlockOverridePayment)
|
||||
.map(x -> (LedgerReconcile.BlockOverridePayment)x).collect(Collectors.toList());
|
||||
|
||||
if (blockOverridePayments.isEmpty()) {
|
||||
return;
|
||||
@@ -102,7 +101,7 @@ public class PaymentsRepository {
|
||||
private @NonNull List<Payment> filterPayments(@NonNull List<Payment> payments,
|
||||
@NonNull Direction direction)
|
||||
{
|
||||
return Stream.of(payments)
|
||||
.filter(p -> p.getDirection() == direction).collect(Collectors.toList());
|
||||
return payments.stream()
|
||||
.filter(p -> p.getDirection() == direction).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -7,8 +7,6 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.BuildConfig;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
@@ -25,7 +23,9 @@ import org.signal.core.util.SetUtil;
|
||||
import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList;
|
||||
import org.thoughtcrime.securesms.util.livedata.Store;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.Comparator;
|
||||
import java.util.Currency;
|
||||
import java.util.List;
|
||||
@@ -127,10 +127,10 @@ public final class SetCurrencyViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
public static class SetCurrencyState {
|
||||
private static final List<Currency> DEFAULT_CURRENCIES = Stream.of(BuildConfig.DEFAULT_CURRENCIES.split(","))
|
||||
private static final List<Currency> DEFAULT_CURRENCIES = Arrays.stream(BuildConfig.DEFAULT_CURRENCIES.split(","))
|
||||
.map(CurrencyUtil::getCurrencyByCurrencyCode)
|
||||
.filter(Objects::nonNull)
|
||||
.collect(com.annimon.stream.Collectors.toList());
|
||||
.collect(Collectors.toList());
|
||||
|
||||
private final Currency currentCurrency;
|
||||
private final CurrencyExchange currencyExchange;
|
||||
|
||||
-1
@@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.payments.Payment;
|
||||
|
||||
+29
-30
@@ -3,8 +3,7 @@ package org.thoughtcrime.securesms.payments.reconciliation;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.MapUtil;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -52,7 +51,7 @@ public final class LedgerReconcile {
|
||||
private static @NonNull List<Payment> reconcile(@NonNull Collection<? extends Payment> allLocalPaymentTransactions,
|
||||
@NonNull List<MobileCoinLedgerWrapper.OwnedTxo> allTxOuts)
|
||||
{
|
||||
List<? extends Payment> nonFailedLocalPayments = Stream.of(allLocalPaymentTransactions).filter(i -> i.getState() != State.FAILED).collect(Collectors.toList());
|
||||
List<? extends Payment> nonFailedLocalPayments = allLocalPaymentTransactions.stream().filter(i -> i.getState() != State.FAILED).collect(Collectors.toList());
|
||||
Set<ByteString> allKnownPublicKeys = new HashSet<>(nonFailedLocalPayments.size());
|
||||
Set<ByteString> allKnownKeyImages = new HashSet<>(nonFailedLocalPayments.size());
|
||||
|
||||
@@ -63,24 +62,24 @@ public final class LedgerReconcile {
|
||||
allKnownKeyImages.addAll(txoIdentification.keyImages);
|
||||
}
|
||||
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> knownTxosByKeyImage = Stream.of(allTxOuts)
|
||||
.filter(t -> allKnownKeyImages.contains(t.getKeyImage()))
|
||||
.collect(Collectors.toSet());
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> knownTxosByKeyImage = allTxOuts.stream()
|
||||
.filter(t -> allKnownKeyImages.contains(t.getKeyImage()))
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> knownTxosByPublicKeys = Stream.of(allTxOuts)
|
||||
.filter(t -> allKnownPublicKeys.contains(t.getPublicKey()))
|
||||
.collect(Collectors.toSet());
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> knownTxosByPublicKeys = allTxOuts.stream()
|
||||
.filter(t -> allKnownPublicKeys.contains(t.getPublicKey()))
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
// any TXO that we can't pair up the pub key for, we don't have detail for how it got into the account
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> unknownTxOutsReceived = new HashSet<>(allTxOuts);
|
||||
unknownTxOutsReceived.removeAll(knownTxosByPublicKeys);
|
||||
|
||||
// any TXO that we can't pair up the keyimage for, we don't have detail for how it got spent
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> unknownTxOutsSpent = Stream.of(allTxOuts).filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent).collect(Collectors.toSet());
|
||||
Set<MobileCoinLedgerWrapper.OwnedTxo> unknownTxOutsSpent = allTxOuts.stream().filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent).collect(Collectors.toSet());
|
||||
unknownTxOutsSpent.removeAll(knownTxosByKeyImage);
|
||||
|
||||
if (unknownTxOutsReceived.isEmpty() && unknownTxOutsSpent.isEmpty()) {
|
||||
return Stream.of(allLocalPaymentTransactions).map(t -> (Payment) t).collect(Collectors.toList());
|
||||
return allLocalPaymentTransactions.stream().map(t -> (Payment) t).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
List<DetailedTransaction> detailedTransactions = reconstructAllTransactions(unknownTxOutsReceived, unknownTxOutsSpent);
|
||||
@@ -184,25 +183,25 @@ public final class LedgerReconcile {
|
||||
}
|
||||
|
||||
private static @NonNull List<DetailedTransaction> reconstructAllTransactions(@NonNull Set<MobileCoinLedgerWrapper.OwnedTxo> unknownReceived, @NonNull Set<MobileCoinLedgerWrapper.OwnedTxo> unknownSpent) {
|
||||
Set<Long> allBlocksWithActivity = Stream.of(unknownReceived)
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock)
|
||||
.collect(Collectors.toSet());
|
||||
Set<Long> allBlocksWithActivity = unknownReceived.stream()
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock)
|
||||
.collect(Collectors.toSet());
|
||||
|
||||
allBlocksWithActivity
|
||||
.addAll(Stream.of(unknownSpent)
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getSpentInBlock)
|
||||
.collect(Collectors.toSet()));
|
||||
.addAll(unknownSpent.stream()
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getSpentInBlock)
|
||||
.collect(Collectors.toSet()));
|
||||
|
||||
Map<Long, List<MobileCoinLedgerWrapper.OwnedTxo>> receivedInBlock = Stream.of(unknownReceived)
|
||||
.collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock));
|
||||
Map<Long, List<MobileCoinLedgerWrapper.OwnedTxo>> receivedInBlock = unknownReceived.stream()
|
||||
.collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock));
|
||||
|
||||
Map<Long, List<MobileCoinLedgerWrapper.OwnedTxo>> spentInBlock = Stream.of(unknownSpent)
|
||||
.filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent)
|
||||
.collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getSpentInBlock));
|
||||
Map<Long, List<MobileCoinLedgerWrapper.OwnedTxo>> spentInBlock = unknownSpent.stream()
|
||||
.filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent)
|
||||
.collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getSpentInBlock));
|
||||
|
||||
return Stream.of(allBlocksWithActivity)
|
||||
.sorted((a, b) -> b.compareTo(a))
|
||||
.flatMap(blockIndex -> {
|
||||
return allBlocksWithActivity.stream()
|
||||
.sorted((a, b) -> b.compareTo(a))
|
||||
.flatMap(blockIndex -> {
|
||||
List<MobileCoinLedgerWrapper.OwnedTxo> unspent = MapUtil.getOrDefault(receivedInBlock, blockIndex, Collections.emptyList());
|
||||
List<MobileCoinLedgerWrapper.OwnedTxo> spent = MapUtil.getOrDefault(spentInBlock, blockIndex, Collections.emptyList());
|
||||
|
||||
@@ -221,15 +220,15 @@ public final class LedgerReconcile {
|
||||
TransactionReconstruction transactionReconstruction = TransactionReconstruction.estimateBlockLevelActivity(toMobileCoinList(spent), toMobileCoinList(unspent));
|
||||
|
||||
BlockDetail blockDetail = new BlockDetail(blockIndex, timeStamp);
|
||||
return Stream.of(transactionReconstruction.getAllTransactions())
|
||||
.map(t -> new DetailedTransaction(blockDetail, t));
|
||||
return transactionReconstruction.getAllTransactions().stream()
|
||||
.map(t -> new DetailedTransaction(blockDetail, t));
|
||||
})
|
||||
.sorted(DetailedTransaction.DESCENDING).collect(Collectors.toList());
|
||||
.sorted(DetailedTransaction.DESCENDING).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private static @NonNull List<Money.MobileCoin> toMobileCoinList(@NonNull List<MobileCoinLedgerWrapper.OwnedTxo> spent) {
|
||||
return Stream.of(spent)
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getValue).collect(Collectors.toList());
|
||||
return spent.stream()
|
||||
.map(MobileCoinLedgerWrapper.OwnedTxo::getValue).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public static class BlockOverridePayment extends PaymentDecorator {
|
||||
|
||||
+4
-5
@@ -10,8 +10,7 @@ import androidx.lifecycle.MutableLiveData;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.groups.LiveGroup;
|
||||
@@ -87,9 +86,9 @@ public class ReviewCardViewModel extends ViewModel {
|
||||
|
||||
@WorkerThread
|
||||
private @NonNull List<ReviewCard> transformReviewRecipients(boolean isSelfGroupAdmin, @NonNull List<ReviewRecipient> reviewRecipients) {
|
||||
return Stream.of(reviewRecipients)
|
||||
.filter(r -> repository.loadGroupsInCommonCount(r) > 0)
|
||||
.map(r -> new ReviewCard(r,
|
||||
return reviewRecipients.stream()
|
||||
.filter(r -> repository.loadGroupsInCommonCount(r) > 0)
|
||||
.map(r -> new ReviewCard(r,
|
||||
repository.loadGroupsInCommonCount(r) - (isGroupThread ? 1 : 0),
|
||||
getCardType(r),
|
||||
getPrimaryAction(r, isSelfGroupAdmin),
|
||||
|
||||
+1
-2
@@ -13,7 +13,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.EmojiImageView;
|
||||
@@ -164,7 +163,7 @@ public class ReactionsConversationView extends LinearLayout {
|
||||
List<Reaction> shortened = new ArrayList<>(3);
|
||||
shortened.add(reactions.get(0));
|
||||
shortened.add(reactions.get(1));
|
||||
shortened.add(Stream.of(reactions).skip(2).reduce(new Reaction(null, null, 0, 0, false), Reaction::merge));
|
||||
shortened.add(reactions.stream().skip(2).reduce(new Reaction(null, null, 0, 0, false), Reaction::merge));
|
||||
|
||||
return shortened;
|
||||
} else {
|
||||
|
||||
@@ -4,8 +4,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
|
||||
@@ -14,7 +13,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.rxjava3.core.Maybe;
|
||||
import io.reactivex.rxjava3.core.Observable;
|
||||
|
||||
public class ReactionsViewModel extends ViewModel {
|
||||
@@ -30,9 +28,9 @@ public class ReactionsViewModel extends ViewModel {
|
||||
public @NonNull Observable<List<EmojiCount>> getEmojiCounts() {
|
||||
return repository.getReactions(messageId)
|
||||
.map(reactionList -> {
|
||||
List<EmojiCount> emojiCounts = Stream.of(Stream.of(reactionList)
|
||||
List<EmojiCount> emojiCounts = reactionList.stream()
|
||||
.collect(Collectors.groupingBy(ReactionDetails::getBaseEmoji))
|
||||
.entrySet())
|
||||
.entrySet().stream()
|
||||
.sorted(this::compareReactions)
|
||||
.map(entry -> new EmojiCount(entry.getKey(),
|
||||
getCountDisplayEmoji(entry.getValue()),
|
||||
@@ -56,10 +54,10 @@ public class ReactionsViewModel extends ViewModel {
|
||||
}
|
||||
|
||||
private long getLatestTimestamp(List<ReactionDetails> reactions) {
|
||||
return Stream.of(reactions)
|
||||
.max(Comparator.comparingLong(ReactionDetails::getTimestamp))
|
||||
.map(ReactionDetails::getTimestamp)
|
||||
.orElse(-1L);
|
||||
return reactions.stream()
|
||||
.max(Comparator.comparingLong(ReactionDetails::getTimestamp))
|
||||
.map(ReactionDetails::getTimestamp)
|
||||
.orElse(-1L);
|
||||
}
|
||||
|
||||
private @NonNull String getCountDisplayEmoji(@NonNull List<ReactionDetails> reactions) {
|
||||
|
||||
+11
-11
@@ -4,8 +4,7 @@ import android.content.Context;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.ThreadUtil;
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
@@ -39,16 +38,17 @@ final class ReactWithAnyEmojiRepository {
|
||||
this.recentEmojiPageModel = new RecentEmojiPageModel(context, storageKey);
|
||||
this.emojiPages = new LinkedList<>();
|
||||
|
||||
emojiPages.addAll(Stream.of(EmojiSource.getLatest().getDisplayPages())
|
||||
emojiPages.addAll(EmojiSource.getLatest().getDisplayPages().stream()
|
||||
.filter(p -> p.getIconAttr() != EmojiCategory.EMOTICONS.getIcon())
|
||||
.map(page -> new ReactWithAnyEmojiPage(Collections.singletonList(new ReactWithAnyEmojiPageBlock(EmojiCategory.getCategoryLabel(page.getIconAttr()), page)))).collect(Collectors.toList()));
|
||||
.map(page -> new ReactWithAnyEmojiPage(Collections.singletonList(new ReactWithAnyEmojiPageBlock(EmojiCategory.getCategoryLabel(page.getIconAttr()), page))))
|
||||
.collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
List<ReactWithAnyEmojiPage> getEmojiPageModels(@NonNull List<ReactionDetails> thisMessagesReactions) {
|
||||
List<ReactWithAnyEmojiPage> pages = new LinkedList<>();
|
||||
List<String> thisMessage = Stream.of(thisMessagesReactions)
|
||||
.map(ReactionDetails::getDisplayEmoji)
|
||||
.distinct().collect(Collectors.toList());
|
||||
List<String> thisMessage = thisMessagesReactions.stream()
|
||||
.map(ReactionDetails::getDisplayEmoji)
|
||||
.distinct().collect(Collectors.toList());
|
||||
|
||||
if (thisMessage.isEmpty()) {
|
||||
pages.add(new ReactWithAnyEmojiPage(Collections.singletonList(new ReactWithAnyEmojiPageBlock(R.string.ReactWithAnyEmojiBottomSheetDialogFragment__recently_used, recentEmojiPageModel))));
|
||||
@@ -64,10 +64,10 @@ final class ReactWithAnyEmojiRepository {
|
||||
|
||||
void addEmojiToMessage(@NonNull String emoji, @NonNull MessageId messageId) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
ReactionRecord oldRecord = Stream.of(SignalDatabase.reactions().getReactions(messageId))
|
||||
.filter(record -> record.getAuthor().equals(Recipient.self().getId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
ReactionRecord oldRecord = SignalDatabase.reactions().getReactions(messageId).stream()
|
||||
.filter(record -> record.getAuthor().equals(Recipient.self().getId()))
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (oldRecord != null && oldRecord.getEmoji().equals(emoji)) {
|
||||
MessageSender.sendReactionRemoval(context, messageId, oldRecord);
|
||||
|
||||
+2
-3
@@ -5,8 +5,7 @@ import android.net.Uri;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.R;
|
||||
import org.thoughtcrime.securesms.components.emoji.Emoji;
|
||||
@@ -43,7 +42,7 @@ class ThisMessageEmojiPageModel implements EmojiPageModel {
|
||||
|
||||
@Override
|
||||
public @NonNull List<Emoji> getDisplayEmoji() {
|
||||
return Stream.of(getEmoji()).map(Emoji::new).collect(Collectors.toList());
|
||||
return getEmoji().stream().map(Emoji::new).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -6,7 +6,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery;
|
||||
@@ -106,9 +105,9 @@ public class RecipientUtil {
|
||||
public static boolean ensureUuidsAreAvailable(@NonNull Context context, @NonNull Collection<Recipient> recipients)
|
||||
throws IOException
|
||||
{
|
||||
List<Recipient> recipientsWithoutUuids = Stream.of(recipients)
|
||||
.map(Recipient::resolve)
|
||||
.filter(recipient -> !recipient.getHasServiceId()).collect(com.annimon.stream.Collectors.toList());
|
||||
List<Recipient> recipientsWithoutUuids = recipients.stream()
|
||||
.map(Recipient::resolve)
|
||||
.filter(recipient -> !recipient.getHasServiceId()).collect(Collectors.toList());
|
||||
|
||||
if (recipientsWithoutUuids.size() > 0) {
|
||||
ContactDiscovery.refresh(context, recipientsWithoutUuids, false);
|
||||
@@ -129,9 +128,9 @@ public class RecipientUtil {
|
||||
}
|
||||
|
||||
public static List<Recipient> getEligibleForSending(@NonNull List<Recipient> recipients) {
|
||||
return Stream.of(recipients)
|
||||
.filter(r -> r.getRegistered() != RegisteredState.NOT_REGISTERED)
|
||||
.filter(r -> !r.isBlocked()).collect(com.annimon.stream.Collectors.toList());
|
||||
return recipients.stream()
|
||||
.filter(r -> r.getRegistered() != RegisteredState.NOT_REGISTERED)
|
||||
.filter(r -> !r.isBlocked()).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -426,7 +425,7 @@ public class RecipientUtil {
|
||||
|
||||
@WorkerThread
|
||||
private static boolean isProfileSharedViaGroup(@NonNull Recipient recipient) {
|
||||
return Stream.of(SignalDatabase.groups().getPushGroupsContainingMember(recipient.getId()))
|
||||
.anyMatch(group -> Recipient.resolved(group.getRecipientId()).isProfileSharing());
|
||||
return SignalDatabase.groups().getPushGroupsContainingMember(recipient.getId()).stream()
|
||||
.anyMatch(group -> Recipient.resolved(group.getRecipientId()).isProfileSharing());
|
||||
}
|
||||
}
|
||||
|
||||
+3
-4
@@ -4,8 +4,7 @@ import android.util.LongSparseArray;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.ringrtc.CallException;
|
||||
@@ -193,8 +192,8 @@ public class GroupActionProcessor extends DeviceAwareActionProcessor {
|
||||
Recipient group = currentState.getCallInfoState().getCallRecipient();
|
||||
GroupCall groupCall = currentState.getCallInfoState().requireGroupCall();
|
||||
|
||||
List<GroupCall.GroupMemberInfo> members = Stream.of(GroupManager.getUuidCipherTexts(context, group.requireGroupId().requireV2()))
|
||||
.map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(Collectors.toList());
|
||||
List<GroupCall.GroupMemberInfo> members = GroupManager.getUuidCipherTexts(context, group.requireGroupId().requireV2()).entrySet().stream()
|
||||
.map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(Collectors.toList());
|
||||
|
||||
try {
|
||||
groupCall.setGroupMembers(new ArrayList<>(members));
|
||||
|
||||
+4
-6
@@ -6,8 +6,7 @@ import android.util.LongSparseArray;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.ringrtc.CallException;
|
||||
@@ -22,7 +21,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
import org.thoughtcrime.securesms.ringrtc.Camera;
|
||||
import org.thoughtcrime.securesms.ringrtc.RemotePeer;
|
||||
import org.thoughtcrime.securesms.service.webrtc.state.CallInfoState;
|
||||
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcEphemeralState;
|
||||
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState;
|
||||
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceStateBuilder;
|
||||
@@ -254,9 +252,9 @@ public class GroupConnectedActionProcessor extends GroupActionProcessor {
|
||||
String eraId = WebRtcUtil.getGroupCallEraId(groupCall);
|
||||
webRtcInteractor.sendGroupCallMessage(currentState.getCallInfoState().getCallRecipient(), eraId, null, false, false);
|
||||
|
||||
List<UUID> members = Stream.of(currentState.getCallInfoState().getRemoteCallParticipants())
|
||||
.filter(p -> p.getRecipient().getHasServiceId())
|
||||
.map(p -> p.getRecipient().requireServiceId().getRawUuid()).collect(Collectors.toList());
|
||||
List<UUID> members = currentState.getCallInfoState().getRemoteCallParticipants().stream()
|
||||
.filter(p -> p.getRecipient().getHasServiceId())
|
||||
.map(p -> p.getRecipient().requireServiceId().getRawUuid()).collect(Collectors.toList());
|
||||
webRtcInteractor.updateGroupCallUpdateMessage(currentState.getCallInfoState().getCallRecipient().getId(), eraId, members, false);
|
||||
|
||||
currentState = currentState.builder()
|
||||
|
||||
+3
-4
@@ -5,8 +5,7 @@ import android.os.ResultReceiver;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.ringrtc.CallException;
|
||||
@@ -144,8 +143,8 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
||||
return currentState;
|
||||
}
|
||||
|
||||
List<Recipient> callParticipants = Stream.of(peekInfo.getJoinedMembers())
|
||||
.map(uuid -> Recipient.externalPush(ACI.from(uuid))).collect(Collectors.toList());
|
||||
List<Recipient> callParticipants = peekInfo.getJoinedMembers().stream()
|
||||
.map(uuid -> Recipient.externalPush(ACI.from(uuid))).collect(Collectors.toList());
|
||||
|
||||
WebRtcServiceStateBuilder.CallInfoStateBuilder builder = currentState.builder()
|
||||
.changeCallInfoState()
|
||||
|
||||
@@ -11,8 +11,6 @@ import androidx.annotation.AnyThread;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.signal.core.models.ServiceId.ACI;
|
||||
import org.signal.core.util.Util;
|
||||
@@ -481,8 +479,8 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
|
||||
GroupId.V2 groupId = group.requireGroupId().requireV2();
|
||||
ExternalGroupCredential credential = GroupManager.getExternalGroupCredential(context, groupId);
|
||||
|
||||
List<GroupCall.GroupMemberInfo> members = Stream.of(GroupManager.getUuidCipherTexts(context, groupId))
|
||||
.map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(com.annimon.stream.Collectors.toList());
|
||||
List<GroupCall.GroupMemberInfo> members = GroupManager.getUuidCipherTexts(context, groupId).entrySet().stream()
|
||||
.map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(Collectors.toList());
|
||||
callManager.peekGroupCall(SignalStore.internal().getGroupCallingServer(), credential.token.getBytes(Charsets.UTF_8), members, peekInfo -> {
|
||||
Long threadId = SignalDatabase.threads().getThreadIdFor(group.getId());
|
||||
|
||||
@@ -959,8 +957,8 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall.
|
||||
SignalExecutors.BOUNDED_IO.execute(() -> {
|
||||
List<Pair<String, String>> headerPairs;
|
||||
if (headers != null) {
|
||||
headerPairs = Stream.of(headers)
|
||||
.map(header -> new Pair<>(header.getName(), header.getValue())).collect(com.annimon.stream.Collectors.toList());
|
||||
headerPairs = headers.stream()
|
||||
.map(header -> new Pair<>(header.getName(), header.getValue())).collect(Collectors.toList());
|
||||
} else {
|
||||
headerPairs = Collections.emptyList();
|
||||
}
|
||||
|
||||
+4
-4
@@ -6,8 +6,7 @@ import android.os.ResultReceiver;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.signal.libsignal.protocol.IdentityKey;
|
||||
@@ -534,8 +533,9 @@ public abstract class WebRtcActionProcessor {
|
||||
protected final @NonNull WebRtcServiceState handleSendIceCandidates(@NonNull WebRtcServiceState currentState, @NonNull CallMetadata callMetadata, boolean broadcast, @NonNull List<byte[]> iceCandidates) {
|
||||
Log.i(tag, "handleSendIceCandidates(): id: " + callMetadata.getCallId().format(callMetadata.getRemoteDevice()));
|
||||
|
||||
List<IceUpdateMessage> iceUpdateMessages = Stream.of(iceCandidates)
|
||||
.map(c -> new IceUpdateMessage(callMetadata.getCallId().longValue(), c)).collect(Collectors.toList());
|
||||
List<IceUpdateMessage> iceUpdateMessages = iceCandidates.stream()
|
||||
.map(c -> new IceUpdateMessage(callMetadata.getCallId().longValue(), c))
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Integer destinationDeviceId = broadcast ? null : callMetadata.getRemoteDevice();
|
||||
SignalServiceCallMessage callMessage = SignalServiceCallMessage.forIceUpdates(iceUpdateMessages, destinationDeviceId);
|
||||
|
||||
@@ -8,7 +8,6 @@ import android.text.TextUtils;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.signal.core.util.BreakIteratorCompat;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -248,7 +247,7 @@ public final class MultiShareArgs implements Parcelable {
|
||||
|
||||
@Override
|
||||
public void writeToParcel(Parcel dest, int flags) {
|
||||
dest.writeTypedList(Stream.of(contactSearchKeys).map(ContactSearchKey::requireRecipientSearchKey).collect(com.annimon.stream.Collectors.toList()));
|
||||
dest.writeTypedList(contactSearchKeys.stream().map(ContactSearchKey::requireRecipientSearchKey).collect(Collectors.toList()));
|
||||
dest.writeTypedList(media);
|
||||
dest.writeString(draftText);
|
||||
dest.writeParcelable(stickerLocator, flags);
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.thoughtcrime.securesms.contactshare.Contact;
|
||||
import org.thoughtcrime.securesms.conversation.MessageSendType;
|
||||
import org.thoughtcrime.securesms.conversation.colors.ChatColors;
|
||||
import org.signal.core.models.media.TransformProperties;
|
||||
import org.thoughtcrime.securesms.database.AttachmentTable;
|
||||
import org.thoughtcrime.securesms.database.SignalDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.Mention;
|
||||
import org.thoughtcrime.securesms.database.model.StoryType;
|
||||
|
||||
+2
-3
@@ -10,7 +10,6 @@ import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.bumptech.glide.Glide;
|
||||
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
||||
@@ -86,8 +85,8 @@ public class ShareInterstitialActivity extends PassphraseRequiredActivity {
|
||||
|
||||
linkPreviewViewModel = new ViewModelProvider(this, linkPreviewViewModelFactory).get(LinkPreviewViewModel.class);
|
||||
|
||||
boolean hasSms = Stream.of(args.getRecipientSearchKeys())
|
||||
.anyMatch(c -> {
|
||||
boolean hasSms = args.getRecipientSearchKeys().stream()
|
||||
.anyMatch(c -> {
|
||||
Recipient recipient = Recipient.resolved(c.getRecipientId());
|
||||
if (recipient.isDistributionList()) {
|
||||
return false;
|
||||
|
||||
+4
-5
@@ -4,8 +4,7 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
import androidx.core.util.Consumer;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.thoughtcrime.securesms.contacts.paged.ContactSearchKey;
|
||||
@@ -22,8 +21,8 @@ class ShareInterstitialRepository {
|
||||
|
||||
@WorkerThread
|
||||
private List<Recipient> resolveRecipients(@NonNull Set<ContactSearchKey.RecipientSearchKey> recipientSearchKeys) {
|
||||
return Stream.of(recipientSearchKeys)
|
||||
.map(ContactSearchKey.RecipientSearchKey::getRecipientId)
|
||||
.map(Recipient::resolved).collect(Collectors.toList());
|
||||
return recipientSearchKeys.stream()
|
||||
.map(ContactSearchKey.RecipientSearchKey::getRecipientId)
|
||||
.map(Recipient::resolved).collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -297,8 +296,8 @@ public class MessageSender {
|
||||
Recipient recipient = message.getThreadRecipient();
|
||||
long allocatedThreadId = threadTable.getOrCreateValidThreadId(message.getThreadRecipient(), threadId);
|
||||
|
||||
List<AttachmentId> attachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).collect(com.annimon.stream.Collectors.toList());
|
||||
List<String> jobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).collect(com.annimon.stream.Collectors.toList());
|
||||
List<AttachmentId> attachmentIds = preUploadResults.stream().map(PreUploadResult::getAttachmentId).collect(Collectors.toList());
|
||||
List<String> jobIds = preUploadResults.stream().map(PreUploadResult::getJobIds).flatMap(x -> x.stream()).collect(Collectors.toList());
|
||||
|
||||
if (!attachmentDatabase.hasAttachments(attachmentIds)) {
|
||||
Log.w(TAG, "Attachments not found in database for " + message.getThreadRecipient().getId() + ", thread: " + threadId + ", pre-uploads: " + preUploadResults);
|
||||
@@ -337,16 +336,16 @@ public class MessageSender {
|
||||
@NonNull Collection<PreUploadResult> preUploadResults,
|
||||
boolean overwritePreUploadMessageIds)
|
||||
{
|
||||
Log.i(TAG, "Sending media broadcast (overwrite: " + overwritePreUploadMessageIds + ") to " + Stream.of(messages).map(m -> m.getThreadRecipient().getId()).collect(com.annimon.stream.Collectors.toList()));
|
||||
Log.i(TAG, "Sending media broadcast (overwrite: " + overwritePreUploadMessageIds + ") to " + messages.stream().map(m -> m.getThreadRecipient().getId()).collect(Collectors.toList()));
|
||||
Preconditions.checkArgument(messages.size() > 0, "No messages!");
|
||||
Preconditions.checkArgument(Stream.of(messages).allMatch(m -> m.getAttachments().isEmpty()), "Messages can't have attachments! They should be pre-uploaded.");
|
||||
Preconditions.checkArgument(messages.stream().allMatch(m -> m.getAttachments().isEmpty()), "Messages can't have attachments! They should be pre-uploaded.");
|
||||
|
||||
JobManager jobManager = AppDependencies.getJobManager();
|
||||
AttachmentTable attachmentDatabase = SignalDatabase.attachments();
|
||||
MessageTable mmsDatabase = SignalDatabase.messages();
|
||||
ThreadTable threadTable = SignalDatabase.threads();
|
||||
List<AttachmentId> preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).collect(com.annimon.stream.Collectors.toList());
|
||||
List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).collect(com.annimon.stream.Collectors.toList());
|
||||
List<AttachmentId> preUploadAttachmentIds = preUploadResults.stream().map(PreUploadResult::getAttachmentId).collect(Collectors.toList());
|
||||
List<String> preUploadJobIds = preUploadResults.stream().map(PreUploadResult::getJobIds).flatMap(x -> x.stream()).collect(Collectors.toList());
|
||||
List<Long> messageIds = new ArrayList<>(messages.size());
|
||||
List<String> messageDependsOnIds = new ArrayList<>(preUploadJobIds);
|
||||
OutgoingMessage primaryMessage = messages.get(0);
|
||||
@@ -370,8 +369,8 @@ public class MessageSender {
|
||||
messageIds.add(primaryMessageId);
|
||||
}
|
||||
|
||||
List<DatabaseAttachment> preUploadAttachments = Stream.of(preUploadAttachmentIds)
|
||||
.map(attachmentDatabase::getAttachment).collect(com.annimon.stream.Collectors.toList());
|
||||
List<DatabaseAttachment> preUploadAttachments = preUploadAttachmentIds.stream()
|
||||
.map(attachmentDatabase::getAttachment).collect(Collectors.toList());
|
||||
|
||||
if (messages.size() > 0) {
|
||||
List<OutgoingMessage> secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages;
|
||||
|
||||
+3
-4
@@ -6,8 +6,7 @@ import android.database.Cursor;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.WorkerThread;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
import org.signal.core.util.logging.Log;
|
||||
@@ -88,8 +87,8 @@ public final class StickerPackPreviewRepository {
|
||||
remoteManifest.getTitle(),
|
||||
remoteManifest.getAuthor(),
|
||||
toOptionalSticker(packId, packKey, remoteManifest.getCover()),
|
||||
Stream.of(remoteManifest.getStickers())
|
||||
.map(s -> toSticker(packId, packKey, s)).collect(Collectors.toList()));
|
||||
remoteManifest.getStickers().stream()
|
||||
.map(s -> toSticker(packId, packKey, s)).collect(Collectors.toList()));
|
||||
|
||||
return Optional.of(new StickerManifestResult(localManifest, false));
|
||||
} catch (IOException | InvalidMessageException e) {
|
||||
|
||||
@@ -2,8 +2,7 @@ package org.thoughtcrime.securesms.storage;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.signal.core.util.logging.Log;
|
||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||
@@ -35,7 +34,7 @@ public final class StorageSyncValidations {
|
||||
validateManifestAndInserts(result.manifest, result.inserts, self);
|
||||
|
||||
if (result.deletes.size() > 0) {
|
||||
Set<String> allSetEncoded = Stream.of(result.manifest.storageIds).map(StorageId::getRaw).map(Base64::encodeWithPadding).collect(Collectors.toSet());
|
||||
Set<String> allSetEncoded = result.manifest.storageIds.stream().map(StorageId::getRaw).map(Base64::encodeWithPadding).collect(Collectors.toSet());
|
||||
|
||||
for (byte[] delete : result.deletes) {
|
||||
String encoded = Base64.encodeWithPadding(delete);
|
||||
@@ -59,14 +58,14 @@ public final class StorageSyncValidations {
|
||||
return;
|
||||
}
|
||||
|
||||
Set<ByteBuffer> previousIds = Stream.of(previousManifest.storageIds).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> newIds = Stream.of(result.manifest.storageIds).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> previousIds = previousManifest.storageIds.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> newIds = result.manifest.storageIds.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
|
||||
Set<ByteBuffer> manifestInserts = SetUtil.difference(newIds, previousIds);
|
||||
Set<ByteBuffer> manifestDeletes = SetUtil.difference(previousIds, newIds);
|
||||
|
||||
Set<ByteBuffer> declaredInserts = Stream.of(result.inserts).map(r -> ByteBuffer.wrap(r.getId().getRaw())).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> declaredDeletes = Stream.of(result.deletes).map(ByteBuffer::wrap).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> declaredInserts = result.inserts.stream().map(r -> ByteBuffer.wrap(r.getId().getRaw())).collect(Collectors.toSet());
|
||||
Set<ByteBuffer> declaredDeletes = result.deletes.stream().map(ByteBuffer::wrap).collect(Collectors.toSet());
|
||||
|
||||
if (declaredInserts.size() > manifestInserts.size()) {
|
||||
Log.w(TAG, "DeclaredInserts: " + declaredInserts.size() + ", ManifestInserts: " + manifestInserts.size());
|
||||
@@ -117,8 +116,8 @@ public final class StorageSyncValidations {
|
||||
}
|
||||
|
||||
Set<StorageId> allSet = new HashSet<>(manifest.storageIds);
|
||||
Set<StorageId> insertSet = new HashSet<>(Stream.of(inserts).map(SignalStorageRecord::getId).collect(Collectors.toList()));
|
||||
Set<ByteBuffer> rawIdSet = Stream.of(allSet).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
Set<StorageId> insertSet = new HashSet<>(inserts.stream().map(SignalStorageRecord::getId).collect(Collectors.toList()));
|
||||
Set<ByteBuffer> rawIdSet = allSet.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet());
|
||||
|
||||
if (allSet.size() != manifest.storageIds.size()) {
|
||||
throw new DuplicateStorageIdError();
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.core.content.LocusIdCompat;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
import org.signal.core.util.concurrent.SignalExecutors;
|
||||
@@ -94,7 +93,7 @@ public final class ConversationUtil {
|
||||
public static void clearAllShortcuts(@NonNull Context context) {
|
||||
List<ShortcutInfoCompat> shortcutInfos = ShortcutManagerCompat.getDynamicShortcuts(context);
|
||||
|
||||
ShortcutManagerCompat.removeLongLivedShortcuts(context, Stream.of(shortcutInfos).map(ShortcutInfoCompat::getId).collect(com.annimon.stream.Collectors.toList()));
|
||||
ShortcutManagerCompat.removeLongLivedShortcuts(context, shortcutInfos.stream().map(ShortcutInfoCompat::getId).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -102,7 +101,7 @@ public final class ConversationUtil {
|
||||
*/
|
||||
public static void clearShortcuts(@NonNull Context context, @NonNull Collection<RecipientId> recipientIds) {
|
||||
SignalExecutors.BOUNDED.execute(() -> {
|
||||
ShortcutManagerCompat.removeLongLivedShortcuts(context, Stream.of(recipientIds).filter(Objects::nonNull).map(ConversationUtil::getShortcutId).collect(com.annimon.stream.Collectors.toList()));
|
||||
ShortcutManagerCompat.removeLongLivedShortcuts(context, recipientIds.stream().filter(Objects::nonNull).map(ConversationUtil::getShortcutId).collect(Collectors.toList()));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -272,7 +271,7 @@ public final class ConversationUtil {
|
||||
private static @NonNull Person[] buildPersonsForGroup(@NonNull Context context, @NonNull GroupId groupId) {
|
||||
List<Recipient> members = SignalDatabase.groups().getGroupMembers(groupId, GroupTable.MemberSet.FULL_MEMBERS_EXCLUDING_SELF);
|
||||
|
||||
return Stream.of(members).map(member -> buildPersonWithoutIcon(context, member.resolve())).toArray(Person[]::new);
|
||||
return members.stream().map(member -> buildPersonWithoutIcon(context, member.resolve())).toArray(Person[]::new);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
import org.signal.core.util.Util;
|
||||
@@ -14,6 +13,7 @@ import org.thoughtcrime.securesms.BuildConfig;
|
||||
import java.io.IOException;
|
||||
import java.util.Comparator;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public final class RemoteDeprecation {
|
||||
|
||||
|
||||
@@ -9,8 +9,8 @@ import android.text.style.CharacterStyle;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.signal.core.util.StringUtil;
|
||||
import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation;
|
||||
|
||||
-2
@@ -6,8 +6,6 @@ import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.annimon.stream.Stream;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
||||
+4
-5
@@ -12,8 +12,7 @@ import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.viewpager2.widget.ViewPager2;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
|
||||
import org.thoughtcrime.securesms.R;
|
||||
@@ -81,9 +80,9 @@ public class ChatWallpaperPreviewActivity extends PassphraseRequiredActivity {
|
||||
viewPager.setAdapter(adapter);
|
||||
|
||||
adapter.submitList(Collections.singletonList(new ChatWallpaperSelectionMappingModel(selected)));
|
||||
repository.getAllWallpaper(wallpapers -> adapter.submitList(Stream.of(wallpapers)
|
||||
.map(wallpaper -> ChatWallpaperFactory.updateWithDimming(wallpaper, dim ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f))
|
||||
.<MappingModel<?>>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList())));
|
||||
repository.getAllWallpaper(wallpapers -> adapter.submitList(wallpapers.stream()
|
||||
.map(wallpaper -> ChatWallpaperFactory.updateWithDimming(wallpaper, dim ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f))
|
||||
.<MappingModel<?>>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList())));
|
||||
|
||||
submit.setOnClickListener(unused -> {
|
||||
ChatWallpaperSelectionMappingModel model = (ChatWallpaperSelectionMappingModel) adapter.getCurrentList().get(viewPager.getCurrentItem());
|
||||
|
||||
@@ -8,8 +8,7 @@ import androidx.lifecycle.Transformations;
|
||||
import androidx.lifecycle.ViewModel;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
import com.annimon.stream.Collectors;
|
||||
import com.annimon.stream.Stream;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.thoughtcrime.securesms.conversation.colors.AvatarColor;
|
||||
import org.thoughtcrime.securesms.conversation.colors.ChatColors;
|
||||
@@ -140,9 +139,9 @@ public class ChatWallpaperViewModel extends ViewModel {
|
||||
|
||||
@NonNull LiveData<List<MappingModel<?>>> getWallpapers() {
|
||||
return LiveDataUtil.combineLatest(builtins, dimInDarkTheme, (wallpapers, dimInDarkMode) ->
|
||||
Stream.of(wallpapers)
|
||||
.map(paper -> ChatWallpaperFactory.updateWithDimming(paper, dimInDarkMode ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f))
|
||||
.<MappingModel<?>>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList())
|
||||
wallpapers.stream()
|
||||
.map(paper -> ChatWallpaperFactory.updateWithDimming(paper, dimInDarkMode ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f))
|
||||
.<MappingModel<?>>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user