diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index e54f6938c3..967d7779ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/PushContactSelectionActivity.java b/app/src/main/java/org/thoughtcrime/securesms/PushContactSelectionActivity.java index 0ded75f58a..486151b28e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/PushContactSelectionActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/PushContactSelectionActivity.java @@ -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 selectedContacts = contactsFragment.getSelectedContacts(); - List recipients = Stream.of(selectedContacts).map(sc -> sc.getOrCreateRecipientId()).collect(Collectors.toList()); + List recipients = selectedContacts.stream().map(sc -> sc.getOrCreateRecipientId()).collect(Collectors.toList()); resultIntent.putParcelableArrayListExtra(KEY_SELECTED_RECIPIENTS, new ArrayList<>(recipients)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java b/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java index fcbb6908fd..964ea55a65 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SharedContactView.java @@ -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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java b/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java index 978dce0240..d097684059 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/TypingStatusRepository.java @@ -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 activeThreads = Stream.of(typistMap.keySet()).filter(t -> !typistMap.get(t).isEmpty()).collect(Collectors.toSet()); + Set activeThreads = typistMap.keySet().stream().filter(t -> !typistMap.get(t).isEmpty()).collect(Collectors.toSet()); threadsNotifier.postValue(activeThreads); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java index 2078f74669..e63db3d42e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/RecentEmojiPageModel.java @@ -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 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() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionAnnotation.java b/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionAnnotation.java index 3df383b479..fcb9a20cf5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionAnnotation.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/mention/MentionAnnotation.java @@ -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 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java index d4791db034..6e4f30dec4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsSyncAdapter.java @@ -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 recipients = Stream.of(unknownSystemE164s) - .filter(s -> s.startsWith("+")) - .map(s -> Recipient.external(s)) - .filter(it -> it != null).collect(com.annimon.stream.Collectors.toList()); + List 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."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactFieldAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactFieldAdapter.java index 41b14859cc..0eb92bf132 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactFieldAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactFieldAdapter.java @@ -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 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java index a4dc8de21f..41f426c8ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactShareEditViewModel.java @@ -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 List trimSelectables(List selectables) { - return Stream.of(selectables).filter(Selectable::isSelected).collect(Collectors.toList()); + return selectables.stream().filter(Selectable::isSelected).collect(Collectors.toList()); } @NonNull diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java index 8f5250de6d..0ae5bc9415 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactUtil.java @@ -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 mobileNumbers = Stream.of(contact.getPhoneNumbers()).filter(number -> number.getType() == Phone.Type.MOBILE).collect(com.annimon.stream.Collectors.toList()); + List mobileNumbers = contact.getPhoneNumbers().stream().filter(number -> number.getType() == Phone.Type.MOBILE).collect(Collectors.toList()); if (mobileNumbers.size() > 0) { return mobileNumbers.get(0); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/AttachmentKeyboardMediaAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/AttachmentKeyboardMediaAdapter.java index 39cbae7aa8..10dd6928bd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/AttachmentKeyboardMediaAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/AttachmentKeyboardMediaAdapter.java @@ -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 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)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java index 5e6c33b31f..62ac3d9ef9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationReactionOverlay.java @@ -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 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java index ebdb231e45..62d436b77e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/MarkReadHelper.java @@ -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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java index df5ef7b83c..85c8baee03 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java @@ -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 identityRecords) { - List ids = Stream.of(identityRecords) - .filter(identityRecord -> !identityRecord.isFirstUse()) - .map(record -> record.getRecipientId().serialize()) - .distinct().collect(Collectors.toList()); + List 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 ids = Stream.of(recipientIds) - .map(RecipientId::serialize) - .distinct().collect(Collectors.toList()); + List ids = recipientIds.stream() + .map(RecipientId::serialize) + .distinct().collect(Collectors.toList()); Bundle arguments = new Bundle(); arguments.putStringArray(RECIPIENT_IDS_EXTRA, ids.toArray(new String[0])); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java index 74c10419c5..0c5984b4aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeRepository.java @@ -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 recipients = Stream.of(recipientIds).map(Recipient::resolved).collect(com.annimon.stream.Collectors.toList()); + List recipients = recipientIds.stream().map(Recipient::resolved).collect(Collectors.toList()); - List 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 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, ",")); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/TrustAndVerifyResult.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/TrustAndVerifyResult.java index 1320042563..996f7be3e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/TrustAndVerifyResult.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/TrustAndVerifyResult.java @@ -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 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; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java index 2d63eab38d..44ca13e5c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/mentions/MentionsPickerViewModel.java @@ -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 = LiveDataUtil.combineLatest(liveQuery, fullMembers, (q, m) -> new MentionQuery(q.query, m)); - this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> Stream.of(mentionsPickerRepository.search(q)).>map(MentionViewState::new).collect(Collectors.toList())); + this.mentionList = LiveDataUtil.mapAsync(mentionQuery, q -> mentionsPickerRepository.search(q).stream().>map(MentionViewState::new).collect(Collectors.toList())); } @NonNull LiveData>> getMentionList() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java index b6532db44d..cbad331e3d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SealedSenderAccessUtil.java @@ -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) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java index 508c5ff8a9..bbdf6f7d02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MentionUtil.java @@ -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 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentMetaDataUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentMetaDataUtil.java index dd621de3c0..e6ee1bddd7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PaymentMetaDataUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PaymentMetaDataUtil.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt index 48c6fb6451..f080301565 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V149_LegacyMigrations.kt @@ -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.") diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/LiveUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/LiveUpdateMessage.java index 9ffd975fb8..d698e0a63c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/LiveUpdateMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/LiveUpdateMessage.java @@ -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> allMentionedRecipients = Stream.of(updateDescription.getMentioned()) - .map(uuid -> Recipient.resolved(RecipientId.from(uuid)).live().getLiveData()).collect(Collectors.toList()); + List> 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java index 892584b150..5ad3bc7265 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MessageRecord.java @@ -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 joinedMembers = Stream.of(groupCallUpdateDetails.inCallUuids) - .map(UuidUtil::parseOrNull).filter(Objects::nonNull) - .map(ACI::from).collect(Collectors.toList()); + List joinedMembers = groupCallUpdateDetails.inCallUuids.stream() + .map(UuidUtil::parseOrNull).filter(Objects::nonNull) + .map(ACI::from).collect(Collectors.toList()); UpdateDescription.SpannableFactory stringFactory = new GroupCallUpdateMessageFactory(context, joinedMembers, withTime, groupCallUpdateDetails); diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java index 6571ed6377..ba2c335fbb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java index 62aeecb9aa..12396cf5f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ViewModel.java index 0aae96c49d..eec3805e74 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4ViewModel.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java index e523e10aef..eadcc6e4f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -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> mapToFullMembers(@NonNull LiveData 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> mapToRequestingMembers(@NonNull LiveData groupRecord) { @@ -106,8 +105,8 @@ public final class LiveGroup { boolean selfAdmin = g.isAdmin(Recipient.self()); List 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> 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> getFullMembers() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListView.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListView.java index 2131ecb1e7..cab7bbebd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/GroupMemberListView.java @@ -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 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 diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java index 6c55e9809d..c077c05334 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/LeaveGroupDialog.java @@ -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 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java index 3dfe20a705..1db22c45f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java @@ -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(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminViewModel.java index 3b362e734f..a5ffae29f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminViewModel.java @@ -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 consumer) { //noinspection ConstantConditions - List recipientIds = Stream.of(selection.getValue()).map(entry -> entry.getMember().getId()).collect(Collectors.toList()); + List recipientIds = selection.getValue().stream().map(entry -> entry.getMember().getId()).collect(Collectors.toList()); SimpleTask.run(() -> repository.updateAdminsAndLeave(groupId, recipientIds), consumer::accept); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java index 53c3a85883..9c0b09c994 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/invited/PendingMemberInvitesRepository.java @@ -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 -> diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupDescriptionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupDescriptionUtil.java index 1af6b84d47..33eef9ea30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupDescriptionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupDescriptionUtil.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/help/HelpFragment.java b/app/src/main/java/org/thoughtcrime/securesms/help/HelpFragment.java index c41094f2f1..a9090bbb8e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/help/HelpFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/help/HelpFragment.java @@ -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(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/InAppScheduler.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/InAppScheduler.java index cb4afe5a50..e713e4d9f1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/InAppScheduler.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/InAppScheduler.java @@ -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 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."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java index 8676ee10df..8e6cc032aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobController.java @@ -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> 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 allDependsOn = new HashSet<>(dependsOn); - Set aliveDependsOn = Stream.of(dependsOn) - .filter(id -> jobStorage.getJobSpec(id) != null) - .collect(Collectors.toSet()); + Set aliveDependsOn = dependsOn.stream() + .filter(id -> jobStorage.getJobSpec(id) != null) + .collect(Collectors.toSet()); if (dependsOnQueue != null) { - List inQueue = Stream.of(jobStorage.getJobsInQueue(dependsOnQueue)) - .map(JobSpec::getId).collect(Collectors.toList()); + List 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 fullSpecs = canRun.stream().map(it -> buildFullSpec(it, Collections.emptyList())).collect(java.util.stream.Collectors.toList()); + List 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 constraints = Stream.of(jobStorage.getConstraintSpecs(job.getId())) - .map(ConstraintSpec::getFactoryKey) - .map(constraintInstantiator::instantiate).collect(Collectors.toList()); + List 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 updates = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(job.getId())) - .map(DependencySpec::getJobId) - .map(jobStorage::getJobSpec) - .map(jobSpec -> mapToJobWithInputData(jobSpec, outputData)).collect(Collectors.toList()); + List 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 onFailure(@NonNull Job job) { - List dependents = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(job.getId())) - .map(DependencySpec::getJobId) - .map(jobStorage::getJobSpec).filter(Objects::nonNull) - .map(jobSpec -> { + List dependents = jobStorage.getDependencySpecsThatDependOnJob(job.getId()).stream() + .map(DependencySpec::getJobId) + .map(jobStorage::getJobSpec).filter(Objects::nonNull) + .map(jobSpec -> { List 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 running = runningJobs.keySet().stream().map(jobStorage::getJobSpec).collect(java.util.stream.Collectors.toList()); + List running = runningJobs.keySet().stream().map(jobStorage::getJobSpec).collect(Collectors.toList()); List jobs = jobStorage.debugGetJobSpecs(1000); List constraints = jobStorage.debugGetConstraintSpecs(1000); List 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> 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 constraintSpecs = Stream.of(job.getParameters().getConstraintKeys()) - .map(key -> new ConstraintSpec(jobSpec.getId(), key, jobSpec.isMemoryOnly())).collect(Collectors.toList()); + List constraintSpecs = job.getParameters().getConstraintKeys().stream() + .map(key -> new ConstraintSpec(jobSpec.getId(), key, jobSpec.isMemoryOnly())).collect(Collectors.toList()); - List dependencySpecs = Stream.of(dependsOn) - .map(depends -> { + List 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 constraintSpecs = jobStorage.getConstraintSpecs(minimalJobSpec.getId()); - List constraints = Stream.of(constraintSpecs) - .map(ConstraintSpec::getFactoryKey) - .map(constraintInstantiator::instantiate).collect(Collectors.toList()); + List 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 failIds = Stream.of(jobStorage.getDependencySpecsThatDependOnJob(jobSpec.getId())) - .map(DependencySpec::getJobId).collect(Collectors.toList()); + List 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java index 5de5e17bd3..c720d72743 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java @@ -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(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobTracker.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobTracker.java index a4791382c1..d9de626886 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobTracker.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobTracker.java @@ -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 -> { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java index f7880c7283..08123d722d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java @@ -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 supportedDensities = emojiData.getDensities(); String format = emojiData.getFormat(); - List imagePaths = Stream.of(emojiData.getDataPages()) - .map(EmojiPageModel::getSpriteUri) - .map(Uri::getLastPathSegment).collect(Collectors.toList()); + List 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java index 232adcfcfd..f15ec56932 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupCallUpdateSendJob.java @@ -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 recipientIds = Stream.of(RecipientUtil.getEligibleForSending(Recipient.resolvedList(conversationRecipient.getParticipantIds()))) - .filter(recipient -> !recipient.isSelf()) - .map(Recipient::getId).collect(com.annimon.stream.Collectors.toList()); + List 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 destinations = Stream.of(recipients).map(Recipient::resolved).collect(com.annimon.stream.Collectors.toList()); + List destinations = recipients.stream().map(Recipient::resolved).collect(Collectors.toList()); List completions = deliver(conversationRecipient, destinations); for (Recipient completion : completions) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java index d6cb5d1e93..cc9d9f8c4f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/IndividualSendJob.java @@ -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 attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(Collectors.toList()); + List attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList()); List serviceAttachments = getAttachmentPointersFor(attachments); Optional profileKey = getProfileKey(messageRecipient); Optional sticker = getStickerFor(message); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java index 288f0ecde6..25ba6b5494 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceReadUpdateJob.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java index e7bb4272d6..92fe350671 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceViewedUpdateJob.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java index 8074ed8892..7cb8fb4085 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDistributionListSendJob.java @@ -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 attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(com.annimon.stream.Collectors.toList()); + List attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList()); List attachmentPointers = getAttachmentPointersFor(attachments); List 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()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java index ef0cbe2ae0..d2852fa370 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -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 attachments = Stream.of(message.getAttachments()).filter(attachment -> !attachment.isSticker()).collect(Collectors.toList()); + List attachments = message.getAttachments().stream().filter(attachment -> !attachment.isSticker()).collect(Collectors.toList()); List 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 = SignalDatabase.groups().getGroup(groupId); @@ -444,17 +443,17 @@ public final class PushGroupSendJob extends PushSendJob { MessageTable database = SignalDatabase.messages(); RecipientAccessList accessList = new RecipientAccessList(target); - List networkFailures = Stream.of(results).filter(SendMessageResult::isNetworkFailure).map(result -> new NetworkFailure(accessList.requireIdByAddress(result.getAddress()))).collect(Collectors.toList()); - List 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 successes = Stream.of(results).filter(result -> result.getSuccess() != null).collect(Collectors.toList()); - List> successUnidentifiedStatus = Stream.of(successes).map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).collect(Collectors.toList()); - Set successIds = Stream.of(successUnidentifiedStatus).map(Pair::getFirst).collect(Collectors.toSet()); - Set resolvedNetworkFailures = Stream.of(existingNetworkFailures).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); - Set resolvedIdentityFailures = Stream.of(existingIdentityMismatches).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); - List unregisteredRecipients = Stream.of(results).filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList()); - List invalidPreKeyRecipients = Stream.of(results).filter(SendMessageResult::isInvalidPreKeyFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList()); + List networkFailures = results.stream().filter(SendMessageResult::isNetworkFailure).map(result -> new NetworkFailure(accessList.requireIdByAddress(result.getAddress()))).collect(Collectors.toList()); + List 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 successes = results.stream().filter(result -> result.getSuccess() != null).collect(Collectors.toList()); + List> successUnidentifiedStatus = successes.stream().map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).collect(Collectors.toList()); + Set successIds = successUnidentifiedStatus.stream().map(Pair::getFirst).collect(Collectors.toSet()); + Set resolvedNetworkFailures = existingNetworkFailures.stream().filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); + Set resolvedIdentityFailures = existingIdentityMismatches.stream().filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet()); + List unregisteredRecipients = results.stream().filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList()); + List invalidPreKeyRecipients = results.stream().filter(SendMessageResult::isInvalidPreKeyFailure).map(result -> RecipientId.from(result.getAddress())).collect(Collectors.toList()); Set skippedRecipients = new HashSet<>(); skippedRecipients.addAll(skipped); @@ -522,9 +521,9 @@ public final class PushGroupSendJob extends PushSendJob { database.markAsSentFailed(messageId); notifyMediaMessageDeliveryFailed(context, messageId); - Set mismatchRecipientIds = Stream.of(existingIdentityMismatches) - .map(mismatch -> mismatch.getRecipientId()) - .collect(Collectors.toSet()); + Set 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 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 eligible = RecipientUtil.getEligibleForSending(possible); - List skipped = Stream.of(SetUtil.difference(possible, eligible)).map(Recipient::getId).collect(Collectors.toList()); + List skipped = SetUtil.difference(possible, eligible).stream().map(Recipient::getId).collect(Collectors.toList()); return new GroupRecipientResult(eligible, skipped); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java index d469c3e8f9..07bf017060 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -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 jobs = new HashSet<>(Stream.of(attachments).map(a -> { + HashSet 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 getAttachmentPointersFor(List 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 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 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 getMentionsFor(@NonNull List 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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java index 4df5077453..73854de62f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java @@ -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 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()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt index 6366523c13..32403193ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.kt @@ -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 = 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") diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java index bfadaa5ea1..67d7ea4989 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java index 29f4b44536..dd544b4f68 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java @@ -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 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 findFirst() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java index 27584f8b01..6e1192d7b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionConstraints.java @@ -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 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 entry : factories.entrySet()) { output.append(Util.rightPad(entry.getKey(), keyLength)).append(": ").append(entry.getValue().create().isMet()).append("\n"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionRemoteConfig.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionRemoteConfig.java index 404eac1da7..804a09df46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionRemoteConfig.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionRemoteConfig.java @@ -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 memory = RemoteConfig.getMemoryValues(); Map disk = RemoteConfig.getDebugDiskValues(); Map 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 entry : memory.entrySet()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java index 5a1822ffe3..f746bce383 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java index 52a8553b79..f4eefdf96a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -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 diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java index 3bf1d2398e..9d08610350 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -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 saveable = selected.stream().filter(r -> r.getAttachment() == null || r.getAttachment().hasData).collect(java.util.stream.Collectors.toList()); + Collection saveable = selected.stream().filter(r -> r.getAttachment() == null || r.getAttachment().hasData).collect(Collectors.toList()); lifecycleDisposable.add( MediaActions .handleSaveMedia(MediaOverviewPageFragment.this, saveable) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java index bdbf8760f1..7b7c3a2e30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java @@ -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, @NonNull Callback> 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 mediaFolders = Stream.of(folders.values()) - .filter(folder -> folder.getTitle() != null) - .map(folder -> new MediaFolder(folder.getThumbnail(), + List 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(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java index 1b06b7e5a3..f737a4e434 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java @@ -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()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java index 05d9f352c7..ea8da25cd9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java @@ -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 records = database.getAllAndDeleteMissing(); - Set events = Stream.of(records).map(MegaphoneRecord::getEvent).collect(Collectors.toSet()); - Set missing = Stream.of(Megaphones.Event.values()).filter(o -> !events.contains(o)).collect(Collectors.toSet()); + Set events = records.stream().map(MegaphoneRecord::getEvent).collect(Collectors.toSet()); + Set 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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java index 21b9451a5e..a2c6590459 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -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 records) { long currentTime = System.currentTimeMillis(); - List megaphones = Stream.of(buildDisplayOrder(context, records)) - .filter(e -> { + List 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java index 2fd46e7c4f..a9f181e687 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/StickerAdditionMigrationJob.java @@ -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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java index d22b753206..f9f415d083 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java @@ -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 getThumbnailSlides() { - return Stream.of(slides).filter(Slide::hasImage).collect(Collectors.toList()); + return slides.stream().filter(Slide::hasImage).collect(Collectors.toList()); } public @Nullable AudioSlide getAudioSlide() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java index 7b6ac354d9..cf638db2e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java @@ -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 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 controllers = Stream.of(requestPattern).map(range -> makeChunkRequest(client, url, range)).collect(Collectors.toList()); + List controllers = requestPattern.stream().map(range -> makeChunkRequest(client, url, range)).collect(Collectors.toList()); List 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 stream = controller.getStream(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/CompositeRequestController.java b/app/src/main/java/org/thoughtcrime/securesms/net/CompositeRequestController.java index 4c2e2fc49b..46252022ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/CompositeRequestController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/CompositeRequestController.java @@ -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() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java b/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java index 036952b690..df164512ce 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java index e3946ca715..e57af4513f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MarkReadReceiver.java @@ -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 markedReadMessages) { if (markedReadMessages.isEmpty()) return; - List syncMessageIds = Stream.of(markedReadMessages) - .map(MarkedMessageInfo::getSyncMessageId).collect(Collectors.toList()); - List expirationInfo = Stream.of(markedReadMessages) - .map(MarkedMessageInfo::getExpirationInfo) - .filter(info -> info.getExpiresIn() > 0 && info.getExpireStarted() <= 0).collect(Collectors.toList()); + List syncMessageIds = markedReadMessages.stream() + .map(MarkedMessageInfo::getSyncMessageId) + .collect(Collectors.toList()); + List expirationInfo = markedReadMessages.stream() + .map(MarkedMessageInfo::getExpirationInfo) + .filter(info -> info.getExpiresIn() > 0 && info.getExpireStarted() <= 0) + .collect(Collectors.toList()); scheduleDeletion(expirationInfo); MultiDeviceReadUpdateJob.enqueue(syncMessageIds); - Map> threadToInfo = Stream.of(markedReadMessages) - .collect(Collectors.groupingBy(MarkedMessageInfo::getThreadId)); + Map> threadToInfo = markedReadMessages.stream() + .collect(Collectors.groupingBy(MarkedMessageInfo::getThreadId)); - Stream.of(threadToInfo).forEach(threadToInfoEntry -> { - Map> recipientIdToInfo = Stream.of(threadToInfoEntry.getValue()) - .map(info -> info) - .collect(Collectors.groupingBy(info -> info.getSyncMessageId().getRecipientId())); + threadToInfo.entrySet().stream().forEach(threadToInfoEntry -> { + Map> 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 infos = entry.getValue(); @@ -108,7 +107,7 @@ public class MarkReadReceiver extends BroadcastReceiver { List 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) { 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())); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCancellationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCancellationHelper.java index e2eb48646e..cd043b9203 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCancellationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationCancellationHelper.java @@ -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. diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java index e81defa6e7..eda1c7265a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationChannels.java @@ -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 existingChannelIds = Stream.of(notificationManager.getNotificationChannels()).map(NotificationChannel::getId).collect(Collectors.toSet()); + Set 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)) && diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentSubmissionResult.java b/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentSubmissionResult.java index d710d997ac..3d1a768bff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentSubmissionResult.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/PaymentSubmissionResult.java @@ -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. *

@@ -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 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/backup/phrase/PaymentsRecoveryPhraseFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/backup/phrase/PaymentsRecoveryPhraseFragment.java index 55f608eb14..7d1b44fb4d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/backup/phrase/PaymentsRecoveryPhraseFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/backup/phrase/PaymentsRecoveryPhraseFragment.java @@ -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 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(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java index 1989ddc213..130be5dd10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeFragment.java @@ -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)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java index b981ff7d8a..fad092ec5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeViewModel.java @@ -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 payments, @NonNull PaymentsHomeState state) { - List paymentItems = Stream.of(payments) - .limit(MAX_PAYMENT_ITEMS) - .map(PaymentItem::fromPayment).collect(Collectors.toList()); + List paymentItems = payments.stream() + .limit(MAX_PAYMENT_ITEMS) + .map(PaymentItem::fromPayment).collect(Collectors.toList()); return state.updatePayments(paymentItems, payments.size()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java index 8de5cbd84f..d55c8c9606 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsRepository.java @@ -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 reconcileOutput) { - List blockOverridePayments = Stream.of(reconcileOutput) - .filter(x -> x instanceof LedgerReconcile.BlockOverridePayment) - .map(x -> (LedgerReconcile.BlockOverridePayment)x).collect(Collectors.toList()); + List 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 filterPayments(@NonNull List 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()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java index 7d963a58f8..d6dcc58f7a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/SetCurrencyViewModel.java @@ -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 DEFAULT_CURRENCIES = Stream.of(BuildConfig.DEFAULT_CURRENCIES.split(",")) + private static final List 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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/model/PaymentItem.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/model/PaymentItem.java index 847dc1d843..05305aeb85 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/model/PaymentItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/model/PaymentItem.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcile.java b/app/src/main/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcile.java index 5585529dc0..82d6d8f71c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcile.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcile.java @@ -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 reconcile(@NonNull Collection allLocalPaymentTransactions, @NonNull List allTxOuts) { - List nonFailedLocalPayments = Stream.of(allLocalPaymentTransactions).filter(i -> i.getState() != State.FAILED).collect(Collectors.toList()); + List nonFailedLocalPayments = allLocalPaymentTransactions.stream().filter(i -> i.getState() != State.FAILED).collect(Collectors.toList()); Set allKnownPublicKeys = new HashSet<>(nonFailedLocalPayments.size()); Set allKnownKeyImages = new HashSet<>(nonFailedLocalPayments.size()); @@ -63,24 +62,24 @@ public final class LedgerReconcile { allKnownKeyImages.addAll(txoIdentification.keyImages); } - Set knownTxosByKeyImage = Stream.of(allTxOuts) - .filter(t -> allKnownKeyImages.contains(t.getKeyImage())) - .collect(Collectors.toSet()); + Set knownTxosByKeyImage = allTxOuts.stream() + .filter(t -> allKnownKeyImages.contains(t.getKeyImage())) + .collect(Collectors.toSet()); - Set knownTxosByPublicKeys = Stream.of(allTxOuts) - .filter(t -> allKnownPublicKeys.contains(t.getPublicKey())) - .collect(Collectors.toSet()); + Set 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 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 unknownTxOutsSpent = Stream.of(allTxOuts).filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent).collect(Collectors.toSet()); + Set 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 detailedTransactions = reconstructAllTransactions(unknownTxOutsReceived, unknownTxOutsSpent); @@ -184,25 +183,25 @@ public final class LedgerReconcile { } private static @NonNull List reconstructAllTransactions(@NonNull Set unknownReceived, @NonNull Set unknownSpent) { - Set allBlocksWithActivity = Stream.of(unknownReceived) - .map(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock) - .collect(Collectors.toSet()); + Set 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> receivedInBlock = Stream.of(unknownReceived) - .collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock)); + Map> receivedInBlock = unknownReceived.stream() + .collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getReceivedInBlock)); - Map> spentInBlock = Stream.of(unknownSpent) - .filter(MobileCoinLedgerWrapper.OwnedTxo::isSpent) - .collect(Collectors.groupingBy(MobileCoinLedgerWrapper.OwnedTxo::getSpentInBlock)); + Map> 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 unspent = MapUtil.getOrDefault(receivedInBlock, blockIndex, Collections.emptyList()); List 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 toMobileCoinList(@NonNull List 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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewModel.java index 0c877f0c17..21c92eff98 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewModel.java @@ -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 transformReviewRecipients(boolean isSelfGroupAdmin, @NonNull List 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), diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java index 8ca55125d9..846d155297 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsConversationView.java @@ -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 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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java index a93f3d29f5..26b667a4ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java @@ -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> getEmojiCounts() { return repository.getReactions(messageId) .map(reactionList -> { - List emojiCounts = Stream.of(Stream.of(reactionList) + List 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 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 reactions) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiRepository.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiRepository.java index b0b429ccdf..9f5ab5608b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiRepository.java @@ -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 getEmojiPageModels(@NonNull List thisMessagesReactions) { List pages = new LinkedList<>(); - List thisMessage = Stream.of(thisMessagesReactions) - .map(ReactionDetails::getDisplayEmoji) - .distinct().collect(Collectors.toList()); + List 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ThisMessageEmojiPageModel.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ThisMessageEmojiPageModel.java index bed96fe538..8080430a02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ThisMessageEmojiPageModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ThisMessageEmojiPageModel.java @@ -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 getDisplayEmoji() { - return Stream.of(getEmoji()).map(Emoji::new).collect(Collectors.toList()); + return getEmoji().stream().map(Emoji::new).collect(Collectors.toList()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java index 85147f238b..8aa7ba921d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -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 recipients) throws IOException { - List recipientsWithoutUuids = Stream.of(recipients) - .map(Recipient::resolve) - .filter(recipient -> !recipient.getHasServiceId()).collect(com.annimon.stream.Collectors.toList()); + List 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 getEligibleForSending(@NonNull List 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()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java index bc48b4d1de..a6f7fcef17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupActionProcessor.java @@ -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 members = Stream.of(GroupManager.getUuidCipherTexts(context, group.requireGroupId().requireV2())) - .map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(Collectors.toList()); + List 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)); diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupConnectedActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupConnectedActionProcessor.java index a175eb96ae..43dbe216af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupConnectedActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupConnectedActionProcessor.java @@ -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 members = Stream.of(currentState.getCallInfoState().getRemoteCallParticipants()) - .filter(p -> p.getRecipient().getHasServiceId()) - .map(p -> p.getRecipient().requireServiceId().getRawUuid()).collect(Collectors.toList()); + List 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() diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java index 96b8ab6c85..add1711d57 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/GroupPreJoinActionProcessor.java @@ -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 callParticipants = Stream.of(peekInfo.getJoinedMembers()) - .map(uuid -> Recipient.externalPush(ACI.from(uuid))).collect(Collectors.toList()); + List callParticipants = peekInfo.getJoinedMembers().stream() + .map(uuid -> Recipient.externalPush(ACI.from(uuid))).collect(Collectors.toList()); WebRtcServiceStateBuilder.CallInfoStateBuilder builder = currentState.builder() .changeCallInfoState() diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java index 6cf5a02e27..e5072b0d43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/SignalCallManager.java @@ -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 members = Stream.of(GroupManager.getUuidCipherTexts(context, groupId)) - .map(entry -> new GroupCall.GroupMemberInfo(entry.getKey(), entry.getValue().serialize())).collect(com.annimon.stream.Collectors.toList()); + List 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> 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(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java index c726d66b6a..407d8c9869 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/WebRtcActionProcessor.java @@ -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 iceCandidates) { Log.i(tag, "handleSendIceCandidates(): id: " + callMetadata.getCallId().format(callMetadata.getRemoteDevice())); - List iceUpdateMessages = Stream.of(iceCandidates) - .map(c -> new IceUpdateMessage(callMetadata.getCallId().longValue(), c)).collect(Collectors.toList()); + List 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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java index 9088ed4622..ea4532cc94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java @@ -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); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java index a362226d78..050dc0fe9c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialActivity.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialActivity.java index 60d7559d49..1122e6984d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialActivity.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialRepository.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialRepository.java index 1aaaac6dfb..5c3bb1c757 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialRepository.java @@ -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 resolveRecipients(@NonNull Set 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()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java index 26308e951e..ceda3a76be 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -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 attachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).collect(com.annimon.stream.Collectors.toList()); - List jobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).collect(com.annimon.stream.Collectors.toList()); + List attachmentIds = preUploadResults.stream().map(PreUploadResult::getAttachmentId).collect(Collectors.toList()); + List 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 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 preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).collect(com.annimon.stream.Collectors.toList()); - List preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).collect(com.annimon.stream.Collectors.toList()); + List preUploadAttachmentIds = preUploadResults.stream().map(PreUploadResult::getAttachmentId).collect(Collectors.toList()); + List preUploadJobIds = preUploadResults.stream().map(PreUploadResult::getJobIds).flatMap(x -> x.stream()).collect(Collectors.toList()); List messageIds = new ArrayList<>(messages.size()); List messageDependsOnIds = new ArrayList<>(preUploadJobIds); OutgoingMessage primaryMessage = messages.get(0); @@ -370,8 +369,8 @@ public class MessageSender { messageIds.add(primaryMessageId); } - List preUploadAttachments = Stream.of(preUploadAttachmentIds) - .map(attachmentDatabase::getAttachment).collect(com.annimon.stream.Collectors.toList()); + List preUploadAttachments = preUploadAttachmentIds.stream() + .map(attachmentDatabase::getAttachment).collect(Collectors.toList()); if (messages.size() > 0) { List secondaryMessages = overwritePreUploadMessageIds ? messages.subList(1, messages.size()) : messages; diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/preview/StickerPackPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/preview/StickerPackPreviewRepository.java index f313c8d7db..7f6b4e18ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/preview/StickerPackPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/preview/StickerPackPreviewRepository.java @@ -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) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java index 29193122a5..fb01c8791e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java @@ -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 allSetEncoded = Stream.of(result.manifest.storageIds).map(StorageId::getRaw).map(Base64::encodeWithPadding).collect(Collectors.toSet()); + Set 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 previousIds = Stream.of(previousManifest.storageIds).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); - Set newIds = Stream.of(result.manifest.storageIds).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); + Set previousIds = previousManifest.storageIds.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); + Set newIds = result.manifest.storageIds.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); Set manifestInserts = SetUtil.difference(newIds, previousIds); Set manifestDeletes = SetUtil.difference(previousIds, newIds); - Set declaredInserts = Stream.of(result.inserts).map(r -> ByteBuffer.wrap(r.getId().getRaw())).collect(Collectors.toSet()); - Set declaredDeletes = Stream.of(result.deletes).map(ByteBuffer::wrap).collect(Collectors.toSet()); + Set declaredInserts = result.inserts.stream().map(r -> ByteBuffer.wrap(r.getId().getRaw())).collect(Collectors.toSet()); + Set 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 allSet = new HashSet<>(manifest.storageIds); - Set insertSet = new HashSet<>(Stream.of(inserts).map(SignalStorageRecord::getId).collect(Collectors.toList())); - Set rawIdSet = Stream.of(allSet).map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); + Set insertSet = new HashSet<>(inserts.stream().map(SignalStorageRecord::getId).collect(Collectors.toList())); + Set rawIdSet = allSet.stream().map(id -> ByteBuffer.wrap(id.getRaw())).collect(Collectors.toSet()); if (allSet.size() != manifest.storageIds.size()) { throw new DuplicateStorageIdError(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java index 519837b3e7..add250d02f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ConversationUtil.java @@ -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 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 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 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); } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteDeprecation.java b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteDeprecation.java index 052e590989..2f61f72522 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/RemoteDeprecation.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/RemoteDeprecation.java @@ -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 { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java index 7cfe60ef47..288c7ccf9f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SearchUtil.java @@ -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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/SectionedRecyclerViewAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/SectionedRecyclerViewAdapter.java index 66afadff77..e1868925b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/SectionedRecyclerViewAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/SectionedRecyclerViewAdapter.java @@ -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; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java index 484d7b68bc..d99fa6bc00 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java @@ -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)) - .>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)) + .>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList()))); submit.setOnClickListener(unused -> { ChatWallpaperSelectionMappingModel model = (ChatWallpaperSelectionMappingModel) adapter.getCurrentList().get(viewPager.getCurrentItem()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java index a3fd240f6f..f8118b307b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java @@ -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>> 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)) - .>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList()) + wallpapers.stream() + .map(paper -> ChatWallpaperFactory.updateWithDimming(paper, dimInDarkMode ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f)) + .>map(ChatWallpaperSelectionMappingModel::new).collect(Collectors.toList()) ); } diff --git a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java index f5d3e2f86d..bb32ad1c27 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/LedgerReconcileTest.java @@ -3,8 +3,7 @@ package org.thoughtcrime.securesms.payments.reconciliation; 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.junit.BeforeClass; import org.junit.Test; @@ -169,7 +168,7 @@ public final class LedgerReconcileTest { List payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger)); - assertEquals(Arrays.asList(mob(-1), mob(2.5)), Stream.of(payments).map(Payment::getAmountWithDirection).collect(Collectors.toList())); + assertEquals(Arrays.asList(mob(-1), mob(2.5)), payments.stream().map(Payment::getAmountWithDirection).collect(Collectors.toList())); assertEquals("received", payments.get(1).getNote()); } @@ -182,7 +181,7 @@ public final class LedgerReconcileTest { List payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger)); - assertEquals(Arrays.asList(mob(1.5), mob(-2.5), mob(2.5)), Stream.of(payments).map(Payment::getAmountWithDirection).collect(Collectors.toList())); + assertEquals(Arrays.asList(mob(1.5), mob(-2.5), mob(2.5)), payments.stream().map(Payment::getAmountWithDirection).collect(Collectors.toList())); assertEquals("received", payments.get(2).getNote()); } @@ -195,7 +194,7 @@ public final class LedgerReconcileTest { List payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger)); - assertEquals(Arrays.asList(mob(2.5), mob(1.5), mob(-2.5), mob(2.5)), Stream.of(payments).map(Payment::getAmountWithDirection).collect(Collectors.toList())); + assertEquals(Arrays.asList(mob(2.5), mob(1.5), mob(-2.5), mob(2.5)), payments.stream().map(Payment::getAmountWithDirection).collect(Collectors.toList())); assertEquals("received", payments.get(0).getNote()); } @@ -209,7 +208,7 @@ public final class LedgerReconcileTest { List payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger)); - assertEquals(Arrays.asList(mob(1.5), mob(-2.5), mob(10), mob(20)), Stream.of(payments).map(Payment::getAmountWithDirection).collect(Collectors.toList())); + assertEquals(Arrays.asList(mob(1.5), mob(-2.5), mob(10), mob(20)), payments.stream().map(Payment::getAmountWithDirection).collect(Collectors.toList())); } @Test @@ -222,8 +221,8 @@ public final class LedgerReconcileTest { List payments = reconcile(localPayments, new MobileCoinLedgerWrapper(ledger)); - assertEquals(Arrays.asList(20L, 15L, 0L, 10L), Stream.of(payments).map(Payment::getBlockIndex).collect(Collectors.toList())); - assertEquals(Arrays.asList(mob(-2.5), mob(10), mob(20), mob(2.5)), Stream.of(payments).map(Payment::getAmountWithDirection).collect(Collectors.toList())); + assertEquals(Arrays.asList(20L, 15L, 0L, 10L), payments.stream().map(Payment::getBlockIndex).collect(Collectors.toList())); + assertEquals(Arrays.asList(mob(-2.5), mob(10), mob(20), mob(2.5)), payments.stream().map(Payment::getAmountWithDirection).collect(Collectors.toList())); } private static @NonNull List reconcile(@NonNull Collection localPaymentTransactions, diff --git a/app/src/test/java/org/thoughtcrime/securesms/testutil/TestHelpers.java b/app/src/test/java/org/thoughtcrime/securesms/testutil/TestHelpers.java index 821413016d..816b3225a3 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/testutil/TestHelpers.java +++ b/app/src/test/java/org/thoughtcrime/securesms/testutil/TestHelpers.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.testutil; -import com.annimon.stream.Collectors; -import com.annimon.stream.Stream; +import java.util.stream.Collectors; import com.google.common.collect.Sets; import org.signal.core.util.Conversions; @@ -51,8 +50,8 @@ public final class TestHelpers { public static void assertByteListEquals(List a, List b) { assertEquals(a.size(), b.size()); - List aBuffer = Stream.of(a).map(ByteBuffer::wrap).collect(Collectors.toList()); - List bBuffer = Stream.of(b).map(ByteBuffer::wrap).collect(Collectors.toList()); + List aBuffer = a.stream().map(ByteBuffer::wrap).collect(Collectors.toList()); + List bBuffer = b.stream().map(ByteBuffer::wrap).collect(Collectors.toList()); assertTrue(aBuffer.containsAll(bBuffer)); }