diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListDatabaseTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListDatabaseTest.kt index 40f7625e2..6ffa8fed9 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListDatabaseTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/DistributionListDatabaseTest.kt @@ -8,7 +8,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListRecord import org.thoughtcrime.securesms.database.model.StoryType import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.signalservice.api.push.ACI -import java.lang.IllegalStateException import java.util.UUID class DistributionListDatabaseTest { diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest.kt index df1cffcc1..9cc895a22 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest.kt @@ -21,7 +21,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.push.ACI import org.whispersystems.signalservice.api.push.PNI -import java.lang.IllegalArgumentException import java.util.UUID @RunWith(AndroidJUnit4::class) diff --git a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest_merges.kt b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest_merges.kt index 082ef17a2..197e2f78e 100644 --- a/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest_merges.kt +++ b/app/src/androidTest/java/org/thoughtcrime/securesms/database/RecipientDatabaseTest_merges.kt @@ -224,12 +224,12 @@ class RecipientDatabaseTest_merges { } } - private fun smsMessage(sender: RecipientId, time: Long = 0, body: String = "", groupId: Optional = Optional.absent()): IncomingTextMessage { + private fun smsMessage(sender: RecipientId, time: Long = 0, body: String = "", groupId: Optional = Optional.empty()): IncomingTextMessage { return IncomingTextMessage(sender, 1, time, time, time, body, groupId, 0, true, null) } - private fun mmsMessage(sender: RecipientId, time: Long = 0, body: String = "", groupId: Optional = Optional.absent()): IncomingMediaMessage { - return IncomingMediaMessage(sender, groupId, body, time, time, time, emptyList(), 0, 0, false, false, true, Optional.absent()) + private fun mmsMessage(sender: RecipientId, time: Long = 0, body: String = "", groupId: Optional = Optional.empty()): IncomingMediaMessage { + return IncomingMediaMessage(sender, groupId, body, time, time, time, emptyList(), 0, 0, false, false, true, Optional.empty()) } private fun identityKey(value: Byte): IdentityKey { diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java index de396b338..3cdb39ae2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java @@ -26,10 +26,10 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.stickers.StickerLocator; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; public interface BindableConversationItem extends Unbindable, GiphyMp4Playable, Colorizable, Multiselectable { diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java index 0f6565a44..6a487fff4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationListItem.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java index 32f9ecefb..4bd728605 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionActivity.java @@ -33,10 +33,10 @@ import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.lang.ref.WeakReference; +import java.util.Optional; import java.util.function.Consumer; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 0b7d0f9b4..9b1fc4bc7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -87,11 +87,11 @@ import org.thoughtcrime.securesms.util.adapter.FixedViewsAdapter; import org.thoughtcrime.securesms.util.adapter.RecyclerViewConcatenateAdapterStickyHeader; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Consumer; @@ -637,8 +637,8 @@ public final class ContactSelectionListFragment extends LoggingFragment private class ListClickListener implements ContactSelectionListAdapter.ItemClickListener { @Override public void onItemClick(ContactSelectionListItem contact) { - SelectedContact selectedContact = contact.isUsernameType() ? SelectedContact.forUsername(contact.getRecipientId().orNull(), contact.getNumber()) - : SelectedContact.forPhone(contact.getRecipientId().orNull(), contact.getNumber()); + SelectedContact selectedContact = contact.isUsernameType() ? SelectedContact.forUsername(contact.getRecipientId().orElse(null), contact.getNumber()) + : SelectedContact.forPhone(contact.getRecipientId().orElse(null), contact.getNumber()); if (!canSelectSelf && Recipient.self().getId().equals(selectedContact.getOrCreateRecipientId(requireContext()))) { Toast.makeText(requireContext(), R.string.ContactSelectionListFragment_you_do_not_need_to_add_yourself_to_the_group, Toast.LENGTH_SHORT).show(); @@ -774,7 +774,7 @@ public final class ContactSelectionListFragment extends LoggingFragment markContactUnselected(selectedContact); if (onContactSelectedListener != null) { - onContactSelectedListener.onContactDeselected(Optional.of(recipient.getId()), recipient.getE164().orNull()); + onContactSelectedListener.onContactDeselected(Optional.of(recipient.getId()), recipient.getE164().orElse(null)); } }); diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java index b2d8b18ff..b1232ba41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceActivity.java @@ -17,12 +17,10 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.signal.zkgroup.profiles.ProfileKey; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -38,7 +36,6 @@ import org.whispersystems.libsignal.IdentityKeyPair; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.ecc.Curve; import org.whispersystems.libsignal.ecc.ECPublicKey; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.exceptions.NotFoundException; import org.whispersystems.signalservice.internal.push.DeviceLimitExceededException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/DeviceListFragment.java b/app/src/main/java/org/thoughtcrime/securesms/DeviceListFragment.java index 1a9281f85..59ad3ecf8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/DeviceListFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/DeviceListFragment.java @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; -import android.content.DialogInterface; import android.os.AsyncTask; import android.os.Bundle; import android.view.LayoutInflater; diff --git a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java index a59b635a4..aeffa5761 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java @@ -38,8 +38,8 @@ import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.thoughtcrime.securesms.util.text.AfterTextChanged; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.concurrent.ExecutionException; import java.util.function.Consumer; @@ -251,7 +251,7 @@ public class InviteActivity extends PassphraseRequiredActivity implements Contac for (SelectedContact contact : contacts) { RecipientId recipientId = contact.getOrCreateRecipientId(context); Recipient recipient = Recipient.resolved(recipientId); - int subscriptionId = recipient.getDefaultSubscriptionId().or(-1); + int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1); MessageSender.send(context, new OutgoingTextMessage(recipient, message, subscriptionId), -1L, true, null, null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.java b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.java index 758dcb824..ed2eb3574 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MainActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MainActivity.java @@ -26,7 +26,6 @@ import org.thoughtcrime.securesms.util.CachedInflater; import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.WindowUtil; public class MainActivity extends PassphraseRequiredActivity implements VoiceNoteMediaControllerOwner { diff --git a/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java b/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java index 2f2ef45b2..2b6bb4509 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/MuteDialog.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms; import android.content.Context; -import android.content.DialogInterface; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 4c0aa3e4a..3e65b1c69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -35,9 +35,9 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; +import java.util.Optional; import java.util.function.Consumer; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/TransportOption.java b/app/src/main/java/org/thoughtcrime/securesms/TransportOption.java index 902bd7558..a8afc974d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/TransportOption.java +++ b/app/src/main/java/org/thoughtcrime/securesms/TransportOption.java @@ -9,7 +9,9 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.util.CharacterCalculator; import org.thoughtcrime.securesms.util.CharacterCalculator.CharacterState; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class TransportOption implements Parcelable { @@ -18,8 +20,8 @@ public class TransportOption implements Parcelable { TEXTSECURE } - private final int drawable; - private final int backgroundColor; + private final int drawable; + private final int backgroundColor; private final @NonNull String text; private final @NonNull Type type; private final @NonNull String composeHint; @@ -35,7 +37,7 @@ public class TransportOption implements Parcelable { @NonNull CharacterCalculator characterCalculator) { this(type, drawable, backgroundColor, text, composeHint, characterCalculator, - Optional.absent(), Optional.absent()); + Optional.empty(), Optional.empty()); } public TransportOption(@NonNull Type type, @@ -64,8 +66,8 @@ public class TransportOption implements Parcelable { in.readString(), in.readString(), CharacterCalculator.readFromParcel(in), - Optional.fromNullable(TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in)), - in.readInt() == 1 ? Optional.of(in.readInt()) : Optional.absent()); + Optional.ofNullable(TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in)), + in.readInt() == 1 ? Optional.of(in.readInt()) : Optional.empty()); } public @NonNull Type getType() { @@ -123,7 +125,7 @@ public class TransportOption implements Parcelable { dest.writeString(text); dest.writeString(composeHint); CharacterCalculator.writeToParcel(dest, characterCalculator); - TextUtils.writeToParcel(simName.orNull(), dest, flags); + TextUtils.writeToParcel(simName.orElse(null), dest, flags); if (simSubscriptionId.isPresent()) { dest.writeInt(1); diff --git a/app/src/main/java/org/thoughtcrime/securesms/TransportOptions.java b/app/src/main/java/org/thoughtcrime/securesms/TransportOptions.java index 846ca59db..6d0058ac2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/TransportOptions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/TransportOptions.java @@ -14,13 +14,14 @@ import org.thoughtcrime.securesms.util.PushCharacterCalculator; import org.thoughtcrime.securesms.util.SmsCharacterCalculator; import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat; import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat; -import org.whispersystems.libsignal.util.guava.Optional; +import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import static org.thoughtcrime.securesms.TransportOption.Type; @@ -33,8 +34,8 @@ public class TransportOptions { private final List enabledTransports; private Type defaultTransportType = Type.SMS; - private Optional defaultSubscriptionId = Optional.absent(); - private Optional selectedOption = Optional.absent(); + private Optional defaultSubscriptionId = Optional.empty(); + private Optional selectedOption = Optional.empty(); private final Optional systemSubscriptionId; @@ -54,7 +55,7 @@ public class TransportOptions { setSelectedTransport(null); } else { this.defaultTransportType = Type.SMS; - this.defaultSubscriptionId = Optional.absent(); + this.defaultSubscriptionId = Optional.empty(); notifyTransportChangeListeners(); } @@ -81,7 +82,7 @@ public class TransportOptions { } public void setSelectedTransport(@Nullable TransportOption transportOption) { - this.selectedOption = Optional.fromNullable(transportOption); + this.selectedOption = Optional.ofNullable(transportOption); notifyTransportChangeListeners(); } @@ -93,7 +94,7 @@ public class TransportOptions { if (selectedOption.isPresent()) return selectedOption.get(); if (defaultTransportType == Type.SMS) { - TransportOption transportOption = findEnabledSmsTransportOption(defaultSubscriptionId.or(systemSubscriptionId)); + TransportOption transportOption = findEnabledSmsTransportOption(OptionalUtil.or(defaultSubscriptionId, systemSubscriptionId)); if (transportOption != null) { return transportOption; } @@ -124,7 +125,7 @@ public class TransportOptions { for (TransportOption transportOption : enabledTransports) { if (transportOption.getType() == Type.SMS && - subId == transportOption.getSimSubscriptionId().or(-1)) { + subId == transportOption.getSimSubscriptionId().orElse(-1)) { return transportOption; } } @@ -133,7 +134,7 @@ public class TransportOptions { } public void disableTransport(Type type) { - TransportOption selected = selectedOption.orNull(); + TransportOption selected = selectedOption.orElse(null); Iterator iterator = enabledTransports.iterator(); while (iterator.hasNext()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java index 58e3343ef..d6dd753af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/attachments/PointerAttachment.java @@ -9,12 +9,12 @@ import org.thoughtcrime.securesms.blurhash.BlurHash; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.util.Base64; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import java.util.LinkedList; import java.util.List; +import java.util.Optional; public class PointerAttachment extends Attachment { @@ -93,7 +93,7 @@ public class PointerAttachment extends Attachment { } public static Optional forPointer(Optional pointer, @Nullable StickerLocator stickerLocator, @Nullable String fastPreflightId) { - if (!pointer.isPresent() || !pointer.get().isPointer()) return Optional.absent(); + if (!pointer.isPresent() || !pointer.get().isPointer()) return Optional.empty(); String encodedKey = null; @@ -103,12 +103,12 @@ public class PointerAttachment extends Attachment { return Optional.of(new PointerAttachment(pointer.get().getContentType(), AttachmentDatabase.TRANSFER_PROGRESS_PENDING, - pointer.get().asPointer().getSize().or(0), - pointer.get().asPointer().getFileName().orNull(), + pointer.get().asPointer().getSize().orElse(0), + pointer.get().asPointer().getFileName().orElse(null), pointer.get().asPointer().getCdnNumber(), pointer.get().asPointer().getRemoteId().toString(), encodedKey, null, - pointer.get().asPointer().getDigest().orNull(), + pointer.get().asPointer().getDigest().orElse(null), fastPreflightId, pointer.get().asPointer().getVoiceNote(), pointer.get().asPointer().isBorderless(), @@ -116,9 +116,9 @@ public class PointerAttachment extends Attachment { pointer.get().asPointer().getWidth(), pointer.get().asPointer().getHeight(), pointer.get().asPointer().getUploadTimestamp(), - pointer.get().asPointer().getCaption().orNull(), + pointer.get().asPointer().getCaption().orElse(null), stickerLocator, - BlurHash.parseOrNull(pointer.get().asPointer().getBlurHash().orNull()))); + BlurHash.parseOrNull(pointer.get().asPointer().getBlurHash().orElse(null)))); } @@ -127,13 +127,13 @@ public class PointerAttachment extends Attachment { return Optional.of(new PointerAttachment(pointer.getContentType(), AttachmentDatabase.TRANSFER_PROGRESS_PENDING, - thumbnail != null ? thumbnail.asPointer().getSize().or(0) : 0, + thumbnail != null ? thumbnail.asPointer().getSize().orElse(0) : 0, pointer.getFileName(), thumbnail != null ? thumbnail.asPointer().getCdnNumber() : 0, thumbnail != null ? thumbnail.asPointer().getRemoteId().toString() : "0", thumbnail != null && thumbnail.asPointer().getKey() != null ? Base64.encodeBytes(thumbnail.asPointer().getKey()) : null, null, - thumbnail != null ? thumbnail.asPointer().getDigest().orNull() : null, + thumbnail != null ? thumbnail.asPointer().getDigest().orElse(null) : null, null, false, false, @@ -141,7 +141,7 @@ public class PointerAttachment extends Attachment { thumbnail != null ? thumbnail.asPointer().getWidth() : 0, thumbnail != null ? thumbnail.asPointer().getHeight() : 0, thumbnail != null ? thumbnail.asPointer().getUploadTimestamp() : 0, - thumbnail != null ? thumbnail.asPointer().getCaption().orNull() : null, + thumbnail != null ? thumbnail.asPointer().getCaption().orElse(null) : null, null, null)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java index b3570b1ae..ff600ef86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/audio/AudioRecorder.java @@ -12,7 +12,6 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.components.voice.VoiceNoteDraft; import org.thoughtcrime.securesms.providers.BlobProvider; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; diff --git a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarRenderer.kt b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarRenderer.kt index 1b7d6623b..da9cbb4de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarRenderer.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/avatar/AvatarRenderer.kt @@ -14,10 +14,10 @@ import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.profiles.AvatarHelper import org.thoughtcrime.securesms.providers.BlobProvider import org.thoughtcrime.securesms.util.MediaUtil -import org.whispersystems.libsignal.util.guava.Optional import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream import java.io.IOException +import java.util.Optional import javax.annotation.meta.Exhaustive /** @@ -128,6 +128,6 @@ object AvatarRenderer { } private fun createMedia(uri: Uri, size: Long): Media { - return Media(uri, MediaUtil.IMAGE_JPEG, System.currentTimeMillis(), DIMENSIONS, DIMENSIONS, size, 0, false, false, Optional.absent(), Optional.absent(), Optional.absent()) + return Media(uri, MediaUtil.IMAGE_JPEG, System.currentTimeMillis(), DIMENSIONS, DIMENSIONS, size, 0, false, false, Optional.empty(), Optional.empty(), Optional.empty()) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupBase.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupBase.java index 54585bd8c..1ca838b46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupBase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupBase.java @@ -5,7 +5,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.greenrobot.eventbus.EventBus; -import org.signal.core.util.logging.Log; import org.whispersystems.libsignal.util.ByteUtil; import java.security.MessageDigest; diff --git a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java index 080dced86..125cab42c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/backup/FullBackupExporter.java @@ -21,7 +21,6 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.crypto.AttachmentSecret; import org.thoughtcrime.securesms.crypto.ClassicDecryptingPartInputStream; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.ModernDecryptingPartInputStream; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.EmojiSearchDatabase; diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt index 74125ca7e..66d702f3c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeImageView.kt @@ -12,7 +12,6 @@ import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.mms.GlideRequests import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.ThemeUtil -import java.lang.IllegalArgumentException class BadgeImageView @JvmOverloads constructor( context: Context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt index f786aef20..22efd790c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt @@ -17,7 +17,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.InternetConnectionObserver import org.thoughtcrime.securesms.util.livedata.Store -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional private val TAG = Log.tag(BadgesOverviewViewModel::class.java) @@ -54,13 +54,13 @@ class BadgesOverviewViewModel( subscriptionsRepository.getSubscriptions() ) { active, all -> if (!active.isActive && active.activeSubscription?.willCancelAtPeriodEnd() == true) { - Optional.fromNullable(all.firstOrNull { it.level == active.activeSubscription?.level }?.badge?.id) + Optional.ofNullable(all.firstOrNull { it.level == active.activeSubscription?.level }?.badge?.id) } else { - Optional.absent() + Optional.empty() } }.subscribeBy( onSuccess = { badgeId -> - store.update { it.copy(fadedBadgeId = badgeId.orNull()) } + store.update { it.copy(fadedBadgeId = badgeId.orElse(null)) } }, onError = { throwable -> Log.w(TAG, "Could not retrieve data from server", throwable) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeViewModel.kt index fd3410e26..9ad63ade8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import io.reactivex.rxjava3.disposables.CompositeDisposable -import io.reactivex.rxjava3.kotlin.plusAssign import org.thoughtcrime.securesms.badges.BadgeRepository import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.recipients.Recipient diff --git a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersActivity.java b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersActivity.java index 06f929e2a..b680262e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersActivity.java @@ -24,8 +24,8 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.function.Consumer; public class BlockedUsersActivity extends PassphraseRequiredActivity implements BlockedUsersFragment.Listener, ContactSelectionListFragment.OnContactSelectedListener { @@ -88,7 +88,7 @@ public class BlockedUsersActivity extends PassphraseRequiredActivity implements @Override public void onBeforeContactSelected(@NonNull Optional recipientId, String number, @NonNull Consumer callback) { - final String displayName = recipientId.transform(id -> Recipient.resolved(id).getDisplayName(this)).or(number); + final String displayName = recipientId.map(id -> Recipient.resolved(id).getDisplayName(this)).orElse(number); AlertDialog confirmationDialog = new MaterialAlertDialogBuilder(this) .setTitle(R.string.BlockedUsersActivity__block_user) diff --git a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersAdapter.java index c2f2b656a..18482eb35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/blocked/BlockedUsersAdapter.java @@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; +import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.Objects; @@ -64,7 +65,9 @@ final class BlockedUsersAdapter extends ListAdapter 0 && quoteView.getVisibility() == View.VISIBLE) { return Optional.of(new QuoteModel(quoteView.getQuoteId(), quoteView.getAuthor().getId(), quoteView.getBody().toString(), false, quoteView.getAttachments(), quoteView.getMentions())); } else { - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.java b/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.java index cc93a41a9..40e9c6ba6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InsetAwareConstraintLayout.java @@ -13,7 +13,6 @@ import androidx.annotation.Nullable; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.constraintlayout.widget.Guideline; -import org.signal.glide.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.ViewUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java index 5f19d3ff2..384bd2335 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/LinkPreviewView.java @@ -22,13 +22,13 @@ import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.mms.ImageSlide; import org.thoughtcrime.securesms.mms.SlidesClickedListener; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.ViewUtil; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Locale; import okhttp3.HttpUrl; -import org.thoughtcrime.securesms.util.ViewUtil; /** * The view shown in the compose box or conversation that represents the state of the link preview. diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java b/app/src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java index 320304bb5..6b6bcabd2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/MicrophoneRecorderView.java @@ -19,7 +19,6 @@ import android.widget.ImageView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.view.ViewCompat; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.permissions.Permissions; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java index 701cfb561..88b4b79dc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/QuoteView.java @@ -351,7 +351,7 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver { } else if (documentSlide != null){ thumbnailView.setVisibility(GONE); attachmentContainerView.setVisibility(VISIBLE); - attachmentNameView.setText(documentSlide.getFileName().or("")); + attachmentNameView.setText(documentSlide.getFileName().orElse("")); } else { thumbnailView.setVisibility(GONE); attachmentContainerView.setVisibility(GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/RatingManager.java b/app/src/main/java/org/thoughtcrime/securesms/components/RatingManager.java index 5c4be4b1c..30ec67e88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/RatingManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/RatingManager.java @@ -1,11 +1,7 @@ package org.thoughtcrime.securesms.components; -import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; -import android.content.Intent; -import android.net.Uri; -import android.widget.Toast; import androidx.appcompat.app.AlertDialog; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/SendButton.java b/app/src/main/java/org/thoughtcrime/securesms/components/SendButton.java index ea85921fc..6e325c9e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/SendButton.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/SendButton.java @@ -12,7 +12,9 @@ import org.thoughtcrime.securesms.TransportOptions; import org.thoughtcrime.securesms.TransportOptions.OnTransportChangedListener; import org.thoughtcrime.securesms.TransportOptionsPopup; import org.thoughtcrime.securesms.util.ViewUtil; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class SendButton extends AppCompatImageButton implements TransportOptions.OnTransportChangedListener, @@ -22,7 +24,7 @@ public class SendButton extends AppCompatImageButton private final TransportOptions transportOptions; - private Optional transportOptionsPopup = Optional.absent(); + private Optional transportOptionsPopup = Optional.empty(); @SuppressWarnings("unused") public SendButton(Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java index 150b118ac..6f502b19f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -40,11 +40,11 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.ExecutionException; import static com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions.withCrossFade; @@ -69,7 +69,7 @@ public class ThumbnailView extends FrameLayout { private final int[] bounds = new int[4]; private final int[] measureDimens = new int[2]; - private Optional transferControls = Optional.absent(); + private Optional transferControls = Optional.empty(); private SlideClickListener thumbnailClickListener = null; private SlidesClickedListener downloadClickListener = null; private Slide slide = null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java b/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java index fda03605a..a7d84a2e6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/camera/CameraView.java @@ -42,12 +42,12 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; @SuppressWarnings("deprecation") public class CameraView extends ViewGroup { @@ -56,8 +56,8 @@ public class CameraView extends ViewGroup { private final CameraSurfaceView surface; private final OnOrientationChange onOrientationChange; - private volatile Optional camera = Optional.absent(); - private volatile int cameraId = CameraInfo.CAMERA_FACING_BACK; + private volatile Optional camera = Optional.empty(); + private volatile int cameraId = CameraInfo.CAMERA_FACING_BACK; private volatile int displayOrientation = -1; private @NonNull State state = State.PAUSED; @@ -104,7 +104,7 @@ public class CameraView extends ViewGroup { Void onRunBackground() { try { long openStartMillis = System.currentTimeMillis(); - camera = Optional.fromNullable(Camera.open(cameraId)); + camera = Optional.ofNullable(Camera.open(cameraId)); Log.i(TAG, "camera.open() -> " + (System.currentTimeMillis() - openStartMillis) + "ms"); synchronized (CameraView.this) { CameraView.this.notifyAll(); @@ -145,7 +145,7 @@ public class CameraView extends ViewGroup { @Override protected void onPreMain() { cameraToDestroy = camera; - camera = Optional.absent(); + camera = Optional.empty(); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java index 15a401c12..3ab7894e7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiEditText.java @@ -14,7 +14,6 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.emoji.EmojiProvider.EmojiDrawable; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.TextSecurePreferences; public class EmojiEditText extends AppCompatEditText { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java index e7632e79c..edeb1f832 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiPageView.java @@ -21,8 +21,8 @@ import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.Emoj import org.thoughtcrime.securesms.components.emoji.EmojiPageViewGridAdapter.VariationSelectorListener; import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.DrawableUtil; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.ViewUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import java.util.List; import java.util.Optional; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java index c7b1b9437..cb0f0f6a6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiProvider.java @@ -19,7 +19,6 @@ import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.components.emoji.parsing.EmojiDrawInfo; import org.thoughtcrime.securesms.components.emoji.parsing.EmojiParser; -import org.thoughtcrime.securesms.emoji.EmojiFiles; import org.thoughtcrime.securesms.emoji.EmojiPageCache; import org.thoughtcrime.securesms.emoji.EmojiSource; import org.thoughtcrime.securesms.emoji.JumboEmoji; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java index c0d126ca5..9f926023a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/EmojiTextView.java @@ -33,9 +33,9 @@ import org.thoughtcrime.securesms.components.mention.MentionRendererDelegate; import org.thoughtcrime.securesms.emoji.JumboEmoji; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; +import java.util.Optional; import kotlin.Unit; @@ -141,7 +141,7 @@ public class EmojiTextView extends AppCompatTextView { previousTransformationMethod = getTransformationMethod(); if (useSystemEmoji || candidates == null || candidates.size() == 0) { - super.setText(new SpannableStringBuilder(Optional.fromNullable(text).or("")), BufferType.SPANNABLE); + super.setText(new SpannableStringBuilder(Optional.ofNullable(text).orElse("")), BufferType.SPANNABLE); } else { CharSequence emojified = EmojiProvider.emojify(candidates, text, this, isJumbomoji || forceJumboEmoji); super.setText(new SpannableStringBuilder(emojified), BufferType.SPANNABLE); @@ -291,7 +291,7 @@ public class EmojiTextView extends AppCompatTextView { SpannableStringBuilder newContent = new SpannableStringBuilder(); newContent.append(getText().subSequence(0, overflowStart)) .append(ellipsized.subSequence(0, ellipsized.length())) - .append(Optional.fromNullable(overflowText).or("")); + .append(Optional.ofNullable(overflowText).orElse("")); EmojiParser.CandidateList newCandidates = isInEditMode() ? null : EmojiProvider.getCandidates(newContent); CharSequence emojified = EmojiProvider.emojify(newCandidates, newContent, this, isJumbomoji || forceJumboEmoji); diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java index 1b147fe1a..800a248aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/MediaKeyboard.java @@ -10,8 +10,6 @@ import android.widget.FrameLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.TypedArrayUtils; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentManager; @@ -23,7 +21,6 @@ import org.thoughtcrime.securesms.components.InputAwareLayout.InputView; import org.thoughtcrime.securesms.keyboard.KeyboardPage; import org.thoughtcrime.securesms.keyboard.KeyboardPagerFragment; import org.thoughtcrime.securesms.keyboard.emoji.search.EmojiSearchFragment; -import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ThemedFragment; public class MediaKeyboard extends FrameLayout implements InputView { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView.kt index ec1d8f213..3e3656d0e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/emoji/SimpleEmojiTextView.kt @@ -6,7 +6,7 @@ import android.util.AttributeSet import androidx.appcompat.widget.AppCompatTextView import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.util.ThrottledDebouncer -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional open class SimpleEmojiTextView @JvmOverloads constructor( context: Context, @@ -21,7 +21,7 @@ open class SimpleEmojiTextView @JvmOverloads constructor( bufferType = type val candidates = if (isInEditMode) null else EmojiProvider.getCandidates(text) if (SignalStore.settings().isPreferSystemEmoji || candidates == null || candidates.size() == 0) { - super.setText(Optional.fromNullable(text).or(""), type) + super.setText(Optional.ofNullable(text).orElse(""), type) } else { val startDrawableSize: Int = compoundDrawables[0]?.let { it.intrinsicWidth + compoundDrawablePadding } ?: 0 val endDrawableSize: Int = compoundDrawables[1]?.let { it.intrinsicWidth + compoundDrawablePadding } ?: 0 diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java index b7ccf4a36..02bb0519b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/identity/UnverifiedSendDialog.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components.identity; import android.content.Context; import android.content.DialogInterface; -import android.os.AsyncTask; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java index dcdf86c2e..05f274ea7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/DozeReminder.java @@ -8,7 +8,6 @@ import android.net.Uri; import android.os.Build; import android.os.PowerManager; import android.provider.Settings; -import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/PushRegistrationReminder.java b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/PushRegistrationReminder.java index cfbceb3c0..2adc8b37a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/reminder/PushRegistrationReminder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/reminder/PushRegistrationReminder.java @@ -5,7 +5,6 @@ import android.content.Context; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity; -import org.thoughtcrime.securesms.util.TextSecurePreferences; public class PushRegistrationReminder extends Reminder { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt index 5fe538198..388520e10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt @@ -25,7 +25,7 @@ class AppSettingsViewModel(private val subscriptionsRepository: SubscriptionsRep val state: LiveData = store.stateLiveData init { - store.update(unreadPaymentsLiveData) { payments, state -> state.copy(unreadPaymentsCount = payments.transform { it.unreadCount }.or(0)) } + store.update(unreadPaymentsLiveData) { payments, state -> state.copy(unreadPaymentsCount = payments.map { it.unreadCount }.orElse(0)) } store.update(selfLiveData) { self, state -> state.copy(self = self) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/profiles/SelectRecipientsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/profiles/SelectRecipientsFragment.kt index 818d3c1c2..9d5ab2afa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/profiles/SelectRecipientsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/notifications/profiles/SelectRecipientsFragment.kt @@ -21,7 +21,7 @@ import org.thoughtcrime.securesms.util.CircularProgressButtonUtil import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.Util import org.thoughtcrime.securesms.util.ViewUtil -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import java.util.function.Consumer /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsRepository.kt index e991a8f47..86e0807d0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/advanced/AdvancedPrivacySettingsRepository.kt @@ -12,9 +12,9 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.TextSecurePreferences -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.push.exceptions.AuthorizationFailedException import java.io.IOException +import java.util.Optional import java.util.concurrent.ExecutionException private val TAG = Log.tag(AdvancedPrivacySettingsRepository::class.java) @@ -26,7 +26,7 @@ class AdvancedPrivacySettingsRepository(private val context: Context) { val result = try { val accountManager = ApplicationDependencies.getSignalServiceAccountManager() try { - accountManager.setGcmId(Optional.absent()) + accountManager.setGcmId(Optional.empty()) } catch (e: AuthorizationFailedException) { Log.w(TAG, e) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt index 9a2c9b1be..6330ca824 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt @@ -214,7 +214,7 @@ class DonationPaymentRepository(activity: Activity) : StripeApi.PaymentIntentFet Log.w(TAG, "Failed to set user subscription to level $subscriptionLevel with response code ${it.status}", it.applicationError.get(), true) SignalStore.donationsValues().clearLevelOperations() } else { - Log.w(TAG, "Failed to set user subscription to level $subscriptionLevel", it.executionError.orNull(), true) + Log.w(TAG, "Failed to set user subscription to level $subscriptionLevel", it.executionError.orElse(null), true) } LevelUpdate.updateProcessingState(false) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt index 90ca53d31..80c67deb5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsViewModel.kt @@ -48,7 +48,7 @@ class ManageDonationsViewModel( disposables += SubscriptionRedemptionJobWatcher.watch().subscribeBy { jobStateOptional -> store.update { manageDonationsState -> manageDonationsState.copy( - subscriptionRedemptionState = jobStateOptional.transform { jobState -> + subscriptionRedemptionState = jobStateOptional.map { jobState -> when (jobState) { JobTracker.JobState.PENDING -> ManageDonationsState.SubscriptionRedemptionState.IN_PROGRESS JobTracker.JobState.RUNNING -> ManageDonationsState.SubscriptionRedemptionState.IN_PROGRESS @@ -56,7 +56,7 @@ class ManageDonationsViewModel( JobTracker.JobState.FAILURE -> ManageDonationsState.SubscriptionRedemptionState.FAILED JobTracker.JobState.IGNORED -> ManageDonationsState.SubscriptionRedemptionState.NONE } - }.or(ManageDonationsState.SubscriptionRedemptionState.NONE) + }.orElse(ManageDonationsState.SubscriptionRedemptionState.NONE) ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/SubscriptionRedemptionJobWatcher.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/SubscriptionRedemptionJobWatcher.kt index 6f471fb87..011b76625 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/SubscriptionRedemptionJobWatcher.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/SubscriptionRedemptionJobWatcher.kt @@ -6,7 +6,7 @@ import org.thoughtcrime.securesms.jobmanager.JobTracker import org.thoughtcrime.securesms.jobs.DonationReceiptRedemptionJob import org.thoughtcrime.securesms.jobs.SubscriptionReceiptRequestResponseJob import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import java.util.concurrent.TimeUnit /** @@ -27,7 +27,7 @@ object SubscriptionRedemptionJobWatcher { if (jobState == null && SignalStore.donationsValues().getSubscriptionRedemptionFailed()) { Optional.of(JobTracker.JobState.FAILURE) } else { - Optional.fromNullable(jobState) + Optional.ofNullable(jobState) } }.distinctUntilChanged() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt index 6695d6133..55cf5c0c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsRepository.kt @@ -28,8 +28,8 @@ import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.recipients.RecipientUtil import org.thoughtcrime.securesms.util.FeatureFlags -import org.whispersystems.libsignal.util.guava.Optional import java.io.IOException +import java.util.Optional import java.util.concurrent.TimeUnit private val TAG = Log.tag(ConversationSettingsRepository::class.java) @@ -41,7 +41,7 @@ class ConversationSettingsRepository( @WorkerThread fun getThreadMedia(threadId: Long): Optional { return if (threadId <= 0) { - Optional.absent() + Optional.empty() } else { Optional.of(SignalDatabase.media.getGalleryMediaForThread(threadId, MediaDatabase.Sorting.Newest)) } @@ -77,7 +77,7 @@ class ConversationSettingsRepository( fun getIdentity(recipientId: RecipientId, consumer: (IdentityRecord?) -> Unit) { SignalExecutors.BOUNDED.execute { if (SignalStore.account().aci != null && SignalStore.account().pni != null) { - consumer(ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(recipientId).orNull()) + consumer(ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(recipientId).orElse(null)) } else { consumer(null) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt index 06940abd7..7bd143d89 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/ConversationSettingsViewModel.kt @@ -25,7 +25,7 @@ import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.SingleLiveEvent import org.thoughtcrime.securesms.util.livedata.LiveDataUtil import org.thoughtcrime.securesms.util.livedata.Store -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional sealed class ConversationSettingsViewModel( private val repository: ConversationSettingsRepository, @@ -65,22 +65,22 @@ sealed class ConversationSettingsViewModel( openedMediaCursors.add(cursor.get()) } - val ids: List = cursor.transform> { + val ids: List = cursor.map> { val result = mutableListOf() while (it.moveToNext()) { result.add(CursorUtil.requireLong(it, AttachmentDatabase.ROW_ID)) } result - }.or(listOf()) + }.orElse(listOf()) state.copy( - sharedMedia = cursor.orNull(), + sharedMedia = cursor.orElse(null), sharedMediaIds = ids, sharedMediaLoaded = true, displayInternalRecipientDetails = repository.isInternalRecipientDetailsEnabled() ) } else { - cursor.orNull().ensureClosed() + cursor.orElse(null).ensureClosed() state.copy(sharedMedia = null) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt index 4b6499fbd..9b421be88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/InternalConversationSettingsFragment.kt @@ -60,7 +60,7 @@ class InternalConversationSettingsFragment : DSLSettingsFragment( ) if (!recipient.isGroup) { - val serviceId = recipient.serviceId.transform(ServiceId::toString).or("null") + val serviceId = recipient.serviceId.map(ServiceId::toString).orElse("null") longClickPref( title = DSLSettingsText.from("ServiceId"), summary = DSLSettingsText.from(serviceId), @@ -226,7 +226,7 @@ class InternalConversationSettingsFragment : DSLSettingsFragment( SignalExecutors.BOUNDED.execute { val threadId: Long? = SignalDatabase.threads.getThreadIdFor(recipientId) - val groupId: GroupId? = SignalDatabase.groups.getGroup(recipientId).transform { it.id }.orNull() + val groupId: GroupId? = SignalDatabase.groups.getGroup(recipientId).map { it.id }.orElse(null) store.update { state -> state.copy(threadId = threadId, groupId = groupId) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt index b93662729..1de477b0b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/conversation/preferences/BioTextPreference.kt @@ -56,7 +56,7 @@ object BioTextPreference { } } - override fun getSubhead2Text(): String? = recipient.e164.transform(PhoneNumberFormatter::prettyPrint).orNull() + override fun getSubhead2Text(): String? = recipient.e164.map(PhoneNumberFormatter::prettyPrint).orElse(null) override fun areContentsTheSame(newItem: RecipientModel): Boolean { return super.areContentsTheSame(newItem) && newItem.recipient.hasSameContent(recipient) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt index 5c16a85f2..727a0578d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteDraft.kt @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.components.voice import android.net.Uri import org.thoughtcrime.securesms.database.DraftDatabase -import java.lang.IllegalArgumentException private const val SIZE = "size" diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java index 245f23ca9..0b48335f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteMediaController.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.components.voice; import android.content.ComponentName; -import android.media.AudioManager; import android.net.Uri; import android.os.Bundle; import android.os.Handler; @@ -15,7 +14,6 @@ import android.support.v4.media.session.PlaybackStateCompat; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; @@ -29,9 +27,9 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Objects; +import java.util.Optional; /** * Encapsulates control of voice note playback from an Activity component. @@ -92,7 +90,7 @@ public class VoiceNoteMediaController implements DefaultLifecycleObserver { playbackState.getTrackDuration(), playbackState.getSpeed()))); } else { - return new DefaultValueLiveData<>(Optional.absent()); + return new DefaultValueLiveData<>(Optional.empty()); } }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackParameters.java b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackParameters.java index 80c535c76..fa30209d2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackParameters.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNotePlaybackParameters.java @@ -7,8 +7,6 @@ import androidx.annotation.NonNull; import com.google.android.exoplayer2.PlaybackParameters; -import org.signal.core.util.logging.Log; - public final class VoiceNotePlaybackParameters { private final MediaSessionCompat mediaSessionCompat; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/AudioOutputAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/AudioOutputAdapter.java index bb569cdd6..1e0b8700d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/AudioOutputAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/AudioOutputAdapter.java @@ -5,7 +5,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.RadioButton; -import android.widget.TextView; import androidx.annotation.CallSuper; import androidx.annotation.NonNull; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantListUpdate.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantListUpdate.java index 2fad73cd3..f6b79f56f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantListUpdate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantListUpdate.java @@ -8,7 +8,6 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.events.CallParticipantId; -import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.SetUtil; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayout.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayout.java index d444d60e3..5f9e3f4e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayout.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsLayout.java @@ -16,7 +16,6 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; -import org.webrtc.RendererCommon; import java.util.Collections; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsState.kt index c9495bb64..8e67234ae 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/CallParticipantsState.kt @@ -130,7 +130,7 @@ data class CallParticipantsState( ringerRecipient.hasServiceId() ) { val ringerName = ringerRecipient.getShortDisplayName(context) - val membersWithoutYouOrRinger: List = groupMembers.filterNot { it.member.isSelf || ringerRecipient.requireServiceId() == it.member.serviceId.orNull() } + val membersWithoutYouOrRinger: List = groupMembers.filterNot { it.member.isSelf || ringerRecipient.requireServiceId() == it.member.serviceId.orElse(null) } return when (membersWithoutYouOrRinger.size) { 0 -> context.getString(R.string.WebRtcCallView__s_is_calling_you, ringerName) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/EglBaseWrapper.kt b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/EglBaseWrapper.kt index 952d92dbc..1bb98d98f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/EglBaseWrapper.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/EglBaseWrapper.kt @@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.components.webrtc import android.opengl.EGL14 import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.components.webrtc.EglBaseWrapper.Companion.acquireEglBase import org.webrtc.EglBase import org.webrtc.EglBase10 import org.webrtc.EglBase14 diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewHolder.java index dc6a18836..673967eb1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewHolder.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.components.webrtc.participantslist; import android.view.View; -import android.widget.ImageView; import androidx.annotation.NonNull; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewState.java b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewState.java index dc8211bce..d35f3e6c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/webrtc/participantslist/CallParticipantViewState.java @@ -5,7 +5,6 @@ import android.view.View; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.events.CallParticipant; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.viewholders.RecipientMappingModel; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java index 546514b43..840518925 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactRepository.java @@ -140,7 +140,7 @@ public class ContactRepository { if (shouldAdd) { MatrixCursor selfCursor = new MatrixCursor(RecipientDatabase.SEARCH_PROJECTION_NAMES); - selfCursor.addRow(new Object[]{ self.getId().serialize(), noteToSelfTitle, self.getE164().or(""), self.getEmail().orNull(), null, -1, RecipientDatabase.RegisteredState.REGISTERED.getId(), self.getAbout(), self.getAboutEmoji(), null, true, noteToSelfTitle, noteToSelfTitle }); + selfCursor.addRow(new Object[]{ self.getId().serialize(), noteToSelfTitle, self.getE164().orElse(""), self.getEmail().orElse(null), null, -1, RecipientDatabase.RegisteredState.REGISTERED.getId(), self.getAbout(), self.getAboutEmoji(), null, true, noteToSelfTitle, noteToSelfTitle }); cursor = cursor == null ? selfCursor : new MergeCursor(new Cursor[]{ cursor, selfCursor }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 7cc5d3bff..552c6f118 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -24,7 +24,9 @@ import org.thoughtcrime.securesms.recipients.RecipientForeverObserver; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class ContactSelectionListItem extends ConstraintLayout implements RecipientForeverObserver { @@ -232,7 +234,7 @@ public class ContactSelectionListItem extends ConstraintLayout implements Recipi } public Optional getRecipientId() { - return recipient != null ? Optional.of(recipient.getId()) : Optional.absent(); + return recipient != null ? Optional.of(recipient.getId()) : Optional.empty(); } @Override @@ -244,9 +246,9 @@ public class ContactSelectionListItem extends ConstraintLayout implements Recipi if (recipient.isGroup() && recipient.getGroupId().isPresent()) { contactNumber = recipient.getGroupId().get().toString(); } else if (recipient.hasE164()) { - contactNumber = PhoneNumberFormatter.prettyPrint(recipient.getE164().or("")); + contactNumber = PhoneNumberFormatter.prettyPrint(recipient.getE164().orElse("")); } else if (!recipient.isDistributionList()) { - contactNumber = recipient.getEmail().or(""); + contactNumber = recipient.getEmail().orElse(""); } if (recipient.isMyStory()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java index 29fabb137..b032e2bbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsCursorRows.java @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListPartialRecord; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; +import org.whispersystems.signalservice.api.util.OptionalUtil; /** * Helper utility for generating cursors and cursor rows for subclasses of {@link AbstractContactsCursorLoader}. @@ -49,7 +49,7 @@ public final class ContactsCursorRows { */ public static @NonNull Object[] forRecipient(@NonNull Context context, @NonNull Recipient recipient) { String stringId = recipient.isGroup() ? recipient.requireGroupId().toString() - : recipient.getE164().transform(PhoneNumberFormatter::prettyPrint).or(recipient.getEmail()).or(""); + : OptionalUtil.or(recipient.getE164().map(PhoneNumberFormatter::prettyPrint), recipient.getEmail()).orElse(""); return new Object[]{recipient.getId().serialize(), recipient.getDisplayName(context), diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsDatabase.java index f846858a0..0a294fc76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/ContactsDatabase.java @@ -35,13 +35,13 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; /** @@ -415,7 +415,7 @@ public class ContactsDatabase { if (idCursor != null) idCursor.close(); } - return Optional.absent(); + return Optional.empty(); } private @Nullable String getDisplayName(long contactId) { 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 5e6b9dfb5..ac83817cc 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.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/RecipientsEditor.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/RecipientsEditor.java index 39d829df6..9aa3c5103 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/RecipientsEditor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/RecipientsEditor.java @@ -39,6 +39,7 @@ import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientsFormatter; +import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.ArrayList; import java.util.List; @@ -189,7 +190,7 @@ public class RecipientsEditor extends AppCompatMultiAutoCompleteTextView { public static CharSequence contactToToken(@NonNull Context context, @NonNull Recipient c) { String name = c.getDisplayName(context); - String number = c.getE164().or(c.getEmail()).or(""); + String number = OptionalUtil.or(c.getE164(), c.getEmail()).orElse(""); SpannableString s = new SpannableString(RecipientsFormatter.formatNameAndNumber(name, number)); int len = s.length(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto.java index 586c0f7fa..eec617576 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/FallbackPhoto.java @@ -13,7 +13,6 @@ import androidx.core.graphics.drawable.DrawableCompat; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.avatar.Avatars; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; -import org.thoughtcrime.securesms.util.ViewUtil; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java index 4dfb241c4..1812801b1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GeneratedContactPhoto.java @@ -17,7 +17,6 @@ import org.thoughtcrime.securesms.avatar.Avatar; import org.thoughtcrime.securesms.avatar.AvatarRenderer; import org.thoughtcrime.securesms.avatar.Avatars; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; -import org.thoughtcrime.securesms.util.ContextUtil; import org.thoughtcrime.securesms.util.NameUtil; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java index a02f66581..2d3d27dad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/GroupRecordContactPhoto.java @@ -12,11 +12,11 @@ import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.profiles.AvatarHelper; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; +import java.util.Optional; public final class GroupRecordContactPhoto implements ContactPhoto { diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java index 6046d025a..c21393258 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/avatars/TransparentContactPhoto.java @@ -8,7 +8,6 @@ import androidx.core.content.ContextCompat; import com.makeramen.roundedimageview.RoundedDrawable; -import org.jetbrains.annotations.NotNull; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java index 265f90c8d..6fbb3ec54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactDiscoveryV2.java @@ -34,7 +34,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.UUID; /** * Uses CDS to map E164's to UUIDs. diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactHolder.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactHolder.java index 8635f326c..9af2cb316 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/ContactHolder.java @@ -8,10 +8,10 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.profiles.ProfileName; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.LinkedList; import java.util.List; +import java.util.Optional; final class ContactHolder { @@ -46,7 +46,7 @@ final class ContactHolder { phoneNumberRecord.getContactPhotoUri(), phoneNumberRecord.getContactLabel(), phoneNumberRecord.getPhoneType(), - Optional.fromNullable(phoneNumberRecord.getContactUri()).transform(Uri::toString).orNull()); + Optional.ofNullable(phoneNumberRecord.getContactUri()).map(Uri::toString).orElse(null)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java index e2f635b26..c773cdcbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/DirectoryHelper.java @@ -28,8 +28,6 @@ import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase.BulkOperationsHandle; import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.whispersystems.libsignal.SignalProtocolAddress; -import org.whispersystems.signalservice.api.push.ACI; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceContactUpdateJob; import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; @@ -50,10 +48,11 @@ import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; +import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; +import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.services.ProfileService; import org.whispersystems.signalservice.api.util.UuidUtil; @@ -67,6 +66,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelper.java b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelper.java index 66ab81f69..175ba1c13 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contacts/sync/FuzzyPhoneNumberHelper.java @@ -13,7 +13,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.UUID; /** * A helper class to match a single number with multiple possible registered numbers. An example is diff --git a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactModelMapper.java b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactModelMapper.java index 99194e078..494488487 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactModelMapper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/contactshare/ContactModelMapper.java @@ -4,12 +4,12 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.PointerAttachment; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.shared.SharedContact; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import static org.thoughtcrime.securesms.contactshare.Contact.Avatar; import static org.thoughtcrime.securesms.contactshare.Contact.Email; @@ -67,19 +67,19 @@ public class ContactModelMapper { } public static Contact remoteToLocal(@NonNull SharedContact sharedContact) { - Name name = new Name(sharedContact.getName().getDisplay().orNull(), - sharedContact.getName().getGiven().orNull(), - sharedContact.getName().getFamily().orNull(), - sharedContact.getName().getPrefix().orNull(), - sharedContact.getName().getSuffix().orNull(), - sharedContact.getName().getMiddle().orNull()); + Name name = new Name(sharedContact.getName().getDisplay().orElse(null), + sharedContact.getName().getGiven().orElse(null), + sharedContact.getName().getFamily().orElse(null), + sharedContact.getName().getPrefix().orElse(null), + sharedContact.getName().getSuffix().orElse(null), + sharedContact.getName().getMiddle().orElse(null)); List phoneNumbers = new LinkedList<>(); if (sharedContact.getPhone().isPresent()) { for (SharedContact.Phone phone : sharedContact.getPhone().get()) { phoneNumbers.add(new Phone(phone.getValue(), remoteToLocalType(phone.getType()), - phone.getLabel().orNull())); + phone.getLabel().orElse(null))); } } @@ -88,7 +88,7 @@ public class ContactModelMapper { for (SharedContact.Email email : sharedContact.getEmail().get()) { emails.add(new Email(email.getValue(), remoteToLocalType(email.getType()), - email.getLabel().orNull())); + email.getLabel().orElse(null))); } } @@ -96,14 +96,14 @@ public class ContactModelMapper { if (sharedContact.getAddress().isPresent()) { for (SharedContact.PostalAddress postalAddress : sharedContact.getAddress().get()) { postalAddresses.add(new PostalAddress(remoteToLocalType(postalAddress.getType()), - postalAddress.getLabel().orNull(), - postalAddress.getStreet().orNull(), - postalAddress.getPobox().orNull(), - postalAddress.getNeighborhood().orNull(), - postalAddress.getCity().orNull(), - postalAddress.getRegion().orNull(), - postalAddress.getPostcode().orNull(), - postalAddress.getCountry().orNull())); + postalAddress.getLabel().orElse(null), + postalAddress.getStreet().orElse(null), + postalAddress.getPobox().orElse(null), + postalAddress.getNeighborhood().orElse(null), + postalAddress.getCity().orElse(null), + postalAddress.getRegion().orElse(null), + postalAddress.getPostcode().orElse(null), + postalAddress.getCountry().orElse(null))); } } @@ -115,7 +115,7 @@ public class ContactModelMapper { avatar = new Avatar(null, attachment, isProfile); } - return new Contact(name, sharedContact.getOrganization().orNull(), phoneNumbers, emails, postalAddresses, avatar); + return new Contact(name, sharedContact.getOrganization().orElse(null), phoneNumbers, emails, postalAddresses, avatar); } private static Phone.Type remoteToLocalType(SharedContact.Phone.Type type) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/BadDecryptLearnMoreDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/BadDecryptLearnMoreDialog.java index 7cd214320..613b0a76e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/BadDecryptLearnMoreDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/BadDecryptLearnMoreDialog.java @@ -15,8 +15,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.database.model.MessageRecord; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; /** * A dialog fragment that shows when you click 'learn more' on a {@link MessageRecord#isBadDecryptType()}. diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java index 3dba64639..62f88980c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java @@ -40,7 +40,6 @@ import androidx.recyclerview.widget.RecyclerView; import com.google.android.exoplayer2.MediaItem; -import org.signal.core.util.DimensionUnit; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.signal.paging.PagingController; @@ -63,7 +62,6 @@ import org.thoughtcrime.securesms.util.ProjectionList; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ViewUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -74,6 +72,7 @@ import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; /** @@ -280,8 +279,8 @@ public class ConversationAdapter conversationViewHolder.getBindable().bind(lifecycleOwner, conversationMessage, - Optional.fromNullable(previousMessage != null ? previousMessage.getMessageRecord() : null), - Optional.fromNullable(nextMessage != null ? nextMessage.getMessageRecord() : null), + Optional.ofNullable(previousMessage != null ? previousMessage.getMessageRecord() : null), + Optional.ofNullable(nextMessage != null ? nextMessage.getMessageRecord() : null), glideRequests, locale, selected, diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 20f678654..1881dcd72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -170,7 +170,6 @@ import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.task.ProgressDialogAsyncTask; import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.InputStream; @@ -180,6 +179,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -570,7 +570,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect } else if (isSelf) { conversationBanner.setSubtitle(context.getString(R.string.ConversationFragment__you_can_add_notes_for_yourself_in_this_conversation)); } else { - String subtitle = recipient.getE164().transform(PhoneNumberFormatter::prettyPrint).orNull(); + String subtitle = recipient.getE164().map(PhoneNumberFormatter::prettyPrint).orElse(null); if (subtitle == null || subtitle.equals(title)) { conversationBanner.hideSubtitle(); @@ -1055,7 +1055,7 @@ public class ConversationFragment extends LoggingFragment implements Multiselect private void performSave(final MediaMmsMessageRecord message) { List attachments = Stream.of(message.getSlideDeck().getSlides()) .filter(s -> s.getUri() != null && (s.hasImage() || s.hasVideo() || s.hasAudio() || s.hasDocument())) - .map(s -> new SaveAttachmentTask.Attachment(s.getUri(), s.getContentType(), message.getDateSent(), s.getFileName().orNull())) + .map(s -> new SaveAttachmentTask.Attachment(s.getUri(), s.getContentType(), message.getDateSent(), s.getFileName().orElse(null))) .toList(); if (!Util.isEmpty(attachments)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java index 7dd279259..259dfa4ac 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationGroupViewModel.java @@ -119,7 +119,7 @@ final class ConversationGroupViewModel extends ViewModel { if (recipient != null && recipient.isGroup()) { Application context = ApplicationDependencies.getApplication(); GroupDatabase groupDatabase = SignalDatabase.groups(); - return groupDatabase.getGroup(recipient.getId()).orNull(); + return groupDatabase.getGroup(recipient.getId()).orElse(null); } else { return null; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java index f4a1a7fc3..18c62630e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItem.java @@ -135,7 +135,6 @@ import org.thoughtcrime.securesms.util.VibrateUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.NullableStub; import org.thoughtcrime.securesms.util.views.Stub; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collections; @@ -143,6 +142,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -2080,7 +2080,7 @@ public final class ConversationItem extends RelativeLayout implements BindableCo intent.putExtra(MediaPreviewActivity.THREAD_ID_EXTRA, messageRecord.getThreadId()); intent.putExtra(MediaPreviewActivity.DATE_EXTRA, messageRecord.getTimestamp()); intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize()); - intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orNull()); + intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orElse(null)); intent.putExtra(MediaPreviewActivity.IS_VIDEO_GIF, slide.isVideoGif()); intent.putExtra(MediaPreviewActivity.LEFT_IS_RECENT_EXTRA, false); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java index 811a54d5e..0caa16980 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemBodyBubble.java @@ -17,7 +17,6 @@ import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.Util; import java.util.Collections; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Set; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback.java index 55339a4a1..2126219b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationItemSwipeCallback.java @@ -11,8 +11,6 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; -import org.thoughtcrime.securesms.giph.mp4.GiphyMp4DisplayUpdater; -import org.thoughtcrime.securesms.giph.mp4.GiphyMp4Playable; import org.thoughtcrime.securesms.util.AccessibilityUtil; import org.thoughtcrime.securesms.util.ServiceUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java index 8369d3e2a..148b6b1f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationParentFragment.java @@ -108,9 +108,6 @@ import org.thoughtcrime.securesms.PromptMmsActivity; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.ShortcutLauncherActivity; import org.thoughtcrime.securesms.TransportOption; -import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel; -import org.thoughtcrime.securesms.database.model.StoryType; -import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.TombstoneAttachment; import org.thoughtcrime.securesms.audio.AudioRecorder; @@ -127,6 +124,7 @@ import org.thoughtcrime.securesms.components.TypingStatusSender; import org.thoughtcrime.securesms.components.emoji.EmojiEventListener; import org.thoughtcrime.securesms.components.emoji.EmojiStrings; import org.thoughtcrime.securesms.components.emoji.MediaKeyboard; +import org.thoughtcrime.securesms.components.emoji.RecentEmojiPageModel; import org.thoughtcrime.securesms.components.identity.UnverifiedBannerView; import org.thoughtcrime.securesms.components.location.SignalPlace; import org.thoughtcrime.securesms.components.mention.MentionAnnotation; @@ -179,6 +177,7 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.ReactionRecord; import org.thoughtcrime.securesms.database.model.StickerRecord; +import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.GroupCallPeekEvent; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; @@ -292,11 +291,11 @@ import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.Stub; +import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; import org.thoughtcrime.securesms.wallpaper.ChatWallpaperDimLevelUtil; import org.whispersystems.libsignal.InvalidMessageException; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalSessionLock; import java.io.IOException; @@ -306,6 +305,7 @@ import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -805,19 +805,19 @@ public class ConversationParentFragment extends Fragment } long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); boolean initiating = threadId == -1; - QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orNull(); + QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orElse(null); SlideDeck slideDeck = new SlideDeck(); List mentions = new ArrayList<>(result.getMentions()); for (Media mediaItem : result.getNonUploadedMedia()) { if (MediaUtil.isVideoType(mediaItem.getMimeType())) { - slideDeck.addSlide(new VideoSlide(requireContext(), mediaItem.getUri(), mediaItem.getSize(), mediaItem.isVideoGif(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.getCaption().orNull(), mediaItem.getTransformProperties().orNull())); + slideDeck.addSlide(new VideoSlide(requireContext(), mediaItem.getUri(), mediaItem.getSize(), mediaItem.isVideoGif(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.getCaption().orElse(null), mediaItem.getTransformProperties().orElse(null))); } else if (MediaUtil.isGif(mediaItem.getMimeType())) { - slideDeck.addSlide(new GifSlide(requireContext(), mediaItem.getUri(), mediaItem.getSize(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.isBorderless(), mediaItem.getCaption().orNull())); + slideDeck.addSlide(new GifSlide(requireContext(), mediaItem.getUri(), mediaItem.getSize(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.isBorderless(), mediaItem.getCaption().orElse(null))); } else if (MediaUtil.isImageType(mediaItem.getMimeType())) { - slideDeck.addSlide(new ImageSlide(requireContext(), mediaItem.getUri(), mediaItem.getMimeType(), mediaItem.getSize(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.isBorderless(), mediaItem.getCaption().orNull(), null, mediaItem.getTransformProperties().orNull())); + slideDeck.addSlide(new ImageSlide(requireContext(), mediaItem.getUri(), mediaItem.getMimeType(), mediaItem.getSize(), mediaItem.getWidth(), mediaItem.getHeight(), mediaItem.isBorderless(), mediaItem.getCaption().orElse(null), null, mediaItem.getTransformProperties().orElse(null))); } else { Log.w(TAG, "Asked to send an unexpected mimeType: '" + mediaItem.getMimeType() + "'. Skipping."); } @@ -1954,7 +1954,7 @@ public class ConversationParentFragment extends Fragment } private void updateDefaultSubscriptionId(Optional defaultSubscriptionId) { - Log.i(TAG, "updateDefaultSubscriptionId(" + defaultSubscriptionId.orNull() + ")"); + Log.i(TAG, "updateDefaultSubscriptionId(" + defaultSubscriptionId.orElse(null) + ")"); sendButton.setDefaultSubscriptionId(defaultSubscriptionId); } @@ -2598,7 +2598,7 @@ public class ConversationParentFragment extends Fragment mimeType = mediaType.toFallbackMimeType(); } - Media media = new Media(uri, mimeType, 0, width, height, 0, 0, borderless, videoGif, Optional.absent(), Optional.absent(), Optional.absent()); + Media media = new Media(uri, mimeType, 0, width, height, 0, 0, borderless, videoGif, Optional.empty(), Optional.empty(), Optional.empty()); startActivityForResult(MediaSelectionActivity.editor(requireContext(), sendButton.getSelectedTransport(), Collections.singletonList(media), recipient.getId(), composeText.getTextTrimmed()), MEDIA_SENDER); return new SettableFuture<>(false); } else { @@ -2620,7 +2620,7 @@ public class ConversationParentFragment extends Fragment } private void sendSharedContact(List contacts) { - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); boolean initiating = threadId == -1; @@ -2862,7 +2862,7 @@ public class ConversationParentFragment extends Fragment private MediaConstraints getCurrentMediaConstraints() { return sendButton.getSelectedTransport().getType() == Type.TEXTSECURE ? MediaConstraints.getPushMediaConstraints() - : MediaConstraints.getMmsMediaConstraints(sendButton.getSelectedTransport().getSimSubscriptionId().or(-1)); + : MediaConstraints.getMmsMediaConstraints(sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1)); } private void markLastSeen() { @@ -2923,7 +2923,7 @@ public class ConversationParentFragment extends Fragment String message = getMessage(); TransportOption transport = sendButton.getSelectedTransport(); boolean forceSms = (recipient.isForceSmsSelection() || sendButton.isManualSelection()) && transport.isSms(); - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); boolean initiating = threadId == -1; boolean needsSplit = !transport.isSms() && message.length() > transport.calculateCharacters(message).maxPrimaryMessageSize; @@ -2961,7 +2961,7 @@ public class ConversationParentFragment extends Fragment private void sendMediaMessage(@NonNull MediaSendActivityResult result) { long thread = this.threadId; long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); - QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orNull(); + QuoteModel quote = result.isViewOnce() ? null : inputPanel.getQuote().orElse(null); List mentions = new ArrayList<>(result.getMentions()); OutgoingMediaMessage message = new OutgoingMediaMessage(recipient.get(), new SlideDeck(), result.getBody(), System.currentTimeMillis(), -1, expiresIn, result.isViewOnce(), distributionType, result.getStoryType(), null, quote, Collections.emptyList(), Collections.emptyList(), mentions); OutgoingMediaMessage secureMessage = new OutgoingSecureMediaMessage(message); @@ -2995,7 +2995,7 @@ public class ConversationParentFragment extends Fragment forceSms, getMessage(), attachmentManager.buildSlideDeck(), - inputPanel.getQuote().orNull(), + inputPanel.getQuote().orElse(null), Collections.emptyList(), linkPreviews, composeText.getMentions(), @@ -3179,7 +3179,7 @@ public class ConversationParentFragment extends Fragment protected Void doInBackground(Void... params) { RecipientDatabase recipientDatabase = SignalDatabase.recipients(); - recipientDatabase.setDefaultSubscriptionId(recipient.getId(), transportOption.getSimSubscriptionId().or(-1)); + recipientDatabase.setDefaultSubscriptionId(recipient.getId(), transportOption.getSimSubscriptionId().orElse(-1)); if (!recipient.resolve().isPushGroup()) { recipientDatabase.setForceSmsSelection(recipient.getId(), recipient.get().getRegistered() == RegisteredState.REGISTERED && transportOption.isSms()); @@ -3321,7 +3321,7 @@ public class ConversationParentFragment extends Fragment private void sendVoiceNote(@NonNull Uri uri, long size) { boolean forceSms = sendButton.isManualSelection() && sendButton.getSelectedTransport().isSms(); boolean initiating = threadId == -1; - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); AudioSlide audioSlide = new AudioSlide(requireContext(), uri, size, MediaUtil.AUDIO_AAC, true); SlideDeck slideDeck = new SlideDeck(); @@ -3331,7 +3331,7 @@ public class ConversationParentFragment extends Fragment forceSms, "", slideDeck, - inputPanel.getQuote().orNull(), + inputPanel.getQuote().orElse(null), Collections.emptyList(), Collections.emptyList(), composeText.getMentions(), @@ -3361,14 +3361,14 @@ public class ConversationParentFragment extends Fragment private void sendSticker(@NonNull StickerLocator stickerLocator, @NonNull String contentType, @NonNull Uri uri, long size, boolean clearCompose) { if (sendButton.getSelectedTransport().isSms()) { - Media media = new Media(uri, contentType, System.currentTimeMillis(), StickerSlide.WIDTH, StickerSlide.HEIGHT, size, 0, false, false, Optional.absent(), Optional.absent(), Optional.absent()); + Media media = new Media(uri, contentType, System.currentTimeMillis(), StickerSlide.WIDTH, StickerSlide.HEIGHT, size, 0, false, false, Optional.empty(), Optional.empty(), Optional.empty()); Intent intent = MediaSelectionActivity.editor(requireContext(), sendButton.getSelectedTransport(), Collections.singletonList(media), recipient.getId(), composeText.getTextTrimmed()); startActivityForResult(intent, MEDIA_SENDER); return; } long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); boolean initiating = threadId == -1; TransportOption transport = sendButton.getSelectedTransport(); SlideDeck slideDeck = new SlideDeck(); @@ -3996,7 +3996,7 @@ public class ConversationParentFragment extends Fragment } long expiresIn = TimeUnit.SECONDS.toMillis(recipient.get().getExpiresInSeconds()); - int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().or(-1); + int subscriptionId = sendButton.getSelectedTransport().getSimSubscriptionId().orElse(-1); boolean initiating = threadId == -1; SlideDeck slideDeck = new SlideDeck(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java index a16e50e83..5f6ba9339 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationRepository.java @@ -18,9 +18,9 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.BubbleUtil; import org.thoughtcrime.securesms.util.ConversationUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; +import java.util.Optional; import java.util.concurrent.Executor; class ConversationRepository { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java index 551c82a58..5c8885cdd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationTitleView.java @@ -19,7 +19,6 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.avatar.view.AvatarView; import org.thoughtcrime.securesms.badges.BadgeImageView; -import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.database.model.StoryViewState; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.LiveRecipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index f99c292ae..22cf8e2e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -24,19 +24,16 @@ import com.google.common.collect.Sets; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.views.AutoRounder; -import org.thoughtcrime.securesms.util.views.Stub; -import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.conversation.colors.Colorizer; import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart; import org.thoughtcrime.securesms.conversation.ui.error.EnableCallNotificationSettingsDialog; -import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.model.GroupCallUpdateDetailsUtil; +import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.model.InMemoryMessageRecord; import org.thoughtcrime.securesms.database.model.LiveUpdateMessage; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.UpdateDescription; +import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; @@ -49,13 +46,15 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.push.ACI; +import org.thoughtcrime.securesms.util.views.AutoRounder; +import org.thoughtcrime.securesms.util.views.Stub; +import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.whispersystems.signalservice.api.push.ServiceId; import java.util.Collection; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; @@ -73,9 +72,9 @@ public final class ConversationUpdateItem extends FrameLayout private Stub donateButtonStub; private View background; private ConversationMessage conversationMessage; - private Recipient conversationRecipient; - private Optional nextMessageRecord; - private MessageRecord messageRecord; + private Recipient conversationRecipient; + private Optional nextMessageRecord; + private MessageRecord messageRecord; private boolean isMessageRequestAccepted; private LiveData displayBody; private EventListener eventListener; @@ -407,7 +406,7 @@ public final class ConversationUpdateItem extends FrameLayout actionButton.setText(R.string.ConversationUpdateItem_view); actionButton.setOnClickListener(v -> { if (eventListener != null) { - eventListener.onViewGroupDescriptionChange(conversationRecipient.getGroupId().orNull(), conversationMessage.getMessageRecord().getGroupV2DescriptionUpdate(), isMessageRequestAccepted); + eventListener.onViewGroupDescriptionChange(conversationRecipient.getGroupId().orElse(null), conversationMessage.getMessageRecord().getGroupV2DescriptionUpdate(), isMessageRequestAccepted); } }); } else if (conversationMessage.getMessageRecord().isBadDecryptType() && diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java index 8e3e83eb8..da400ba3a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationViewModel.java @@ -52,7 +52,6 @@ import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.livedata.Store; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; import java.util.HashMap; @@ -60,6 +59,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -323,12 +323,12 @@ public class ConversationViewModel extends ViewModel { } @NonNull LiveData> getNameColorsMap() { - LiveData recipient = Transformations.switchMap(recipientId, r -> Recipient.live(r).getLiveData()); - LiveData> group = Transformations.map(recipient, Recipient::getGroupId); + LiveData recipient = Transformations.switchMap(recipientId, r -> Recipient.live(r).getLiveData()); + LiveData> group = Transformations.map(recipient, Recipient::getGroupId); LiveData> groupMembers = Transformations.switchMap(group, g -> { //noinspection CodeBlock2Expr - return g.transform(this::getSessionGroupRecipients) - .or(() -> new DefaultValueLiveData<>(Collections.emptySet())); + return g.map(this::getSessionGroupRecipients) + .orElseGet(() -> new DefaultValueLiveData<>(Collections.emptySet())); }); return Transformations.map(groupMembers, members -> { @@ -363,7 +363,7 @@ public class ConversationViewModel extends ViewModel { @NonNull LiveData> getActiveNotificationProfile() { final Observable> activeProfile = Observable.combineLatest(Observable.interval(0, 30, TimeUnit.SECONDS), notificationProfilesRepository.getProfiles(), (interval, profiles) -> profiles) - .map(profiles -> Optional.fromNullable(NotificationProfiles.getActiveProfile(profiles))); + .map(profiles -> Optional.ofNullable(NotificationProfiles.getActiveProfile(profiles))); return LiveDataReactiveStreams.fromPublisher(activeProfile.toFlowable(BackpressureStrategy.LATEST)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java index b7674943f..1cea1e3c1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ShowAdminsBottomSheetDialog.java @@ -30,7 +30,6 @@ import java.util.List; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Single; -import io.reactivex.rxjava3.disposables.Disposable; import io.reactivex.rxjava3.schedulers.Schedulers; /** @@ -95,7 +94,7 @@ public final class ShowAdminsBottomSheetDialog extends BottomSheetDialogFragment private static @NonNull List getAdmins(@NonNull Context context, @NonNull GroupId groupId) { return SignalDatabase.groups() .getGroup(groupId) - .transform(GroupDatabase.GroupRecord::getAdmins) - .or(Collections.emptyList()); + .map(GroupDatabase.GroupRecord::getAdmins) + .orElse(Collections.emptyList()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/NameColors.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/NameColors.kt index c499e4a2f..bf4142b46 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/NameColors.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/colors/NameColors.kt @@ -11,9 +11,7 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry.FullMember import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.DefaultValueLiveData -import org.whispersystems.libsignal.util.guava.Optional -import java.util.HashMap -import java.util.HashSet +import java.util.Optional object NameColors { @@ -28,8 +26,8 @@ object NameColors { val recipient = Transformations.switchMap(recipientId) { r: RecipientId? -> Recipient.live(r!!).liveData } val group = Transformations.map(recipient) { obj: Recipient -> obj.groupId } val groupMembers = Transformations.switchMap(group) { g: Optional -> - g.transform { groupId: GroupId -> this.getSessionGroupRecipients(groupId, sessionMemberCache) } - .or { DefaultValueLiveData(emptySet()) } + g.map { groupId: GroupId -> this.getSessionGroupRecipients(groupId, sessionMemberCache) } + .orElseGet { DefaultValueLiveData(emptySet()) } } return Transformations.map(groupMembers) { members: Set? -> val sorted = Stream.of(members) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/Multiselect.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/Multiselect.kt index baa5e9274..2d84bb952 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/Multiselect.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/Multiselect.kt @@ -94,7 +94,7 @@ object Multiselect { val options = TransportOptions(context, true) options.setDefaultTransport(TransportOption.Type.SMS) - val mmsConstraints = MediaConstraints.getMmsMediaConstraints(options.selectedTransport.simSubscriptionId.or(-1)) + val mmsConstraints = MediaConstraints.getMmsMediaConstraints(options.selectedTransport.simSubscriptionId.orElse(-1)) return mmsConstraints.isSatisfied(context, attachment) || mmsConstraints.canResize(attachment) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt index cfc29a655..37ec5e9be 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardFragmentArgs.kt @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.mms.PartAuthority import org.thoughtcrime.securesms.sharing.MultiShareArgs -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import java.util.function.Consumer /** @@ -134,9 +134,9 @@ class MultiselectForwardFragmentArgs( 0, isBorderless, isVideoGif, - Optional.absent(), - Optional.fromNullable(caption), - Optional.absent() + Optional.empty(), + Optional.ofNullable(caption), + Optional.empty() ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardRepository.kt index 7b7952fd9..d6454b746 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/mutiselect/forward/MultiselectForwardRepository.kt @@ -11,7 +11,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sharing.MultiShareArgs import org.thoughtcrime.securesms.sharing.MultiShareSender import org.thoughtcrime.securesms.sharing.ShareContactAndThread -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional class MultiselectForwardRepository(context: Context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/EnableCallNotificationSettingsDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/EnableCallNotificationSettingsDialog.java index f8075d8f0..3235baa99 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/EnableCallNotificationSettingsDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/EnableCallNotificationSettingsDialog.java @@ -29,7 +29,6 @@ import org.thoughtcrime.securesms.conversation.ConversationFragment; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.util.DeviceProperties; -import org.thoughtcrime.securesms.util.TextSecurePreferences; /** * Provide basic steps to fix potential call notification issues based on what we can detect on the system diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java index f0f834b27..ede5b7683 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeAdapter.java @@ -15,7 +15,6 @@ import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.components.FromTextView; -import org.thoughtcrime.securesms.database.IdentityDatabase; import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.AlwaysChangedDiffUtil; @@ -69,7 +68,7 @@ final class SafetyNumberChangeAdapter extends ListAdapterabsent(); + return Optional.empty(); } }, reminder -> { if (reminder.isPresent() && getActivity() != null && !isRemoving()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java index 4a1157652..d2ff08809 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItem.java @@ -54,7 +54,6 @@ import org.thoughtcrime.securesms.components.DeliveryStatusView; import org.thoughtcrime.securesms.components.FromTextView; import org.thoughtcrime.securesms.components.TypingIndicatorView; import org.thoughtcrime.securesms.components.emoji.EmojiStrings; -import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.database.MmsSmsColumns; import org.thoughtcrime.securesms.database.SmsDatabase; @@ -79,7 +78,6 @@ import org.thoughtcrime.securesms.util.SearchUtil; import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import java.util.Collections; import java.util.Locale; import java.util.Set; @@ -244,7 +242,7 @@ public final class ConversationListItem extends ConstraintLayout this.highlightSubstring = highlightSubstring; fromView.setText(SearchUtil.getHighlightedSpan(locale, SpanUtil::getMediumBoldSpan, new SpannableString(contact.getDisplayName(getContext())), highlightSubstring, SearchUtil.MATCH_ALL)); - setSubjectViewText(SearchUtil.getHighlightedSpan(locale, SpanUtil::getBoldSpan, contact.getE164().or(""), highlightSubstring, SearchUtil.MATCH_ALL)); + setSubjectViewText(SearchUtil.getHighlightedSpan(locale, SpanUtil::getBoldSpan, contact.getE164().orElse(""), highlightSubstring, SearchUtil.MATCH_ALL)); dateView.setText(""); archivedView.setVisibility(GONE); unreadIndicator.setVisibility(GONE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemAction.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemAction.java index 8ded68af3..9f4df2a9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemAction.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemAction.java @@ -9,7 +9,6 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.BindableConversationListItem; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemInboxZero.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemInboxZero.java index 771054271..aec9e9e84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemInboxZero.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListItemInboxZero.java @@ -11,7 +11,6 @@ import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import org.thoughtcrime.securesms.BindableConversationListItem; -import org.thoughtcrime.securesms.conversationlist.model.Conversation; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.mms.GlideRequests; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.java index 361f2ae50..9acf853a5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListSearchAdapter.java @@ -11,11 +11,11 @@ import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.conversationlist.model.ConversationSet; -import org.thoughtcrime.securesms.search.MessageResult; -import org.thoughtcrime.securesms.search.SearchResult; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.mms.GlideRequests; import org.thoughtcrime.securesms.recipients.Recipient; +import org.thoughtcrime.securesms.search.MessageResult; +import org.thoughtcrime.securesms.search.SearchResult; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java index 8724e5c14..3d2cd5117 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/ConversationListViewModel.java @@ -33,13 +33,13 @@ import org.thoughtcrime.securesms.util.Debouncer; import org.thoughtcrime.securesms.util.ThrottledDebouncer; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.paging.Invalidator; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java index cab89f491..e73974d30 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversationlist/model/UnreadPaymentsLiveData.java @@ -11,14 +11,14 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; +import java.util.Optional; import java.util.concurrent.Executor; /** * LiveData encapsulating the logic to watch the Payments database for changes to payments and supply - * a list of unread payments to listeners. If there are no unread payments, Optional.absent() will be passed + * a list of unread payments to listeners. If there are no unread payments, Optional.empty() will be passed * through instead. */ public final class UnreadPaymentsLiveData extends LiveData> { @@ -45,7 +45,7 @@ public final class UnreadPaymentsLiveData extends LiveData postValue(Optional.fromNullable(getUnreadPayments()))); + executor.execute(() -> postValue(Optional.ofNullable(getUnreadPayments()))); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/ProfileKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/ProfileKeyUtil.java index 6d1d3b04e..de09ed873 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/ProfileKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/ProfileKeyUtil.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.crypto; -import android.content.Context; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -11,9 +9,9 @@ import org.signal.zkgroup.profiles.ProfileKey; import org.signal.zkgroup.profiles.ProfileKeyCredential; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Locale; +import java.util.Optional; public final class ProfileKeyUtil { @@ -63,7 +61,7 @@ public final class ProfileKeyUtil { } public static @NonNull Optional profileKeyOptional(@Nullable byte[] profileKey) { - return Optional.fromNullable(profileKeyOrNull(profileKey)); + return Optional.ofNullable(profileKeyOrNull(profileKey)); } public static @NonNull Optional profileKeyOptionalOrThrow(@NonNull byte[] profileKey) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/SenderKeyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/SenderKeyUtil.java index d0d66a48e..d4d65289d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/SenderKeyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/SenderKeyUtil.java @@ -5,11 +5,9 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.recipients.Recipient; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.signalservice.api.SignalSessionLock; import org.whispersystems.signalservice.api.push.DistributionId; -import org.whispersystems.signalservice.api.push.SignalServiceAddress; public final class SenderKeyUtil { private SenderKeyUtil() {} diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java index 90befe887..6047e7629 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.ecc.Curve; import org.whispersystems.libsignal.ecc.ECPublicKey; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; @@ -36,6 +35,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; public class UnidentifiedAccessUtil { @@ -112,10 +112,10 @@ public class UnidentifiedAccessUtil { ourUnidentifiedAccessCertificate)))); } catch (InvalidCertificateException e) { Log.w(TAG, e); - access.add(Optional.absent()); + access.add(Optional.empty()); } } else { - access.add(Optional.absent()); + access.add(Optional.empty()); } } @@ -145,10 +145,10 @@ public class UnidentifiedAccessUtil { ourUnidentifiedAccessCertificate))); } - return Optional.absent(); + return Optional.empty(); } catch (InvalidCertificateException e) { Log.w(TAG, e); - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java index 7efd9df63..5bb37b9c5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalBaseIdentityKeyStore.java @@ -22,12 +22,12 @@ import org.thoughtcrime.securesms.util.LRUCache; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.state.IdentityKeyStore; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ServiceId; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -153,10 +153,10 @@ public class SignalBaseIdentityKeyStore { public @NonNull Optional getIdentityRecord(@NonNull Recipient recipient) { if (recipient.hasServiceId()) { IdentityStoreRecord record = cache.get(recipient.requireServiceId().toString()); - return Optional.fromNullable(record).transform(r -> r.toIdentityRecord(recipient.getId())); + return Optional.ofNullable(record).map(r -> r.toIdentityRecord(recipient.getId())); } else { Log.w(TAG, "[getIdentityRecord] No ServiceId for " + recipient.getId()); - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java index 16e678e79..3e2391b72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalIdentityKeyStore.java @@ -11,9 +11,9 @@ import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.IdentityKeyPair; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.state.IdentityKeyStore; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; +import java.util.Optional; import java.util.function.Supplier; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java index 2f82d4c68..a5cf862f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/storage/SignalSenderKeyStore.java @@ -5,11 +5,10 @@ import android.content.Context; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.SignalDatabase; -import org.whispersystems.signalservice.api.SignalServiceSenderKeyStore; -import org.whispersystems.signalservice.api.push.DistributionId; -import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.groups.state.SenderKeyRecord; +import org.whispersystems.signalservice.api.SignalServiceSenderKeyStore; +import org.whispersystems.signalservice.api.push.DistributionId; import java.util.Collection; import java.util.Set; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ApnDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ApnDatabase.java index 025520081..3b5de3780 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ApnDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ApnDatabase.java @@ -27,11 +27,11 @@ import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.mms.LegacyMmsConnection.Apn; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; +import java.util.Optional; /** * Database to query APN and MMSC information @@ -168,7 +168,7 @@ public class ApnDatabase { TextSecurePreferences.getUseCustomMmscUsername(context), TextSecurePreferences.getUseCustomMmscPassword(context)); - if (TextUtils.isEmpty(result.getMmsc())) return Optional.absent(); + if (TextUtils.isEmpty(result.getMmsc())) return Optional.empty(); else return Optional.of(result); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java index b21796dfc..1c258f6ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/AttachmentDatabase.java @@ -62,7 +62,6 @@ import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.video.EncryptedMediaDataSource; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.internal.util.JsonUtil; import java.io.File; @@ -81,6 +80,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -1130,7 +1130,7 @@ public class AttachmentDatabase extends Database { null, "1")) { - if (cursor == null || !cursor.moveToFirst()) return Optional.absent(); + if (cursor == null || !cursor.moveToFirst()) return Optional.empty(); if (cursor.getCount() > 0) { DataInfo dataInfo = new DataInfo(new File(CursorUtil.requireString(cursor, DATA)), @@ -1139,7 +1139,7 @@ public class AttachmentDatabase extends Database { hash); return Optional.of(dataInfo); } else { - return Optional.absent(); + return Optional.empty(); } } } @@ -1487,7 +1487,7 @@ public class AttachmentDatabase extends Database { } public static @NonNull TransformProperties forSentMediaQuality(@NonNull Optional currentProperties, @NonNull SentMediaQuality sentMediaQuality) { - TransformProperties existing = currentProperties.or(empty()); + TransformProperties existing = currentProperties.orElse(empty()); return new TransformProperties(existing.skipTransform, existing.videoTrim, existing.videoTrimStartTimeUs, existing.videoTrimEndTimeUs, sentMediaQuality.getCode()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/CursorExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/database/CursorExtensions.kt index eed1353e5..0a5992a75 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/CursorExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/CursorExtensions.kt @@ -2,7 +2,7 @@ package org.thoughtcrime.securesms.database import android.database.Cursor import org.thoughtcrime.securesms.util.CursorUtil -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional fun Cursor.requireString(column: String): String? { return CursorUtil.requireString(this, column) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java index 4b277a456..16426a6ed 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/GroupDatabase.java @@ -36,7 +36,6 @@ import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.groupsv2.GroupChangeReconstruct; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; @@ -57,6 +56,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -138,7 +138,7 @@ private static final String[] GROUP_PROJECTION = { return getGroup(cursor); } - return Optional.absent(); + return Optional.empty(); } } @@ -168,7 +168,7 @@ private static final String[] GROUP_PROJECTION = { return getGroup(cursor); } - return Optional.absent(); + return Optional.empty(); } } @@ -190,7 +190,7 @@ private static final String[] GROUP_PROJECTION = { if (cursor.moveToFirst()) { return getGroup(cursor); } else { - return Optional.absent(); + return Optional.empty(); } } } @@ -204,7 +204,7 @@ private static final String[] GROUP_PROJECTION = { if (cursor.moveToFirst()) { return getGroup(cursor); } else { - return Optional.absent(); + return Optional.empty(); } } } @@ -234,7 +234,7 @@ private static final String[] GROUP_PROJECTION = { Optional getGroup(Cursor cursor) { Reader reader = new Reader(cursor); - return Optional.fromNullable(reader.getCurrent()); + return Optional.ofNullable(reader.getCurrent()); } /** @@ -431,8 +431,8 @@ private static final String[] GROUP_PROJECTION = { @WorkerThread public @NonNull List getGroupMembers(@NonNull GroupId groupId, @NonNull MemberSet memberSet) { if (groupId.isV2()) { - return getGroup(groupId).transform(g -> g.requireV2GroupProperties().getMemberRecipients(memberSet)) - .or(Collections.emptyList()); + return getGroup(groupId).map(g -> g.requireV2GroupProperties().getMemberRecipients(memberSet)) + .orElse(Collections.emptyList()); } else { List currentMembers = getCurrentMembers(groupId); List recipients = new ArrayList<>(currentMembers.size()); @@ -560,7 +560,7 @@ private static final String[] GROUP_PROJECTION = { contentValues.put(AVATAR_ID, avatar.getRemoteId().getV2().get()); contentValues.put(AVATAR_KEY, avatar.getKey()); contentValues.put(AVATAR_CONTENT_TYPE, avatar.getContentType()); - contentValues.put(AVATAR_DIGEST, avatar.getDigest().orNull()); + contentValues.put(AVATAR_DIGEST, avatar.getDigest().orElse(null)); } else { contentValues.put(AVATAR_ID, 0); } @@ -623,7 +623,7 @@ private static final String[] GROUP_PROJECTION = { contentValues.put(AVATAR_ID, avatar.getRemoteId().getV2().get()); contentValues.put(AVATAR_CONTENT_TYPE, avatar.getContentType()); contentValues.put(AVATAR_KEY, avatar.getKey()); - contentValues.put(AVATAR_DIGEST, avatar.getDigest().orNull()); + contentValues.put(AVATAR_DIGEST, avatar.getDigest().orElse(null)); } else { contentValues.put(AVATAR_ID, 0); } @@ -1006,7 +1006,7 @@ private static final String[] GROUP_PROJECTION = { CursorUtil.requireBlob(cursor, V2_MASTER_KEY), CursorUtil.requireInt(cursor, V2_REVISION), CursorUtil.requireBlob(cursor, V2_DECRYPTED_GROUP), - CursorUtil.getString(cursor, DISTRIBUTION_ID).transform(DistributionId::from).orNull()); + CursorUtil.getString(cursor, DISTRIBUTION_ID).map(DistributionId::from).orElse(null)); } @Override @@ -1287,8 +1287,8 @@ private static final String[] GROUP_PROJECTION = { } return DecryptedGroupUtil.findMemberByUuid(getDecryptedGroup().getMembersList(), serviceId.get().uuid()) - .transform(t -> t.getRole() == Member.Role.ADMINISTRATOR) - .or(false); + .map(t -> t.getRole() == Member.Role.ADMINISTRATOR) + .orElse(false); } public @NonNull List getAdmins(@NonNull List members) { @@ -1305,14 +1305,14 @@ private static final String[] GROUP_PROJECTION = { DecryptedGroup decryptedGroup = getDecryptedGroup(); return DecryptedGroupUtil.findMemberByUuid(decryptedGroup.getMembersList(), serviceId.get().uuid()) - .transform(member -> member.getRole() == Member.Role.ADMINISTRATOR + .map(member -> member.getRole() == Member.Role.ADMINISTRATOR ? MemberLevel.ADMINISTRATOR : MemberLevel.FULL_MEMBER) - .or(() -> DecryptedGroupUtil.findPendingByUuid(decryptedGroup.getPendingMembersList(), serviceId.get().uuid()) - .transform(m -> MemberLevel.PENDING_MEMBER) - .or(() -> DecryptedGroupUtil.findRequestingByUuid(decryptedGroup.getRequestingMembersList(), serviceId.get().uuid()) - .transform(m -> MemberLevel.REQUESTING_MEMBER) - .or(MemberLevel.NOT_A_MEMBER))); + .orElse(DecryptedGroupUtil.findPendingByUuid(decryptedGroup.getPendingMembersList(), serviceId.get().uuid()) + .map(m -> MemberLevel.PENDING_MEMBER) + .orElse(DecryptedGroupUtil.findRequestingByUuid(decryptedGroup.getRequestingMembersList(), serviceId.get().uuid()) + .map(m -> MemberLevel.REQUESTING_MEMBER) + .orElse(MemberLevel.NOT_A_MEMBER))); } public List getMemberRecipients(@NonNull MemberSet memberSet) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java index 8c8ccbfe4..233bf51d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/IdentityDatabase.java @@ -36,10 +36,10 @@ import org.thoughtcrime.securesms.util.IdentityUtil; import org.thoughtcrime.securesms.util.SqlUtil; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.UuidUtil; import java.io.IOException; +import java.util.Optional; public class IdentityDatabase extends Database { @@ -211,7 +211,7 @@ public class IdentityDatabase extends Database { throw new AssertionError(e); } - return Optional.absent(); + return Optional.empty(); } private boolean hasMatchingKey(@NonNull String addressName, IdentityKey identityKey) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java index e75ae895d..e29a33111 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/JobDatabase.java @@ -8,8 +8,8 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; -import net.zetetic.database.sqlcipher.SQLiteOpenHelper; import net.zetetic.database.sqlcipher.SQLiteDatabase; +import net.zetetic.database.sqlcipher.SQLiteOpenHelper; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java index 786ed5230..f371b2b27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/KeyValueDatabase.java @@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.keyvalue.KeyValueDataSet; import org.thoughtcrime.securesms.keyvalue.KeyValuePersistentStorage; import org.thoughtcrime.securesms.util.CursorUtil; -import java.io.File; import java.util.Collection; import java.util.Map; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java index 0c194c1a8..6050d5531 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MessageDatabase.java @@ -37,7 +37,6 @@ import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.Closeable; import java.io.IOException; @@ -48,6 +47,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java index 95ca97381..5c9cdfbbb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.java @@ -85,7 +85,6 @@ import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ServiceId; import java.io.IOException; @@ -98,6 +97,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -1136,7 +1136,7 @@ public class MmsDatabase extends MessageDatabase { @Override public void markAsInsecure(long messageId) { - updateMailboxBitmask(messageId, Types.SECURE_MESSAGE_BIT, 0, Optional.absent()); + updateMailboxBitmask(messageId, Types.SECURE_MESSAGE_BIT, 0, Optional.empty()); } @Override @@ -1378,7 +1378,7 @@ public class MmsDatabase extends MessageDatabase { cursor.getString(cursor.getColumnIndexOrThrow(TRANSACTION_ID)), cursor.getInt(cursor.getColumnIndexOrThrow(SUBSCRIPTION_ID)))); } else { - return Optional.absent(); + return Optional.empty(); } } finally { if (cursor != null) @@ -1611,7 +1611,7 @@ public class MmsDatabase extends MessageDatabase { if (retrieved.isPushMessage() && isDuplicate(retrieved, threadId)) { Log.w(TAG, "Ignoring duplicate media message (" + retrieved.getSentTimeMillis() + ")"); - return Optional.absent(); + return Optional.empty(); } long messageId = insertMediaMessage(threadId, retrieved.getBody(), retrieved.getAttachments(), quoteAttachments, retrieved.getSharedContacts(), retrieved.getLinkPreviews(), retrieved.getMentions(), retrieved.getMessageRanges(), contentValues, null, true); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java index 196907eae..23db36e93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/PushDatabase.java @@ -8,13 +8,13 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.Base64; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.internal.util.Util; import java.io.Closeable; import java.io.IOException; +import java.util.Optional; public class PushDatabase extends Database { @@ -57,8 +57,8 @@ public class PushDatabase extends Database { } else { ContentValues values = new ContentValues(); values.put(TYPE, envelope.getType()); - values.put(SOURCE_UUID, envelope.getSourceUuid().orNull()); - values.put(SOURCE_E164, envelope.getSourceE164().orNull()); + values.put(SOURCE_UUID, envelope.getSourceUuid().orElse(null)); + values.put(SOURCE_E164, envelope.getSourceE164().orElse(null)); values.put(DEVICE_ID, envelope.getSourceDevice()); values.put(LEGACY_MSG, envelope.hasLegacyMessage() ? Base64.encodeBytes(envelope.getLegacyMessage()) : ""); values.put(CONTENT, envelope.hasContent() ? Base64.encodeBytes(envelope.getContent()) : ""); @@ -134,15 +134,15 @@ public class PushDatabase extends Database { envelope.hasLegacyMessage() ? Base64.encodeBytes(envelope.getLegacyMessage()) : "", envelope.hasContent() ? Base64.encodeBytes(envelope.getContent()) : "", String.valueOf(envelope.getTimestamp()), - String.valueOf(envelope.getSourceUuid().orNull()), - String.valueOf(envelope.getSourceE164().orNull()) }; + String.valueOf(envelope.getSourceUuid().orElse(null)), + String.valueOf(envelope.getSourceE164().orElse(null)) }; try (Cursor cursor = database.query(TABLE_NAME, null, query, args, null, null, null)) { if (cursor != null && cursor.moveToFirst()) { return Optional.of(cursor.getLong(cursor.getColumnIndexOrThrow(ID))); } else { - return Optional.absent(); + return Optional.empty(); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt index e0ce7f20b..15ae47cba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.kt @@ -11,6 +11,7 @@ import com.google.protobuf.ByteString import com.google.protobuf.InvalidProtocolBufferException import net.zetetic.database.sqlcipher.SQLiteConstraintException import org.signal.core.util.logging.Log +import org.signal.core.util.or import org.signal.storageservice.protos.groups.local.DecryptedGroup import org.signal.zkgroup.InvalidInputException import org.signal.zkgroup.profiles.ProfileKey @@ -79,7 +80,6 @@ import org.thoughtcrime.securesms.wallpaper.WallpaperStorage import org.whispersystems.libsignal.IdentityKey import org.whispersystems.libsignal.InvalidKeyException import org.whispersystems.libsignal.util.Pair -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.profiles.SignalServiceProfile import org.whispersystems.signalservice.api.push.ACI import org.whispersystems.signalservice.api.push.PNI @@ -96,6 +96,7 @@ import java.util.Arrays import java.util.Collections import java.util.LinkedList import java.util.Objects +import java.util.Optional import java.util.concurrent.TimeUnit import kotlin.math.max @@ -489,12 +490,12 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } private fun fetchRecipient(serviceId: ServiceId?, e164: String?, highTrust: Boolean, changeSelf: Boolean): RecipientFetch { - val byE164 = e164?.let { getByE164(it) } ?: Optional.absent() - val byAci = serviceId?.let { getByServiceId(it) } ?: Optional.absent() + val byE164 = e164?.let { getByE164(it) } ?: Optional.empty() + val byAci = serviceId?.let { getByServiceId(it) } ?: Optional.empty() var logs = LogBundle( - bySid = byAci.transform { id -> RecipientLogDetails(id = id) }.orNull(), - byE164 = byE164.transform { id -> RecipientLogDetails(id = id) }.orNull(), + bySid = byAci.map { id -> RecipientLogDetails(id = id) }.orElse(null), + byE164 = byE164.map { id -> RecipientLogDetails(id = id) }.orElse(null), label = "L0" ) @@ -797,7 +798,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : val recipientId: RecipientId if (id < 0) { Log.w(TAG, "[applyStorageSyncContactInsert] Failed to insert. Possibly merging.") - recipientId = getAndPossiblyMerge(if (insert.address.hasValidServiceId()) insert.address.serviceId else null, insert.address.number.orNull(), true) + recipientId = getAndPossiblyMerge(if (insert.address.hasValidServiceId()) insert.address.serviceId else null, insert.address.number.orElse(null), true) db.update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(recipientId)) } else { recipientId = RecipientId.from(id) @@ -834,7 +835,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : var recipientId = getByColumn(STORAGE_SERVICE_ID, Base64.encodeBytes(update.old.id.raw)).get() Log.w(TAG, "[applyStorageSyncContactUpdate] Found user $recipientId. Possibly merging.") - recipientId = getAndPossiblyMerge(if (update.new.address.hasValidServiceId()) update.new.address.serviceId else null, update.new.address.number.orNull(), true) + recipientId = getAndPossiblyMerge(if (update.new.address.hasValidServiceId()) update.new.address.serviceId else null, update.new.address.number.orElse(null), true) Log.w(TAG, "[applyStorageSyncContactUpdate] Merged into $recipientId") db.update(TABLE_NAME, values, ID_WHERE, SqlUtil.buildArgs(recipientId)) @@ -940,10 +941,10 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } fun applyStorageSyncAccountUpdate(update: StorageRecordUpdate) { - val profileName = ProfileName.fromParts(update.new.givenName.orNull(), update.new.familyName.orNull()) - val localKey = ProfileKeyUtil.profileKeyOptional(update.old.profileKey.orNull()) - val remoteKey = ProfileKeyUtil.profileKeyOptional(update.new.profileKey.orNull()) - val profileKey = remoteKey.or(localKey).transform { obj: ProfileKey -> obj.serialize() }.transform { source: ByteArray? -> Base64.encodeBytes(source!!) }.orNull() + val profileName = ProfileName.fromParts(update.new.givenName.orElse(null), update.new.familyName.orElse(null)) + val localKey = ProfileKeyUtil.profileKeyOptional(update.old.profileKey.orElse(null)) + val remoteKey = ProfileKeyUtil.profileKeyOptional(update.new.profileKey.orElse(null)) + val profileKey = remoteKey.or(localKey).map { obj: ProfileKey -> obj.serialize() }.map { source: ByteArray? -> Base64.encodeBytes(source!!) }.orElse(null) if (!remoteKey.isPresent) { Log.w(TAG, "Got an empty profile key while applying an account record update!") } @@ -1673,7 +1674,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : idWithWallpaper.add( Pair( RecipientId.from(cursor.requireInt(ID).toLong()), - cursor.optionalString(WALLPAPER_URI).orNull() + cursor.optionalString(WALLPAPER_URI).orElse(null) ) ) } @@ -2012,7 +2013,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : db.beginTransaction() try { for ((e164, aci) in mapping) { - var aciEntry = if (aci != null) getByServiceId(aci) else Optional.absent() + var aciEntry = if (aci != null) getByServiceId(aci) else Optional.empty() if (aciEntry.isPresent) { val idChanged = setPhoneNumber(aciEntry.get(), e164) @@ -2545,7 +2546,7 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : return if (cursor != null && cursor.moveToFirst()) { Optional.of(RecipientId.from(cursor.getLong(cursor.getColumnIndexOrThrow(ID)))) } else { - Optional.absent() + Optional.empty() } } } @@ -2694,17 +2695,17 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : val uuidValues = ContentValues().apply { put(PHONE, e164Record.e164) put(BLOCKED, e164Record.isBlocked || aciRecord.isBlocked) - put(MESSAGE_RINGTONE, Optional.fromNullable(aciRecord.messageRingtone).or(Optional.fromNullable(e164Record.messageRingtone)).transform { obj: Uri? -> obj.toString() }.orNull()) + put(MESSAGE_RINGTONE, Optional.ofNullable(aciRecord.messageRingtone).or(Optional.ofNullable(e164Record.messageRingtone)).map { obj: Uri? -> obj.toString() }.orElse(null)) put(MESSAGE_VIBRATE, if (aciRecord.messageVibrateState != VibrateState.DEFAULT) aciRecord.messageVibrateState.id else e164Record.messageVibrateState.id) - put(CALL_RINGTONE, Optional.fromNullable(aciRecord.callRingtone).or(Optional.fromNullable(e164Record.callRingtone)).transform { obj: Uri? -> obj.toString() }.orNull()) + put(CALL_RINGTONE, Optional.ofNullable(aciRecord.callRingtone).or(Optional.ofNullable(e164Record.callRingtone)).map { obj: Uri? -> obj.toString() }.orElse(null)) put(CALL_VIBRATE, if (aciRecord.callVibrateState != VibrateState.DEFAULT) aciRecord.callVibrateState.id else e164Record.callVibrateState.id) put(NOTIFICATION_CHANNEL, aciRecord.notificationChannel ?: e164Record.notificationChannel) put(MUTE_UNTIL, if (aciRecord.muteUntil > 0) aciRecord.muteUntil else e164Record.muteUntil) - put(CHAT_COLORS, Optional.fromNullable(aciRecord.chatColors).or(Optional.fromNullable(e164Record.chatColors)).transform { colors: ChatColors? -> colors!!.serialize().toByteArray() }.orNull()) + put(CHAT_COLORS, Optional.ofNullable(aciRecord.chatColors).or(Optional.ofNullable(e164Record.chatColors)).map { colors: ChatColors? -> colors!!.serialize().toByteArray() }.orElse(null)) put(AVATAR_COLOR, aciRecord.avatarColor.serialize()) - put(CUSTOM_CHAT_COLORS_ID, Optional.fromNullable(aciRecord.chatColors).or(Optional.fromNullable(e164Record.chatColors)).transform { colors: ChatColors? -> colors!!.id.longValue }.orNull()) + put(CUSTOM_CHAT_COLORS_ID, Optional.ofNullable(aciRecord.chatColors).or(Optional.ofNullable(e164Record.chatColors)).map { colors: ChatColors? -> colors!!.id.longValue }.orElse(null)) put(SEEN_INVITE_REMINDER, e164Record.insightsBannerTier.id) - put(DEFAULT_SUBSCRIPTION_ID, e164Record.getDefaultSubscriptionId().or(-1)) + put(DEFAULT_SUBSCRIPTION_ID, e164Record.getDefaultSubscriptionId().orElse(-1)) put(MESSAGE_EXPIRATION_TIME, if (aciRecord.expireMessages > 0) aciRecord.expireMessages else e164Record.expireMessages) put(REGISTERED, RegisteredState.REGISTERED.id) put(SYSTEM_GIVEN_NAME, e164Record.systemProfileName.givenName) @@ -2746,18 +2747,18 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : private fun getValuesForStorageContact(contact: SignalContactRecord, isInsert: Boolean): ContentValues { return ContentValues().apply { - val profileName = ProfileName.fromParts(contact.givenName.orNull(), contact.familyName.orNull()) - val username = contact.username.orNull() + val profileName = ProfileName.fromParts(contact.givenName.orElse(null), contact.familyName.orElse(null)) + val username = contact.username.orElse(null) if (contact.address.hasValidServiceId()) { put(SERVICE_ID, contact.address.serviceId.toString()) } - put(PHONE, contact.address.number.orNull()) + put(PHONE, contact.address.number.orElse(null)) put(PROFILE_GIVEN_NAME, profileName.givenName) put(PROFILE_FAMILY_NAME, profileName.familyName) put(PROFILE_JOINED_NAME, profileName.toString()) - put(PROFILE_KEY, contact.profileKey.transform { source -> Base64.encodeBytes(source) }.orNull()) + put(PROFILE_KEY, contact.profileKey.map { source -> Base64.encodeBytes(source) }.orElse(null)) put(USERNAME, if (TextUtils.isEmpty(username)) null else username) put(PROFILE_SHARING, if (contact.isProfileSharingEnabled) "1" else "0") put(BLOCKED, if (contact.isBlocked) "1" else "0") @@ -2961,13 +2962,13 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } private fun getSyncExtras(cursor: Cursor): RecipientRecord.SyncExtras { - val storageProtoRaw = cursor.optionalString(STORAGE_PROTO).orNull() + val storageProtoRaw = cursor.optionalString(STORAGE_PROTO).orElse(null) val storageProto = if (storageProtoRaw != null) Base64.decodeOrThrow(storageProtoRaw) else null - val archived = cursor.optionalBoolean(ThreadDatabase.ARCHIVED).or(false) - val forcedUnread = cursor.optionalInt(ThreadDatabase.READ).transform { status: Int -> status == ThreadDatabase.ReadStatus.FORCED_UNREAD.serialize() }.or(false) - val groupMasterKey = cursor.optionalBlob(GroupDatabase.V2_MASTER_KEY).transform { GroupUtil.requireMasterKey(it) }.orNull() - val identityKey = cursor.optionalString(IDENTITY_KEY).transform { Base64.decodeOrThrow(it) }.orNull() - val identityStatus = cursor.optionalInt(IDENTITY_STATUS).transform { VerifiedStatus.forState(it) }.or(VerifiedStatus.DEFAULT) + val archived = cursor.optionalBoolean(ThreadDatabase.ARCHIVED).orElse(false) + val forcedUnread = cursor.optionalInt(ThreadDatabase.READ).map { status: Int -> status == ThreadDatabase.ReadStatus.FORCED_UNREAD.serialize() }.orElse(false) + val groupMasterKey = cursor.optionalBlob(GroupDatabase.V2_MASTER_KEY).map { GroupUtil.requireMasterKey(it) }.orElse(null) + val identityKey = cursor.optionalString(IDENTITY_KEY).map { Base64.decodeOrThrow(it) }.orElse(null) + val identityStatus = cursor.optionalInt(IDENTITY_STATUS).map { VerifiedStatus.forState(it) }.orElse(VerifiedStatus.DEFAULT) return RecipientRecord.SyncExtras(storageProto, groupMasterKey, identityKey, identityStatus, archived, forcedUnread) } @@ -2977,14 +2978,14 @@ open class RecipientDatabase(context: Context, databaseHelper: SignalDatabase) : } private fun getRecipientExtras(cursor: Cursor): RecipientExtras? { - return cursor.optionalBlob(EXTRAS).transform { b: ByteArray? -> + return cursor.optionalBlob(EXTRAS).map { b: ByteArray? -> try { RecipientExtras.parseFrom(b) } catch (e: InvalidProtocolBufferException) { Log.w(TAG, e) throw AssertionError(e) } - }.orNull() + }.orElse(null) } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecords.java b/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecords.java index 3c762fe79..bddc44c41 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecords.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RemappedRecords.java @@ -4,12 +4,12 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Collection; import java.util.LinkedHashSet; import java.util.Map; +import java.util.Optional; import java.util.Set; /** @@ -41,12 +41,12 @@ class RemappedRecords { @NonNull Optional getRecipient(@NonNull RecipientId oldId) { ensureRecipientMapIsPopulated(); - return Optional.fromNullable(recipientMap.get(oldId)); + return Optional.ofNullable(recipientMap.get(oldId)); } @NonNull Optional getThread(long oldId) { ensureThreadMapIsPopulated(); - return Optional.fromNullable(threadMap.get(oldId)); + return Optional.ofNullable(threadMap.get(oldId)); } boolean areAnyRemapped(@NonNull Collection recipientIds) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java index 23a4d15e0..453401b08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeyDatabase.java @@ -10,12 +10,11 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.SignalProtocolAddress; -import org.whispersystems.signalservice.api.push.DistributionId; import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.SqlUtil; +import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.groups.state.SenderKeyRecord; +import org.whispersystems.signalservice.api.push.DistributionId; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java index 37f066cd4..3487fa0b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SenderKeySharedDatabase.java @@ -9,11 +9,11 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.SignalProtocolAddress; -import org.whispersystems.signalservice.api.push.DistributionId; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.CursorUtil; import org.thoughtcrime.securesms.util.SqlUtil; +import org.whispersystems.libsignal.SignalProtocolAddress; +import org.whispersystems.signalservice.api.push.DistributionId; import java.util.Collection; import java.util.HashSet; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt index 50d3d5f67..6033dda67 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SessionDatabase.kt @@ -9,9 +9,6 @@ import org.whispersystems.libsignal.state.SessionRecord import org.whispersystems.signalservice.api.push.ServiceId import org.whispersystems.signalservice.api.push.SignalServiceAddress import java.io.IOException -import java.util.ArrayList -import java.util.HashMap -import java.util.LinkedHashMap import java.util.LinkedList class SessionDatabase(context: Context, databaseHelper: SignalDatabase) : Database(context, databaseHelper) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java index 1f484d5e9..ea1ff4744 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SmsDatabase.java @@ -62,7 +62,6 @@ import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.Closeable; import java.io.IOException; @@ -74,6 +73,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -1176,7 +1176,7 @@ public class SmsDatabase extends MessageDatabase { if (message.isPush() && isDuplicate(message, threadId)) { Log.w(TAG, "Duplicate message (" + message.getSentTimestampMillis() + "), ignoring..."); - return Optional.absent(); + return Optional.empty(); } else { SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); long messageId = db.insert(TABLE_NAME, null, values); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt index 4d305158a..8ba857020 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SqlCipherErrorHandler.kt @@ -10,10 +10,8 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.util.CursorUtil -import java.lang.Error import java.util.concurrent.CountDownLatch import java.util.concurrent.atomic.AtomicReference -import kotlin.text.StringBuilder /** * The default error handler wipes the file. This one instead prints some diagnostics and then crashes so the original corrupt file isn't lost. diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index 19448e59e..e77ecdb66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -57,13 +57,12 @@ import org.thoughtcrime.securesms.util.JsonUtils; import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; import org.whispersystems.signalservice.api.storage.SignalContactRecord; import org.whispersystems.signalservice.api.storage.SignalGroupV1Record; import org.whispersystems.signalservice.api.storage.SignalGroupV2Record; +import org.whispersystems.signalservice.api.util.OptionalUtil; import java.io.Closeable; import java.io.IOException; @@ -78,6 +77,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import kotlin.Unit; @@ -1452,7 +1452,9 @@ public class ThreadDatabase extends Database { if (!record.isMms() || record.isMmsNotification() || record.isGroupAction()) return null; SlideDeck slideDeck = ((MediaMmsMessageRecord)record).getSlideDeck(); - Slide thumbnail = Optional.fromNullable(slideDeck.getThumbnailSlide()).or(Optional.fromNullable(slideDeck.getStickerSlide())).orNull(); + Slide thumbnail = OptionalUtil.or(Optional.ofNullable(slideDeck.getThumbnailSlide()), + Optional.ofNullable(slideDeck.getStickerSlide())) + .orElse(null); if (thumbnail != null && !((MmsMessageRecord) record).isViewOnce()) { return thumbnail.getUri(); @@ -1613,7 +1615,7 @@ public class ThreadDatabase extends Database { if (group != null) { RecipientDetails details = new RecipientDetails(group.getTitle(), null, - group.hasAvatar() ? Optional.of(group.getAvatarId()) : Optional.absent(), + group.hasAvatar() ? Optional.of(group.getAvatarId()) : Optional.empty(), false, false, recipientSettings.getRegistered(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java index 4869c6601..35949fac2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/UnknownStorageIdDatabase.java @@ -11,9 +11,9 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.SqlUtil; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.storage.SignalStorageRecord; import org.whispersystems.signalservice.api.storage.StorageId; +import org.whispersystems.signalservice.api.util.Preconditions; import java.io.IOException; import java.util.ArrayList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatchSet.java b/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatchSet.java index 9903bcb6e..a76315f78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatchSet.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/documents/IdentityKeyMismatchSet.java @@ -4,8 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; import java.util.Set; public class IdentityKeyMismatchSet implements Document { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailureSet.java b/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailureSet.java index 51622a9fc..824b0ecb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailureSet.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/documents/NetworkFailureSet.java @@ -4,8 +4,6 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; import java.util.Set; public class NetworkFailureSet implements Document { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java index 11e468e70..eff389542 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/PreKeyMigrationHelper.java @@ -17,7 +17,6 @@ import org.thoughtcrime.securesms.database.SignedPreKeyDatabase; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.JsonUtils; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.InvalidMessageException; import org.whispersystems.libsignal.state.PreKeyRecord; import org.whispersystems.libsignal.state.SignedPreKeyRecord; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java index 69d21db2c..6534ae0e2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/identity/IdentityRecordList.java @@ -2,8 +2,8 @@ package org.thoughtcrime.securesms.database.identity; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.database.IdentityDatabase.VerifiedStatus; +import org.thoughtcrime.securesms.database.model.IdentityRecord; import org.thoughtcrime.securesms.recipients.Recipient; import java.util.ArrayList; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java index a2e21387a..5c27ee13e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/DeviceListLoader.java @@ -9,7 +9,6 @@ import androidx.annotation.VisibleForTesting; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.devicelist.Device; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.AsyncLoader; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java index 25617240a..26da50d08 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/loaders/GroupedThreadMediaLoader.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.database.loaders; import android.content.Context; -import android.database.ContentObserver; import android.database.Cursor; import android.util.SparseArray; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java index 86e4fff08..de93c5e2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducer.java @@ -24,9 +24,7 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.groups.GV2AccessLevelUtil; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.StringUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.util.UuidUtil; @@ -34,6 +32,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.UUID; final class GroupsV2UpdateMessageProducer { 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 201e92953..990d369a5 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 @@ -24,9 +24,9 @@ import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.ThemeUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Function; import java.util.List; +import java.util.function.Function; public final class LiveUpdateMessage { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java index a60df1f6f..b33a5b15d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/MediaMmsMessageRecord.java @@ -37,12 +37,12 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList; import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.mms.SlideDeck; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; 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 86ccf4b78..455ad0954 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 @@ -58,7 +58,6 @@ import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.GroupUtil; import org.thoughtcrime.securesms.util.StringUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Function; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.util.UuidUtil; @@ -70,6 +69,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; import java.util.UUID; +import java.util.function.Function; /** * The base class for message record models that are displayed in @@ -314,7 +314,7 @@ public abstract class MessageRecord extends DisplayRecord { @NonNull Function stringGenerator, @DrawableRes int iconResource) { - return UpdateDescription.mentioning(Collections.singletonList(recipient.getServiceId().or(ServiceId.UNKNOWN)), + return UpdateDescription.mentioning(Collections.singletonList(recipient.getServiceId().orElse(ServiceId.UNKNOWN)), () -> stringGenerator.apply(recipient.resolve()), iconResource); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java index a1512f1fb..61346f1f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java @@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import java.util.Collections; import java.util.HashSet; -import java.util.LinkedList; /** * Represents the message record model for MMS messages that are diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt index 21083b449..c397a7a4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/RecipientRecord.kt @@ -13,15 +13,14 @@ import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState -import org.thoughtcrime.securesms.database.model.RecipientRecord.SyncExtras import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.profiles.ProfileName import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.push.PNI import org.whispersystems.signalservice.api.push.ServiceId +import java.util.Optional /** * Database model for [RecipientDatabase]. @@ -87,7 +86,7 @@ data class RecipientRecord( ) { fun getDefaultSubscriptionId(): Optional { - return if (defaultSubscriptionId != -1) Optional.of(defaultSubscriptionId) else Optional.absent() + return if (defaultSubscriptionId != -1) Optional.of(defaultSubscriptionId) else Optional.empty() } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java index 7f6a9546e..79c89e357 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/SmsMessageRecord.java @@ -30,7 +30,6 @@ import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.recipients.Recipient; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java index ee42ef580..772b93dff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/StickerPackRecord.java @@ -4,9 +4,8 @@ import android.text.TextUtils; import androidx.annotation.NonNull; -import org.whispersystems.libsignal.util.guava.Optional; - import java.util.Objects; +import java.util.Optional; /** * Represents a record for a sticker pack in the {@link org.thoughtcrime.securesms.database.StickerDatabase}. @@ -29,8 +28,8 @@ public final class StickerPackRecord { { this.packId = packId; this.packKey = packKey; - this.title = TextUtils.isEmpty(title) ? Optional.absent() : Optional.of(title); - this.author = TextUtils.isEmpty(author) ? Optional.absent() : Optional.of(author); + this.title = TextUtils.isEmpty(title) ? Optional.empty() : Optional.of(title); + this.author = TextUtils.isEmpty(author) ? Optional.empty() : Optional.of(author); this.cover = cover; this.installed = installed; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java index f5a7d6fb1..9bccf282c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/ThreadRecord.java @@ -28,7 +28,7 @@ import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.database.ThreadDatabase.Extra; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java index 2e5d1df4e..29f64033f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/UpdateDescription.java @@ -8,16 +8,13 @@ import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.ThreadUtil; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; -import java.util.UUID; /** * Contains a list of people mentioned in an update message and a function to create the update message. diff --git a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountFragment.java b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountFragment.java index 213563dd1..66dd97346 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountFragment.java @@ -37,7 +37,9 @@ import org.thoughtcrime.securesms.components.LabeledEditText; import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.text.AfterTextChanged; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class DeleteAccountFragment extends Fragment { 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 1b1e5af76..62d272823 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountRepository.java @@ -37,7 +37,7 @@ class DeleteAccountRepository { } @NonNull String getRegionDisplayName(@NonNull String region) { - return PhoneNumberFormatter.getRegionDisplayName(region).or(""); + return PhoneNumberFormatter.getRegionDisplayName(region).orElse(""); } int getRegionCountryCode(@NonNull String region) { @@ -132,7 +132,7 @@ class DeleteAccountRepository { } private static @NonNull Country getCountryForRegion(@NonNull String region) { - return new Country(PhoneNumberFormatter.getRegionDisplayName(region).or(""), + return new Country(PhoneNumberFormatter.getRegionDisplayName(region).orElse(""), PhoneNumberUtil.getInstance().getCountryCodeForRegion(region), region); } 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 d4a1291d4..c74328a86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/delete/DeleteAccountViewModel.java @@ -20,20 +20,20 @@ import org.thoughtcrime.securesms.payments.Balance; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.SingleLiveEvent; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.FormatterOptions; import org.whispersystems.signalservice.api.payments.Money; import java.util.List; +import java.util.Optional; public class DeleteAccountViewModel extends ViewModel { - private final DeleteAccountRepository repository; - private final List allCountries; - private final LiveData> filteredCountries; - private final MutableLiveData regionCode; - private final LiveData countryDisplayName; - private final MutableLiveData nationalNumber; + private final DeleteAccountRepository repository; + private final List allCountries; + private final LiveData> filteredCountries; + private final MutableLiveData regionCode; + private final LiveData countryDisplayName; + private final MutableLiveData nationalNumber; private final MutableLiveData query; private final SingleLiveEvent events; private final LiveData> walletBalance; @@ -141,7 +141,7 @@ public class DeleteAccountViewModel extends ViewModel { if (amount.isPositive()) { return Optional.of(amount.toString(FormatterOptions.defaults())); } else { - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java index 71df9d35c..00d8471bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencies.java @@ -29,8 +29,8 @@ import org.thoughtcrime.securesms.payments.Payments; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.LiveRecipientCache; import org.thoughtcrime.securesms.revealable.ViewOnceMessageManager; -import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.ExpiringMessageManager; +import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.PendingRetryReceiptManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; @@ -40,8 +40,8 @@ import org.thoughtcrime.securesms.util.EarlyMessageCache; import org.thoughtcrime.securesms.util.FrameRateTracker; import org.thoughtcrime.securesms.util.Hex; import org.thoughtcrime.securesms.util.IasKeyStore; -import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; import org.thoughtcrime.securesms.video.exo.GiphyMp4Cache; +import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; import org.thoughtcrime.securesms.webrtc.audio.AudioManagerCompat; import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.SignalServiceAccountManager; diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index e0f39f141..a1ba7e845 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -14,10 +14,10 @@ import org.thoughtcrime.securesms.components.TypingStatusRepository; import org.thoughtcrime.securesms.components.TypingStatusSender; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; import org.thoughtcrime.securesms.crypto.storage.SignalBaseIdentityKeyStore; -import org.thoughtcrime.securesms.crypto.storage.SignalServiceDataStoreImpl; -import org.thoughtcrime.securesms.crypto.storage.SignalServiceAccountDataStoreImpl; -import org.thoughtcrime.securesms.crypto.storage.SignalSenderKeyStore; import org.thoughtcrime.securesms.crypto.storage.SignalIdentityKeyStore; +import org.thoughtcrime.securesms.crypto.storage.SignalSenderKeyStore; +import org.thoughtcrime.securesms.crypto.storage.SignalServiceAccountDataStoreImpl; +import org.thoughtcrime.securesms.crypto.storage.SignalServiceDataStoreImpl; import org.thoughtcrime.securesms.crypto.storage.TextSecurePreKeyStore; import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore; import org.thoughtcrime.securesms.database.DatabaseObserver; @@ -53,8 +53,8 @@ import org.thoughtcrime.securesms.push.SecurityEventListener; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.LiveRecipientCache; import org.thoughtcrime.securesms.revealable.ViewOnceMessageManager; -import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.ExpiringMessageManager; +import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.PendingRetryReceiptManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; @@ -66,10 +66,9 @@ import org.thoughtcrime.securesms.util.EarlyMessageCache; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.FrameRateTracker; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; import org.thoughtcrime.securesms.video.exo.GiphyMp4Cache; +import org.thoughtcrime.securesms.video.exo.SimpleExoPlayerPool; import org.thoughtcrime.securesms.webrtc.audio.AudioManagerCompat; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.SignalServiceDataStore; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; @@ -86,6 +85,7 @@ import org.whispersystems.signalservice.api.util.UptimeSleepTimer; import org.whispersystems.signalservice.api.websocket.WebSocketFactory; import org.whispersystems.signalservice.internal.websocket.WebSocketConnection; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -379,7 +379,7 @@ public class ApplicationDependencyProvider implements ApplicationDependencies.Pr public WebSocketConnection createUnidentifiedWebSocket() { return new WebSocketConnection("unidentified", provideSignalServiceNetworkAccess().getConfiguration(), - Optional.absent(), + Optional.empty(), BuildConfig.SIGNAL_AGENT, healthMonitor); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceExitActivity.java b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceExitActivity.java index 78ade870e..5c8e822f9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceExitActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceExitActivity.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.devicetransfer.olddevice; import android.app.Activity; -import android.content.Context; import android.content.Intent; import android.os.Build; import android.os.Bundle; diff --git a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceTransferLockedDialog.java b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceTransferLockedDialog.java index 26b368560..692f30154 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceTransferLockedDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/devicetransfer/olddevice/OldDeviceTransferLockedDialog.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.devicetransfer.olddevice; import android.app.Dialog; import android.os.Bundle; -import android.view.Window; import androidx.annotation.NonNull; import androidx.annotation.Nullable; diff --git a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java index 541a28dfd..929b68306 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/gcm/FcmUtil.java @@ -8,8 +8,8 @@ import com.google.android.gms.tasks.Tasks; import com.google.firebase.messaging.FirebaseMessaging; import org.signal.core.util.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.concurrent.ExecutionException; public final class FcmUtil { @@ -30,6 +30,6 @@ public final class FcmUtil { Log.w(TAG, "Failed to get the token.", e.getCause()); } - return Optional.fromNullable(TextUtils.isEmpty(token) ? null : token); + return Optional.ofNullable(TextUtils.isEmpty(token) ? null : token); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4PagedDataSource.java b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4PagedDataSource.java index 2f8e669f9..843acf73e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4PagedDataSource.java +++ b/app/src/main/java/org/thoughtcrime/securesms/giph/mp4/GiphyMp4PagedDataSource.java @@ -14,11 +14,11 @@ import org.thoughtcrime.securesms.giph.model.GiphyImage; import org.thoughtcrime.securesms.giph.model.GiphyResponse; import org.thoughtcrime.securesms.net.ContentProxySelector; import org.thoughtcrime.securesms.util.JsonUtils; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -49,7 +49,7 @@ final class GiphyMp4PagedDataSource implements PagedDataSource members = new LinkedList<>(); if (group.getMembers().isPresent()) { @@ -103,7 +103,7 @@ public final class GroupV1MessageProcessor { } } - database.create(id, group.getName().orNull(), members, + database.create(id, group.getName().orElse(null), members, avatar != null && avatar.isPointer() ? avatar.asPointer() : null, null); Recipient sender = Recipient.externalHighTrustPush(context, content.getSender()); @@ -170,8 +170,8 @@ public final class GroupV1MessageProcessor { } if (group.getName().isPresent() || group.getAvatar().isPresent()) { - SignalServiceAttachment avatar = group.getAvatar().orNull(); - database.update(id, group.getName().orNull(), avatar != null ? avatar.asPointer() : null); + SignalServiceAttachment avatar = group.getAvatar().orElse(null); + database.update(id, group.getName().orElse(null), avatar != null ? avatar.asPointer() : null); } if (group.getName().isPresent() && group.getName().get().equals(groupRecord.getTitle())) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java index 8697e211e..89712d574 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2Authorization.java @@ -13,7 +13,6 @@ import org.whispersystems.signalservice.api.push.ACI; import java.io.IOException; import java.util.Map; -import java.util.UUID; import java.util.concurrent.TimeUnit; public class GroupsV2Authorization { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java index 484bf3f38..5d621ff97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/GroupsV2CapabilityChecker.java @@ -3,23 +3,12 @@ package org.thoughtcrime.securesms.groups; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; -import com.annimon.stream.Collectors; -import com.annimon.stream.Stream; - import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.JobManager; -import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import java.io.IOException; import java.util.Collection; import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.TimeUnit; public final class GroupsV2CapabilityChecker { 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 b0aba838b..862eefc8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/LiveGroup.java @@ -27,9 +27,7 @@ import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.Collections; import java.util.Comparator; @@ -59,7 +57,7 @@ public final class LiveGroup { this.groupDatabase = SignalDatabase.groups(); this.recipient = Transformations.switchMap(liveRecipient, LiveRecipient::getLiveData); - this.groupRecord = LiveDataUtil.filterNotNull(LiveDataUtil.mapAsync(recipient, groupRecipient -> groupDatabase.getGroup(groupRecipient.getId()).orNull())); + this.groupRecord = LiveDataUtil.filterNotNull(LiveDataUtil.mapAsync(recipient, groupRecipient -> groupDatabase.getGroup(groupRecipient.getId()).orElse(null))); this.fullMembers = mapToFullMembers(this.groupRecord); this.requestingMembers = mapToRequestingMembers(this.groupRecord); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ParcelableGroupId.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ParcelableGroupId.java index 15c93cf3c..9ff5fcb88 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ParcelableGroupId.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ParcelableGroupId.java @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.groups; import android.os.Parcel; import android.os.Parcelable; -import androidx.annotation.NonNull; import androidx.annotation.Nullable; public final class ParcelableGroupId implements Parcelable { 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 d4bdb4d9e..42713a423 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 @@ -56,8 +56,8 @@ public final class LeaveGroupDialog { SimpleTask.run(activity.getLifecycle(), () -> { GroupDatabase.V2GroupProperties groupProperties = SignalDatabase.groups() .getGroup(groupId) - .transform(GroupDatabase.GroupRecord::requireV2GroupProperties) - .orNull(); + .map(GroupDatabase.GroupRecord::requireV2GroupProperties) + .orElse(null); if (groupProperties != null && groupProperties.isAdmin(Recipient.self())) { List otherMemberRecipients = groupProperties.getMemberRecipients(GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java index afe952017..15389f4aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersActivity.java @@ -19,10 +19,10 @@ import org.thoughtcrime.securesms.groups.SelectionLimits; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; public class AddMembersActivity extends PushContactSelectionActivity { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersViewModel.java index 7076386b7..a8fef6e6f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addmembers/AddMembersViewModel.java @@ -16,7 +16,7 @@ import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.List; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java index 3aaf08a15..a210140eb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/addtogroup/AddToGroupsActivity.java @@ -19,12 +19,12 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.ContactsCursorLoader; import org.thoughtcrime.securesms.groups.ui.addtogroup.AddToGroupViewModel.Event; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.function.Consumer; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java index 69c121cf5..e625b58af 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/CreateGroupActivity.java @@ -28,10 +28,10 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.function.Consumer; import java.util.stream.Collectors; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsActivity.java index dd42c9793..82828e83a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsActivity.java @@ -7,8 +7,6 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.navigation.NavGraph; -import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import org.thoughtcrime.securesms.PassphraseRequiredActivity; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsRepository.java index 794265f8a..17c8b6b2c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsRepository.java @@ -4,7 +4,6 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.WorkerThread; import androidx.core.util.Consumer; import com.annimon.stream.Stream; @@ -14,7 +13,6 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupManager; -import org.thoughtcrime.securesms.groups.GroupsV2CapabilityChecker; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java index 113b7c8d9..85adcfe5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/creategroup/details/AddGroupDetailsViewModel.java @@ -16,10 +16,8 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.groups.ui.GroupMemberEntry; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mediasend.Media; -import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DefaultValueLiveData; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java index f2e08d4ed..e609e5b12 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/joining/GroupJoinBottomSheetDialogFragment.java @@ -27,12 +27,9 @@ import org.thoughtcrime.securesms.contacts.avatars.FallbackContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; import org.thoughtcrime.securesms.conversation.ConversationIntents; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; -import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.ui.managegroup.dialogs.GroupDescriptionDialog; import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil; import org.thoughtcrime.securesms.groups.v2.GroupInviteLinkUrl; -import org.thoughtcrime.securesms.jobs.RetrieveProfileJob; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.LongClickMovementMethod; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMemberRepository.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMemberRepository.java index 038714f80..fdf8569ff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMemberRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMemberRepository.java @@ -11,11 +11,9 @@ import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupManager; import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.AsynchronousCallback; import java.io.IOException; -import java.util.Collection; import java.util.Collections; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMembersFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMembersFragment.java index 4707f464b..858721698 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMembersFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/invitesandrequests/requesting/RequestingMembersFragment.java @@ -10,7 +10,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProvider; -import androidx.lifecycle.ViewModelProviders; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.groups.GroupId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationInitiationBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationInitiationBottomSheetDialogFragment.java index ac148f1a0..8a501a8b5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationInitiationBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/migration/GroupsV1MigrationInitiationBottomSheetDialogFragment.java @@ -21,7 +21,6 @@ import org.thoughtcrime.securesms.groups.ui.GroupMemberListView; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.BottomSheetUtil; import org.thoughtcrime.securesms.util.ThemeUtil; -import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java index 8b0493b48..7b29cea3a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/GroupCandidateHelper.java @@ -14,16 +14,15 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.groupsv2.GroupCandidate; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import java.io.IOException; import java.util.Collection; import java.util.HashSet; import java.util.Locale; +import java.util.Optional; import java.util.Set; public class GroupCandidateHelper { @@ -48,12 +47,12 @@ public class GroupCandidateHelper { { final Recipient recipient = Recipient.resolved(recipientId); - ServiceId serviceId = recipient.getServiceId().orNull(); + ServiceId serviceId = recipient.getServiceId().orElse(null); if (serviceId == null) { throw new AssertionError("Non UUID members should have need detected by now"); } - Optional profileKeyCredential = Optional.fromNullable(recipient.getProfileKeyCredential()); + Optional profileKeyCredential = Optional.ofNullable(recipient.getProfileKeyCredential()); GroupCandidate candidate = new GroupCandidate(serviceId.uuid(), profileKeyCredential); if (!candidate.hasProfileKeyCredential()) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java index 8a215df54..a578c876f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySet.java @@ -12,7 +12,6 @@ import org.signal.storageservice.protos.groups.local.DecryptedMember; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.zkgroup.InvalidInputException; import org.signal.zkgroup.profiles.ProfileKey; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.util.UuidUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java index 81ec093ce..0dbcf8de1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/groups/v2/processing/GroupsV2StateProcessor.java @@ -44,7 +44,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.IncomingGroupUpdateMessage; import org.thoughtcrime.securesms.sms.IncomingTextMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupHistoryEntry; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.groupsv2.GroupHistoryPage; @@ -64,6 +63,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Locale; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -193,7 +193,7 @@ public class GroupsV2StateProcessor { GlobalGroupState inputGroupState = null; Optional localRecord = groupDatabase.getGroup(groupId); - DecryptedGroup localState = localRecord.transform(g -> g.requireV2GroupProperties().getDecryptedGroup()).orNull(); + DecryptedGroup localState = localRecord.map(g -> g.requireV2GroupProperties().getDecryptedGroup()).orElse(null); if (signedGroupChange != null && localState != null && @@ -429,7 +429,7 @@ public class GroupsV2StateProcessor { .getResults() .get(0) .getGroup() - .orNull(); + .orElse(null); } catch (GroupNotFoundException e) { throw new GroupDoesNotExistException(e); } catch (NotInGroupException e) { @@ -530,8 +530,8 @@ public class GroupsV2StateProcessor { } for (DecryptedGroupHistoryEntry entry : groupHistoryPage.getResults()) { - DecryptedGroup group = entry.getGroup().orNull(); - DecryptedGroupChange change = ignoreServerChanges ? null : entry.getChange().orNull(); + DecryptedGroup group = entry.getGroup().orElse(null); + DecryptedGroupChange change = ignoreServerChanges ? null : entry.getChange().orElse(null); if (group != null || change != null) { history.add(new ServerGroupLogEntry(group, change)); @@ -581,9 +581,9 @@ public class GroupsV2StateProcessor { .map(ServerGroupLogEntry::getChange) .filter(c -> c != null && c.getRevision() == revisionJoinedAt) .findFirst() - .map(c -> Optional.fromNullable(UuidUtil.fromByteStringOrNull(c.getEditor())) - .transform(a -> Recipient.externalPush(ServiceId.fromByteStringOrNull(c.getEditor()), null, false))) - .orElse(Optional.absent()); + .map(c -> Optional.ofNullable(UuidUtil.fromByteStringOrNull(c.getEditor())) + .map(a -> Recipient.externalPush(ServiceId.fromByteStringOrNull(c.getEditor()), null, false))) + .orElse(Optional.empty()); if (addedByOptional.isPresent()) { Recipient addedBy = addedByOptional.get(); @@ -653,7 +653,7 @@ public class GroupsV2StateProcessor { } void storeMessage(@NonNull DecryptedGroupV2Context decryptedGroupV2Context, long timestamp) { - Optional editor = getEditor(decryptedGroupV2Context).transform(ServiceId::from); + Optional editor = getEditor(decryptedGroupV2Context).map(ServiceId::from); boolean outgoing = !editor.isPresent() || selfAci.equals(editor.get()); @@ -695,10 +695,10 @@ public class GroupsV2StateProcessor { } else { Optional pendingByUuid = DecryptedGroupUtil.findPendingByUuid(decryptedGroupV2Context.getGroupState().getPendingMembersList(), selfAci.uuid()); if (pendingByUuid.isPresent()) { - return Optional.fromNullable(UuidUtil.fromByteStringOrNull(pendingByUuid.get().getAddedByUuid())); + return Optional.ofNullable(UuidUtil.fromByteStringOrNull(pendingByUuid.get().getAddedByUuid())); } } - return Optional.absent(); + return Optional.empty(); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/help/HelpViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/help/HelpViewModel.java index d8df9f6dd..34f01fb0c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/help/HelpViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/help/HelpViewModel.java @@ -7,7 +7,9 @@ import androidx.lifecycle.ViewModel; import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogRepository; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class HelpViewModel extends ViewModel { @@ -42,7 +44,7 @@ public class HelpViewModel extends ViewModel { } int getCategoryIndex() { - return Optional.fromNullable(this.categoryIndex.getValue()).or(0); + return Optional.ofNullable(this.categoryIndex.getValue()).orElse(0); } LiveData onSubmitClicked(boolean includeDebugLogs) { @@ -51,7 +53,7 @@ public class HelpViewModel extends ViewModel { if (includeDebugLogs) { submitDebugLogRepository.buildAndSubmitLog(result -> resultLiveData.postValue(new SubmitResult(result, result.isPresent()))); } else { - resultLiveData.postValue(new SubmitResult(Optional.absent(), false)); + resultLiveData.postValue(new SubmitResult(Optional.empty(), false)); } return resultLiveData; diff --git a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java index e832647bb..72805b348 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/insights/InsightsRepository.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.insights; import android.content.Context; -import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.core.util.Consumer; @@ -11,8 +10,6 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; -import org.thoughtcrime.securesms.conversation.colors.ChatColors; -import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; import org.thoughtcrime.securesms.database.MmsSmsDatabase; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -22,9 +19,9 @@ import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; +import java.util.Optional; public class InsightsRepository implements InsightsDashboardViewModel.Repository, InsightsModalViewModel.Repository { @@ -66,7 +63,7 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository public void getUserAvatar(@NonNull Consumer avatarConsumer) { SimpleTask.run(() -> { Recipient self = Recipient.self().resolve(); - String name = Optional.fromNullable(self.getDisplayName(context)).or(""); + String name = Optional.of(self.getDisplayName(context)).orElse(""); return new InsightsUserAvatar(new ProfileContactPhoto(self, self.getProfileAvatar()), self.getAvatarColor(), @@ -78,7 +75,7 @@ public class InsightsRepository implements InsightsDashboardViewModel.Repository public void sendSmsInvite(@NonNull Recipient recipient, Runnable onSmsMessageSent) { SimpleTask.run(() -> { Recipient resolved = recipient.resolve(); - int subscriptionId = resolved.getDefaultSubscriptionId().or(-1); + int subscriptionId = resolved.getDefaultSubscriptionId().orElse(-1); String message = context.getString(R.string.InviteActivity_lets_switch_to_signal, context.getString(R.string.install_url)); MessageSender.send(context, new OutgoingTextMessage(resolved, message, subscriptionId), -1L, true, null, null); diff --git a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java index 6803dc779..b94e3efe4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/invites/InviteReminderModel.java @@ -14,8 +14,8 @@ import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.recipients.LiveRecipient; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; public final class InviteReminderModel { @@ -65,8 +65,8 @@ public final class InviteReminderModel { public @NonNull Optional getReminder() { ReminderInfo info = reminderInfo.get(); - if (info == null) return Optional.absent(); - else return Optional.fromNullable(info.reminder); + if (info == null) return Optional.empty(); + else return Optional.ofNullable(info.reminder); } public void dismissReminder() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java index 9e031a2fd..56ca66df7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/Job.java @@ -7,14 +7,12 @@ import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.util.FeatureFlags; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.UUID; -import java.util.concurrent.TimeUnit; /** * A durable unit of work. diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java index d4ccd6b42..cc8e11d1f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobManager.java @@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.util.Debouncer; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.concurrent.FilteredExecutor; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collection; @@ -27,6 +26,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.CountDownLatch; @@ -261,14 +261,14 @@ public class JobManager implements ConstraintObserver.Notifier { try { if (!latch.await(timeout, TimeUnit.MILLISECONDS)) { - return Optional.absent(); + return Optional.empty(); } } catch (InterruptedException e) { Log.w(TAG, "Interrupted during runSynchronously()", e); - return Optional.absent(); + return Optional.empty(); } - return Optional.fromNullable(resultState.get()); + return Optional.ofNullable(resultState.get()); } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java index 119dbf67b..9565bd541 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/persistence/JobStorage.java @@ -4,7 +4,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import java.util.Collection; import java.util.List; import java.util.Set; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java index 2ff1bf3ca..9e8260363 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentDownloadJob.java @@ -27,7 +27,6 @@ import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.Hex; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId; @@ -40,6 +39,7 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.TimeUnit; import okhttp3.Request; @@ -220,15 +220,15 @@ public final class AttachmentDownloadJob extends BaseJob { return new SignalServiceAttachmentPointer(attachment.getCdnNumber(), remoteId, null, key, Optional.of(Util.toIntExact(attachment.getSize())), - Optional.absent(), + Optional.empty(), 0, 0, - Optional.fromNullable(attachment.getDigest()), - Optional.fromNullable(attachment.getFileName()), + Optional.ofNullable(attachment.getDigest()), + Optional.ofNullable(attachment.getFileName()), attachment.isVoiceNote(), attachment.isBorderless(), attachment.isVideoGif(), - Optional.absent(), - Optional.fromNullable(attachment.getBlurHash()).transform(BlurHash::getHash), + Optional.empty(), + Optional.ofNullable(attachment.getBlurHash()).map(BlurHash::getHash), attachment.getUploadTimestamp()); } catch (IOException | ArithmeticException e) { Log.w(TAG, e); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java index a4153054f..9ade1ef27 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.java @@ -28,7 +28,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.NotificationController; import org.thoughtcrime.securesms.util.MediaUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; @@ -39,6 +38,7 @@ import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec; import java.io.IOException; import java.io.InputStream; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java index bcea7b411..64f98e572 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AutomaticSessionResetJob.java @@ -15,13 +15,13 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.FeatureFlags; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.io.IOException; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java index 41023f552..27dd7b53c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV1DownloadJob.java @@ -14,7 +14,6 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.util.Hex; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId; @@ -24,6 +23,7 @@ import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulRespons import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; public final class AvatarGroupsV1DownloadJob extends BaseJob { @@ -70,8 +70,8 @@ public final class AvatarGroupsV1DownloadJob extends BaseJob { String contentType = record.get().getAvatarContentType(); byte[] key = record.get().getAvatarKey(); String relay = record.get().getRelay(); - Optional digest = Optional.fromNullable(record.get().getAvatarDigest()); - Optional fileName = Optional.absent(); + Optional digest = Optional.ofNullable(record.get().getAvatarDigest()); + Optional fileName = Optional.empty(); if (avatarId == -1 || key == null) { return; @@ -85,7 +85,7 @@ public final class AvatarGroupsV1DownloadJob extends BaseJob { attachment.deleteOnExit(); SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver(); - SignalServiceAttachmentPointer pointer = new SignalServiceAttachmentPointer(0, new SignalServiceAttachmentRemoteId(avatarId), contentType, key, Optional.of(0), Optional.absent(), 0, 0, digest, fileName, false, false, false, Optional.absent(), Optional.absent(), System.currentTimeMillis()); + SignalServiceAttachmentPointer pointer = new SignalServiceAttachmentPointer(0, new SignalServiceAttachmentRemoteId(avatarId), contentType, key, Optional.of(0), Optional.empty(), 0, 0, digest, fileName, false, false, false, Optional.empty(), Optional.empty(), System.currentTimeMillis()); InputStream inputStream = receiver.retrieveAttachment(pointer, attachment, AvatarHelper.AVATAR_DOWNLOAD_FAILSAFE_MAX_SIZE); AvatarHelper.setAvatar(context, record.get().getRecipientId(), inputStream); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java index 34bae1781..55cdd5007 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AvatarGroupsV2DownloadJob.java @@ -19,7 +19,6 @@ import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.util.ByteUnit; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; @@ -28,6 +27,7 @@ import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.util.Optional; public final class AvatarGroupsV2DownloadJob extends BaseJob { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java index 88ddc9f75..7dfe46ad4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/BoostReceiptRequestResponseJob.java @@ -139,7 +139,7 @@ public class BoostReceiptRequestResponseJob extends BaseJob { receiptCredentialPresentation.serialize()) .build()); } else { - Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orNull(), true); + Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orElse(null), true); throw new RetryableException(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt index 110261262..90263cc14 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/CheckServiceReachabilityJob.kt @@ -7,10 +7,10 @@ import org.thoughtcrime.securesms.jobmanager.Data import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.keyvalue.SignalStore -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState import org.whispersystems.signalservice.internal.util.StaticCredentialsProvider import org.whispersystems.signalservice.internal.websocket.WebSocketConnection +import java.util.Optional import java.util.concurrent.TimeUnit /** 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 e9ca56468..31c87e2d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/DownloadLatestEmojiDataJob.java @@ -8,7 +8,6 @@ import androidx.annotation.Nullable; import com.annimon.stream.IntPair; import com.annimon.stream.Stream; -import com.mobilecoin.lib.util.Hex; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.components.emoji.EmojiPageModel; @@ -32,19 +31,10 @@ import org.thoughtcrime.securesms.util.ScreenDensity; import java.io.File; import java.io.IOException; -import java.io.OutputStream; import java.util.Arrays; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import okhttp3.Response; -import okhttp3.ResponseBody; -import okio.Okio; -import okio.Sink; -import okio.Source; /** * Downloads Emoji JSON and Images to local persistent storage. diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java index af4cc2d24..080f84d67 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FastJobStorage.java @@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.jobmanager.persistence.FullSpec; import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec; import org.thoughtcrime.securesms.jobmanager.persistence.JobStorage; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collections; @@ -26,6 +25,7 @@ import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Map; +import java.util.Optional; import java.util.Set; public class FastJobStorage implements JobStorage { @@ -139,7 +139,7 @@ public class FastJobStorage implements JobStorage { } private Optional getMigrationJob() { - return Optional.fromNullable(Stream.of(jobs) + return Optional.ofNullable(Stream.of(jobs) .filter(j -> Job.Parameters.MIGRATION_QUEUE_KEY.equals(j.getQueueKey())) .filter(this::firstInQueue) .findFirst() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java index c9a7caf34..cc41aadc0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/FcmRefreshJob.java @@ -40,10 +40,10 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.notifications.NotificationIds; import org.thoughtcrime.securesms.transport.RetryLaterException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import java.io.IOException; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class FcmRefreshJob extends BaseJob { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupSendJobHelper.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupSendJobHelper.java index 02240ab5b..8e3368bba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupSendJobHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupSendJobHelper.java @@ -6,12 +6,10 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.RecipientAccessList; -import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.messages.SendMessageResult; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.List; final class GroupSendJobHelper { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java index 0df36fdae..05fb752b2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/GroupV2UpdateSelfProfileKeyJob.java @@ -23,15 +23,12 @@ import org.thoughtcrime.securesms.jobmanager.impl.DecryptionsDrainedConstraint; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.util.UuidUtil; import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java index 531543464..a87240b0a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MmsDownloadJob.java @@ -38,7 +38,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -46,6 +45,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -189,7 +189,7 @@ public class MmsDownloadJob extends BaseJob { throws MmsException { MessageDatabase database = SignalDatabase.mms(); - Optional group = Optional.absent(); + Optional group = Optional.empty(); Set members = new HashSet<>(); String body = null; List attachments = new LinkedList<>(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java index dc26a9293..8a20656e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceConfigurationUpdateJob.java @@ -13,7 +13,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.multidevice.ConfigurationMessage; @@ -22,6 +21,7 @@ import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; +import java.util.Optional; public class MultiDeviceConfigurationUpdateJob extends BaseJob { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt index e0d49d753..0ca9f01c6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactSyncJob.kt @@ -75,7 +75,7 @@ class MultiDeviceContactSyncJob(parameters: Parameters, private val attachmentPo var contact: DeviceContact? = deviceContacts.read() while (contact != null) { - val recipient = Recipient.externalPush(contact.address.serviceId, contact.address.number.orNull(), true) + val recipient = Recipient.externalPush(contact.address.serviceId, contact.address.number.orElse(null), true) if (recipient.isSelf) { contact = deviceContacts.read() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java index ccbe5a5c2..a24bf18de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -32,7 +32,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.IdentityKey; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; @@ -53,6 +52,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -155,15 +155,15 @@ public class MultiDeviceContactUpdateJob extends BaseJob { Set archived = SignalDatabase.threads().getArchivedRecipients(); out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, recipient), - Optional.fromNullable(recipient.isGroup() || recipient.isSystemContact() ? recipient.getDisplayName(context) : null), + Optional.ofNullable(recipient.isGroup() || recipient.isSystemContact() ? recipient.getDisplayName(context) : null), getAvatar(recipient.getId(), recipient.getContactUri()), Optional.of(ChatColorsMapper.getMaterialColor(recipient.getChatColors()).serialize()), verifiedMessage, ProfileKeyUtil.profileKeyOptional(recipient.getProfileKey()), recipient.isBlocked(), recipient.getExpiresInSeconds() > 0 ? Optional.of(recipient.getExpiresInSeconds()) - : Optional.absent(), - Optional.fromNullable(inboxPositions.get(recipientId)), + : Optional.empty(), + Optional.ofNullable(inboxPositions.get(recipientId)), archived.contains(recipientId))); out.close(); @@ -210,11 +210,11 @@ public class MultiDeviceContactUpdateJob extends BaseJob { for (Recipient recipient : recipients) { Optional identity = ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(recipient.getId()); Optional verified = getVerifiedMessage(recipient, identity); - Optional name = Optional.fromNullable(recipient.isSystemContact() ? recipient.getDisplayName(context) : recipient.getGroupName(context)); + Optional name = Optional.ofNullable(recipient.isSystemContact() ? recipient.getDisplayName(context) : recipient.getGroupName(context)); Optional profileKey = ProfileKeyUtil.profileKeyOptional(recipient.getProfileKey()); boolean blocked = recipient.isBlocked(); - Optional expireTimer = recipient.getExpiresInSeconds() > 0 ? Optional.of(recipient.getExpiresInSeconds()) : Optional.absent(); - Optional inboxPosition = Optional.fromNullable(inboxPositions.get(recipient.getId())); + Optional expireTimer = recipient.getExpiresInSeconds() > 0 ? Optional.of(recipient.getExpiresInSeconds()) : Optional.empty(); + Optional inboxPosition = Optional.ofNullable(inboxPositions.get(recipient.getId())); out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, recipient), name, @@ -234,14 +234,14 @@ public class MultiDeviceContactUpdateJob extends BaseJob { if (profileKey != null) { out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, self), - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), Optional.of(ChatColorsMapper.getMaterialColor(self.getChatColors()).serialize()), - Optional.absent(), + Optional.empty(), ProfileKeyUtil.profileKeyOptionalOrThrow(self.getProfileKey()), false, - self.getExpiresInSeconds() > 0 ? Optional.of(self.getExpiresInSeconds()) : Optional.absent(), - Optional.fromNullable(inboxPositions.get(self.getId())), + self.getExpiresInSeconds() > 0 ? Optional.of(self.getExpiresInSeconds()) : Optional.empty(), + Optional.ofNullable(inboxPositions.get(self.getId())), archived.contains(self.getId()))); } @@ -324,20 +324,20 @@ public class MultiDeviceContactUpdateJob extends BaseJob { .build()); } catch (IOException e) { Log.w(TAG, "Failed to read profile avatar!", e); - return Optional.absent(); + return Optional.empty(); } } - return Optional.absent(); + return Optional.empty(); } private Optional getSystemAvatar(@Nullable Uri uri) { if (uri == null) { - return Optional.absent(); + return Optional.empty(); } if (!Permissions.hasAny(context, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS)) { - return Optional.absent(); + return Optional.empty(); } Uri displayPhotoUri = Uri.withAppendedPath(uri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO); @@ -346,7 +346,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { AssetFileDescriptor fd = context.getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r"); if (fd == null) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(SignalServiceAttachment.newStreamBuilder() @@ -361,7 +361,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { Uri photoUri = Uri.withAppendedPath(uri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); if (photoUri == null) { - return Optional.absent(); + return Optional.empty(); } Cursor cursor = context.getContentResolver().query(photoUri, @@ -383,7 +383,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { } } - return Optional.absent(); + return Optional.empty(); } finally { if (cursor != null) { cursor.close(); @@ -394,7 +394,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { private Optional getVerifiedMessage(Recipient recipient, Optional identity) throws InvalidNumberException, IOException { - if (!identity.isPresent()) return Optional.absent(); + if (!identity.isPresent()) return Optional.empty(); SignalServiceAddress destination = RecipientUtil.toSignalServiceAddress(context, recipient); IdentityKey identityKey = identity.get().getIdentityKey(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java index cf6ae1228..937738689 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceGroupUpdateJob.java @@ -22,7 +22,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; @@ -40,6 +39,7 @@ import java.io.InputStream; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -114,19 +114,19 @@ public class MultiDeviceGroupUpdateJob extends BaseJob { RecipientId recipientId = SignalDatabase.recipients().getOrInsertFromPossiblyMigratedGroupId(record.getId()); Recipient recipient = Recipient.resolved(recipientId); - Optional expirationTimer = recipient.getExpiresInSeconds() > 0 ? Optional.of(recipient.getExpiresInSeconds()) : Optional.absent(); + Optional expirationTimer = recipient.getExpiresInSeconds() > 0 ? Optional.of(recipient.getExpiresInSeconds()) : Optional.empty(); Map inboxPositions = SignalDatabase.threads().getInboxPositions(); Set archived = SignalDatabase.threads().getArchivedRecipients(); out.write(new DeviceGroup(record.getId().getDecodedId(), - Optional.fromNullable(record.getTitle()), + Optional.ofNullable(record.getTitle()), members, getAvatar(record.getRecipientId()), record.isActive(), expirationTimer, Optional.of(ChatColorsMapper.getMaterialColor(recipient.getChatColors()).serialize()), recipient.isBlocked(), - Optional.fromNullable(inboxPositions.get(recipientId)), + Optional.ofNullable(inboxPositions.get(recipientId)), archived.contains(recipientId))); hasData = true; @@ -186,7 +186,7 @@ public class MultiDeviceGroupUpdateJob extends BaseJob { private Optional getAvatar(@NonNull RecipientId recipientId) throws IOException { - if (!AvatarHelper.hasAvatar(context, recipientId)) return Optional.absent(); + if (!AvatarHelper.hasAvatar(context, recipientId)) return Optional.empty(); return Optional.of(SignalServiceAttachment.newStreamBuilder() .withStream(AvatarHelper.getAvatar(context, recipientId)) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java index 6cd66e3f5..7a985079a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java @@ -13,7 +13,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.multidevice.KeysMessage; @@ -23,6 +22,7 @@ import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedExcept import org.whispersystems.signalservice.api.storage.StorageKey; import java.io.IOException; +import java.util.Optional; public class MultiDeviceKeysUpdateJob extends BaseJob { @@ -73,7 +73,7 @@ public class MultiDeviceKeysUpdateJob extends BaseJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); StorageKey storageServiceKey = SignalStore.storageService().getOrCreateStorageKey(); - messageSender.sendSyncMessage(SignalServiceSyncMessage.forKeys(new KeysMessage(Optional.fromNullable(storageServiceKey))), + messageSender.sendSyncMessage(SignalServiceSyncMessage.forKeys(new KeysMessage(Optional.ofNullable(storageServiceKey))), UnidentifiedAccessUtil.getAccessForSync(context)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java index 0c7657652..673d80a51 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceOutgoingPaymentSyncJob.java @@ -16,13 +16,13 @@ import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.payments.proto.PaymentMetaData; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.multidevice.OutgoingPaymentMessage; import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -93,7 +93,7 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { if (!defrag && payment.getPayee().hasRecipientId()) { uuid = Optional.of(new SignalServiceAddress(Recipient.resolved(payment.getPayee().requireRecipientId()).requireServiceId())); } else { - uuid = Optional.absent(); + uuid = Optional.empty(); } byte[] receipt = payment.getReceipt(); @@ -108,8 +108,8 @@ public final class MultiDeviceOutgoingPaymentSyncJob extends BaseJob { ByteString.copyFrom(receipt), payment.getBlockIndex(), payment.getTimestamp(), - defrag ? Optional.absent() : Optional.of(payment.getPayee().requirePublicAddress().serialize()), - defrag ? Optional.absent() : Optional.of(payment.getNote()), + defrag ? Optional.empty() : Optional.of(payment.getPayee().requirePublicAddress().serialize()), + defrag ? Optional.empty() : Optional.of(payment.getNote()), txoIdentification.getPublicKeyList(), txoIdentification.getKeyImagesList()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java index 04dd2595d..196c883cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceProfileKeyUpdateJob.java @@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; @@ -30,6 +29,7 @@ import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedExcept import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class MultiDeviceProfileKeyUpdateJob extends BaseJob { @@ -72,19 +72,19 @@ public class MultiDeviceProfileKeyUpdateJob extends BaseJob { return; } - Optional profileKey = Optional.of(ProfileKeyUtil.getSelfProfileKey()); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + Optional profileKey = Optional.of(ProfileKeyUtil.getSelfProfileKey()); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); DeviceContactsOutputStream out = new DeviceContactsOutputStream(baos); out.write(new DeviceContact(RecipientUtil.toSignalServiceAddress(context, Recipient.self()), - Optional.absent(), - Optional.absent(), - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), profileKey, false, - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), false)); out.close(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java index 7ba48af7f..543568253 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/NullMessageSendJob.java @@ -11,13 +11,13 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java index ba594e223..e14901ee1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PaymentNotificationSendJob.java @@ -14,7 +14,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.transport.RetryLaterException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.IndividualSendEvents; import org.whispersystems.signalservice.api.crypto.ContentHint; @@ -25,6 +24,7 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java index 3c02837fe..4175f3ec7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java @@ -10,7 +10,6 @@ import androidx.core.app.NotificationManagerCompat; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.MainActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; 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 bc7f6c24d..0da2a1d82 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -47,7 +47,6 @@ import org.thoughtcrime.securesms.util.RecipientAccessList; import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.ContentHint; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.SendMessageResult; @@ -66,6 +65,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -230,9 +230,9 @@ public final class PushGroupSendJob extends PushSendJob { try { rotateSenderCertificateIfNecessary(); - GroupId.Push groupId = groupRecipient.requireGroupId().requirePush(); - Optional profileKey = getProfileKey(groupRecipient); - Optional sticker = getStickerFor(message); + GroupId.Push groupId = groupRecipient.requireGroupId().requirePush(); + Optional profileKey = getProfileKey(groupRecipient); + Optional sticker = getStickerFor(message); List sharedContacts = getSharedContactsFor(message); List previews = getPreviewsFor(message); List mentions = getMentionsFor(message.getMentions()); @@ -302,8 +302,8 @@ public final class PushGroupSendJob extends PushSendJob { .withExpiration((int)(message.getExpiresIn() / 1000)) .withViewOnce(message.isViewOnce()) .asExpirationUpdate(message.isExpirationUpdate()) - .withProfileKey(profileKey.orNull()) - .withSticker(sticker.orNull()) + .withProfileKey(profileKey.orElse(null)) + .withSticker(sticker.orElse(null)) .withSharedContacts(sharedContacts) .withPreviews(previews) .withMentions(mentions); @@ -324,13 +324,13 @@ public final class PushGroupSendJob extends PushSendJob { throw new UndeliverableMessageException(e); } } else { - groupMessageBuilder.withQuote(getQuoteFor(message).orNull()); + groupMessageBuilder.withQuote(getQuoteFor(message).orElse(null)); } Log.i(TAG, JobLogger.format(this, "Beginning message send.")); return GroupSendUtil.sendResendableDataMessage(context, - groupRecipient.getGroupId().transform(GroupId::requireV2).orNull(), + groupRecipient.getGroupId().map(GroupId::requireV2).orElse(null), destinations, isRecipientUpdate, ContentHint.RESENDABLE, @@ -433,7 +433,7 @@ public final class PushGroupSendJob extends PushSendJob { } else if (!networkFailures.isEmpty()) { long retryAfter = results.stream() .filter(r -> r.getRateLimitFailure() != null) - .map(r -> r.getRateLimitFailure().getRetryAfterMilliseconds().or(-1L)) + .map(r -> r.getRateLimitFailure().getRetryAfterMilliseconds().orElse(-1L)) .max(Long::compare) .orElse(-1L); Log.w(TAG, "Retrying because there were " + networkFailures.size() + " network failures. retryAfter: " + retryAfter); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java index fe5048878..38b91292d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -31,7 +31,6 @@ import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; import org.whispersystems.signalservice.api.messages.SendMessageResult; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceGroupV2; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import org.whispersystems.signalservice.api.util.UuidUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java index 8f0043efa..3c9862d02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupUpdateJob.java @@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.IndividualSendEvents; import org.whispersystems.signalservice.api.crypto.ContentHint; @@ -34,6 +33,7 @@ import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import java.io.IOException; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class PushGroupUpdateJob extends BaseJob { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java index 34a135f2f..9fb7d7971 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushMediaSendJob.java @@ -32,7 +32,6 @@ import org.thoughtcrime.securesms.transport.InsecureFallbackApprovalException; import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.IndividualSendEvents; import org.whispersystems.signalservice.api.crypto.ContentHint; @@ -51,6 +50,7 @@ import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserExce import java.io.FileNotFoundException; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.Set; public class PushMediaSendJob extends PushSendJob { @@ -206,9 +206,9 @@ public class PushMediaSendJob extends PushSendJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, messageRecipient); List attachments = Stream.of(message.getAttachments()).filterNot(Attachment::isSticker).toList(); - List serviceAttachments = getAttachmentPointersFor(attachments); - Optional profileKey = getProfileKey(messageRecipient); - Optional sticker = getStickerFor(message); + List serviceAttachments = getAttachmentPointersFor(attachments); + Optional profileKey = getProfileKey(messageRecipient); + Optional sticker = getStickerFor(message); List sharedContacts = getSharedContactsFor(message); List previews = getPreviewsFor(message); SignalServiceDataMessage.Builder mediaMessageBuilder = SignalServiceDataMessage.newBuilder() @@ -217,8 +217,8 @@ public class PushMediaSendJob extends PushSendJob { .withTimestamp(message.getSentTimeMillis()) .withExpiration((int)(message.getExpiresIn() / 1000)) .withViewOnce(message.isViewOnce()) - .withProfileKey(profileKey.orNull()) - .withSticker(sticker.orNull()) + .withProfileKey(profileKey.orElse(null)) + .withSticker(sticker.orElse(null)) .withSharedContacts(sharedContacts) .withPreviews(previews) .asExpirationUpdate(message.isExpirationUpdate()); @@ -233,7 +233,7 @@ public class PushMediaSendJob extends PushSendJob { throw new UndeliverableMessageException(e); } } else { - mediaMessageBuilder.withQuote(getQuoteFor(message).orNull()); + mediaMessageBuilder.withQuote(getQuoteFor(message).orElse(null)); } SignalServiceDataMessage mediaMessage = mediaMessageBuilder.build(); 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 48fb5d10f..9ce098fee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushSendJob.java @@ -50,7 +50,6 @@ import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Hex; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId; @@ -70,6 +69,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -166,7 +166,7 @@ public abstract class PushSendJob extends SendJob { protected Optional getProfileKey(@NonNull Recipient recipient) { if (!recipient.resolve().isSystemContact() && !recipient.resolve().isProfileSharing()) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(ProfileKeyUtil.getSelfProfileKey().serialize()); @@ -266,16 +266,16 @@ public abstract class PushSendJob extends SendJob { attachment.getContentType(), key, Optional.of(Util.toIntExact(attachment.getSize())), - Optional.absent(), + Optional.empty(), width, height, - Optional.fromNullable(attachment.getDigest()), - Optional.fromNullable(attachment.getFileName()), + Optional.ofNullable(attachment.getDigest()), + Optional.ofNullable(attachment.getFileName()), attachment.isVoiceNote(), attachment.isBorderless(), attachment.isVideoGif(), - Optional.fromNullable(attachment.getCaption()), - Optional.fromNullable(attachment.getBlurHash()).transform(BlurHash::getHash), + Optional.ofNullable(attachment.getCaption()), + Optional.ofNullable(attachment.getBlurHash()).map(BlurHash::getHash), attachment.getUploadTimestamp()); } catch (IOException | ArithmeticException e) { Log.w(TAG, e); @@ -293,7 +293,7 @@ public abstract class PushSendJob extends SendJob { } protected Optional getQuoteFor(OutgoingMediaMessage message) throws IOException { - if (message.getOutgoingQuote() == null) return Optional.absent(); + if (message.getOutgoingQuote() == null) return Optional.empty(); long quoteId = message.getOutgoingQuote().getId(); String quoteBody = message.getOutgoingQuote().getText(); @@ -349,7 +349,7 @@ public abstract class PushSendJob extends SendJob { SignalServiceAddress quoteAddress = RecipientUtil.toSignalServiceAddress(context, quoteAuthorRecipient); return Optional.of(new SignalServiceDataMessage.Quote(quoteId, quoteAddress, quoteBody, quoteAttachments, quoteMentions)); } else { - return Optional.absent(); + return Optional.empty(); } } @@ -357,7 +357,7 @@ public abstract class PushSendJob extends SendJob { Attachment stickerAttachment = Stream.of(message.getAttachments()).filter(Attachment::isSticker).findFirst().orElse(null); if (stickerAttachment == null) { - return Optional.absent(); + return Optional.empty(); } try { @@ -371,7 +371,7 @@ public abstract class PushSendJob extends SendJob { return Optional.of(new SignalServiceDataMessage.Sticker(packId, packKey, stickerId, emoji, attachment)); } catch (IOException e) { Log.w(TAG, "Failed to decode sticker id/key", e); - return Optional.absent(); + return Optional.empty(); } } @@ -398,7 +398,7 @@ public abstract class PushSendJob extends SendJob { List getPreviewsFor(OutgoingMediaMessage mediaMessage) { return Stream.of(mediaMessage.getLinkPreviews()).map(lp -> { SignalServiceAttachment attachment = lp.getThumbnail().isPresent() ? getAttachmentPointerFor(lp.getThumbnail().get()) : null; - return new SignalServicePreview(lp.getUrl(), lp.getTitle(), lp.getDescription(), lp.getDate(), Optional.fromNullable(attachment)); + return new SignalServicePreview(lp.getUrl(), lp.getTitle(), lp.getDescription(), lp.getDate(), Optional.ofNullable(attachment)); }).toList(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java index 3cef087c8..3a159e5ee 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushTextSendJob.java @@ -24,7 +24,6 @@ import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.transport.UndeliverableMessageException; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.ContentHint; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; @@ -37,6 +36,7 @@ import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedExcept import org.whispersystems.signalservice.api.push.exceptions.UnregisteredUserException; import java.io.IOException; +import java.util.Optional; public class PushTextSendJob extends PushSendJob { @@ -183,7 +183,7 @@ public class PushTextSendJob extends PushSendJob { .withTimestamp(message.getDateSent()) .withBody(message.getBody()) .withExpiration((int)(message.getExpiresIn() / 1000)) - .withProfileKey(profileKey.orNull()) + .withProfileKey(profileKey.orElse(null)) .asEndSessionMessage(message.isEndSession()) .build(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java index 302aa4f39..e1d403f1a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -237,7 +237,7 @@ public class ReactionSendJob extends BaseJob { List nonSelfDestinations = destinations.stream().filter(r -> !r.isSelf()).collect(Collectors.toList()); boolean includesSelf = nonSelfDestinations.size() != destinations.size(); List results = GroupSendUtil.sendResendableDataMessage(context, - conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(), + conversationRecipient.getGroupId().map(GroupId::requireV2).orElse(null), nonSelfDestinations, false, ContentHint.RESENDABLE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java index c0217a259..4fd286a71 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshAttributesJob.java @@ -6,7 +6,6 @@ import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.AppCapabilities; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java index f26de97fd..8967b1963 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshOwnProfileJob.java @@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.subscription.Subscriber; import org.thoughtcrime.securesms.util.ProfileUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; @@ -37,6 +36,7 @@ import java.io.IOException; import java.util.Comparator; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshPreKeysJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshPreKeysJob.java index 0d0abbb21..cd4e18f39 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshPreKeysJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RefreshPreKeysJob.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.jobs; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.PreKeyUtil; @@ -16,9 +15,6 @@ import org.whispersystems.libsignal.state.PreKeyRecord; import org.whispersystems.libsignal.state.SignalProtocolStore; import org.whispersystems.libsignal.state.SignedPreKeyRecord; import org.whispersystems.signalservice.api.SignalServiceAccountManager; -import org.whispersystems.signalservice.api.push.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; -import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceIdType; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java index 98df08a79..a3ce1fa9b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -195,7 +195,7 @@ public class RemoteDeleteSendJob extends BaseJob { SignalServiceDataMessage dataMessage = dataMessageBuilder.build(); List results = GroupSendUtil.sendResendableDataMessage(context, - conversationRecipient.getGroupId().transform(GroupId::requireV2).orNull(), + conversationRecipient.getGroupId().map(GroupId::requireV2).orElse(null), destinations, false, ContentHint.RESENDABLE, diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java index 19204a531..45e3594fd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReportSpamJob.java @@ -11,13 +11,13 @@ import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; import java.io.IOException; import java.util.List; +import java.util.Optional; /** * Report 1 to {@link #MAX_MESSAGE_COUNT} message guids received prior to {@link #timestamp} in {@link #threadId} to the server as spam. diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java index 3ff200afb..d4e26e012 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RequestGroupV2InfoWorkerJob.java @@ -16,11 +16,11 @@ import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.groupsv2.NoCredentialForRedemptionTimeException; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import java.io.IOException; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java index 376833a76..084e512bf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ResendMessageJob.java @@ -22,7 +22,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.protocol.SenderKeyDistributionMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.ContentHint; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; @@ -33,6 +32,7 @@ import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Content; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -152,7 +152,7 @@ public class ResendMessageJob extends BaseJob { contentToSend = contentToSend.toBuilder().setSenderKeyDistributionMessage(distributionBytes).build(); } - SendMessageResult result = messageSender.resendContent(address, access, sentTimestamp, contentToSend, contentHint, Optional.fromNullable(groupId).transform(GroupId::getDecodedId)); + SendMessageResult result = messageSender.resendContent(address, access, sentTimestamp, contentToSend, contentHint, Optional.ofNullable(groupId).map(GroupId::getDecodedId)); if (result.isSuccess() && distributionId != null) { List addresses = result.getSuccess() diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java index e2ec5a746..dcadd2272 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileAvatarJob.java @@ -18,7 +18,6 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.push.exceptions.NonSuccessfulResponseCodeException; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java index 9067e4875..875a60a95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveProfileJob.java @@ -42,7 +42,6 @@ import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException; import org.whispersystems.signalservice.api.crypto.ProfileCipher; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; @@ -58,6 +57,7 @@ import java.util.HashSet; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -292,7 +292,7 @@ public class RetrieveProfileJob extends BaseJob { .map(Pair::first) .filterNot(Recipient::isRegistered) .collect(Collectors.toMap(Recipient::getId, - r -> r.getServiceId().orNull())); + r -> r.getServiceId().orElse(null))); //noinspection SimplifyStreamApiCallChains diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveReleaseChannelJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveReleaseChannelJob.kt index 921d76536..714d97af6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveReleaseChannelJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RetrieveReleaseChannelJob.kt @@ -134,7 +134,7 @@ class RetrieveReleaseChannelJob private constructor(private val force: Boolean, Log.i(TAG, "Updating release notes to ${Hex.toStringCondensed(manifestMd5)}") val values = SignalStore.releaseChannelValues() - val allReleaseNotes: ReleaseNotes? = S3.getAndVerifyObject(MANIFEST, ReleaseNotes::class.java, manifestMd5).result.orNull() + val allReleaseNotes: ReleaseNotes? = S3.getAndVerifyObject(MANIFEST, ReleaseNotes::class.java, manifestMd5).result.orElse(null) if (allReleaseNotes != null) { val resolvedNotes: List = allReleaseNotes.announcements.asSequence() @@ -227,7 +227,7 @@ class RetrieveReleaseChannelJob private constructor(private val force: Boolean, if (translationJson.result.isPresent) { return FullReleaseNote(releaseNote, translationJson.result.get()) - } else if (translationJson.status != 404 && translationJson.executionError.orNull() !is S3.Md5FailureException) { + } else if (translationJson.status != 404 && translationJson.executionError.orElse(null) !is S3.Md5FailureException) { throw RetryLaterException() } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateSignedPreKeyJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateSignedPreKeyJob.java index 33d88f8a4..8afa58655 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateSignedPreKeyJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RotateSignedPreKeyJob.java @@ -15,7 +15,6 @@ import org.whispersystems.libsignal.state.SignalProtocolStore; import org.whispersystems.libsignal.state.SignedPreKeyRecord; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceIdType; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; 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 76a2d65c6..97b4266a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendJob.java @@ -49,7 +49,7 @@ public abstract class SendJob extends BaseJob { List attachments = new LinkedList<>(); attachments.addAll(message.getAttachments()); - attachments.addAll(Stream.of(message.getLinkPreviews()).map(lp -> lp.getThumbnail().orNull()).withoutNulls().toList()); + attachments.addAll(Stream.of(message.getLinkPreviews()).map(lp -> lp.getThumbnail().orElse(null)).withoutNulls().toList()); attachments.addAll(Stream.of(message.getSharedContacts()).map(Contact::getAvatarAttachment).withoutNulls().toList()); if (message.getOutgoingQuote() != null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java index 79906158f..d43cc1526 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SendRetryReceiptJob.java @@ -14,11 +14,11 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.whispersystems.libsignal.InvalidMessageException; import org.whispersystems.libsignal.protocol.DecryptionErrorMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; +import java.util.Optional; import java.util.concurrent.TimeUnit; public final class SendRetryReceiptJob extends BaseJob { @@ -87,7 +87,7 @@ public final class SendRetryReceiptJob extends BaseJob { SignalServiceAddress address = RecipientUtil.toSignalServiceAddress(context, recipient); Optional access = UnidentifiedAccessUtil.getAccessFor(context, recipient); - Optional group = groupId.transform(GroupId::getDecodedId); + Optional group = groupId.map(GroupId::getDecodedId); Log.i(TAG, "Sending retry receipt for " + errorMessage.getTimestamp() + " to " + recipientId + ", device: " + errorMessage.getDeviceId()); ApplicationDependencies.getSignalServiceMessageSender().sendRetryReceipt(address, access, group, errorMessage); @@ -108,7 +108,7 @@ public final class SendRetryReceiptJob extends BaseJob { try { RecipientId recipientId = RecipientId.from(data.getString(KEY_RECIPIENT_ID)); DecryptionErrorMessage errorMessage = new DecryptionErrorMessage(data.getStringAsBlob(KEY_ERROR_MESSAGE)); - Optional groupId = Optional.absent(); + Optional groupId = Optional.empty(); if (data.hasString(KEY_GROUP_ID)) { groupId = Optional.of(GroupId.pushOrThrow(data.getStringAsBlob(KEY_GROUP_ID))); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java index 010c31b5d..a9b03573f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SenderKeyDistributionSendJob.java @@ -16,7 +16,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.protocol.SenderKeyDistributionMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import org.whispersystems.signalservice.api.messages.SendMessageResult; @@ -25,6 +24,7 @@ import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -98,8 +98,8 @@ public final class SenderKeyDistributionSendJob extends BaseJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List address = Collections.singletonList(RecipientUtil.toSignalServiceAddress(context, recipient)); DistributionId distributionId = groupDatabase.getOrCreateDistributionId(groupId); - SenderKeyDistributionMessage message = messageSender.getOrCreateNewGroupSession(distributionId); - List> access = UnidentifiedAccessUtil.getAccessFor(context, Collections.singletonList(recipient)); + SenderKeyDistributionMessage message = messageSender.getOrCreateNewGroupSession(distributionId); + List> access = UnidentifiedAccessUtil.getAccessFor(context, Collections.singletonList(recipient)); SendMessageResult result = messageSender.sendSenderKeyDistributionMessage(distributionId, address, access, message, Optional.of(groupId.getDecodedId())).get(0); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java index 02f12237e..eea54d0cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SmsReceiveJob.java @@ -33,11 +33,11 @@ import org.thoughtcrime.securesms.transport.RetryLaterException; import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class SmsReceiveJob extends BaseJob { @@ -171,7 +171,7 @@ public class SmsReceiveJob extends BaseJob { private Optional assembleMessageFragments(@Nullable Object[] pdus, int subscriptionId) { if (pdus == null) { - return Optional.absent(); + return Optional.empty(); } List messages = new LinkedList<>(); @@ -183,7 +183,7 @@ public class SmsReceiveJob extends BaseJob { } if (messages.isEmpty()) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(new IncomingTextMessage(messages)); @@ -194,7 +194,7 @@ public class SmsReceiveJob extends BaseJob { return new NotificationCompat.Builder(context, NotificationChannels.getMessagesChannel(context)) .setStyle(new NotificationCompat.MessagingStyle(new Person.Builder() - .setName(sender.getE164().or("")) + .setName(sender.getE164().orElse("")) .build()) .addMessage(new NotificationCompat.MessagingStyle.Message(message.getMessageBody(), message.getSentTimestampMillis(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java index a42b7bb36..a35e3023e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StickerPackDownloadJob.java @@ -128,11 +128,11 @@ public class StickerPackDownloadJob extends BaseJob { stickerDatabase.markPackAsInstalled(packId, notify); } - StickerInfo cover = manifest.getCover().or(manifest.getStickers().get(0)); + StickerInfo cover = manifest.getCover().orElse(manifest.getStickers().get(0)); JobManager.Chain chain = jobManager.startChain(new StickerDownloadJob(new IncomingSticker(packId, packKey, - manifest.getTitle().or(""), - manifest.getAuthor().or(""), + manifest.getTitle().orElse(""), + manifest.getAuthor().orElse(""), cover.getId(), "", cover.getContentType(), @@ -148,8 +148,8 @@ public class StickerPackDownloadJob extends BaseJob { for (StickerInfo stickerInfo : manifest.getStickers()) { jobs.add(new StickerDownloadJob(new IncomingSticker(packId, packKey, - manifest.getTitle().or(""), - manifest.getAuthor().or(""), + manifest.getTitle().orElse(""), + manifest.getAuthor().orElse(""), stickerInfo.getId(), stickerInfo.getEmoji(), stickerInfo.getContentType(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java index 85277c4dd..8dea5fb3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageAccountRestoreJob.java @@ -13,7 +13,6 @@ import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.storage.StorageSyncHelper; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; @@ -24,6 +23,7 @@ import org.whispersystems.signalservice.api.storage.StorageKey; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -95,7 +95,7 @@ public class StorageAccountRestoreJob extends BaseJob { return; } - SignalAccountRecord accountRecord = record.getAccount().orNull(); + SignalAccountRecord accountRecord = record.getAccount().orElse(null); if (accountRecord == null) { Log.w(TAG, "The storage record didn't actually have an account on it! Not restoring."); return; diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java index 2399f10f8..5764cee66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/StorageSyncJob.java @@ -11,9 +11,9 @@ import net.zetetic.database.sqlcipher.SQLiteDatabase; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil; import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.UnknownStorageIdDatabase; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; @@ -36,7 +36,6 @@ import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; import org.whispersystems.signalservice.api.messages.multidevice.RequestMessage; @@ -61,6 +60,7 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; /** @@ -227,7 +227,7 @@ public class StorageSyncJob extends BaseJob { final StorageKey storageServiceKey = SignalStore.storageService().getOrCreateStorageKey(); final SignalStorageManifest localManifest = SignalStore.storageService().getManifest(); - final SignalStorageManifest remoteManifest = accountManager.getStorageManifestIfDifferentVersion(storageServiceKey, localManifest.getVersion()).or(localManifest); + final SignalStorageManifest remoteManifest = accountManager.getStorageManifestIfDifferentVersion(storageServiceKey, localManifest.getVersion()).orElse(localManifest); stopwatch.split("remote-manifest"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java index d6ad89703..0ac3931ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/SubscriptionReceiptRequestResponseJob.java @@ -178,7 +178,7 @@ public class SubscriptionReceiptRequestResponseJob extends BaseJob { receiptCredentialPresentation.serialize()) .build()); } else { - Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orNull(), true); + Log.w(TAG, "Encountered a retryable exception: " + response.getStatus(), response.getExecutionError().orElse(null), true); throw new RetryableException(); } } 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 46e45e53b..a3f03edc9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -16,13 +16,13 @@ import org.thoughtcrime.securesms.net.NotPushRegisteredException; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.CancelationException; import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage; import org.whispersystems.signalservice.api.messages.SignalServiceTypingMessage.Action; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class TypingSendJob extends BaseJob { @@ -112,8 +112,8 @@ public class TypingSendJob extends BaseJob { return; } - List recipients = Collections.singletonList(recipient); - Optional groupId = Optional.absent(); + List recipients = Collections.singletonList(recipient); + Optional groupId = Optional.empty(); if (recipient.isGroup()) { recipients = SignalDatabase.groups().getGroupMembers(recipient.requireGroupId(), GroupDatabase.MemberSet.FULL_MEMBERS_EXCLUDING_SELF); @@ -128,7 +128,7 @@ public class TypingSendJob extends BaseJob { try { GroupSendUtil.sendTypingMessage(context, - recipient.getGroupId().transform(GroupId::requireV2).orNull(), + recipient.getGroupId().map(GroupId::requireV2).orElse(null), recipients, typingMessage, this::isCanceled); diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt index 49f92c420..ad70b2176 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyboard/sticker/StickerKeyboardRepository.kt @@ -21,7 +21,7 @@ class StickerKeyboardRepository(private val stickerDatabase: StickerDatabase) { StickerPackRecordReader(stickerDatabase.installedStickerPacks).use { reader -> var pack: StickerPackRecord? = reader.next while (pack != null) { - packs += KeyboardStickerPack(packId = pack.packId, title = pack.title.orNull(), coverUri = pack.cover.uri) + packs += KeyboardStickerPack(packId = pack.packId, title = pack.title.orElse(null), coverUri = pack.cover.uri) pack = reader.next } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/KeyValueStore.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/KeyValueStore.java index d5bda974c..036c2e625 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/KeyValueStore.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/KeyValueStore.java @@ -3,7 +3,6 @@ package org.thoughtcrime.securesms.keyvalue; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; import androidx.annotation.WorkerThread; import org.signal.core.util.concurrent.SignalExecutors; diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/OnboardingValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/OnboardingValues.java index 1a5557d18..1d845f00e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/OnboardingValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/OnboardingValues.java @@ -4,7 +4,6 @@ import android.content.Context; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter; import org.thoughtcrime.securesms.util.LocaleFeatureFlags; import org.thoughtcrime.securesms.util.Util; diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt index ead432a9a..fecd3fd36 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/PaymentsValues.kt @@ -10,7 +10,6 @@ import com.mobilecoin.lib.Mnemonics import com.mobilecoin.lib.exceptions.BadMnemonicException import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.SignalDatabase -import org.thoughtcrime.securesms.keyvalue.PaymentsValues.WalletRestoreResult import org.thoughtcrime.securesms.lock.v2.PinKeyboardType import org.thoughtcrime.securesms.payments.Balance import org.thoughtcrime.securesms.payments.Entropy @@ -24,8 +23,6 @@ import org.thoughtcrime.securesms.storage.StorageSyncHelper import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.Util import org.whispersystems.signalservice.api.payments.Money -import java.lang.AssertionError -import java.lang.IllegalStateException import java.math.BigDecimal import java.util.Arrays import java.util.Currency diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.java index 3f69098cc..3945483b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/StorageServiceValues.java @@ -1,11 +1,10 @@ package org.thoughtcrime.securesms.keyvalue; import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.storage.SignalStorageManifest; import org.whispersystems.signalservice.api.storage.StorageKey; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Collections; import java.util.List; diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/WallpaperValues.java b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/WallpaperValues.java index 2fc79a150..9b36bbd07 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/WallpaperValues.java +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/WallpaperValues.java @@ -10,7 +10,6 @@ import com.google.protobuf.InvalidProtocolBufferException; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper; -import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; import org.thoughtcrime.securesms.wallpaper.ChatWallpaperFactory; import org.thoughtcrime.securesms.wallpaper.WallpaperStorage; diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreview.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreview.java index ed363955d..3d486abdd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreview.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreview.java @@ -11,9 +11,9 @@ import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.attachments.AttachmentId; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; import org.thoughtcrime.securesms.util.JsonUtils; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; +import java.util.Optional; public class LinkPreview { @@ -61,10 +61,10 @@ public class LinkPreview { { this.url = url; this.title = title; - this.description = Optional.fromNullable(description).or(""); + this.description = Optional.ofNullable(description).orElse(""); this.date = date; this.attachmentId = attachmentId; - this.thumbnail = Optional.absent(); + this.thumbnail = Optional.empty(); } public @NonNull String getUrl() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java index f537af195..429dfecaa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewRepository.java @@ -46,16 +46,16 @@ import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.OkHttpUtil; import org.whispersystems.libsignal.InvalidMessageException; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.groupsv2.GroupLinkNotActiveException; import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifest; import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifest.StickerInfo; +import org.whispersystems.signalservice.api.util.OptionalUtil; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import java.net.IDN; +import java.util.Optional; import java.util.concurrent.ExecutionException; import okhttp3.CacheControl; @@ -112,7 +112,7 @@ public class LinkPreviewRepository { } if (!metadata.getImageUrl().isPresent()) { - callback.onSuccess(new LinkPreview(url, metadata.getTitle().or(""), metadata.getDescription().or(""), metadata.getDate(), Optional.absent())); + callback.onSuccess(new LinkPreview(url, metadata.getTitle().orElse(""), metadata.getDescription().orElse(""), metadata.getDate(), Optional.empty())); return; } @@ -120,7 +120,7 @@ public class LinkPreviewRepository { if (!metadata.getTitle().isPresent() && !attachment.isPresent()) { callback.onError(Error.PREVIEW_NOT_AVAILABLE); } else { - callback.onSuccess(new LinkPreview(url, metadata.getTitle().or(""), metadata.getDescription().or(""), metadata.getDate(), attachment)); + callback.onSuccess(new LinkPreview(url, metadata.getTitle().orElse(""), metadata.getDescription().orElse(""), metadata.getDate(), attachment)); } }); @@ -163,7 +163,7 @@ public class LinkPreviewRepository { if (imageUrl.isPresent() && !LinkPreviewUtil.isValidPreviewUrl(imageUrl.get())) { Log.i(TAG, "Image URL was invalid or for a non-whitelisted domain. Skipping."); - imageUrl = Optional.absent(); + imageUrl = Optional.empty(); } callback.accept(new Metadata(title, description, date, imageUrl)); @@ -197,7 +197,7 @@ public class LinkPreviewRepository { } catch (IOException | IllegalArgumentException e) { Log.w(TAG, "Exception during link preview image retrieval.", e); controller.cancel(); - callback.accept(Optional.absent()); + callback.accept(Optional.empty()); } }); @@ -210,7 +210,7 @@ public class LinkPreviewRepository { { SignalExecutors.UNBOUNDED.execute(() -> { try { - Pair stickerParams = StickerUrl.parseShareLink(packUrl).or(new Pair<>("", "")); + Pair stickerParams = StickerUrl.parseShareLink(packUrl).orElse(new Pair<>("", "")); String packIdString = stickerParams.first(); String packKeyString = stickerParams.second(); byte[] packIdBytes = Hex.fromStringCondensed(packIdString); @@ -219,9 +219,9 @@ public class LinkPreviewRepository { SignalServiceMessageReceiver receiver = ApplicationDependencies.getSignalServiceMessageReceiver(); SignalServiceStickerManifest manifest = receiver.retrieveStickerManifest(packIdBytes, packKeyBytes); - String title = manifest.getTitle().or(manifest.getAuthor()).or(""); - Optional firstSticker = Optional.fromNullable(manifest.getStickers().size() > 0 ? manifest.getStickers().get(0) : null); - Optional cover = manifest.getCover().or(firstSticker); + String title = OptionalUtil.or(manifest.getTitle(), manifest.getAuthor()).orElse(""); + Optional firstSticker = Optional.ofNullable(manifest.getStickers().size() > 0 ? manifest.getStickers().get(0) : null); + Optional cover = OptionalUtil.or(manifest.getCover(), firstSticker); if (cover.isPresent()) { Bitmap bitmap = GlideApp.with(context).asBitmap() @@ -269,7 +269,7 @@ public class LinkPreviewRepository { String title = groupRecord.getTitle(); int memberCount = groupRecord.getMembers().size(); String description = getMemberCountDescription(context, memberCount); - Optional thumbnail = Optional.absent(); + Optional thumbnail = Optional.empty(); if (AvatarHelper.hasAvatar(context, groupRecord.getRecipientId())) { Recipient recipient = Recipient.resolved(groupRecord.getRecipientId()); @@ -284,7 +284,7 @@ public class LinkPreviewRepository { DecryptedGroupJoinInfo joinInfo = GroupManager.getGroupJoinInfoFromServer(context, groupMasterKey, groupInviteLinkUrl.getPassword()); String description = getMemberCountDescription(context, joinInfo.getMemberCount()); - Optional thumbnail = Optional.absent(); + Optional thumbnail = Optional.empty(); byte[] avatarBytes = AvatarGroupsV2DownloadJob.downloadGroupAvatarBytes(context, groupMasterKey, joinInfo.getAvatar()); if (avatarBytes != null) { @@ -324,7 +324,7 @@ public class LinkPreviewRepository { @NonNull String contentType) { if (bitmap == null) { - return Optional.absent(); + return Optional.empty(); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -367,7 +367,7 @@ public class LinkPreviewRepository { } static Metadata empty() { - return new Metadata(Optional.absent(), Optional.absent(), 0, Optional.absent()); + return new Metadata(Optional.empty(), Optional.empty(), 0, Optional.empty()); } Optional getTitle() { 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 c7f1430db..0d92c76a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtil.java @@ -8,7 +8,6 @@ import android.text.util.Linkify; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; import androidx.core.text.HtmlCompat; import androidx.core.text.util.LinkifyCompat; @@ -20,13 +19,13 @@ import org.thoughtcrime.securesms.stickers.StickerUrl; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -228,7 +227,7 @@ public final class LinkPreviewUtil { } public Optional findFirst() { - return links.isEmpty() ? Optional.absent() + return links.isEmpty() ? Optional.empty() : Optional.of(links.get(0)); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java index 343e9b6aa..42ca23f6d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewViewModel.java @@ -15,10 +15,10 @@ import org.signal.core.util.ThreadUtil; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.net.RequestController; import org.thoughtcrime.securesms.util.Debouncer; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; import java.util.List; +import java.util.Optional; public class LinkPreviewViewModel extends ViewModel { @@ -208,7 +208,7 @@ public class LinkPreviewViewModel extends ViewModel { } private static LinkPreviewState forLoading() { - return new LinkPreviewState(true, false, Optional.absent(), null); + return new LinkPreviewState(true, false, Optional.empty(), null); } private static LinkPreviewState forPreview(@NonNull LinkPreview linkPreview) { @@ -216,11 +216,11 @@ public class LinkPreviewViewModel extends ViewModel { } private static LinkPreviewState forLinksWithNoPreview(@NonNull LinkPreviewRepository.Error error) { - return new LinkPreviewState(false, true, Optional.absent(), error); + return new LinkPreviewState(false, true, Optional.empty(), error); } private static LinkPreviewState forNoLinks() { - return new LinkPreviewState(false, false, Optional.absent(), null); + return new LinkPreviewState(false, false, Optional.empty(), null); } public boolean isLoading() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logging/PersistentLogger.kt b/app/src/main/java/org/thoughtcrime/securesms/logging/PersistentLogger.kt index 9eb16f97f..62a675efd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logging/PersistentLogger.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/logging/PersistentLogger.kt @@ -7,6 +7,8 @@ import org.signal.core.util.logging.Scrubber import org.thoughtcrime.securesms.BuildConfig import org.thoughtcrime.securesms.database.LogDatabase import org.thoughtcrime.securesms.database.model.LogEntry +import org.thoughtcrime.securesms.logging.PersistentLogger.LogRequest +import org.thoughtcrime.securesms.logging.PersistentLogger.WriteThread import java.io.ByteArrayOutputStream import java.io.PrintStream import java.text.SimpleDateFormat diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt index d5f67fa92..8762564b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogDataSource.kt @@ -4,7 +4,6 @@ import android.app.Application import org.signal.core.util.logging.Scrubber import org.signal.paging.PagedDataSource import org.thoughtcrime.securesms.database.LogDatabase -import java.lang.UnsupportedOperationException /** * Retrieves logs to show in the [SubmitDebugLogActivity]. diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionBadges.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionBadges.java index 710504478..fd95a58ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionBadges.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionBadges.java @@ -4,11 +4,8 @@ import android.content.Context; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.thoughtcrime.securesms.util.Util; final class LogSectionBadges implements LogSection { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java index 0dde1684e..ed73a1b65 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionCapabilities.java @@ -7,7 +7,6 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.AppCapabilities; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.signalservice.api.account.AccountAttributes; public final class LogSectionCapabilities implements LogSection { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionNotifications.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionNotifications.java index afa4d1a96..cae3f3678 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionNotifications.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionNotifications.java @@ -10,7 +10,6 @@ import androidx.annotation.RequiresApi; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.ServiceUtil; -import org.thoughtcrime.securesms.util.TextSecurePreferences; final class LogSectionNotifications implements LogSection { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java index 10fbd938c..4b9178de1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionSystemInfo.java @@ -150,7 +150,7 @@ public class LogSectionSystemInfo implements LogSection { } private static String getSigningString(@NonNull Context context) { - return AppSignatureUtil.getAppSignature(context).or("Unknown"); + return AppSignatureUtil.getAppSignature(context).orElse("Unknown"); } private static String getPlayServicesString(@NonNull Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionThreads.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionThreads.java index fe08b18da..45f1b2d18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionThreads.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/LogSectionThreads.java @@ -6,7 +6,6 @@ import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; public class LogSectionThreads implements LogSection { 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 f1ced8fab..f5f1ed217 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogRepository.java @@ -17,22 +17,22 @@ import org.json.JSONObject; import org.signal.core.util.StreamUtil; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; +import org.signal.core.util.logging.Scrubber; import org.signal.core.util.tracing.Tracer; import org.thoughtcrime.securesms.database.LogDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.signal.core.util.logging.Scrubber; import org.thoughtcrime.securesms.net.StandardUserAgentInterceptor; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Stopwatch; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.regex.Pattern; import java.util.zip.GZIPOutputStream; @@ -131,7 +131,7 @@ public class SubmitDebugLogRepository { traceUrl = uploadContent("application/octet-stream", RequestBody.create(MediaType.get("application/octet-stream"), trace)); } catch (IOException e) { Log.w(TAG, "Error during trace upload.", e); - return Optional.absent(); + return Optional.empty(); } } @@ -169,7 +169,7 @@ public class SubmitDebugLogRepository { } } catch (IllegalStateException e) { Log.e(TAG, "Failed to read row!", e); - return Optional.absent(); + return Optional.empty(); } StreamUtil.close(gzipOutput); @@ -201,7 +201,7 @@ public class SubmitDebugLogRepository { return Optional.of(logUrl); } catch (IOException e) { Log.w(TAG, "Error during log upload.", e); - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java index 3fd178138..089cbd264 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/logsubmit/SubmitDebugLogViewModel.java @@ -16,10 +16,10 @@ import org.signal.paging.PagingController; import org.signal.paging.ProxyPagingController; import org.thoughtcrime.securesms.database.LogDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public class SubmitDebugLogViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessage.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessage.java index 5ff3fd86e..3671396f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessage.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.longmessage; import android.content.Context; -import android.text.TextUtils; import androidx.annotation.NonNull; diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java index a8bc1825c..3fd6b9d02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageRepository.java @@ -19,10 +19,10 @@ import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.mms.TextSlide; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; class LongMessageRepository { @@ -59,7 +59,7 @@ class LongMessageRepository { return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get()))); } } else { - return Optional.absent(); + return Optional.empty(); } } @@ -70,7 +70,7 @@ class LongMessageRepository { if (record.isPresent()) { return Optional.of(new LongMessage(ConversationMessageFactory.createWithUnresolvedData(context, record.get()))); } else { - return Optional.absent(); + return Optional.empty(); } } @@ -78,14 +78,14 @@ class LongMessageRepository { @WorkerThread private Optional getMmsMessage(@NonNull MessageDatabase mmsDatabase, long messageId) { try (Cursor cursor = mmsDatabase.getMessageCursor(messageId)) { - return Optional.fromNullable((MmsMessageRecord) MmsDatabase.readerFor(cursor).getNext()); + return Optional.ofNullable((MmsMessageRecord) MmsDatabase.readerFor(cursor).getNext()); } } @WorkerThread private Optional getSmsMessage(@NonNull MessageDatabase smsDatabase, long messageId) { try (Cursor cursor = smsDatabase.getMessageCursor(messageId)) { - return Optional.fromNullable(SmsDatabase.readerFor(cursor).getNext()); + return Optional.ofNullable(SmsDatabase.readerFor(cursor).getNext()); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageViewModel.java index f9636527b..47eadc356 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/longmessage/LongMessageViewModel.java @@ -10,7 +10,9 @@ import androidx.lifecycle.ViewModelProvider; import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + class LongMessageViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java index 590311391..20a0233cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.maps; import android.Manifest; import android.annotation.SuppressLint; -import android.app.Activity; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Address; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java index 52755969e..78f1ac4be 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaActions.java @@ -7,7 +7,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.Fragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; 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 c199e31f7..157b758e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaGalleryAllAdapter.java @@ -52,7 +52,6 @@ import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.livedata.LiveDataPair; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collection; import java.util.HashMap; @@ -61,6 +60,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.TimeUnit; final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { @@ -363,9 +363,9 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { protected final View itemView; private final TextView line1; private final TextView line2; - private LiveDataPair liveDataPair; - private Optional fileName; - private String fileTypeDescription; + private LiveDataPair liveDataPair; + private Optional fileName; + private String fileTypeDescription; private Handler handler; private Runnable selectForMarque; @@ -383,7 +383,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { fileName = slide.getFileName(); fileTypeDescription = getFileTypeDescription(context, slide); - line1.setText(fileName.or(fileTypeDescription)); + line1.setText(fileName.orElse(fileTypeDescription)); line2.setText(getLine2(context, mediaRecord, slide)); itemView.setOnClickListener(view -> itemClickListener.onMediaClicked(mediaRecord)); itemView.setOnLongClickListener(view -> onLongClick()); @@ -423,12 +423,12 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { } protected @Nullable String getMediaTitle() { - return fileName.orNull(); + return fileName.orElse(null); } private @NonNull String describe(@NonNull Recipient from, @NonNull Recipient thread) { if (from == Recipient.UNKNOWN && thread == Recipient.UNKNOWN) { - return fileName.or(fileTypeDescription); + return fileName.orElse(fileTypeDescription); } String sentFromToString = getSentFromToString(from, thread); @@ -477,7 +477,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter { public void bind(@NonNull Context context, @NonNull MediaDatabase.MediaRecord mediaRecord, @NonNull Slide slide) { super.bind(context, mediaRecord, slide); - documentType.setText(slide.getFileType(context).or("").toLowerCase()); + documentType.setText(slide.getFileType(context).orElse("").toLowerCase()); } } 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 e6d8452f9..51ab9143a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediaoverview/MediaOverviewPageFragment.java @@ -5,14 +5,12 @@ import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.Window; import android.widget.TextView; import android.widget.Toast; @@ -45,7 +43,6 @@ import org.thoughtcrime.securesms.mms.PartAuthority; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; -import org.thoughtcrime.securesms.util.WindowUtil; import java.util.Arrays; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java index d83ad069c..2ec38b000 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediapreview/MediaPreviewViewModel.java @@ -12,11 +12,11 @@ import androidx.lifecycle.ViewModel; import org.thoughtcrime.securesms.database.MediaDatabase.MediaRecord; import org.thoughtcrime.securesms.mediasend.Media; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; public class MediaPreviewViewModel extends ViewModel { @@ -113,9 +113,9 @@ public class MediaPreviewViewModel extends ViewModel { 0, mediaRecord.getAttachment().isBorderless(), mediaRecord.getAttachment().isVideoGif(), - Optional.absent(), - Optional.fromNullable(mediaRecord.getAttachment().getCaption()), - Optional.absent()); + Optional.empty(), + Optional.ofNullable(mediaRecord.getAttachment().getCaption()), + Optional.empty()); } public LiveData getPreviewData() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java index e7fffbb99..4cd5b8a5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/AvatarSelectionActivity.java @@ -24,10 +24,10 @@ import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.scribbles.ImageEditorFragment; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.MediaUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.FileDescriptor; import java.util.Collections; +import java.util.Optional; public class AvatarSelectionActivity extends AppCompatActivity implements CameraFragment.Controller, ImageEditorFragment.Controller, MediaGalleryFragment.Callbacks { @@ -94,8 +94,8 @@ public class AvatarSelectionActivity extends AppCompatActivity implements Camera false, false, Optional.of(Media.ALL_MEDIA_BUCKET_ID), - Optional.absent(), - Optional.absent())); + Optional.empty(), + Optional.empty())); } @Override @@ -137,7 +137,7 @@ public class AvatarSelectionActivity extends AppCompatActivity implements Camera @Override public @NonNull LiveData> getMostRecentMediaItem() { - return new DefaultValueLiveData<>(Optional.absent()); + return new DefaultValueLiveData<>(Optional.empty()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java index 2772ec753..5eebafc95 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Camera1Fragment.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.mediasend; import android.animation.Animator; import android.annotation.SuppressLint; -import android.content.Context; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.Matrix; @@ -46,9 +45,9 @@ import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.ByteArrayOutputStream; +import java.util.Optional; /** * Camera capture implemented with the legacy camera API's. Should only be used if sdk < 21. diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java index ca4f97789..f1f1b3ba7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraFragment.java @@ -9,9 +9,9 @@ import androidx.lifecycle.LiveData; import org.thoughtcrime.securesms.mediasend.camerax.CameraXUtil; import org.thoughtcrime.securesms.mms.MediaConstraints; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.FileDescriptor; +import java.util.Optional; public interface CameraFragment { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java index f87ee0521..6474bfbb6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/CameraXFragment.java @@ -51,10 +51,10 @@ import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.video.VideoUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.FileDescriptor; import java.io.IOException; +import java.util.Optional; /** * Camera captured implemented using the CameraX SDK, which uses Camera2 under the hood. Should be diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/ImageEditorModelRenderMediaTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/ImageEditorModelRenderMediaTransform.java index f401c3adc..9bf4636c4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/ImageEditorModelRenderMediaTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/ImageEditorModelRenderMediaTransform.java @@ -15,10 +15,10 @@ import org.signal.imageeditor.core.model.EditorModel; import org.thoughtcrime.securesms.fonts.FontTypefaceProvider; import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.util.MediaUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.Optional; public final class ImageEditorModelRenderMediaTransform implements MediaTransform { @@ -50,7 +50,7 @@ public final class ImageEditorModelRenderMediaTransform implements MediaTransfor .withMimeType(MediaUtil.IMAGE_JPEG) .createForSingleSessionOnDisk(context); - return new Media(uri, MediaUtil.IMAGE_JPEG, media.getDate(), bitmap.getWidth(), bitmap.getHeight(), outputStream.size(), 0, false, false, media.getBucketId(), media.getCaption(), Optional.absent()); + return new Media(uri, MediaUtil.IMAGE_JPEG, media.getDate(), bitmap.getWidth(), bitmap.getHeight(), outputStream.size(), 0, false, false, media.getBucketId(), media.getCaption(), Optional.empty()); } catch (IOException e) { Log.w(TAG, "Failed to render image. Using base image."); return media; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java index da84c6ccf..70fd23605 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/Media.java @@ -7,10 +7,10 @@ import android.os.Parcelable; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.AttachmentDatabase; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.internal.util.JsonUtil; import java.io.IOException; +import java.util.Optional; /** * Represents a piece of media that the user has on their device. @@ -70,11 +70,11 @@ public class Media implements Parcelable { duration = in.readLong(); borderless = in.readInt() == 1; videoGif = in.readInt() == 1; - bucketId = Optional.fromNullable(in.readString()); - caption = Optional.fromNullable(in.readString()); + bucketId = Optional.ofNullable(in.readString()); + caption = Optional.ofNullable(in.readString()); try { String json = in.readString(); - transformProperties = json == null ? Optional.absent() : Optional.fromNullable(JsonUtil.fromJson(json, AttachmentDatabase.TransformProperties.class)); + transformProperties = json == null ? Optional.empty() : Optional.ofNullable(JsonUtil.fromJson(json, AttachmentDatabase.TransformProperties.class)); } catch (IOException e) { throw new AssertionError(e); } @@ -125,7 +125,7 @@ public class Media implements Parcelable { } public void setCaption(String caption) { - this.caption = Optional.fromNullable(caption); + this.caption = Optional.ofNullable(caption); } public Optional getTransformProperties() { @@ -148,9 +148,9 @@ public class Media implements Parcelable { dest.writeLong(duration); dest.writeInt(borderless ? 1 : 0); dest.writeInt(videoGif ? 1 : 0); - dest.writeString(bucketId.orNull()); - dest.writeString(caption.orNull()); - dest.writeString(transformProperties.transform(JsonUtil::toJson).orNull()); + dest.writeString(bucketId.orElse(null)); + dest.writeString(caption.orElse(null)); + dest.writeString(transformProperties.map(JsonUtil::toJson).orElse(null)); } public static final Creator CREATOR = new Creator() { 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 f328b3d91..bbc4c56c3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaRepository.java @@ -28,7 +28,6 @@ import org.thoughtcrime.securesms.util.SqlUtil; import org.thoughtcrime.securesms.util.Stopwatch; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.ArrayList; @@ -38,6 +37,7 @@ import java.util.LinkedHashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -97,7 +97,7 @@ public class MediaRepository { void getMostRecentItem(@NonNull Context context, @NonNull Callback> callback) { if (!StorageUtil.canReadFromMediaStore()) { Log.w(TAG, "No storage permissions!", new Throwable()); - callback.onComplete(Optional.absent()); + callback.onComplete(Optional.empty()); return; } @@ -253,7 +253,7 @@ public class MediaRepository { long size = cursor.getLong(cursor.getColumnIndexOrThrow(Images.Media.SIZE)); long duration = !isImage ? cursor.getInt(cursor.getColumnIndexOrThrow(Video.Media.DURATION)) : 0; - media.add(fixMimeType(context, new Media(uri, mimetype, date, width, height, size, duration, false, false, Optional.of(bucketId), Optional.absent(), Optional.absent()))); + media.add(fixMimeType(context, new Media(uri, mimetype, date, width, height, size, duration, false, false, Optional.of(bucketId), Optional.empty(), Optional.empty()))); } } @@ -305,7 +305,7 @@ public class MediaRepository { @WorkerThread private Optional getMostRecentItem(@NonNull Context context) { List media = getMediaInBucket(context, Media.ALL_MEDIA_BUCKET_ID, Images.Media.EXTERNAL_CONTENT_URI, true); - return media.size() > 0 ? Optional.of(media.get(0)) : Optional.absent(); + return media.size() > 0 ? Optional.of(media.get(0)) : Optional.empty(); } @TargetApi(16) @@ -332,7 +332,7 @@ public class MediaRepository { long size = media.getSize(); if (size <= 0) { - Optional optionalSize = Optional.fromNullable(PartAuthority.getAttachmentSize(context, media.getUri())); + Optional optionalSize = Optional.ofNullable(PartAuthority.getAttachmentSize(context, media.getUri())); size = optionalSize.isPresent() ? optionalSize.get() : 0; } @@ -346,7 +346,7 @@ public class MediaRepository { height = dimens.second; } - return new Media(media.getUri(), media.getMimeType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.absent()); + return new Media(media.getUri(), media.getMimeType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.empty()); } private Media getContentResolverPopulatedMedia(@NonNull Context context, @NonNull Media media) throws IOException { @@ -372,7 +372,7 @@ public class MediaRepository { height = dimens.second; } - return new Media(media.getUri(), media.getMimeType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.absent()); + return new Media(media.getUri(), media.getMimeType(), media.getDate(), width, height, size, 0, media.isBorderless(), media.isVideoGif(), media.getBucketId(), media.getCaption(), Optional.empty()); } @VisibleForTesting diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivityResult.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivityResult.java index 32cc088f0..f2d837957 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivityResult.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaSendActivityResult.java @@ -13,7 +13,7 @@ import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.sms.MessageSender.PreUploadResult; import org.thoughtcrime.securesms.util.ParcelUtil; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Collection; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaTransform.java index 4d3712af7..34a3e67ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaTransform.java @@ -5,8 +5,6 @@ import android.content.Context; import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; -import org.signal.imageeditor.core.RendererContext; - public interface MediaTransform { @WorkerThread 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 55ba4456b..f78634562 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/MediaUploadRepository.java @@ -92,8 +92,8 @@ public class MediaUploadRepository { } private boolean hasSameTransformProperties(@NonNull Media oldMedia, @NonNull Media newMedia) { - TransformProperties oldProperties = oldMedia.getTransformProperties().orNull(); - TransformProperties newProperties = newMedia.getTransformProperties().orNull(); + TransformProperties oldProperties = oldMedia.getTransformProperties().orElse(null); + TransformProperties newProperties = newMedia.getTransformProperties().orElse(null); if (oldProperties == null || newProperties == null) { return oldProperties == newProperties; @@ -171,7 +171,7 @@ public class MediaUploadRepository { PreUploadResult result = uploadResults.get(updated); if (result != null) { - db.updateAttachmentCaption(result.getAttachmentId(), updated.getCaption().orNull()); + db.updateAttachmentCaption(result.getAttachmentId(), updated.getCaption().orElse(null)); } else { Log.w(TAG,"When updating captions, no pre-upload result could be found for media with URI: " + updated.getUri()); } @@ -205,11 +205,11 @@ public class MediaUploadRepository { public static @NonNull Attachment asAttachment(@NonNull Context context, @NonNull Media media) { if (MediaUtil.isVideoType(media.getMimeType())) { - return new VideoSlide(context, media.getUri(), media.getSize(), media.isVideoGif(), media.getWidth(), media.getHeight(), media.getCaption().orNull(), media.getTransformProperties().orNull()).asAttachment(); + return new VideoSlide(context, media.getUri(), media.getSize(), media.isVideoGif(), media.getWidth(), media.getHeight(), media.getCaption().orElse(null), media.getTransformProperties().orElse(null)).asAttachment(); } else if (MediaUtil.isGif(media.getMimeType())) { - return new GifSlide(context, media.getUri(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orNull()).asAttachment(); + return new GifSlide(context, media.getUri(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orElse(null)).asAttachment(); } else if (MediaUtil.isImageType(media.getMimeType())) { - return new ImageSlide(context, media.getUri(), media.getMimeType(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orNull(), null, media.getTransformProperties().orNull()).asAttachment(); + return new ImageSlide(context, media.getUri(), media.getMimeType(), media.getSize(), media.getWidth(), media.getHeight(), media.isBorderless(), media.getCaption().orElse(null), null, media.getTransformProperties().orElse(null)).asAttachment(); } else if (MediaUtil.isTextType(media.getMimeType())) { return new TextSlide(context, media.getUri(), null, media.getSize()).asAttachment(); } else { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java index fbbeee553..da7be045f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/SentMediaQualityTransform.java @@ -7,7 +7,9 @@ import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.mms.SentMediaQuality; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + /** * Add a {@link SentMediaQuality} value for {@link AttachmentDatabase.TransformProperties#getSentMediaQuality()} on the diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java index 521c3bed1..bfe1b5015 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/VideoTrimTransform.java @@ -7,7 +7,9 @@ import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.mms.SentMediaQuality; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public final class VideoTrimTransform implements MediaTransform { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt index b9d89075b..c18f69457 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaBuilder.kt @@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.mediasend.v2 import android.net.Uri import org.thoughtcrime.securesms.database.AttachmentDatabase import org.thoughtcrime.securesms.mediasend.Media -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional object MediaBuilder { fun buildMedia( @@ -16,8 +16,8 @@ object MediaBuilder { duration: Long = 0L, borderless: Boolean = false, videoGif: Boolean = false, - bucketId: Optional = Optional.absent(), - caption: Optional = Optional.absent(), - transformProperties: Optional = Optional.absent() + bucketId: Optional = Optional.empty(), + caption: Optional = Optional.empty(), + transformProperties: Optional = Optional.empty() ) = Media(uri, mimeType, date, width, height, size, duration, borderless, videoGif, bucketId, caption, transformProperties) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt index 86619276b..fca671258 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionRepository.kt @@ -92,7 +92,7 @@ class MediaSelectionRepository(context: Context) { val updatedMedia = oldToNewMediaMap.values.toList() for (media in updatedMedia) { - Log.w(TAG, media.uri.toString() + " : " + media.transformProperties.transform { t: TransformProperties -> "" + t.isVideoTrim }.or("null")) + Log.w(TAG, media.uri.toString() + " : " + media.transformProperties.map { t: TransformProperties -> "" + t.isVideoTrim }.orElse("null")) } val singleRecipient: Recipient? = singleContact?.let { Recipient.resolved(it.recipientId) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt index 9f3e17f81..5e3faefe8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaSelectionViewModel.kt @@ -240,7 +240,7 @@ class MediaSelectionViewModel( fun getMediaConstraints(): MediaConstraints { return if (store.state.transportOption.isSms) { - MediaConstraints.getMmsMediaConstraints(store.state.transportOption.simSubscriptionId.or(-1)) + MediaConstraints.getMmsMediaConstraints(store.state.transportOption.simSubscriptionId.orElse(-1)) } else { MediaConstraints.getPushMediaConstraints() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaValidator.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaValidator.kt index fc0c25d66..bbabd6b56 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaValidator.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/MediaValidator.kt @@ -27,8 +27,8 @@ object MediaValidator { val truncatedMedia = filteredMedia.take(maxSelection) val bucketId = if (truncatedMedia.isNotEmpty()) { - truncatedMedia.drop(1).fold(truncatedMedia.first().bucketId.or(Media.ALL_MEDIA_BUCKET_ID)) { acc, m -> - if (Util.equals(acc, m.bucketId.or(Media.ALL_MEDIA_BUCKET_ID))) { + truncatedMedia.drop(1).fold(truncatedMedia.first().bucketId.orElse(Media.ALL_MEDIA_BUCKET_ID)) { acc, m -> + if (Util.equals(acc, m.bucketId.orElse(Media.ALL_MEDIA_BUCKET_ID))) { acc } else { Media.ALL_MEDIA_BUCKET_ID diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt index 7b8b5e4bd..dd801475d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureFragment.kt @@ -22,8 +22,8 @@ import org.thoughtcrime.securesms.mms.MediaConstraints import org.thoughtcrime.securesms.permissions.Permissions import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.navigation.safeNavigate -import org.whispersystems.libsignal.util.guava.Optional import java.io.FileDescriptor +import java.util.Optional private val TAG = Log.tag(MediaCaptureFragment::class.java) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureRepository.kt index 313e960f7..462c8c9dc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureRepository.kt @@ -16,11 +16,11 @@ import org.thoughtcrime.securesms.util.CursorUtil import org.thoughtcrime.securesms.util.MediaUtil import org.thoughtcrime.securesms.util.StorageUtil import org.thoughtcrime.securesms.video.VideoUtil -import org.whispersystems.libsignal.util.guava.Optional import java.io.FileDescriptor import java.io.FileInputStream import java.io.IOException import java.util.LinkedList +import java.util.Optional private val TAG = Log.tag(MediaCaptureRepository::class.java) @@ -105,8 +105,8 @@ class MediaCaptureRepository(context: Context) { false, false, Optional.of(Media.ALL_MEDIA_BUCKET_ID), - Optional.absent(), - Optional.absent() + Optional.empty(), + Optional.empty() ) } catch (e: IOException) { return null @@ -159,8 +159,8 @@ class MediaCaptureRepository(context: Context) { false, false, Optional.of(bucketId), - Optional.absent(), - Optional.absent() + Optional.empty(), + Optional.empty() ) ) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt index 8ad476783..c0980fc69 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/capture/MediaCaptureViewModel.kt @@ -7,8 +7,8 @@ import androidx.lifecycle.ViewModelProvider import org.thoughtcrime.securesms.mediasend.Media import org.thoughtcrime.securesms.util.SingleLiveEvent import org.thoughtcrime.securesms.util.livedata.Store -import org.whispersystems.libsignal.util.guava.Optional import java.io.FileDescriptor +import java.util.Optional class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : ViewModel() { @@ -35,7 +35,7 @@ class MediaCaptureViewModel(private val repository: MediaCaptureRepository) : Vi } fun getMostRecentMedia(): LiveData> { - return Transformations.map(store.stateLiveData) { Optional.fromNullable(it.mostRecentMedia) } + return Transformations.map(store.stateLiveData) { Optional.ofNullable(it.mostRecentMedia) } } private fun onMediaRendered(media: Media) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java index 39ce57a08..f6092406e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/BasicMegaphoneView.java @@ -4,7 +4,6 @@ import android.content.Context; import android.util.AttributeSet; import android.widget.Button; import android.widget.FrameLayout; -import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; 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 54128712f..8d547f623 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/MegaphoneRepository.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.megaphone; import android.app.Application; -import android.content.Context; import androidx.annotation.AnyThread; import androidx.annotation.NonNull; 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 167826f9e..63a3982dd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/Megaphones.java @@ -36,8 +36,6 @@ import org.thoughtcrime.securesms.util.VersionTracker; import org.thoughtcrime.securesms.util.dynamiclanguage.DynamicLanguageContextWrapper; import org.thoughtcrime.securesms.wallpaper.ChatWallpaperActivity; -import java.time.LocalDateTime; -import java.time.Month; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java index 05e3205d1..dc79f0ec9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/megaphone/PopupMegaphoneView.java @@ -4,7 +4,6 @@ import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; -import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsViewModel.java index e75e31077..3cb9c0274 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageDetailsViewModel.java @@ -6,7 +6,6 @@ import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; -import org.thoughtcrime.securesms.color.MaterialColor; import org.thoughtcrime.securesms.database.model.MessageRecord; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java index 6c1dc022d..94300066e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageHeaderViewHolder.java @@ -34,12 +34,12 @@ import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.ExpirationUtil; import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.ProjectionList; -import org.whispersystems.libsignal.util.guava.Optional; import java.sql.Date; import java.text.SimpleDateFormat; import java.util.HashSet; import java.util.Locale; +import java.util.Optional; final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements GiphyMp4Playable, Colorizable { private final TextView sentDate; @@ -100,8 +100,8 @@ final class MessageHeaderViewHolder extends RecyclerView.ViewHolder implements G } conversationItem.bind(lifecycleOwner, conversationMessage, - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), glideRequests, Locale.getDefault(), new HashSet<>(), diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java index 6cda0db87..f87e2222c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagedetails/MessageRecordLiveData.java @@ -6,7 +6,6 @@ import androidx.lifecycle.LiveData; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.MessageDatabase; -import org.thoughtcrime.securesms.database.MmsSmsDatabase; import org.thoughtcrime.securesms.database.NoSuchMessageException; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.MessageId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messageprocessingalarm/MessageProcessReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/messageprocessingalarm/MessageProcessReceiver.java index 4e9bf28d6..aad4c1243 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messageprocessingalarm/MessageProcessReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messageprocessingalarm/MessageProcessReceiver.java @@ -18,9 +18,9 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.JobTracker; import org.thoughtcrime.securesms.jobs.PushNotificationReceiveJob; import org.thoughtcrime.securesms.util.FeatureFlags; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Locale; +import java.util.Optional; /** * On received message, runs a job to poll for messages. diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestMegaphoneActivity.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestMegaphoneActivity.java index 4388a9e54..5f03cff43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestMegaphoneActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestMegaphoneActivity.java @@ -10,8 +10,6 @@ import com.airbnb.lottie.LottieAnimationView; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.megaphone.Megaphones; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.profiles.edit.EditProfileActivity; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java index 69969ec64..d20ce3068 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestRepository.java @@ -30,11 +30,11 @@ import org.thoughtcrime.securesms.recipients.RecipientUtil; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.internal.push.exceptions.GroupPatchNotAcceptedException; import java.io.IOException; import java.util.List; +import java.util.Optional; import java.util.concurrent.Executor; final class MessageRequestRepository { @@ -60,14 +60,14 @@ final class MessageRequestRepository { executor.execute(() -> { GroupDatabase groupDatabase = SignalDatabase.groups(); Optional groupRecord = groupDatabase.getGroup(recipientId); - onGroupInfoLoaded.accept(groupRecord.transform(record -> { + onGroupInfoLoaded.accept(groupRecord.map(record -> { if (record.isV2Group()) { DecryptedGroup decryptedGroup = record.requireV2GroupProperties().getDecryptedGroup(); return new GroupInfo(decryptedGroup.getMembersCount(), decryptedGroup.getPendingMembersCount(), decryptedGroup.getDescription()); } else { return new GroupInfo(record.getMembers().size(), 0, ""); } - }).or(GroupInfo.ZERO)); + }).orElse(GroupInfo.ZERO)); }); } @@ -266,8 +266,8 @@ final class MessageRequestRepository { private GroupDatabase.MemberLevel getGroupMemberLevel(@NonNull RecipientId recipientId) { return SignalDatabase.groups() .getGroup(recipientId) - .transform(g -> g.memberLevel(Recipient.self())) - .or(GroupDatabase.MemberLevel.NOT_A_MEMBER); + .map(g -> g.memberLevel(Recipient.self())) + .orElse(GroupDatabase.MemberLevel.NOT_A_MEMBER); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java index 09a054be6..27c2403a8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/GroupSendUtil.java @@ -27,7 +27,6 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.InvalidRegistrationIdException; import org.whispersystems.libsignal.NoSessionException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.CancelationException; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalServiceMessageSender.LegacyGroupEvents; @@ -57,6 +56,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -221,7 +221,7 @@ public final class GroupSendUtil { List registeredTargets = allTargets.stream().filter(r -> !unregisteredTargets.contains(r)).collect(Collectors.toList()); RecipientData recipients = new RecipientData(context, registeredTargets); - Optional groupRecord = groupId != null ? SignalDatabase.groups().getGroup(groupId) : Optional.absent(); + Optional groupRecord = groupId != null ? SignalDatabase.groups().getGroup(groupId) : Optional.empty(); List senderKeyTargets = new LinkedList<>(); List legacyTargets = new LinkedList<>(); @@ -370,7 +370,7 @@ public final class GroupSendUtil { List unregisteredResults = unregisteredTargets.stream() .filter(Recipient::hasServiceId) - .map(t -> SendMessageResult.unregisteredFailure(new SignalServiceAddress(t.requireServiceId(), t.getE164().orNull()))) + .map(t -> SendMessageResult.unregisteredFailure(new SignalServiceAddress(t.requireServiceId(), t.getE164().orElse(null)))) .collect(Collectors.toList()); if (unregisteredResults.size() < unregisteredTargets.size()) { @@ -393,7 +393,7 @@ public final class GroupSendUtil { private static @Nullable DistributionId getDistributionId(@Nullable DistributionListId distributionListId) { if (distributionListId != null) { - return Optional.fromNullable(SignalDatabase.distributionLists().getDistributionId(distributionListId)).orNull(); + return Optional.ofNullable(SignalDatabase.distributionLists().getDistributionId(distributionListId)).orElse(null); } else { return null; } @@ -514,7 +514,7 @@ public final class GroupSendUtil { throws NoSessionException, UntrustedIdentityException, InvalidKeyException, IOException, InvalidRegistrationIdException { messageSender.sendGroupTyping(distributionId, targets, access, message); - return targets.stream().map(a -> SendMessageResult.success(a, Collections.emptyList(), true, false, -1, Optional.absent())).collect(Collectors.toList()); + return targets.stream().map(a -> SendMessageResult.success(a, Collections.emptyList(), true, false, -1, Optional.empty())).collect(Collectors.toList()); } @Override @@ -527,7 +527,7 @@ public final class GroupSendUtil { throws IOException { messageSender.sendTyping(targets, access, message, cancelationSignal); - return targets.stream().map(a -> SendMessageResult.success(a, Collections.emptyList(), true, false, -1, Optional.absent())).collect(Collectors.toList()); + return targets.stream().map(a -> SendMessageResult.success(a, Collections.emptyList(), true, false, -1, Optional.empty())).collect(Collectors.toList()); } @Override @@ -625,7 +625,7 @@ public final class GroupSendUtil { boolean isRecipientUpdate) throws NoSessionException, UntrustedIdentityException, InvalidKeyException, IOException, InvalidRegistrationIdException { - return messageSender.sendGroupStory(distributionId, Optional.fromNullable(groupId).transform(GroupId::getDecodedId), targets, access, message, getSentTimestamp()); + return messageSender.sendGroupStory(distributionId, Optional.ofNullable(groupId).map(GroupId::getDecodedId), targets, access, message, getSentTimestamp()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java index c2b81792d..54953b018 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageObserver.java @@ -24,13 +24,13 @@ import org.thoughtcrime.securesms.messages.IncomingMessageProcessor.Processor; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.util.AppForegroundObserver; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalWebSocket; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java index 3e5151255..642323160 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java @@ -8,7 +8,6 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.crypto.ReentrantSessionLock; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId; import org.thoughtcrime.securesms.database.MmsSmsDatabase; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java index f06f82156..469350ec7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageContentProcessor.java @@ -54,7 +54,6 @@ import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.database.model.ThreadRecord; import org.thoughtcrime.securesms.database.model.databaseprotos.ChatColor; import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPost; -import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPostOrBuilder; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.BadGroupIdException; import org.thoughtcrime.securesms.groups.GroupChangeBusyException; @@ -132,7 +131,6 @@ import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.ecc.ECPublicKey; import org.whispersystems.libsignal.protocol.DecryptionErrorMessage; import org.whispersystems.libsignal.state.SessionRecord; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceAttachment; import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer; import org.whispersystems.signalservice.api.messages.SignalServiceContent; @@ -184,6 +182,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -211,7 +210,7 @@ public final class MessageContentProcessor { public void process(MessageState messageState, @Nullable SignalServiceContent content, @Nullable ExceptionMetadata exceptionMetadata, long timestamp, long smsMessageId) throws IOException, GroupChangeBusyException { - Optional optionalSmsMessageId = smsMessageId > 0 ? Optional.of(smsMessageId) : Optional.absent(); + Optional optionalSmsMessageId = smsMessageId > 0 ? Optional.of(smsMessageId) : Optional.empty(); if (messageState == MessageState.DECRYPTED_OK) { @@ -226,7 +225,7 @@ public final class MessageContentProcessor { log(String.valueOf(content.getTimestamp()), "Found " + earlyContent.get().size() + " dependent item(s) that were retrieved earlier. Processing."); for (SignalServiceContent earlyItem : earlyContent.get()) { - handleMessage(earlyItem, timestamp, senderRecipient, Optional.absent()); + handleMessage(earlyItem, timestamp, senderRecipient, Optional.empty()); } } } else { @@ -265,7 +264,7 @@ public final class MessageContentProcessor { boolean isGv2Message = groupId.isPresent() && groupId.get().isV2(); if (isGv2Message) { - if (handleGv2PreProcessing(groupId.orNull().requireV2(), content, content.getDataMessage().get().getGroupContext().get().getGroupV2().get(), senderRecipient)) { + if (handleGv2PreProcessing(groupId.orElse(null).requireV2(), content, content.getDataMessage().get().getGroupContext().get().getGroupV2().get(), senderRecipient)) { return; } } @@ -553,7 +552,7 @@ public final class MessageContentProcessor { case UNSUPPORTED_DATA_MESSAGE: warn(String.valueOf(timestamp), "Handling unsupported data message."); - handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.fromNullable(e.groupId), timestamp, smsMessageId); + handleUnsupportedDataMessage(e.sender, e.senderDevice, Optional.ofNullable(e.groupId), timestamp, smsMessageId); break; case CORRUPT_MESSAGE: @@ -579,7 +578,7 @@ public final class MessageContentProcessor { database.markAsMissedCall(smsMessageId.get(), message.getType() == OfferMessage.Type.VIDEO_CALL); } else { RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId())); - byte[] remoteIdentityKey = ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(senderRecipient.getId()).transform(record -> record.getIdentityKey().serialize()).orNull(); + byte[] remoteIdentityKey = ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(senderRecipient.getId()).map(record -> record.getIdentityKey().serialize()).orElse(null); ApplicationDependencies.getSignalCallManager() .receivedOffer(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()), @@ -597,7 +596,7 @@ public final class MessageContentProcessor { { log(String.valueOf(content), "handleCallAnswerMessage..."); RemotePeer remotePeer = new RemotePeer(senderRecipient.getId(), new CallId(message.getId())); - byte[] remoteIdentityKey = ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(senderRecipient.getId()).transform(record -> record.getIdentityKey().serialize()).orNull(); + byte[] remoteIdentityKey = ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(senderRecipient.getId()).map(record -> record.getIdentityKey().serialize()).orElse(null); ApplicationDependencies.getSignalCallManager() .receivedAnswer(new WebRtcData.CallMetadata(remotePeer, content.getSenderDevice()), @@ -708,7 +707,7 @@ public final class MessageContentProcessor { content.getServerReceivedTimestamp(), System.currentTimeMillis(), "", - Optional.absent(), + Optional.empty(), 0, content.isNeedsReceipt(), content.getServerUuid()); @@ -779,7 +778,7 @@ public final class MessageContentProcessor { GroupV1MessageProcessor.process(context, content, message, false); if (message.getExpiresInSeconds() != 0 && message.getExpiresInSeconds() != threadRecipient.getExpiresInSeconds()) { - handleExpirationUpdate(content, message, Optional.absent(), Optional.of(groupId), senderRecipient, threadRecipient, receivedTime); + handleExpirationUpdate(content, message, Optional.empty(), Optional.of(groupId), senderRecipient, threadRecipient, receivedTime); } if (smsMessageId.isPresent()) { @@ -846,14 +845,14 @@ public final class MessageContentProcessor { true, false, content.isNeedsReceipt(), - Optional.absent(), + Optional.empty(), groupContext, - Optional.absent(), - Optional.absent(), - Optional.absent(), - Optional.absent(), - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), content.getServerUuid()); Optional insertResult = database.insertSecureDecryptedMessageInbox(mediaMessage, -1); @@ -1073,14 +1072,14 @@ public final class MessageContentProcessor { private void handleSynchronizeOutgoingPayment(@NonNull SignalServiceContent content, @NonNull OutgoingPaymentMessage outgoingPaymentMessage) { RecipientId recipientId = outgoingPaymentMessage.getRecipient() - .transform(RecipientId::from) - .orNull(); + .map(RecipientId::from) + .orElse(null); long timestamp = outgoingPaymentMessage.getBlockTimestamp(); if (timestamp == 0) { timestamp = System.currentTimeMillis(); } - Optional address = outgoingPaymentMessage.getAddress().transform(MobileCoinPublicAddress::fromBytes); + Optional address = outgoingPaymentMessage.getAddress().map(MobileCoinPublicAddress::fromBytes); if (!address.isPresent() && recipientId == null) { log(content.getTimestamp(), "Inserting defrag"); address = Optional.of(ApplicationDependencies.getPayments().getWallet().getMobileCoinPublicAddress()); @@ -1095,7 +1094,7 @@ public final class MessageContentProcessor { address.get(), timestamp, outgoingPaymentMessage.getBlockIndex(), - outgoingPaymentMessage.getNote().or(""), + outgoingPaymentMessage.getNote().orElse(""), outgoingPaymentMessage.getAmount(), outgoingPaymentMessage.getFee(), outgoingPaymentMessage.getReceipt().toByteArray(), @@ -1339,7 +1338,7 @@ public final class MessageContentProcessor { try { final StoryType storyType; - if (message.getAllowsReplies().or(false)) { + if (message.getAllowsReplies().orElse(false)) { storyType = StoryType.withReplies(message.getTextAttachment().isPresent()); } else { storyType = StoryType.withoutReplies(message.getTextAttachment().isPresent()); @@ -1356,17 +1355,16 @@ public final class MessageContentProcessor { false, false, content.isNeedsReceipt(), - message.getTextAttachment().transform(this::serializeTextAttachment), - Optional.fromNullable(GroupUtil.getGroupContextIfPresent(content)), - message.getFileAttachment().transform(Collections::singletonList), - Optional.absent(), - Optional.absent(), - getLinkPreviews(OptionalUtil.flatMap(message.getTextAttachment(), - t -> t.getPreview().transform(Collections::singletonList)), + message.getTextAttachment().map(this::serializeTextAttachment), + Optional.ofNullable(GroupUtil.getGroupContextIfPresent(content)), + message.getFileAttachment().map(Collections::singletonList), + Optional.empty(), + Optional.empty(), + getLinkPreviews(message.getTextAttachment().flatMap(t -> t.getPreview().map(Collections::singletonList)), "", true), - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), content.getServerUuid()); insertResult = database.insertSecureDecryptedMessageInbox(mediaMessage, -1); @@ -1437,7 +1435,7 @@ public final class MessageContentProcessor { SignalServiceTextAttachment.Gradient gradient = textAttachment.getBackgroundGradient().get(); ChatColor.LinearGradient.Builder linearGradientBuilder = ChatColor.LinearGradient.newBuilder(); - linearGradientBuilder.setRotation(gradient.getAngle().or(0).floatValue()); + linearGradientBuilder.setRotation(gradient.getAngle().orElse(0).floatValue()); linearGradientBuilder.addColors(gradient.getStartColor().get()); linearGradientBuilder.addColors(gradient.getEndColor().get()); linearGradientBuilder.addAllPositions(Arrays.asList(0f, 1f)); @@ -1500,13 +1498,13 @@ public final class MessageContentProcessor { false, content.isNeedsReceipt(), message.getBody(), - Optional.fromNullable(GroupUtil.getGroupContextIfPresent(content)), - Optional.absent(), - Optional.fromNullable(quoteModel), - Optional.absent(), - Optional.absent(), - Optional.absent(), - Optional.absent(), + Optional.ofNullable(GroupUtil.getGroupContextIfPresent(content)), + Optional.empty(), + Optional.ofNullable(quoteModel), + Optional.empty(), + Optional.empty(), + Optional.empty(), + Optional.empty(), content.getServerUuid()); Optional insertResult = database.insertSecureDecryptedMessageInbox(mediaMessage, -1); @@ -1541,7 +1539,7 @@ public final class MessageContentProcessor { try { Optional quote = getValidatedQuote(message.getQuote()); Optional> sharedContacts = getContacts(message.getSharedContacts()); - Optional> linkPreviews = getLinkPreviews(message.getPreviews(), message.getBody().or(""), false); + Optional> linkPreviews = getLinkPreviews(message.getPreviews(), message.getBody().orElse(""), false); Optional> mentions = getMentions(message.getMentions()); Optional sticker = getStickerAttachment(message.getSticker()); @@ -1637,7 +1635,7 @@ public final class MessageContentProcessor { Optional quote = getValidatedQuote(message.getMessage().getQuote()); Optional sticker = getStickerAttachment(message.getMessage().getSticker()); Optional> sharedContacts = getContacts(message.getMessage().getSharedContacts()); - Optional> previews = getLinkPreviews(message.getMessage().getPreviews(), message.getMessage().getBody().or(""), false); + Optional> previews = getLinkPreviews(message.getMessage().getPreviews(), message.getMessage().getBody().orElse(""), false); Optional> mentions = getMentions(message.getMessage().getMentions()); boolean viewOnce = message.getMessage().isViewOnce(); List syncAttachments = viewOnce ? Collections.singletonList(new TombstoneAttachment(MediaUtil.VIEW_ONCE, false)) @@ -1648,7 +1646,7 @@ public final class MessageContentProcessor { } OutgoingMediaMessage mediaMessage = new OutgoingMediaMessage(recipients, - message.getMessage().getBody().orNull(), + message.getMessage().getBody().orElse(null), syncAttachments, message.getTimestamp(), -1, @@ -1657,10 +1655,10 @@ public final class MessageContentProcessor { ThreadDatabase.DistributionTypes.DEFAULT, StoryType.NONE, null, - quote.orNull(), - sharedContacts.or(Collections.emptyList()), - previews.or(Collections.emptyList()), - mentions.or(Collections.emptyList()), + quote.orElse(null), + sharedContacts.orElse(Collections.emptyList()), + previews.orElse(Collections.emptyList()), + mentions.orElse(Collections.emptyList()), Collections.emptySet(), Collections.emptySet()); @@ -1786,7 +1784,7 @@ public final class MessageContentProcessor { String body = message.getBody().isPresent() ? message.getBody().get() : ""; if (message.getExpiresInSeconds() != threadRecipient.getExpiresInSeconds()) { - handleExpirationUpdate(content, message, Optional.absent(), groupId, senderRecipient, threadRecipient, receivedTime); + handleExpirationUpdate(content, message, Optional.empty(), groupId, senderRecipient, threadRecipient, receivedTime); } Optional insertResult; @@ -1827,7 +1825,7 @@ public final class MessageContentProcessor { log(envelopeTimestamp, "Synchronize sent text message for " + message.getTimestamp()); Recipient recipient = getSyncMessageDestination(message); - String body = message.getMessage().getBody().or(""); + String body = message.getMessage().getBody().orElse(""); long expiresInMillis = TimeUnit.SECONDS.toMillis(message.getMessage().getExpiresInSeconds()); if (recipient.getExpiresInSeconds() != message.getMessage().getExpiresInSeconds()) { @@ -2260,7 +2258,7 @@ public final class MessageContentProcessor { private static boolean isInvalidMessage(@NonNull SignalServiceDataMessage message) { if (message.isViewOnce()) { - List attachments = message.getAttachments().or(Collections.emptyList()); + List attachments = message.getAttachments().orElse(Collections.emptyList()); return attachments.size() != 1 || !isViewOnceSupportedContentType(attachments.get(0).getContentType().toLowerCase()); @@ -2274,16 +2272,16 @@ public final class MessageContentProcessor { } private Optional getValidatedQuote(Optional quote) { - if (!quote.isPresent()) return Optional.absent(); + if (!quote.isPresent()) return Optional.empty(); if (quote.get().getId() <= 0) { warn("Received quote without an ID! Ignoring..."); - return Optional.absent(); + return Optional.empty(); } if (quote.get().getAuthor() == null) { warn("Received quote without an author! Ignoring..."); - return Optional.absent(); + return Optional.empty(); } RecipientId author = Recipient.externalPush(quote.get().getAuthor()).getId(); @@ -2331,12 +2329,12 @@ public final class MessageContentProcessor { private Optional getStickerAttachment(Optional sticker) { if (!sticker.isPresent()) { - return Optional.absent(); + return Optional.empty(); } if (sticker.get().getPackId() == null || sticker.get().getPackKey() == null || sticker.get().getAttachment() == null) { warn("Malformed sticker!"); - return Optional.absent(); + return Optional.empty(); } String packId = Hex.toStringCondensed(sticker.get().getPackId()); @@ -2371,7 +2369,7 @@ public final class MessageContentProcessor { } private static Optional> getContacts(Optional> sharedContacts) { - if (!sharedContacts.isPresent()) return Optional.absent(); + if (!sharedContacts.isPresent()) return Optional.empty(); List contacts = new ArrayList<>(sharedContacts.get().size()); @@ -2383,22 +2381,22 @@ public final class MessageContentProcessor { } private Optional> getLinkPreviews(Optional> previews, @NonNull String message, boolean isStoryEmbed) { - if (!previews.isPresent() || previews.get().isEmpty()) return Optional.absent(); + if (!previews.isPresent() || previews.get().isEmpty()) return Optional.empty(); List linkPreviews = new ArrayList<>(previews.get().size()); LinkPreviewUtil.Links urlsInMessage = LinkPreviewUtil.findValidPreviewUrls(message); for (SignalServicePreview preview : previews.get()) { Optional thumbnail = PointerAttachment.forPointer(preview.getImage()); - Optional url = Optional.fromNullable(preview.getUrl()); - Optional title = Optional.fromNullable(preview.getTitle()); - Optional description = Optional.fromNullable(preview.getDescription()); - boolean hasTitle = !TextUtils.isEmpty(title.or("")); + Optional url = Optional.ofNullable(preview.getUrl()); + Optional title = Optional.ofNullable(preview.getTitle()); + Optional description = Optional.ofNullable(preview.getDescription()); + boolean hasTitle = !TextUtils.isEmpty(title.orElse("")); boolean presentInBody = url.isPresent() && urlsInMessage.containsUrl(url.get()); boolean validDomain = url.isPresent() && LinkPreviewUtil.isValidPreviewUrl(url.get()); if (hasTitle && (presentInBody || isStoryEmbed) && validDomain) { - LinkPreview linkPreview = new LinkPreview(url.get(), title.or(""), description.or(""), preview.getDate(), thumbnail); + LinkPreview linkPreview = new LinkPreview(url.get(), title.orElse(""), description.orElse(""), preview.getDate(), thumbnail); linkPreviews.add(linkPreview); } else { warn(String.format("Discarding an invalid link preview. hasTitle: %b presentInBody: %b validDomain: %b", hasTitle, presentInBody, validDomain)); @@ -2409,7 +2407,7 @@ public final class MessageContentProcessor { } private Optional> getMentions(Optional> signalServiceMentions) { - if (!signalServiceMentions.isPresent()) return Optional.absent(); + if (!signalServiceMentions.isPresent()) return Optional.empty(); return Optional.of(getMentions(signalServiceMentions.get())); } @@ -2429,7 +2427,7 @@ public final class MessageContentProcessor { } private Optional insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp) { - return insertPlaceholder(sender, senderDevice, timestamp, Optional.absent()); + return insertPlaceholder(sender, senderDevice, timestamp, Optional.empty()); } private Optional insertPlaceholder(@NonNull String sender, int senderDevice, long timestamp, Optional groupId) { @@ -2445,12 +2443,12 @@ public final class MessageContentProcessor { private Recipient getSyncMessageDestination(@NonNull SentTranscriptMessage message) throws BadGroupIdException { - return getGroupRecipient(message.getMessage().getGroupContext()).or(() -> Recipient.externalPush(message.getDestination().get())); + return getGroupRecipient(message.getMessage().getGroupContext()).orElseGet(() -> Recipient.externalPush(message.getDestination().get())); } private Recipient getMessageDestination(@NonNull SignalServiceContent content) throws BadGroupIdException { - SignalServiceDataMessage message = content.getDataMessage().orNull(); - return getGroupRecipient(message != null ? message.getGroupContext() : Optional.absent()).or(() -> Recipient.externalHighTrustPush(context, content.getSender())); + SignalServiceDataMessage message = content.getDataMessage().orElse(null); + return getGroupRecipient(message != null ? message.getGroupContext() : Optional.empty()).orElseGet(() -> Recipient.externalHighTrustPush(context, content.getSender())); } private Optional getGroupRecipient(Optional message) @@ -2459,7 +2457,7 @@ public final class MessageContentProcessor { if (message.isPresent()) { return Optional.of(Recipient.externalPossiblyMigratedGroup(context, GroupUtil.idFromGroupContext(message.get()))); } - return Optional.absent(); + return Optional.empty(); } private void notifyTypingStoppedFromIncomingMessage(@NonNull Recipient senderRecipient, @NonNull Recipient conversationRecipient, int device) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java index 421abb57d..cc06be759 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageDecryptionUtil.java @@ -44,7 +44,6 @@ import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.GroupUtil; import org.whispersystems.libsignal.protocol.CiphertextMessage; import org.whispersystems.libsignal.protocol.DecryptionErrorMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.InvalidMessageStructureException; import org.whispersystems.signalservice.api.SignalServiceAccountDataStore; import org.whispersystems.signalservice.api.crypto.ContentHint; @@ -57,6 +56,7 @@ import org.whispersystems.signalservice.internal.push.UnsupportedDataMessageExce import java.util.LinkedList; import java.util.List; +import java.util.Optional; /** * Handles taking an encrypted {@link SignalServiceEnvelope} and turning it into a plaintext model. @@ -130,7 +130,7 @@ public final class MessageDecryptionUtil { ContentHint contentHint = ContentHint.fromType(protocolException.getContentHint()); int senderDevice = protocolException.getSenderDevice(); long receivedTimestamp = System.currentTimeMillis(); - Optional groupId = Optional.absent(); + Optional groupId = Optional.empty(); if (protocolException.getGroupId().isPresent()) { try { diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageRetrievalStrategy.java b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageRetrievalStrategy.java index d78a0feb6..2e93ad853 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/MessageRetrievalStrategy.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/MessageRetrievalStrategy.java @@ -10,9 +10,9 @@ import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobmanager.JobTracker; import org.thoughtcrime.securesms.jobs.MarkerJob; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.HashSet; +import java.util.Optional; import java.util.Set; /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java b/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java index 70fecb831..99333ee06 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/RestStrategy.java @@ -10,11 +10,11 @@ import org.thoughtcrime.securesms.jobmanager.JobTracker; import org.thoughtcrime.securesms.jobs.MarkerJob; import org.thoughtcrime.securesms.jobs.PushDecryptMessageJob; import org.thoughtcrime.securesms.jobs.PushProcessMessageJob; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import java.io.IOException; import java.util.Iterator; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/StorySendUtil.kt b/app/src/main/java/org/thoughtcrime/securesms/messages/StorySendUtil.kt index 949c6ac0e..be7401b7c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/StorySendUtil.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/StorySendUtil.kt @@ -4,9 +4,9 @@ import com.google.protobuf.InvalidProtocolBufferException import org.thoughtcrime.securesms.database.model.databaseprotos.StoryTextPost import org.thoughtcrime.securesms.mms.OutgoingMediaMessage import org.thoughtcrime.securesms.util.Base64 -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.messages.SignalServicePreview import org.whispersystems.signalservice.api.messages.SignalServiceTextAttachment +import java.util.Optional import kotlin.math.roundToInt object StorySendUtil { @@ -15,15 +15,15 @@ object StorySendUtil { fun deserializeBodyToStoryTextAttachment(message: OutgoingMediaMessage, getPreviewsFor: (OutgoingMediaMessage) -> List): SignalServiceTextAttachment { val storyTextPost = StoryTextPost.parseFrom(Base64.decode(message.body)) val preview = if (message.linkPreviews.isEmpty()) { - Optional.absent() + Optional.empty() } else { Optional.of(getPreviewsFor(message)[0]) } return if (storyTextPost.background.hasLinearGradient()) { SignalServiceTextAttachment.forGradientBackground( - Optional.fromNullable(storyTextPost.body), - Optional.fromNullable(getStyle(storyTextPost.style)), + Optional.ofNullable(storyTextPost.body), + Optional.ofNullable(getStyle(storyTextPost.style)), Optional.of(storyTextPost.textForegroundColor), Optional.of(storyTextPost.textBackgroundColor), preview, @@ -35,8 +35,8 @@ object StorySendUtil { ) } else { SignalServiceTextAttachment.forSolidBackground( - Optional.fromNullable(storyTextPost.body), - Optional.fromNullable(getStyle(storyTextPost.style)), + Optional.ofNullable(storyTextPost.body), + Optional.ofNullable(getStyle(storyTextPost.style)), Optional.of(storyTextPost.textForegroundColor), Optional.of(storyTextPost.textBackgroundColor), preview, diff --git a/app/src/main/java/org/thoughtcrime/securesms/messages/WebsocketStrategy.java b/app/src/main/java/org/thoughtcrime/securesms/messages/WebsocketStrategy.java index 78e37007b..88c94af22 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/WebsocketStrategy.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/WebsocketStrategy.java @@ -6,12 +6,12 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobmanager.JobManager; import org.thoughtcrime.securesms.jobs.PushProcessMessageJob; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalWebSocket; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import java.io.IOException; import java.util.Iterator; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeoutException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java index 59abff9b2..9f06a4019 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/ApplyUnknownFieldsToSelfMigrationJob.java @@ -6,8 +6,8 @@ import com.google.protobuf.InvalidProtocolBufferException; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java index b5c776c02..25600d621 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/BackupNotificationMigrationJob.java @@ -10,7 +10,6 @@ import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.BackupUtil; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.io.IOException; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java index 9eab7b18c..354cca62f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/DirectoryRefreshMigrationJob.java @@ -7,7 +7,6 @@ import org.thoughtcrime.securesms.contacts.sync.DirectoryHelper; import org.thoughtcrime.securesms.jobmanager.Data; import org.thoughtcrime.securesms.jobmanager.Job; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java index bef22dc3f..cde7724b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/LegacyMigrationJob.java @@ -7,7 +7,6 @@ import androidx.preference.PreferenceManager; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.attachments.DatabaseAttachment; -import org.thoughtcrime.securesms.crypto.IdentityKeyUtil; import org.thoughtcrime.securesms.crypto.MasterSecret; import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.database.MessageDatabase; diff --git a/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java b/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java index 4b1ef056d..2ceceef38 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/migrations/RegistrationPinV2MigrationJob.java @@ -15,7 +15,6 @@ import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.signalservice.internal.contacts.crypto.UnauthenticatedResponseException; import java.io.IOException; -import java.util.concurrent.TimeUnit; /** * Migrates an existing V1 registration lock user to a V2 registration lock that is backed by a diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java index 45357a804..fc6bfb87e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -69,13 +69,13 @@ import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.util.views.Stub; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.concurrent.ExecutionException; @@ -94,7 +94,7 @@ public class AttachmentManager { private SignalMapView mapView; private @NonNull List garbage = new LinkedList<>(); - private @NonNull Optional slide = Optional.absent(); + private @NonNull Optional slide = Optional.empty(); private @Nullable Uri captureUri; public AttachmentManager(@NonNull Activity activity, @NonNull AttachmentListener listener) { @@ -143,7 +143,7 @@ public class AttachmentManager { } markGarbage(getSlideUri()); - slide = Optional.absent(); + slide = Optional.empty(); } } @@ -152,7 +152,7 @@ public class AttachmentManager { cleanup(getSlideUri()); captureUri = null; - slide = Optional.absent(); + slide = Optional.empty(); Iterator iterator = garbage.listIterator(); @@ -465,7 +465,7 @@ public class AttachmentManager { Intent intent = new Intent(context, MediaPreviewActivity.class); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.putExtra(MediaPreviewActivity.SIZE_EXTRA, slide.asAttachment().getSize()); - intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orNull()); + intent.putExtra(MediaPreviewActivity.CAPTION_EXTRA, slide.getCaption().orElse(null)); intent.setDataAndType(slide.getUri(), slide.getContentType()); context.startActivity(intent); diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java index 2f1ef3dc1..2ea8381fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamLocalUriFetcher.java @@ -8,12 +8,12 @@ import com.bumptech.glide.load.data.DataFetcher; import org.signal.core.util.logging.Log; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Optional; class AttachmentStreamLocalUriFetcher implements DataFetcher { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamUriLoader.java b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamUriLoader.java index 4dc3b3243..cdb54cb3c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamUriLoader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentStreamUriLoader.java @@ -10,11 +10,11 @@ import com.bumptech.glide.load.model.ModelLoaderFactory; import com.bumptech.glide.load.model.MultiModelLoaderFactory; import org.thoughtcrime.securesms.mms.AttachmentStreamUriLoader.AttachmentModel; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.File; import java.io.InputStream; import java.security.MessageDigest; +import java.util.Optional; public class AttachmentStreamUriLoader implements ModelLoader { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.kt b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.kt index 0ed07d511..f36eeebbe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/IncomingMediaMessage.kt @@ -11,9 +11,9 @@ import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.linkpreview.LinkPreview import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.GroupUtil -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.messages.SignalServiceAttachment import org.whispersystems.signalservice.api.messages.SignalServiceGroupContext +import java.util.Optional class IncomingMediaMessage( val from: RecipientId?, @@ -62,7 +62,7 @@ class IncomingMediaMessage( sharedContacts: Optional> ) : this( from = from, - groupId = groupId.orNull(), + groupId = groupId.orElse(null), body = body, isPushMessage = false, sentTimeMillis = sentTimeMillis, @@ -76,7 +76,7 @@ class IncomingMediaMessage( isViewOnce = viewOnce, serverGuid = null, attachments = ArrayList(attachments), - sharedContacts = ArrayList(sharedContacts.or(emptyList())) + sharedContacts = ArrayList(sharedContacts.orElse(emptyList())) ) constructor( @@ -103,7 +103,7 @@ class IncomingMediaMessage( ) : this( from = from, groupId = if (group.isPresent) GroupUtil.idFromGroupContextOrThrow(group.get()) else null, - body = body.orNull(), + body = body.orElse(null), isPushMessage = true, storyType = storyType, parentStoryId = parentStoryId, @@ -113,13 +113,13 @@ class IncomingMediaMessage( subscriptionId = subscriptionId, expiresIn = expiresIn, isExpirationUpdate = expirationUpdate, - quote = quote.orNull(), + quote = quote.orElse(null), isUnidentified = unidentified, isViewOnce = viewOnce, serverGuid = serverGuid, attachments = PointerAttachment.forPointers(attachments).apply { if (sticker.isPresent) add(sticker.get()) }, - sharedContacts = sharedContacts.or(emptyList()), - linkPreviews = linkPreviews.or(emptyList()), - mentions = mentions.or(emptyList()) + sharedContacts = sharedContacts.orElse(emptyList()), + linkPreviews = linkPreviews.orElse(emptyList()), + mentions = mentions.orElse(emptyList()) ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java b/app/src/main/java/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java index f2a2d37c5..23c4319be 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/LegacyMmsConnection.java @@ -47,7 +47,6 @@ import org.thoughtcrime.securesms.database.ApnDatabase; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.TelephonyUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; @@ -60,6 +59,7 @@ import java.net.URL; import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; @SuppressWarnings("deprecation") diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/LocationSlide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/LocationSlide.java index a6159f2d1..f0aa55910 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/LocationSlide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/LocationSlide.java @@ -6,7 +6,9 @@ import android.net.Uri; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.components.location.SignalPlace; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class LocationSlide extends ImageSlide { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java index 5d1abf1bf..786888073 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MessageGroupContext.java @@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.Base64; import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupUtil; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.util.UuidUtil; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.GroupContext; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/MmsConfigManager.java b/app/src/main/java/org/thoughtcrime/securesms/mms/MmsConfigManager.java index 9cc320a2f..152d832b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/MmsConfigManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/MmsConfigManager.java @@ -11,10 +11,10 @@ import com.android.mms.service_alt.MmsConfig; import org.thoughtcrime.securesms.util.dualsim.SubscriptionInfoCompat; import org.thoughtcrime.securesms.util.dualsim.SubscriptionManagerCompat; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.HashMap; import java.util.Map; +import java.util.Optional; final class MmsConfigManager { diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java index 8b41cfd9d..49b2b0b2c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/OutgoingExpirationUpdateMessage.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.mms; -import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.database.ThreadDatabase; import org.thoughtcrime.securesms.database.model.StoryType; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java index 1a79cb87b..07c6d8c9c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java @@ -33,9 +33,9 @@ import org.thoughtcrime.securesms.database.AttachmentDatabase; import org.thoughtcrime.securesms.stickers.StickerLocator; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.security.SecureRandom; +import java.util.Optional; public abstract class Slide { @@ -66,17 +66,17 @@ public abstract class Slide { @NonNull public Optional getBody() { - return Optional.absent(); + return Optional.empty(); } @NonNull public Optional getCaption() { - return Optional.fromNullable(attachment.getCaption()); + return Optional.ofNullable(attachment.getCaption()); } @NonNull public Optional getFileName() { - return Optional.fromNullable(attachment.getFileName()); + return Optional.ofNullable(attachment.getFileName()); } @Nullable @@ -195,7 +195,7 @@ public abstract class Slide { boolean quote, @Nullable AttachmentDatabase.TransformProperties transformProperties) { - String resolvedType = Optional.fromNullable(MediaUtil.getMimeType(context, uri)).or(defaultMime); + String resolvedType = Optional.ofNullable(MediaUtil.getMimeType(context, uri)).orElse(defaultMime); String fastPreflightId = String.valueOf(new SecureRandom().nextLong()); return new UriAttachment(uri, resolvedType, @@ -226,7 +226,7 @@ public abstract class Slide { } } - return Optional.fromNullable(MediaUtil.getExtension(context, getUri())); + return Optional.ofNullable(MediaUtil.getExtension(context, getUri())); } private static @NonNull String getFileType(Optional fileName) { 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 0c25a3b5b..4610c5bc3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java @@ -26,10 +26,10 @@ import com.annimon.stream.Stream; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.LinkedList; import java.util.List; +import java.util.Optional; public class SlideDeck { diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/CallRequestController.java b/app/src/main/java/org/thoughtcrime/securesms/net/CallRequestController.java index f465890b7..708ee2fbf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/CallRequestController.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/CallRequestController.java @@ -6,9 +6,9 @@ import androidx.annotation.NonNull; import androidx.annotation.WorkerThread; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.InputStream; +import java.util.Optional; import okhttp3.Call; @@ -49,6 +49,6 @@ public class CallRequestController implements RequestController { Util.wait(this, 0); } - return Optional.fromNullable(this.stream); + return Optional.ofNullable(this.stream); } } 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 0c7d95221..8ff89c7f8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/ChunkedDataFetcher.java @@ -11,7 +11,6 @@ import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.FilterInputStream; import java.io.IOException; @@ -20,6 +19,7 @@ import java.security.SecureRandom; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import okhttp3.CacheControl; import okhttp3.Call; @@ -48,7 +48,7 @@ public class ChunkedDataFetcher { } CompositeRequestController compositeController = new CompositeRequestController(); - fetchChunks(url, contentLength, Optional.absent(), compositeController, callback); + fetchChunks(url, contentLength, Optional.empty(), compositeController, callback); return compositeController; } @@ -231,11 +231,11 @@ public class ChunkedDataFetcher { try { return Optional.of(Long.parseLong(totalString)); } catch (NumberFormatException e) { - return Optional.absent(); + return Optional.empty(); } } - return Optional.absent(); + return Optional.empty(); } private List getRequestPattern(long size) throws IOException { 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 c59fb55e2..2882f26de 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/CustomDns.java @@ -5,8 +5,6 @@ import androidx.annotation.NonNull; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.util.NetworkUtil; import org.xbill.DNS.ARecord; import org.xbill.DNS.Lookup; import org.xbill.DNS.Record; @@ -16,7 +14,6 @@ import org.xbill.DNS.Type; import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.Collections; import java.util.List; import okhttp3.Dns; diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor.java b/app/src/main/java/org/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor.java index 3c2686862..cb0a803a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/net/SignalWebSocketHealthMonitor.java @@ -11,8 +11,8 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.events.ReminderUpdateEvent; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.SignalWebSocket; +import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.api.util.SleepTimer; import org.whispersystems.signalservice.api.websocket.HealthMonitor; import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState; diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java index c5c074826..338d6010e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/RemoteReplyReceiver.java @@ -74,7 +74,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver { long threadId; Recipient recipient = Recipient.resolved(recipientId); - int subscriptionId = recipient.getDefaultSubscriptionId().or(-1); + int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); switch (replyMethod) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java index b30344285..966e88078 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/ReplyMethod.java @@ -7,7 +7,6 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.RecipientDatabase; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.TextSecurePreferences; public enum ReplyMethod { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt index ebf6f4349..e5582ce8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/v2/NotificationBuilder.kt @@ -31,7 +31,7 @@ import org.thoughtcrime.securesms.util.AvatarUtil import org.thoughtcrime.securesms.util.BubbleUtil import org.thoughtcrime.securesms.util.ConversationUtil import org.thoughtcrime.securesms.util.TextSecurePreferences -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import androidx.core.app.Person as PersonCompat private const val BIG_PICTURE_DIMEN = 500 diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/FiatMoneyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/payments/FiatMoneyUtil.java index 07c41c9d7..b4004d073 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/FiatMoneyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/FiatMoneyUtil.java @@ -6,13 +6,12 @@ import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import org.signal.core.util.logging.Log; +import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.util.DateUtils; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.Money; import java.io.IOException; @@ -21,6 +20,7 @@ import java.text.DecimalFormatSymbols; import java.text.NumberFormat; import java.util.Currency; import java.util.Locale; +import java.util.Optional; public final class FiatMoneyUtil { @@ -40,7 +40,7 @@ public final class FiatMoneyUtil { .exchange(a); } catch (IOException e) { Log.w(TAG, e); - return Optional.absent(); + return Optional.empty(); } }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/GeographicalRestrictions.java b/app/src/main/java/org/thoughtcrime/securesms/payments/GeographicalRestrictions.java index 7268dfd50..1dcf69214 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/GeographicalRestrictions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/GeographicalRestrictions.java @@ -7,9 +7,7 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.Util; -import java.util.ArrayList; import java.util.Arrays; -import java.util.LinkedList; import java.util.List; import java.util.stream.Collectors; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentAdapter.java index 0adef58e4..b18ef0ce7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentAdapter.java @@ -11,10 +11,10 @@ import com.airbnb.lottie.LottieAnimationView; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.payments.confirm.ConfirmPaymentState.Status; +import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.adapter.mapping.MappingAdapter; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder; -import org.thoughtcrime.securesms.util.SpanUtil; import org.whispersystems.signalservice.api.payments.FormatterOptions; import org.whispersystems.signalservice.api.payments.Money; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java index 235d4e05b..3490ad468 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentFragment.java @@ -33,8 +33,8 @@ import org.thoughtcrime.securesms.payments.Payee; import org.thoughtcrime.securesms.payments.preferences.RecipientHasNotEnabledPaymentsDialog; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.BottomSheetUtil; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.StringUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; import org.whispersystems.signalservice.api.payments.FormatterOptions; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentState.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentState.java index e6c10df0d..b9850a70d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentState.java @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.payments.confirm; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.payments.Payee; import org.signal.core.util.money.FiatMoney; +import org.thoughtcrime.securesms.payments.Payee; import org.whispersystems.signalservice.api.payments.Money; import java.util.UUID; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java index 5bee84824..a4c6d86b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/confirm/ConfirmPaymentViewModel.java @@ -9,6 +9,7 @@ import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.logging.Log; +import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.database.PaymentDatabase.PaymentTransaction; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; @@ -17,14 +18,13 @@ import org.thoughtcrime.securesms.payments.FiatMoneyUtil; import org.thoughtcrime.securesms.payments.PaymentTransactionLiveData; import org.thoughtcrime.securesms.payments.PaymentsAddressException; import org.thoughtcrime.securesms.payments.confirm.ConfirmPaymentRepository.ConfirmPaymentResult; -import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.livedata.Store; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.Money; +import java.util.Optional; import java.util.UUID; import java.util.concurrent.TimeUnit; @@ -68,7 +68,7 @@ final class ConfirmPaymentViewModel extends ViewModel { this.paymentDone = Transformations.distinctUntilChanged(Transformations.map(store.getStateLiveData(), state -> state.getStatus().isTerminalStatus())); LiveData> exchange = FiatMoneyUtil.getExchange(amount); - this.store.update(exchange, (exchange1, confirmPaymentState1) -> confirmPaymentState1.updateExchange(exchange1.orNull())); + this.store.update(exchange, (exchange1, confirmPaymentState1) -> confirmPaymentState1.updateExchange(exchange1.orElse(null))); LiveData statusLiveData = Transformations.map(store.getStateLiveData(), ConfirmPaymentState::getStatus); LiveData timeoutSignal = Transformations.switchMap(statusLiveData, diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/create/CreatePaymentViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/payments/create/CreatePaymentViewModel.java index f5ec25a4d..1c24d3d85 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/create/CreatePaymentViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/create/CreatePaymentViewModel.java @@ -11,20 +11,19 @@ import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.logging.Log; +import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.payments.Balance; import org.thoughtcrime.securesms.payments.CreatePaymentDetails; import org.thoughtcrime.securesms.payments.FiatMoneyUtil; import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; -import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.payments.preferences.model.PayeeParcelable; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.ProfileUtil; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.livedata.Store; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.FormatterOptions; import org.whispersystems.signalservice.api.payments.Money; import org.whispersystems.signalservice.api.util.OptionalUtil; @@ -33,6 +32,7 @@ import java.io.IOException; import java.math.BigDecimal; import java.util.Currency; import java.util.Objects; +import java.util.Optional; public class CreatePaymentViewModel extends ViewModel { @@ -73,18 +73,18 @@ public class CreatePaymentViewModel extends ViewModel { LiveData> liveExchangeRate = LiveDataUtil.mapAsync(SignalStore.paymentsValues().liveCurrentCurrency(), currency -> { try { - return Optional.fromNullable(ApplicationDependencies.getPayments() + return Optional.ofNullable(ApplicationDependencies.getPayments() .getCurrencyExchange(true) .getExchangeRate(currency)); } catch (IOException e1) { Log.w(TAG, "Unable to get fresh exchange data, falling back to cached", e1); try { - return Optional.fromNullable(ApplicationDependencies.getPayments() + return Optional.ofNullable(ApplicationDependencies.getPayments() .getCurrencyExchange(false) .getExchangeRate(currency)); } catch (IOException e2) { Log.w(TAG, "Unable to get any exchange data", e2); - return Optional.absent(); + return Optional.empty(); } } }); @@ -119,7 +119,7 @@ public class CreatePaymentViewModel extends ViewModel { void clearAmount() { inputState.update(s -> { final Money money = Money.MobileCoin.ZERO; - final Optional fiat = OptionalUtil.flatMap(s.getExchangeRate(), r -> r.exchange(money)); + final Optional fiat = s.getExchangeRate().flatMap(r -> r.exchange(money)); return s.updateAmount("0", "0", Money.MobileCoin.ZERO, fiat); }); @@ -155,7 +155,7 @@ public class CreatePaymentViewModel extends ViewModel { { String newFiatAmount = updateAmountString(context, inputState.getFiatAmount(), glyph, currency.getDefaultFractionDigits()); FiatMoney newFiat = stringToFiatValueOrZero(newFiatAmount, currency); - Money newMoney = OptionalUtil.flatMap(inputState.getExchangeRate(), e -> e.exchange(newFiat)).get(); + Money newMoney = inputState.getExchangeRate().flatMap(e -> e.exchange(newFiat)).get(); String newMoneyAmount; if (newFiatAmount.equals("0")) { @@ -177,7 +177,7 @@ public class CreatePaymentViewModel extends ViewModel { { String newMoneyAmount = updateAmountString(context, inputState.getMoneyAmount(), glyph, inputState.getMoney().getCurrency().getDecimalPrecision()); Money.MobileCoin newMoney = stringToMobileCoinValueOrZero(newMoneyAmount); - Optional newFiat = OptionalUtil.flatMap(inputState.getExchangeRate(), e -> e.exchange(newMoney)); + Optional newFiat = inputState.getExchangeRate().flatMap(e -> e.exchange(newMoney)); String newFiatAmount; if (!withinMobileCoinBounds(newMoney)) { @@ -187,7 +187,7 @@ public class CreatePaymentViewModel extends ViewModel { if (newMoneyAmount.equals("0")) { newFiatAmount = "0"; } else { - newFiatAmount = newFiat.transform(f -> FiatMoneyUtil.format(context.getResources(), f, FiatMoneyUtil.formatOptions().withDisplayTime(false).numberOnly())).or("0"); + newFiatAmount = newFiat.map(f -> FiatMoneyUtil.format(context.getResources(), f, FiatMoneyUtil.formatOptions().withDisplayTime(false).numberOnly())).orElse("0"); } return inputState.updateAmount(newMoneyAmount, newFiatAmount, newMoney, newFiat); diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/create/InputState.java b/app/src/main/java/org/thoughtcrime/securesms/payments/create/InputState.java index db77fb91c..1158e11cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/create/InputState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/create/InputState.java @@ -2,21 +2,22 @@ package org.thoughtcrime.securesms.payments.create; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.signal.core.util.money.FiatMoney; -import org.whispersystems.libsignal.util.guava.Optional; +import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.whispersystems.signalservice.api.payments.Money; +import java.util.Optional; + final class InputState { private final InputTarget inputTarget; private final String moneyAmount; - private final String fiatAmount; - private final Optional fiatMoney; - private final Money money; + private final String fiatAmount; + private final Optional fiatMoney; + private final Money money; private final Optional exchangeRate; InputState() { - this(InputTarget.MONEY, "0", "0", Money.MobileCoin.ZERO, Optional.absent(), Optional.absent()); + this(InputTarget.MONEY, "0", "0", Money.MobileCoin.ZERO, Optional.empty(), Optional.empty()); } private InputState(@NonNull InputTarget inputTarget, diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/currency/CurrencyExchange.java b/app/src/main/java/org/thoughtcrime/securesms/payments/currency/CurrencyExchange.java index 97d238cff..2a3f04845 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/currency/CurrencyExchange.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/currency/CurrencyExchange.java @@ -5,7 +5,6 @@ import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.signal.core.util.money.FiatMoney; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.Money; import java.math.BigDecimal; @@ -15,6 +14,7 @@ import java.util.Currency; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; public final class CurrencyExchange { private final Map conversions; @@ -68,14 +68,14 @@ public final class CurrencyExchange { if (rate != null) { return Optional.of(new FiatMoney(amount.multiply(rate).setScale(currency.getDefaultFractionDigits(), RoundingMode.HALF_EVEN), currency, timestamp)); } - return Optional.absent(); + return Optional.empty(); } public @NonNull Optional exchange(@NonNull FiatMoney fiatMoney) { if (rate != null) { return Optional.of(Money.mobileCoin(fiatMoney.getAmount().setScale(12, RoundingMode.HALF_EVEN).divide(rate, RoundingMode.HALF_EVEN))); } else { - return Optional.absent(); + return Optional.empty(); } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentRecipientSelectionFragment.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentRecipientSelectionFragment.java index 1f873a8aa..d062b1b78 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentRecipientSelectionFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentRecipientSelectionFragment.java @@ -24,8 +24,8 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.function.Consumer; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeState.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeState.java index 00795efa9..a8b357fbc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/PaymentsHomeState.java @@ -3,8 +3,8 @@ package org.thoughtcrime.securesms.payments.preferences; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.signal.core.util.money.FiatMoney; +import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem; import java.util.Collections; 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 e8b79bb67..9a47c96a4 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 @@ -10,6 +10,7 @@ import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; +import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.settings.SettingHeader; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; @@ -21,7 +22,6 @@ import org.thoughtcrime.securesms.payments.Payment; import org.thoughtcrime.securesms.payments.UnreadPaymentsRepository; import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.thoughtcrime.securesms.payments.currency.CurrencyExchangeRepository; -import org.signal.core.util.money.FiatMoney; import org.thoughtcrime.securesms.payments.preferences.model.InProgress; import org.thoughtcrime.securesms.payments.preferences.model.InfoCard; import org.thoughtcrime.securesms.payments.preferences.model.IntroducingPayments; @@ -29,14 +29,14 @@ import org.thoughtcrime.securesms.payments.preferences.model.NoRecentActivity; import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem; import org.thoughtcrime.securesms.payments.preferences.model.SeeAll; import org.thoughtcrime.securesms.util.AsynchronousCallback; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.SingleLiveEvent; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.livedata.Store; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.payments.Money; import java.util.List; +import java.util.Optional; public class PaymentsHomeViewModel extends ViewModel { @@ -82,7 +82,7 @@ public class PaymentsHomeViewModel extends ViewModel { LiveData> liveExchangeAmount = LiveDataUtil.combineLatest(this.balance, liveExchangeRate, (balance, exchangeRate) -> exchangeRate.exchange(balance)); - this.store.update(liveExchangeAmount, (amount, state) -> state.updateCurrencyAmount(amount.orNull())); + this.store.update(liveExchangeAmount, (amount, state) -> state.updateCurrencyAmount(amount.orElse(null))); refreshExchangeRates(true); } 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 2863ff352..82a3acbab 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 @@ -21,8 +21,8 @@ import org.thoughtcrime.securesms.payments.currency.CurrencyExchange; import org.thoughtcrime.securesms.payments.currency.CurrencyExchangeRepository; import org.thoughtcrime.securesms.payments.currency.CurrencyUtil; import org.thoughtcrime.securesms.util.AsynchronousCallback; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.SetUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.livedata.Store; import org.whispersystems.libsignal.util.Pair; 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 d26b627f5..502cfad9e 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 @@ -17,9 +17,9 @@ import org.thoughtcrime.securesms.payments.State; import org.thoughtcrime.securesms.payments.preferences.PaymentType; import org.thoughtcrime.securesms.payments.preferences.details.PaymentDetailsParcelable; import org.thoughtcrime.securesms.util.DateUtils; +import org.thoughtcrime.securesms.util.SpanUtil; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; -import org.thoughtcrime.securesms.util.SpanUtil; import org.whispersystems.signalservice.api.payments.FormatterOptions; import org.whispersystems.signalservice.api.payments.PaymentsConstants; diff --git a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/viewholder/PaymentItemViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/viewholder/PaymentItemViewHolder.java index ae753beb9..c26ddbf4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/viewholder/PaymentItemViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/payments/preferences/viewholder/PaymentItemViewHolder.java @@ -10,8 +10,8 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; import org.thoughtcrime.securesms.payments.preferences.PaymentsHomeAdapter; import org.thoughtcrime.securesms.payments.preferences.model.PaymentItem; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder; import org.thoughtcrime.securesms.util.SpanUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingViewHolder; import org.thoughtcrime.securesms.util.viewholders.RecipientMappingModel.RecipientIdMappingModel; import org.thoughtcrime.securesms.util.viewholders.RecipientViewHolder; diff --git a/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java b/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java index b61f4021d..c6a36a12e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/permissions/Permissions.java @@ -14,7 +14,6 @@ import android.view.Display; import android.view.ViewGroup; import android.view.WindowManager; -import androidx.activity.result.ActivityResultCallback; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.core.app.ActivityCompat; diff --git a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java index 8b9119372..93b0d99bb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/phonenumbers/PhoneNumberFormatter.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.phonenumbers; import android.content.Context; -import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -15,16 +14,12 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.StringUtil; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; -import java.util.Arrays; -import java.util.HashSet; +import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; import java.util.regex.Matcher; @@ -62,7 +57,7 @@ public class PhoneNumberFormatter { return formatter; } else { - return new PhoneNumberFormatter(Util.getSimCountryIso(context).or("US"), true); + return new PhoneNumberFormatter(Util.getSimCountryIso(context).orElse("US"), true); } } @@ -79,7 +74,7 @@ public class PhoneNumberFormatter { } PhoneNumberFormatter(@NonNull String localCountryCode, boolean countryCode) { - this.localNumber = Optional.absent(); + this.localNumber = Optional.empty(); this.localCountryCode = localCountryCode; } @@ -218,7 +213,7 @@ public class PhoneNumberFormatter { PhoneNumber(String e164Number, int countryCode, @Nullable String areaCode) { this.e164Number = e164Number; this.countryCode = countryCode; - this.areaCode = Optional.fromNullable(areaCode); + this.areaCode = Optional.ofNullable(areaCode); } String getE164Number() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java b/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java index 3692beae2..8887ce2b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/KbsRepository.java @@ -9,7 +9,6 @@ import org.thoughtcrime.securesms.KbsEnclave; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.lock.PinHashing; import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.KbsPinData; import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.KeyBackupServicePinException; @@ -21,6 +20,7 @@ import org.whispersystems.signalservice.internal.contacts.entities.TokenResponse import java.io.IOException; import java.util.Objects; +import java.util.Optional; import java.util.function.Consumer; import io.reactivex.rxjava3.core.Single; @@ -37,9 +37,9 @@ public final class KbsRepository { public void getToken(@NonNull Consumer> callback) { SignalExecutors.UNBOUNDED.execute(() -> { try { - callback.accept(Optional.fromNullable(getTokenSync(null))); + callback.accept(Optional.ofNullable(getTokenSync(null))); } catch (IOException e) { - callback.accept(Optional.absent()); + callback.accept(Optional.empty()); } }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/PinState.java b/app/src/main/java/org/thoughtcrime/securesms/pin/PinState.java index 49a54a28c..b0f15e447 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/pin/PinState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/pin/PinState.java @@ -21,7 +21,6 @@ import org.thoughtcrime.securesms.lock.v2.PinKeyboardType; import org.thoughtcrime.securesms.megaphone.Megaphones; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.KbsPinData; import org.whispersystems.signalservice.api.KeyBackupService; import org.whispersystems.signalservice.api.kbs.HashedPin; @@ -31,6 +30,7 @@ import org.whispersystems.signalservice.internal.contacts.crypto.Unauthenticated import java.io.IOException; import java.util.Arrays; import java.util.Locale; +import java.util.Optional; import java.util.concurrent.TimeUnit; public final class PinState { diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/BackupsPreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/BackupsPreferenceFragment.java index d673a2630..d948f43fa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/BackupsPreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/BackupsPreferenceFragment.java @@ -16,7 +16,6 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import androidx.appcompat.app.AppCompatActivity; import androidx.core.text.HtmlCompat; import androidx.fragment.app.Fragment; diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyFragment.java index 355b8d4d6..84caccbf7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyFragment.java @@ -26,10 +26,11 @@ import org.thoughtcrime.securesms.util.SignalProxyUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.LearnMoreTextView; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState; import org.whispersystems.signalservice.internal.configuration.SignalProxy; +import java.util.Optional; + public class EditProxyFragment extends Fragment { private SwitchCompat proxySwitch; @@ -65,7 +66,7 @@ public class EditProxyFragment extends Fragment { } }); - this.proxyText.setText(Optional.fromNullable(SignalStore.proxy().getProxy()).transform(SignalProxy::getHost).or("")); + this.proxyText.setText(Optional.ofNullable(SignalStore.proxy().getProxy()).map(SignalProxy::getHost).orElse("")); this.proxySwitch.setChecked(SignalStore.proxy().isProxyEnabled()); initViewModel(); @@ -146,7 +147,7 @@ public class EditProxyFragment extends Fragment { switch (event) { case PROXY_SUCCESS: proxyStatus.setVisibility(View.VISIBLE); - proxyText.setText(Optional.fromNullable(SignalStore.proxy().getProxy()).transform(SignalProxy::getHost).or("")); + proxyText.setText(Optional.ofNullable(SignalStore.proxy().getProxy()).map(SignalProxy::getHost).orElse("")); new AlertDialog.Builder(requireContext()) .setTitle(R.string.preferences_success) .setMessage(R.string.preferences_you_are_connected_to_the_proxy) @@ -158,7 +159,7 @@ public class EditProxyFragment extends Fragment { break; case PROXY_FAILURE: proxyStatus.setVisibility(View.INVISIBLE); - proxyText.setText(Optional.fromNullable(SignalStore.proxy().getProxy()).transform(SignalProxy::getHost).or("")); + proxyText.setText(Optional.ofNullable(SignalStore.proxy().getProxy()).map(SignalProxy::getHost).orElse("")); ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(proxyText); new AlertDialog.Builder(requireContext()) .setTitle(R.string.preferences_failed_to_connect) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyViewModel.java index 3262ba669..6d68eb9f7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/EditProxyViewModel.java @@ -10,7 +10,6 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.util.SignalProxyUtil; import org.thoughtcrime.securesms.util.SingleLiveEvent; -import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState; import org.whispersystems.signalservice.internal.configuration.SignalProxy; diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java b/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java index a887b37b8..78b6545ba 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/StoragePreferenceFragment.java @@ -36,8 +36,8 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mediaoverview.MediaOverviewActivity; import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.preferences.widgets.StoragePreferenceCategory; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.StringUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import java.text.NumberFormat; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java index 86b46940d..237801ae2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditGroupProfileRepository.java @@ -10,6 +10,7 @@ import androidx.core.util.Consumer; import org.signal.core.util.StreamUtil; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; +import org.thoughtcrime.securesms.database.GroupDatabase; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupChangeException; import org.thoughtcrime.securesms.groups.GroupId; @@ -19,9 +20,9 @@ import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; +import java.util.Optional; class EditGroupProfileRepository implements EditProfileRepository { @@ -76,11 +77,11 @@ class EditGroupProfileRepository implements EditProfileRepository { return SignalDatabase.groups() .getGroup(recipientId) - .transform(groupRecord -> { + .map(groupRecord -> { String title = groupRecord.getTitle(); return title == null ? "" : title; }) - .or(() -> recipient.getGroupName(context)); + .orElseGet(() -> recipient.getGroupName(context)); }, nameConsumer::accept); } @@ -91,11 +92,8 @@ class EditGroupProfileRepository implements EditProfileRepository { return SignalDatabase.groups() .getGroup(recipientId) - .transform(groupRecord -> { - String description = groupRecord.getDescription(); - return description == null ? "" : description; - }) - .or(""); + .map(GroupDatabase.GroupRecord::getDescription) + .orElse(""); }, descriptionConsumer::accept); } @@ -123,14 +121,12 @@ class EditGroupProfileRepository implements EditProfileRepository { @Override public void getCurrentUsername(@NonNull Consumer> callback) { - callback.accept(Optional.absent()); + callback.accept(Optional.empty()); } @WorkerThread private RecipientId getRecipientId() { return SignalDatabase.recipients().getByGroupId(groupId) - .or(() -> { - throw new AssertionError("Recipient ID for Group ID does not exist."); - }); + .orElseThrow(() -> new AssertionError("Recipient ID for Group ID does not exist.")); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java index 9fd688e02..6b0b6673d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileActivity.java @@ -7,9 +7,6 @@ import android.content.Intent; import android.os.Bundle; import androidx.annotation.NonNull; -import androidx.navigation.NavDirections; -import androidx.navigation.NavGraph; -import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import org.thoughtcrime.securesms.BaseActivity; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java index 3bba294e6..b03527324 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileFragment.java @@ -34,8 +34,6 @@ import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.avatar.Avatars; import org.thoughtcrime.securesms.avatar.picker.AvatarPickerFragment; -import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; -import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.ParcelableGroupId; import org.thoughtcrime.securesms.mediasend.Media; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileRepository.java index 2a4a374cb..f34f2df44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditProfileRepository.java @@ -6,7 +6,9 @@ import androidx.core.util.Consumer; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.profiles.ProfileName; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + interface EditProfileRepository { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java index 7b4447790..42d07acfd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/edit/EditSelfProfileRepository.java @@ -25,11 +25,11 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.registration.RegistrationUtil; import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.ByteArrayInputStream; import java.io.IOException; import java.util.Arrays; +import java.util.Optional; import java.util.concurrent.ExecutionException; public class EditSelfProfileRepository implements EditProfileRepository { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java index e74d7f13a..c971a469b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutFragment.java @@ -34,11 +34,11 @@ import org.thoughtcrime.securesms.util.StringUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.adapter.AlwaysChangedDiffUtil; import org.thoughtcrime.securesms.util.text.AfterTextChanged; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.ProfileCipher; import java.util.Arrays; import java.util.List; +import java.util.Optional; /** * Let's you edit the 'About' section of your profile. @@ -116,7 +116,7 @@ public class EditAboutFragment extends Fragment implements ManageProfileActivity onEmojiSelectedInternal(savedInstanceState.getString(KEY_SELECTED_EMOJI, "")); } else { this.bodyView.setText(Recipient.self().getAbout()); - onEmojiSelectedInternal(Optional.fromNullable(Recipient.self().getAboutEmoji()).or("")); + onEmojiSelectedInternal(Optional.ofNullable(Recipient.self().getAboutEmoji()).orElse("")); } ViewUtil.focusAndMoveCursorToEndAndOpenKeyboard(bodyView); diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java index 016223a2a..aa9c2c33c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditAboutViewModel.java @@ -7,7 +7,6 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; -import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.util.SingleLiveEvent; public final class EditAboutViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java index 83646590e..db82d521c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/EditProfileNameViewModel.java @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.profiles.manage; import android.content.Context; -import android.text.Editable; import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java index 33df03f3b..f96a97823 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java @@ -9,7 +9,6 @@ import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.NavDirections; import androidx.navigation.NavGraph; -import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import org.thoughtcrime.securesms.PassphraseRequiredActivity; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java index cf9814e98..805ef44e0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileFragment.java @@ -42,9 +42,9 @@ import org.thoughtcrime.securesms.util.NameUtil; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Arrays; +import java.util.Optional; public class ManageProfileFragment extends LoggingFragment { @@ -141,7 +141,7 @@ public class ManageProfileFragment extends LoggingFragment { viewModel = ViewModelProviders.of(this, new ManageProfileViewModel.Factory()).get(ManageProfileViewModel.class); LiveData> avatarImage = Transformations.map(LiveDataUtil.distinctUntilChanged(viewModel.getAvatar(), (b1, b2) -> Arrays.equals(b1.getAvatar(), b2.getAvatar())), - b -> Optional.fromNullable(b.getAvatar())); + b -> Optional.ofNullable(b.getAvatar())); avatarImage.observe(getViewLifecycleOwner(), this::presentAvatarImage); viewModel.getAvatar().observe(getViewLifecycleOwner(), this::presentAvatarPlaceholder); @@ -243,7 +243,7 @@ public class ManageProfileFragment extends LoggingFragment { private void presentBadge(@NonNull Optional badge) { if (badge.isPresent() && badge.get().getVisible() && !badge.get().isExpired()) { - badgeView.setBadge(badge.orNull()); + badgeView.setBadge(badge.orElse(null)); } else { badgeView.setBadge(null); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileViewModel.java index 39a0f5765..241dd35e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileViewModel.java @@ -26,13 +26,13 @@ import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.StreamDetails; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; import java.util.Objects; +import java.util.Optional; class ManageProfileViewModel extends ViewModel { @@ -46,8 +46,8 @@ class ManageProfileViewModel extends ViewModel { private final LiveData avatarState; private final SingleLiveEvent events; private final RecipientForeverObserver observer; - private final ManageProfileRepository repository; - private final MutableLiveData> badge; + private final ManageProfileRepository repository; + private final MutableLiveData> badge; private byte[] previousAvatar; @@ -59,7 +59,7 @@ class ManageProfileViewModel extends ViewModel { this.aboutEmoji = new MutableLiveData<>(); this.events = new SingleLiveEvent<>(); this.repository = new ManageProfileRepository(); - this.badge = new DefaultValueLiveData<>(Optional.absent()); + this.badge = new DefaultValueLiveData<>(Optional.empty()); this.observer = this::onRecipientChanged; this.avatarState = LiveDataUtil.combineLatest(Recipient.self().live().getLiveData(), internalAvatarState, (self, state) -> new AvatarState(state, self)); @@ -154,10 +154,10 @@ class ManageProfileViewModel extends ViewModel { private void onRecipientChanged(@NonNull Recipient recipient) { profileName.postValue(recipient.getProfileName()); - username.postValue(recipient.getUsername().orNull()); + username.postValue(recipient.getUsername().orElse(null)); about.postValue(recipient.getAbout()); aboutEmoji.postValue(recipient.getAboutEmoji()); - badge.postValue(Optional.fromNullable(recipient.getFeaturedBadge())); + badge.postValue(Optional.ofNullable(recipient.getFeaturedBadge())); renderAvatar(AvatarHelper.getSelfProfileAvatarStream(ApplicationDependencies.getApplication())); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragment.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragment.java index 4d4c176b9..95f5a2e7d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditFragment.java @@ -63,7 +63,7 @@ public class UsernameEditFragment extends LoggingFragment { submitButton.setOnClickListener(v -> viewModel.onUsernameSubmitted(usernameInput.getText().toString())); deleteButton.setOnClickListener(v -> viewModel.onUsernameDeleted()); - usernameInput.setText(Recipient.self().getUsername().orNull()); + usernameInput.setText(Recipient.self().getUsername().orElse(null)); usernameInput.addTextChangedListener(new SimpleTextWatcher() { @Override public void onTextChanged(String text) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java index 13ff7099d..f74fe6465 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/UsernameEditViewModel.java @@ -16,7 +16,9 @@ import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.SingleLiveEvent; import org.thoughtcrime.securesms.util.UsernameUtil; import org.thoughtcrime.securesms.util.UsernameUtil.InvalidReason; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + class UsernameEditViewModel extends ViewModel { @@ -42,7 +44,7 @@ class UsernameEditViewModel extends ViewModel { return; } - if (username.equals(Recipient.self().getUsername().orNull())) { + if (username.equals(Recipient.self().getUsername().orElse(null))) { uiState.setValue(new State(ButtonState.SUBMIT_DISABLED, UsernameStatus.NONE)); return; } @@ -58,7 +60,7 @@ class UsernameEditViewModel extends ViewModel { } void onUsernameSubmitted(@NonNull String username) { - if (username.equals(Recipient.self().getUsername().orNull())) { + if (username.equals(Recipient.self().getUsername().orElse(null))) { uiState.setValue(new State(ButtonState.SUBMIT_DISABLED, UsernameStatus.NONE)); return; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java index f1a4c423b..93de2de2b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewBannerView.java @@ -1,20 +1,15 @@ package org.thoughtcrime.securesms.profiles.spoofing; import android.content.Context; -import android.graphics.Outline; import android.graphics.drawable.Drawable; -import android.os.Build; import android.util.AttributeSet; import android.view.View; -import android.view.ViewOutlineProvider; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.Px; -import androidx.constraintlayout.widget.ConstraintLayout; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.AvatarImageView; @@ -23,7 +18,6 @@ import org.thoughtcrime.securesms.contacts.avatars.FallbackPhoto20dp; import org.thoughtcrime.securesms.contacts.avatars.GeneratedContactPhoto; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.ViewUtil; /** * Banner displayed within a conversation when a review is suggested. diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewHolder.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewHolder.java index 54b9fc70d..c92db3f40 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewHolder.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/spoofing/ReviewCardViewHolder.java @@ -76,7 +76,7 @@ class ReviewCardViewHolder extends RecyclerView.ViewHolder { setNonContactSublines(context, reviewCard); break; case YOUR_CONTACT: - subtextLine1.setText(reviewCard.getReviewRecipient().getE164().orNull()); + subtextLine1.setText(reviewCard.getReviewRecipient().getE164().orElse(null)); subtextLine2.setText(getGroupsInCommon(reviewCard.getInCommonGroupsCount())); break; default: diff --git a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt index 553913f74..59cdd2ecb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/push/SignalServiceNetworkAccess.kt @@ -19,7 +19,6 @@ import org.thoughtcrime.securesms.net.StandardUserAgentInterceptor import org.thoughtcrime.securesms.net.StaticDns import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter import org.thoughtcrime.securesms.util.Base64 -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.push.TrustStore import org.whispersystems.signalservice.internal.configuration.SignalCdnUrl import org.whispersystems.signalservice.internal.configuration.SignalCdshUrl @@ -29,6 +28,7 @@ import org.whispersystems.signalservice.internal.configuration.SignalServiceConf import org.whispersystems.signalservice.internal.configuration.SignalServiceUrl import org.whispersystems.signalservice.internal.configuration.SignalStorageUrl import java.io.IOException +import java.util.Optional /** * Provides a [SignalServiceConfiguration] to be used with our service layer. @@ -172,7 +172,7 @@ class SignalServiceNetworkAccess(context: Context) { arrayOf(SignalCdshUrl(BuildConfig.SIGNAL_CDSH_URL, serviceTrustStore)), interceptors, Optional.of(DNS), - Optional.absent(), + Optional.empty(), zkGroupServerPublicParams ) @@ -223,7 +223,7 @@ class SignalServiceNetworkAccess(context: Context) { arrayOf(SignalCdshUrl(BuildConfig.SIGNAL_CDSH_URL, serviceTrustStore)), interceptors, Optional.of(DNS), - if (SignalStore.proxy().isProxyEnabled) Optional.of(SignalStore.proxy().proxy) else Optional.absent(), + if (SignalStore.proxy().isProxyEnabled) Optional.ofNullable(SignalStore.proxy().proxy) else Optional.empty(), zkGroupServerPublicParams ) @@ -290,7 +290,7 @@ class SignalServiceNetworkAccess(context: Context) { cdshUrls, interceptors, Optional.of(DNS), - Optional.absent(), + Optional.empty(), zkGroupServerPublicParams ) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java index 5ad935136..783e8ee09 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofActivity.java @@ -22,7 +22,6 @@ import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.Pair; import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; import java.io.IOException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofBottomSheetFragment.java b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofBottomSheetFragment.java index 5d7721d00..5e9d1ce2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofBottomSheetFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ratelimit/RecaptchaProofBottomSheetFragment.java @@ -15,7 +15,6 @@ import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.BottomSheetUtil; -import org.thoughtcrime.securesms.util.ThemeUtil; /** * A bottom sheet to be shown when we need to prompt the user to fill out a reCAPTCHA. 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 4f1a9132a..249c63251 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/ReactionsViewModel.java @@ -1,16 +1,12 @@ package org.thoughtcrime.securesms.reactions; import androidx.annotation.NonNull; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.Transformations; import androidx.lifecycle.ViewModel; import androidx.lifecycle.ViewModelProvider; import com.annimon.stream.Stream; -import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.model.MessageId; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import java.util.Comparator; import java.util.List; @@ -18,8 +14,6 @@ import java.util.Map; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.core.Observable; -import io.reactivex.rxjava3.core.Single; -import io.reactivex.rxjava3.subjects.PublishSubject; public class ReactionsViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiPage.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiPage.java index 7b7576159..4e474e7d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiPage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiPage.java @@ -4,7 +4,7 @@ import androidx.annotation.AttrRes; import androidx.annotation.NonNull; import androidx.annotation.StringRes; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.List; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java index 49928f6c4..c17b75cb0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/reactions/any/ReactWithAnyEmojiViewModel.java @@ -17,8 +17,8 @@ import org.thoughtcrime.securesms.keyboard.emoji.EmojiKeyboardPageCategoryMappin import org.thoughtcrime.securesms.keyboard.emoji.search.EmojiSearchRepository; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.reactions.ReactionsRepository; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.TextSecurePreferences; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import java.util.List; import java.util.stream.Collectors; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java index deae91dcb..4003ea455 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipient.java @@ -21,10 +21,10 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.DistributionListRecord; import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicReference; @@ -218,7 +218,7 @@ public final class LiveRecipient { if (groupRecord.isPresent()) { String title = groupRecord.get().getTitle(); List members = Stream.of(groupRecord.get().getMembers()).filterNot(RecipientId::isUnknown).map(this::fetchAndCacheRecipientFromDisk).toList(); - Optional avatarId = Optional.absent(); + Optional avatarId = Optional.empty(); if (groupRecord.get().hasAvatar()) { avatarId = Optional.of(groupRecord.get().getAvatarId()); @@ -227,7 +227,7 @@ public final class LiveRecipient { return new RecipientDetails(title, null, avatarId, false, false, record.getRegistered(), record, members, false); } - return new RecipientDetails(null, null, Optional.absent(), false, false, record.getRegistered(), record, null, false); + return new RecipientDetails(null, null, Optional.empty(), false, false, record.getRegistered(), record, null, false); } @WorkerThread diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java index 89657fe38..7ddd60984 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/LiveRecipientCache.java @@ -155,11 +155,11 @@ public final class LiveRecipientCache { } if (localAci != null) { - selfId = recipientDatabase.getByServiceId(localAci).orNull(); + selfId = recipientDatabase.getByServiceId(localAci).orElse(null); } if (selfId == null && localE164 != null) { - selfId = recipientDatabase.getByE164(localE164).orNull(); + selfId = recipientDatabase.getByE164(localE164).orElse(null); } if (selfId == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index f7323b946..8a93fe0b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -47,11 +47,11 @@ import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.StringUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.util.OptionalUtil; +import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.ArrayList; @@ -63,6 +63,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; import static org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier; @@ -187,7 +188,7 @@ public class Recipient { */ @WorkerThread public static @NonNull Recipient externalPush(@NonNull SignalServiceAddress signalServiceAddress) { - return externalPush(signalServiceAddress.getServiceId(), signalServiceAddress.getNumber().orNull(), false); + return externalPush(signalServiceAddress.getServiceId(), signalServiceAddress.getNumber().orElse(null), false); } /** @@ -215,7 +216,7 @@ public class Recipient { */ @WorkerThread public static @NonNull Recipient externalHighTrustPush(@NonNull Context context, @NonNull SignalServiceAddress signalServiceAddress) { - return externalPush(signalServiceAddress.getServiceId(), signalServiceAddress.getNumber().orNull(), true); + return externalPush(signalServiceAddress.getServiceId(), signalServiceAddress.getNumber().orElse(null), true); } /** @@ -353,7 +354,7 @@ public class Recipient { this.groupId = null; this.distributionListId = null; this.participants = Collections.emptyList(); - this.groupAvatarId = Optional.absent(); + this.groupAvatarId = Optional.empty(); this.isSelf = false; this.blocked = false; this.muteUntil = 0; @@ -362,7 +363,7 @@ public class Recipient { this.messageRingtone = null; this.callRingtone = null; this.insightsBannerTier = InsightsBannerTier.TIER_TWO; - this.defaultSubscriptionId = Optional.absent(); + this.defaultSubscriptionId = Optional.empty(); this.expireMessages = 0; this.registered = RegisteredState.UNKNOWN; this.profileKey = null; @@ -393,7 +394,7 @@ public class Recipient { this.aboutEmoji = null; this.systemProfileName = ProfileName.EMPTY; this.systemContactName = null; - this.extras = Optional.absent(); + this.extras = Optional.empty(); this.hasGroupsInCommon = false; this.badges = Collections.emptyList(); this.isReleaseNotesRecipient = false; @@ -401,9 +402,9 @@ public class Recipient { public Recipient(@NonNull RecipientId id, @NonNull RecipientDetails details, boolean resolved) { this.id = id; - this.resolving = !resolved; - this.serviceId = details.serviceId; - this.pni = details.pni; + this.resolving = !resolved; + this.serviceId = details.serviceId; + this.pni = details.pni; this.username = details.username; this.e164 = details.e164; this.email = details.email; @@ -621,45 +622,45 @@ public class Recipient { getSystemProfileName().getGivenName(), getProfileName().getGivenName(), getDisplayName(context), - getUsername().orNull()); + getUsername().orElse(null)); return StringUtil.isolateBidi(name); } public @NonNull Optional getServiceId() { - return Optional.fromNullable(serviceId); + return Optional.ofNullable(serviceId); } public @NonNull Optional getPni() { - return Optional.fromNullable(pni); + return Optional.ofNullable(pni); } public @NonNull Optional getUsername() { if (FeatureFlags.usernames()) { - return Optional.fromNullable(username); + return Optional.ofNullable(username); } else { - return Optional.absent(); + return Optional.empty(); } } public @NonNull Optional getE164() { - return Optional.fromNullable(e164); + return Optional.ofNullable(e164); } public @NonNull Optional getEmail() { - return Optional.fromNullable(email); + return Optional.ofNullable(email); } public @NonNull Optional getGroupId() { - return Optional.fromNullable(groupId); + return Optional.ofNullable(groupId); } public @NonNull Optional getDistributionListId() { - return Optional.fromNullable(distributionListId); + return Optional.ofNullable(distributionListId); } public @NonNull Optional getSmsAddress() { - return Optional.fromNullable(e164).or(Optional.fromNullable(email)); + return OptionalUtil.or(Optional.ofNullable(e164), Optional.ofNullable(email)); } public @NonNull PNI requirePni() { @@ -705,7 +706,7 @@ public class Recipient { } public boolean hasSmsAddress() { - return getE164().or(getEmail()).isPresent(); + return OptionalUtil.or(getE164(), getEmail()).isPresent(); } public boolean hasE164() { @@ -721,7 +722,7 @@ public class Recipient { } public boolean shouldHideStory() { - return extras.transform(Extras::hideStory).or(false); + return extras.map(Extras::hideStory).orElse(false); } public @NonNull GroupId requireGroupId() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java index 0213ceff9..4da565652 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientDetails.java @@ -12,25 +12,24 @@ import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.database.RecipientDatabase.InsightsBannerTier; import org.thoughtcrime.securesms.database.RecipientDatabase.MentionSetting; -import org.thoughtcrime.securesms.database.model.DistributionListId; -import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.database.RecipientDatabase.RegisteredState; import org.thoughtcrime.securesms.database.RecipientDatabase.UnidentifiedAccessMode; import org.thoughtcrime.securesms.database.RecipientDatabase.VibrateState; +import org.thoughtcrime.securesms.database.model.DistributionListId; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.profiles.ProfileName; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.wallpaper.ChatWallpaper; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceId; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; public class RecipientDetails { @@ -147,7 +146,7 @@ public class RecipientDetails { this.systemProfileName = record.getSystemProfileName(); this.groupName = groupName; this.systemContactName = systemContactName; - this.extras = Optional.fromNullable(record.getExtras()); + this.extras = Optional.ofNullable(record.getExtras()); this.hasGroupsInCommon = record.hasGroupsInCommon(); this.badges = record.getBadges(); this.isReleaseChannel = isReleaseChannel; @@ -175,7 +174,7 @@ public class RecipientDetails { this.participants = new LinkedList<>(); this.profileName = ProfileName.EMPTY; this.insightsBannerTier = InsightsBannerTier.TIER_TWO; - this.defaultSubscriptionId = Optional.absent(); + this.defaultSubscriptionId = Optional.empty(); this.registered = RegisteredState.UNKNOWN; this.profileKey = null; this.profileKeyCredential = null; @@ -203,7 +202,7 @@ public class RecipientDetails { this.aboutEmoji = null; this.systemProfileName = ProfileName.EMPTY; this.systemContactName = null; - this.extras = Optional.absent(); + this.extras = Optional.empty(); this.hasGroupsInCommon = false; this.badges = Collections.emptyList(); this.isReleaseChannel = false; @@ -225,11 +224,11 @@ public class RecipientDetails { } } - return new RecipientDetails(null, settings.getSystemDisplayName(), Optional.absent(), systemContact, isSelf, registeredState, settings, null, isReleaseChannel); + return new RecipientDetails(null, settings.getSystemDisplayName(), Optional.empty(), systemContact, isSelf, registeredState, settings, null, isReleaseChannel); } public static @NonNull RecipientDetails forDistributionList(String title, @Nullable List members, @NonNull RecipientRecord record) { - return new RecipientDetails(title, null, Optional.absent(), false, false, record.getRegistered(), record, members, false); + return new RecipientDetails(title, null, Optional.empty(), false, false, record.getRegistered(), record, members, false); } public static @NonNull RecipientDetails forUnknown() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java index f70fe088b..b0bb378cd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientId.java @@ -54,7 +54,7 @@ public class RecipientId implements Parcelable, Comparable, Databas @AnyThread public static @NonNull RecipientId from(@NonNull SignalServiceAddress address) { - return from(address.getServiceId(), address.getNumber().orNull(), false); + return from(address.getServiceId(), address.getNumber().orElse(null), false); } /** @@ -77,7 +77,7 @@ public class RecipientId implements Parcelable, Comparable, Databas */ @AnyThread public static @NonNull RecipientId fromHighTrust(@NonNull SignalServiceAddress address) { - return from(address.getServiceId(), address.getNumber().orNull(), true); + return from(address.getServiceId(), address.getNumber().orElse(null), true); } /** diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java index 448e8607a..5de64ae93 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientIdCache.java @@ -4,11 +4,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ServiceId; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Optional; /** * Thread safe cache that allows faster looking up of {@link RecipientId}s without hitting the database. 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 ce0cea930..7a47ff378 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/RecipientUtil.java @@ -27,13 +27,13 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.OutgoingExpirationUpdateMessage; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.storage.StorageSyncHelper; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.NotFoundException; import java.io.IOException; import java.util.Collection; import java.util.List; +import java.util.Optional; public class RecipientUtil { @@ -63,7 +63,7 @@ public class RecipientUtil { } if (recipient.hasServiceId()) { - return new SignalServiceAddress(recipient.requireServiceId(), Optional.fromNullable(recipient.resolve().getE164().orNull())); + return new SignalServiceAddress(recipient.requireServiceId(), Optional.ofNullable(recipient.resolve().getE164().orElse(null))); } else { throw new NotFoundException(recipient.getId() + " is not registered!"); } @@ -82,7 +82,7 @@ public class RecipientUtil { return Stream.of(recipients) .map(Recipient::resolve) - .map(r -> new SignalServiceAddress(r.requireServiceId(), r.getE164().orNull())) + .map(r -> new SignalServiceAddress(r.requireServiceId(), r.getE164().orElse(null))) .toList(); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java index 50612d11e..7ca392942 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientBottomSheetDialogFragment.java @@ -199,7 +199,7 @@ public final class RecipientBottomSheetDialogFragment extends BottomSheetDialogF } String usernameNumberString = recipient.hasAUserSetDisplayName(requireContext()) && !recipient.isSelf() - ? recipient.getSmsAddress().transform(PhoneNumberFormatter::prettyPrint).or("").trim() + ? recipient.getSmsAddress().map(PhoneNumberFormatter::prettyPrint).orElse("").trim() : ""; usernameNumber.setText(usernameNumberString); usernameNumber.setVisibility(TextUtils.isEmpty(usernameNumberString) ? View.GONE : View.VISIBLE); diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java index 76dfff2ec..62652fd17 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogRepository.java @@ -54,7 +54,7 @@ final class RecipientDialogRepository { void getIdentity(@NonNull Consumer callback) { SignalExecutors.BOUNDED.execute( - () -> callback.accept(ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(recipientId).orNull())); + () -> callback.accept(ApplicationDependencies.getProtocolStore().aci().identities().getIdentityRecord(recipientId).orElse(null))); } void getRecipient(@NonNull RecipientCallback recipientCallback) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java index cabf3d29e..99a3d3c5d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/ui/bottomsheet/RecipientDialogViewModel.java @@ -7,7 +7,6 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.FragmentActivity; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/PushChallengeRequest.java b/app/src/main/java/org/thoughtcrime/securesms/registration/PushChallengeRequest.java index 00ca6a583..bb1b8d5c7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/PushChallengeRequest.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/PushChallengeRequest.java @@ -7,11 +7,11 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import org.signal.core.util.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import java.io.IOException; import java.util.Locale; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -39,7 +39,7 @@ public final class PushChallengeRequest { { if (!fcmToken.isPresent()) { Log.w(TAG, "Push challenge not requested, as no FCM token was present"); - return Optional.absent(); + return Optional.empty(); } long startTime = System.currentTimeMillis(); @@ -95,10 +95,10 @@ public final class PushChallengeRequest { latch.await(timeoutMs, TimeUnit.MILLISECONDS); - return Optional.fromNullable(challenge.get()); + return Optional.ofNullable(challenge.get()); } catch (InterruptedException | IOException e) { Log.w(TAG, "Error getting push challenge", e); - return Optional.absent(); + return Optional.empty(); } finally { eventBus.unregister(this); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationNavigationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationNavigationActivity.java index 8d806bba3..b81a032ca 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationNavigationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationNavigationActivity.java @@ -22,7 +22,9 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.registration.viewmodel.RegistrationViewModel; import org.thoughtcrime.securesms.service.VerificationCodeParser; import org.thoughtcrime.securesms.util.CommunicationActions; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public final class RegistrationNavigationActivity extends AppCompatActivity { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java index 50dae637c..a0c9e60a1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationRepository.java @@ -33,11 +33,9 @@ import org.whispersystems.libsignal.state.PreKeyRecord; import org.whispersystems.libsignal.state.SignalProtocolStore; import org.whispersystems.libsignal.state.SignedPreKeyRecord; import org.whispersystems.libsignal.util.KeyHelper; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.KbsPinData; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.push.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.PNI; import org.whispersystems.signalservice.api.push.ServiceIdType; import org.whispersystems.signalservice.api.push.SignalServiceAddress; @@ -46,6 +44,7 @@ import org.whispersystems.signalservice.internal.push.VerifyAccountResponse; import java.io.IOException; import java.util.List; +import java.util.Optional; import io.reactivex.rxjava3.core.Single; import io.reactivex.rxjava3.schedulers.Schedulers; @@ -147,7 +146,7 @@ public final class RegistrationRepository { generateAndRegisterPreKeys(ServiceIdType.PNI, accountManager, pniProtocolStore, SignalStore.account().pniPreKeys()); if (registrationData.isFcm()) { - accountManager.setGcmId(Optional.fromNullable(registrationData.getFcmToken())); + accountManager.setGcmId(Optional.ofNullable(registrationData.getFcmToken())); } RecipientDatabase recipientDatabase = SignalDatabase.recipients(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java index bcb86f16c..56b044a86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RegistrationUtil.java @@ -10,7 +10,6 @@ import org.thoughtcrime.securesms.jobs.DirectoryRefreshJob; import org.thoughtcrime.securesms.jobs.StorageSyncJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.util.TextSecurePreferences; public final class RegistrationUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/RequestVerificationCodeResponseProcessor.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/RequestVerificationCodeResponseProcessor.kt index 49ba696e8..2dca2cefd 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/RequestVerificationCodeResponseProcessor.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/RequestVerificationCodeResponseProcessor.kt @@ -6,7 +6,6 @@ import org.whispersystems.signalservice.api.push.exceptions.NonNormalizedPhoneNu import org.whispersystems.signalservice.internal.ServiceResponse import org.whispersystems.signalservice.internal.ServiceResponseProcessor import org.whispersystems.signalservice.internal.push.RequestVerificationCodeResponse -import java.lang.IllegalStateException /** * Process responses from requesting an SMS or Phone code from the server. diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt index bd40b8bfe..8e7806056 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/VerifyAccountRepository.kt @@ -12,7 +12,6 @@ import org.thoughtcrime.securesms.pin.KeyBackupSystemWrongPinException import org.thoughtcrime.securesms.pin.TokenData import org.thoughtcrime.securesms.push.AccountManagerFactory import org.thoughtcrime.securesms.util.TextSecurePreferences -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.KbsPinData import org.whispersystems.signalservice.api.KeyBackupSystemNoDataException import org.whispersystems.signalservice.api.SignalServiceAccountManager @@ -23,6 +22,7 @@ import org.whispersystems.signalservice.internal.push.RequestVerificationCodeRes import org.whispersystems.signalservice.internal.push.VerifyAccountResponse import java.io.IOException import java.util.Locale +import java.util.Optional import java.util.concurrent.TimeUnit /** @@ -44,9 +44,9 @@ class VerifyAccountRepository(private val context: Application) { val pushChallenge = PushChallengeRequest.getPushChallengeBlocking(accountManager, fcmToken, e164, PUSH_REQUEST_TIMEOUT) if (mode == Mode.PHONE_CALL) { - accountManager.requestVoiceVerificationCode(Locale.getDefault(), Optional.fromNullable(captchaToken), pushChallenge, fcmToken) + accountManager.requestVoiceVerificationCode(Locale.getDefault(), Optional.ofNullable(captchaToken), pushChallenge, fcmToken) } else { - accountManager.requestSmsVerificationCode(mode.isSmsRetrieverSupported, Optional.fromNullable(captchaToken), pushChallenge, fcmToken) + accountManager.requestSmsVerificationCode(mode.isSmsRetrieverSupported, Optional.ofNullable(captchaToken), pushChallenge, fcmToken) } }.subscribeOn(Schedulers.io()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java index 09290ae25..2737aec32 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseEnterSmsCodeFragment.java @@ -1,8 +1,5 @@ package org.thoughtcrime.securesms.registration.fragments; -import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView; -import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated; - import android.animation.Animator; import android.os.Bundle; import android.view.View; @@ -44,6 +41,9 @@ import java.util.List; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.Disposable; +import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView; +import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.showConfirmNumberDialogIfTranslated; + /** * Base fragment used by registration and change number flow to input an SMS verification code or request a * phone code after requesting SMS. diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java index fde2fe07e..65ea07cf3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/BaseRegistrationLockFragment.java @@ -1,9 +1,5 @@ package org.thoughtcrime.securesms.registration.fragments; -import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView; -import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; -import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning; - import android.content.res.Resources; import android.os.Bundle; import android.text.InputType; @@ -36,6 +32,10 @@ import java.util.concurrent.TimeUnit; import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; import io.reactivex.rxjava3.disposables.Disposable; +import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView; +import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; +import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.setSpinning; + /** * Base fragment used by registration and change number flow to deal with a registration locked account. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ChooseBackupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ChooseBackupFragment.java index f076ed11a..1115d6e10 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ChooseBackupFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/ChooseBackupFragment.java @@ -22,9 +22,7 @@ import androidx.navigation.Navigation; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.database.documents.Document; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.BackupUtil; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; public class ChooseBackupFragment extends LoggingFragment { diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java index 976b251ce..b65355b5b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationLockFragment.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.registration.fragments; -import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; - import androidx.annotation.NonNull; import androidx.lifecycle.ViewModelProvider; import androidx.navigation.Navigation; @@ -24,6 +22,8 @@ import org.thoughtcrime.securesms.util.navigation.SafeNavigation; import java.io.IOException; import java.util.concurrent.TimeUnit; +import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; + public final class RegistrationLockFragment extends BaseRegistrationLockFragment { private static final String TAG = Log.tag(RegistrationLockFragment.class); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java index 28b3c1f2a..5c0b76776 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/WelcomeFragment.java @@ -40,7 +40,8 @@ import org.thoughtcrime.securesms.util.CommunicationActions; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.navigation.SafeNavigation; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; import static org.thoughtcrime.securesms.registration.fragments.RegistrationViewDelegate.setDebugLogSubmitMultiTapView; import static org.thoughtcrime.securesms.util.CircularProgressButtonUtil.cancelSpinning; @@ -200,7 +201,7 @@ public final class WelcomeFragment extends LoggingFragment { @SuppressLint("MissingPermission") private void initializeNumber() { - Optional localNumber = Optional.absent(); + Optional localNumber = Optional.empty(); if (Permissions.hasAll(requireContext(), Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_PHONE_NUMBERS)) { localNumber = Util.getDeviceNumber(requireContext()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java index 3b7c991ce..05ff18055 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/registration/viewmodel/RegistrationViewModel.java @@ -97,7 +97,7 @@ public final class RegistrationViewModel extends BaseRegistrationViewModel { return super.requestVerificationCode(mode) .doOnSuccess(processor -> { if (processor.hasResult()) { - setFcmToken(processor.getResult().getFcmToken().orNull()); + setFcmToken(processor.getResult().getFcmToken().orElse(null)); } }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt b/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt index 64c88b021..14c2cd640 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/releasechannel/ReleaseChannel.kt @@ -6,10 +6,10 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList import org.thoughtcrime.securesms.mms.IncomingMediaMessage import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.messages.SignalServiceAttachment import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentPointer import org.whispersystems.signalservice.api.messages.SignalServiceAttachmentRemoteId +import java.util.Optional import java.util.UUID /** @@ -36,23 +36,23 @@ object ReleaseChannel { SignalServiceAttachmentRemoteId.from(""), "image/webp", null, - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), imageWidth, imageHeight, - Optional.absent(), + Optional.empty(), Optional.of(image), false, false, false, - Optional.absent(), - Optional.absent(), + Optional.empty(), + Optional.empty(), System.currentTimeMillis() ) Optional.of(listOf(attachment)) } else { - Optional.absent() + Optional.empty() } val message = IncomingMediaMessage( @@ -66,6 +66,6 @@ object ReleaseChannel { messageRanges = messageRanges ) - return SignalDatabase.mms.insertSecureDecryptedMessageInbox(message, threadId).orNull() + return SignalDatabase.mms.insertSecureDecryptedMessageInbox(message, threadId).orElse(null) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageRepository.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageRepository.java index 686119667..ac55f1589 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageRepository.java @@ -13,9 +13,9 @@ import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.MultiDeviceViewedUpdateJob; import org.thoughtcrime.securesms.jobs.SendViewedReceiptJob; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; +import java.util.Optional; class ViewOnceMessageRepository { @@ -41,9 +41,9 @@ class ViewOnceMessageRepository { MultiDeviceViewedUpdateJob.enqueue(Collections.singletonList(info.getSyncMessageId())); } - callback.onComplete(Optional.fromNullable(record)); + callback.onComplete(Optional.ofNullable(record)); } catch (NoSuchMessageException e) { - callback.onComplete(Optional.absent()); + callback.onComplete(Optional.empty()); } }); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java index 04fc92690..6595802fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageView.java @@ -1,13 +1,10 @@ package org.thoughtcrime.securesms.revealable; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Color; -import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; @@ -15,8 +12,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.widget.AppCompatImageView; -import androidx.core.content.ContextCompat; -import androidx.core.widget.ImageViewCompat; import com.pnikosis.materialishprogress.ProgressWheel; diff --git a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageViewModel.java index 78f9b0ce1..2ffa223f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/revealable/ViewOnceMessageViewModel.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.revealable; -import android.app.Application; - import androidx.annotation.NonNull; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -13,7 +11,9 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + class ViewOnceMessageViewModel extends ViewModel { @@ -46,8 +46,8 @@ class ViewOnceMessageViewModel extends ViewModel { private void onMessageRetrieved(@NonNull Optional optionalMessage) { ThreadUtil.runOnMain(() -> { - MmsMessageRecord current = message.getValue() != null ? message.getValue().orNull() : null; - MmsMessageRecord proposed = optionalMessage.orNull(); + MmsMessageRecord current = message.getValue() != null ? message.getValue().orElse(null) : null; + MmsMessageRecord proposed = optionalMessage.orElse(null); if (current != null && proposed != null && current.getId() == proposed.getId()) { Log.d(TAG, "Same ID -- skipping update"); diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java index eb0500766..9f1ca8931 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java @@ -8,9 +8,7 @@ import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Point; import android.graphics.RectF; -import android.graphics.Typeface; import android.net.Uri; -import android.os.Build; import android.os.Bundle; import android.view.HapticFeedbackConstants; import android.view.LayoutInflater; @@ -33,10 +31,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.signal.imageeditor.core.RendererContext; -import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.animation.ResizeAnimation; -import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.signal.imageeditor.core.Bounds; import org.signal.imageeditor.core.ColorableRenderer; import org.signal.imageeditor.core.ImageEditorView; @@ -47,6 +41,9 @@ import org.signal.imageeditor.core.model.EditorModel; import org.signal.imageeditor.core.renderers.BezierDrawingRenderer; import org.signal.imageeditor.core.renderers.FaceBlurRenderer; import org.signal.imageeditor.core.renderers.MultiLineTextRenderer; +import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.animation.ResizeAnimation; +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.fonts.FontTypefaceProvider; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mediasend.MediaSendPageFragment; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ExpirationListener.java b/app/src/main/java/org/thoughtcrime/securesms/service/ExpirationListener.java index baab515c7..77d3c0e8a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/ExpirationListener.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/ExpirationListener.java @@ -6,7 +6,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; -import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; public class ExpirationListener extends BroadcastReceiver { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java index f7811b73e..95a28cacb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java @@ -34,7 +34,6 @@ import androidx.annotation.Nullable; import androidx.core.app.NotificationCompat; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.DummyActivity; import org.thoughtcrime.securesms.MainActivity; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java b/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java index c6875982f..8ad9f01b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/PendingRetryReceiptManager.java @@ -12,10 +12,10 @@ import androidx.annotation.WorkerThread; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.MessageDatabase; +import org.thoughtcrime.securesms.database.PendingRetryReceiptCache; import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.database.model.PendingRetryReceiptModel; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; -import org.thoughtcrime.securesms.database.PendingRetryReceiptCache; import org.thoughtcrime.securesms.util.FeatureFlags; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java index 504a5e60a..62e50a09e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/QuickResponseService.java @@ -48,7 +48,7 @@ public class QuickResponseService extends IntentService { } Recipient recipient = Recipient.external(this, number); - int subscriptionId = recipient.getDefaultSubscriptionId().or(-1); + int subscriptionId = recipient.getDefaultSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); if (!TextUtils.isEmpty(content)) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java b/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java index 4d2751a80..6341ae891 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/VerificationCodeParser.java @@ -17,8 +17,9 @@ package org.thoughtcrime.securesms.service; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -28,13 +29,13 @@ public class VerificationCodeParser { public static Optional parse(String messageBody) { if (messageBody == null) { - return Optional.absent(); + return Optional.empty(); } Matcher challengeMatcher = CHALLENGE_PATTERN.matcher(messageBody); if (!challengeMatcher.matches()) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(challengeMatcher.group(challengeMatcher.groupCount() - 1) + diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java index 8605cbd16..2ed2a416d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ActiveCallActionProcessorDelegate.java @@ -5,8 +5,6 @@ import android.os.ResultReceiver; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import com.annimon.stream.Stream; - import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; import org.signal.ringrtc.CallException; @@ -19,11 +17,8 @@ import org.thoughtcrime.securesms.ringrtc.CallState; import org.thoughtcrime.securesms.ringrtc.RemotePeer; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.webrtc.audio.OutgoingRinger; -import org.whispersystems.signalservice.api.messages.calls.IceUpdateMessage; -import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMessage; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java index 9757bd4a9..249088a9a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/ConnectedCallActionProcessor.java @@ -12,8 +12,6 @@ import org.thoughtcrime.securesms.ringrtc.RemotePeer; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.webrtc.locks.LockManager; -import java.util.List; - /** * Handles action for a connected/ongoing call. At this point it's mostly responding * to user actions (local and remote) on video/mic and adjusting accordingly. 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 85ba66cb6..25a94eb36 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 @@ -13,7 +13,6 @@ import org.signal.ringrtc.GroupCall; import org.signal.ringrtc.PeekInfo; import org.thoughtcrime.securesms.events.WebRtcViewModel; 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.WebRtcServiceState; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java index 668837513..f5780bc7b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingCallActionProcessor.java @@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.service.webrtc.state.VideoState; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.util.NetworkUtil; import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.webrtc.audio.SignalAudioManager; import org.thoughtcrime.securesms.webrtc.locks.LockManager; import org.webrtc.PeerConnection; diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java index 3ce365096..cf73c4b94 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/IncomingGroupCallActionProcessor.java @@ -24,10 +24,9 @@ import org.thoughtcrime.securesms.ringrtc.RemotePeer; import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState; import org.thoughtcrime.securesms.util.NetworkUtil; import org.thoughtcrime.securesms.webrtc.locks.LockManager; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; +import java.util.Optional; import java.util.UUID; import static org.thoughtcrime.securesms.webrtc.CallNotificationBuilder.TYPE_INCOMING_CONNECTING; 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 4b34aaa63..2394e31a4 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 @@ -55,7 +55,6 @@ import org.thoughtcrime.securesms.webrtc.audio.SignalAudioManager; import org.thoughtcrime.securesms.webrtc.locks.LockManager; import org.webrtc.PeerConnection; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; @@ -73,6 +72,7 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.Executor; @@ -624,7 +624,7 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall. } try { messageSender.sendCallMessage(RecipientUtil.toSignalServiceAddress(context, recipient), - recipient.isSelf() ? Optional.absent() : UnidentifiedAccessUtil.getAccessFor(context, recipient), + recipient.isSelf() ? Optional.empty() : UnidentifiedAccessUtil.getAccessFor(context, recipient), callMessage); } catch (UntrustedIdentityException e) { Log.i(TAG, "sendOpaqueCallMessage onFailure: ", e); @@ -891,13 +891,13 @@ public final class SignalCallManager implements CallManager.Observer, GroupCall. (s, p) -> p.handleMessageSentError(s, remotePeer.getCallId(), UNTRUSTED_IDENTITY, - Optional.fromNullable(e.getIdentityKey()))); + Optional.ofNullable(e.getIdentityKey()))); } catch (IOException e) { processSendMessageFailureWithChangeDetection(remotePeer, (s, p) -> p.handleMessageSentError(s, remotePeer.getCallId(), e instanceof UnregisteredUserException ? NO_SUCH_USER : NETWORK_FAILURE, - Optional.absent())); + Optional.empty())); } }); } 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 3bf3dc2d2..e215f07d8 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 @@ -45,7 +45,6 @@ import org.thoughtcrime.securesms.webrtc.locks.LockManager; import org.webrtc.PeerConnection; import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.InvalidKeyException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.calls.AnswerMessage; import org.whispersystems.signalservice.api.messages.calls.BusyMessage; import org.whispersystems.signalservice.api.messages.calls.HangupMessage; @@ -56,6 +55,7 @@ import org.whispersystems.signalservice.api.messages.calls.SignalServiceCallMess import java.util.Collection; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -438,7 +438,7 @@ public abstract class WebRtcActionProcessor { if (errorCallState == WebRtcViewModel.State.UNTRUSTED_IDENTITY) { CallParticipant participant = Objects.requireNonNull(currentState.getCallInfoState().getRemoteCallParticipant(activePeer.getRecipient())); - CallParticipant untrusted = participant.withIdentityKey(identityKey.orNull()); + CallParticipant untrusted = participant.withIdentityKey(identityKey.orElse(null)); builder.changeCallInfoState() .callState(WebRtcViewModel.State.UNTRUSTED_IDENTITY) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/CallInfoState.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/CallInfoState.kt index 520c82d12..5fa677b54 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/CallInfoState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/state/CallInfoState.kt @@ -9,7 +9,6 @@ import org.thoughtcrime.securesms.events.WebRtcViewModel import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.ringrtc.RemotePeer -import java.util.ArrayList /** * General state of ongoing calls. diff --git a/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java b/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java index a0758d485..55b390b35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java +++ b/app/src/main/java/org/thoughtcrime/securesms/shakereport/ShakeToReport.java @@ -15,13 +15,11 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.ShakeDetector; import org.signal.core.util.ThreadUtil; import org.signal.core.util.logging.Log; -import org.signal.core.util.tracing.Tracer; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.logsubmit.SubmitDebugLogRepository; import org.thoughtcrime.securesms.sharing.ShareIntents; -import org.thoughtcrime.securesms.util.FeatureFlags; import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; 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 a8fb72b01..6663c2ab5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareArgs.java @@ -11,7 +11,6 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.thoughtcrime.securesms.database.model.Mention; -import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.stickers.StickerLocator; 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 d79b62384..b73f91a72 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/MultiShareSender.java @@ -87,7 +87,7 @@ public final class MultiShareSender { List mentions = getValidMentionsForRecipient(recipient, multiShareArgs.getMentions()); TransportOption transport = resolveTransportOption(context, recipient); boolean forceSms = recipient.isForceSmsSelection() && transport.isSms(); - int subscriptionId = transport.getSimSubscriptionId().or(-1); + int subscriptionId = transport.getSimSubscriptionId().orElse(-1); long expiresIn = TimeUnit.SECONDS.toMillis(recipient.getExpiresInSeconds()); boolean needsSplit = !transport.isSms() && message != null && diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java index 5ab298b89..bdc548b5e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareActivity.java @@ -66,13 +66,13 @@ import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.SimpleTask; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.atomic.AtomicReference; @@ -524,8 +524,8 @@ public class ShareActivity extends PassphraseRequiredActivity private Set resolvedShareContacts(@NonNull Set sharedContacts) { Set recipients = Stream.of(sharedContacts) .map(contact -> contact.getRecipientId() - .transform(Recipient::resolved) - .or(() -> Recipient.external(this, contact.getNumber()))) + .map(Recipient::resolved) + .orElseGet(() -> Recipient.external(this, contact.getNumber()))) .collect(Collectors.toSet()); Map existingThreads = SignalDatabase.threads() @@ -591,7 +591,7 @@ public class ShareActivity extends PassphraseRequiredActivity return; } - onResolved.accept(data.orNull()); + onResolved.accept(data.orElse(null)); }); } @@ -681,9 +681,9 @@ public class ShareActivity extends PassphraseRequiredActivity 0, false, false, - Optional.absent(), - Optional.absent(), - Optional.absent())); + Optional.empty(), + Optional.empty(), + Optional.empty())); } Intent intent = MediaSelectionActivity.share(this, diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareContact.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareContact.java index aea1b9c8b..c36434699 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareContact.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareContact.java @@ -4,9 +4,9 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Objects; +import java.util.Optional; public final class ShareContact { private final Optional recipientId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareData.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareData.java index f5eb61a47..8fdf54063 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareData.java @@ -6,29 +6,29 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.mediasend.Media; import org.thoughtcrime.securesms.util.MediaUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.List; +import java.util.Optional; class ShareData { - private final Optional uri; - private final Optional mimeType; + private final Optional uri; + private final Optional mimeType; private final Optional> media; private final boolean external; private final boolean isMmsOrSmsSupported; static ShareData forIntentData(@NonNull Uri uri, @NonNull String mimeType, boolean external, boolean isMmsOrSmsSupported) { - return new ShareData(Optional.of(uri), Optional.of(mimeType), Optional.absent(), external, isMmsOrSmsSupported); + return new ShareData(Optional.of(uri), Optional.of(mimeType), Optional.empty(), external, isMmsOrSmsSupported); } static ShareData forPrimitiveTypes() { - return new ShareData(Optional.absent(), Optional.absent(), Optional.absent(), true, true); + return new ShareData(Optional.empty(), Optional.empty(), Optional.empty(), true, true); } static ShareData forMedia(@NonNull List media, boolean isMmsOrSmsSupported) { - return new ShareData(Optional.absent(), Optional.absent(), Optional.of(new ArrayList<>(media)), true, isMmsOrSmsSupported); + return new ShareData(Optional.empty(), Optional.empty(), Optional.of(new ArrayList<>(media)), true, isMmsOrSmsSupported); } private ShareData(Optional uri, Optional mimeType, Optional> media, boolean external, boolean isMmsOrSmsSupported) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareRepository.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareRepository.java index e634cefba..ddea09df0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareRepository.java @@ -31,13 +31,13 @@ import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.UriUtil; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; class ShareRepository { @@ -52,7 +52,7 @@ class ShareRepository { callback.onResult(Optional.of(getResolvedInternal(uri, mimeType))); } catch (IOException e) { Log.w(TAG, "Failed to resolve!", e); - callback.onResult(Optional.absent()); + callback.onResult(Optional.empty()); } }); } @@ -63,10 +63,10 @@ class ShareRepository { void getResolved(@NonNull List uris, @NonNull Callback> callback) { SignalExecutors.BOUNDED.execute(() -> { try { - callback.onResult(Optional.fromNullable(getResolvedInternal(uris))); + callback.onResult(Optional.ofNullable(getResolvedInternal(uris))); } catch (IOException e) { Log.w(TAG, "Failed to resolve!", e); - callback.onResult(Optional.absent()); + callback.onResult(Optional.empty()); } }); } @@ -135,7 +135,7 @@ class ShareRepository { TransportOptions options = new TransportOptions(context, true); options.setDefaultTransport(TransportOption.Type.SMS); - MediaConstraints mmsConstraints = MediaConstraints.getMmsMediaConstraints(options.getSelectedTransport().getSimSubscriptionId().or(-1)); + MediaConstraints mmsConstraints = MediaConstraints.getMmsMediaConstraints(options.getSelectedTransport().getSimSubscriptionId().orElse(-1)); return mmsConstraints.isSatisfied(context, attachment) || mmsConstraints.canResize(attachment); } @@ -188,8 +188,8 @@ class ShareRepository { false, false, Optional.of(Media.ALL_MEDIA_BUCKET_ID), - Optional.absent(), - Optional.absent())); + Optional.empty(), + Optional.empty())); if (media.size() >= MediaSendConstants.MAX_PUSH) { Log.w(TAG, "Exceeded the attachment limit! Skipping the rest."); diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java index b4d4021ee..dcd202b09 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareSelectionMappingModel.java @@ -20,10 +20,10 @@ public class ShareSelectionMappingModel implements MappingModel recipient.isSelf() ? context.getString(R.string.note_to_self) + .map(Recipient::resolved) + .map(recipient -> recipient.isSelf() ? context.getString(R.string.note_to_self) : recipient.getShortDisplayNameIncludingUsername(context)) - .or(shareContact::getNumber); + .orElseGet(shareContact::getNumber); return isFirst ? name : context.getString(R.string.ShareActivity__comma_s, name); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java index 577b53c46..0ee3b3ef5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/ShareViewModel.java @@ -21,11 +21,11 @@ import org.thoughtcrime.securesms.providers.BlobProvider; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collections; import java.util.LinkedHashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import io.reactivex.rxjava3.core.Single; @@ -118,7 +118,7 @@ public class ShareViewModel extends ViewModel { } void onNonExternalShare() { - shareData.setValue(Optional.absent()); + shareData.setValue(Optional.empty()); externalShare = false; } @@ -136,7 +136,7 @@ public class ShareViewModel extends ViewModel { @Override protected void onCleared() { - ShareData data = shareData.getValue() != null ? shareData.getValue().orNull() : null; + ShareData data = shareData.getValue() != null ? shareData.getValue().orElse(null) : null; if (data != null && data.isExternal() && data.isForIntent() && !mediaUsed) { Log.i(TAG, "Clearing out unused data."); 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 e80cee0d8..1a002b71c 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 @@ -8,7 +8,6 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProviders; -import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; import com.annimon.stream.Stream; diff --git a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialViewModel.java index 99b916c35..112a79743 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sharing/interstitial/ShareInterstitialViewModel.java @@ -17,8 +17,8 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreview; import org.thoughtcrime.securesms.sharing.MultiShareArgs; import org.thoughtcrime.securesms.sharing.MultiShareSender; import org.thoughtcrime.securesms.util.DefaultValueLiveData; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; import org.thoughtcrime.securesms.util.Util; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModelList; class ShareInterstitialViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java index 62377359a..93e68a382 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingJoinedMessage.java @@ -1,12 +1,14 @@ package org.thoughtcrime.securesms.sms; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public class IncomingJoinedMessage extends IncomingTextMessage { public IncomingJoinedMessage(RecipientId sender) { - super(sender, 1, System.currentTimeMillis(), -1, System.currentTimeMillis(), null, Optional.absent(), 0, false, null); + super(sender, 1, System.currentTimeMillis(), -1, System.currentTimeMillis(), null, Optional.empty(), 0, false, null); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java index 10b1aceed..3853e4169 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/IncomingTextMessage.java @@ -10,10 +10,10 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.List; +import java.util.Optional; public class IncomingTextMessage implements Parcelable { @@ -91,7 +91,7 @@ public class IncomingTextMessage implements Parcelable { this.subscriptionId = -1; this.expiresInMillis = expiresInMillis; this.unidentified = unidentified; - this.groupId = groupId.orNull(); + this.groupId = groupId.orElse(null); this.serverGuid = serverGuid; } 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 2db4f174f..c29e90eb6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java +++ b/app/src/main/java/org/thoughtcrime/securesms/sms/MessageSender.java @@ -76,8 +76,7 @@ import org.thoughtcrime.securesms.service.ExpiringMessageManager; import org.thoughtcrime.securesms.util.ParcelUtil; import org.thoughtcrime.securesms.util.SignalLocalMetrics; import org.thoughtcrime.securesms.util.TextSecurePreferences; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.io.IOException; import java.util.ArrayList; @@ -87,8 +86,8 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; public class MessageSender { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java index 4a1417f67..c6fcb3967 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerManagementAdapter.java @@ -262,13 +262,13 @@ final class StickerManagementAdapter extends SectionedRecyclerViewAdapter title; - private final Optional author; + private final String packId; + private final String packKey; + private final Optional title; + private final Optional author; private final Optional cover; private final List stickers; @@ -80,7 +79,7 @@ public final class StickerManifest { this.id = id; this.emoji = emoji; this.contentType = contentType; - this.uri = Optional.fromNullable(uri); + this.uri = Optional.ofNullable(uri); } public @NonNull String getPackId() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java index a7864ed8b..ae73aa9a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewActivity.java @@ -30,7 +30,10 @@ import org.thoughtcrime.securesms.util.DeviceProperties; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; +import org.whispersystems.signalservice.api.util.OptionalUtil; + +import java.util.Optional; + /** * Shows the contents of a pack and allows the user to install it (if not installed) or remove it @@ -182,12 +185,12 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity } private void presentManifest(@NonNull StickerManifest manifest) { - stickerTitle.setText(manifest.getTitle().or(getString(R.string.StickerPackPreviewActivity_untitled))); - stickerAuthor.setText(manifest.getAuthor().or(getString(R.string.StickerPackPreviewActivity_unknown))); + stickerTitle.setText(manifest.getTitle().orElse(getString(R.string.StickerPackPreviewActivity_untitled))); + stickerAuthor.setText(manifest.getAuthor().orElse(getString(R.string.StickerPackPreviewActivity_unknown))); adapter.setStickers(manifest.getStickers()); Sticker first = manifest.getStickers().isEmpty() ? null : manifest.getStickers().get(0); - Sticker cover = manifest.getCover().or(Optional.fromNullable(first)).orNull(); + Sticker cover = OptionalUtil.or(manifest.getCover(), Optional.ofNullable(first)).orElse(null); if (cover != null) { Object model = cover.getUri().isPresent() ? new DecryptableStreamUriLoader.DecryptableUri(cover.getUri().get()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java index 53755e72e..f384efffe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewRepository.java @@ -17,13 +17,13 @@ import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.util.Hex; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.messages.SignalServiceStickerManifest; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Optional; public final class StickerPackPreviewRepository { @@ -72,7 +72,7 @@ public final class StickerPackPreviewRepository { return Optional.of(new StickerManifestResult(manifest, record.isInstalled())); } - return Optional.absent(); + return Optional.empty(); } @WorkerThread @@ -95,7 +95,7 @@ public final class StickerPackPreviewRepository { Log.w(TAG, "Failed to retrieve pack manifest.", e); } - return Optional.absent(); + return Optional.empty(); } @WorkerThread @@ -120,7 +120,7 @@ public final class StickerPackPreviewRepository { @NonNull Optional remoteSticker) { return remoteSticker.isPresent() ? Optional.of(toSticker(packId, packKey, remoteSticker.get())) - : Optional.absent(); + : Optional.empty(); } private StickerManifest.Sticker toSticker(@NonNull String packId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewViewModel.java index e64d8d5bb..0d0cd322e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerPackPreviewViewModel.java @@ -12,7 +12,9 @@ import androidx.lifecycle.ViewModelProvider; import org.thoughtcrime.securesms.database.DatabaseObserver; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.stickers.StickerPackPreviewRepository.StickerManifestResult; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + final class StickerPackPreviewViewModel extends ViewModel { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java index 005276ee5..129042f8e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java +++ b/app/src/main/java/org/thoughtcrime/securesms/stickers/StickerUrl.java @@ -8,8 +8,9 @@ import androidx.annotation.Nullable; import org.thoughtcrime.securesms.util.Hex; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; +import org.whispersystems.signalservice.api.util.OptionalUtil; +import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -21,19 +22,19 @@ public class StickerUrl { private static final Pattern STICKER_URL_PATTERN = Pattern.compile("^https://signal\\.art/addstickers/#pack_id=(.*)&pack_key=(.*)$"); public static Optional> parseExternalUri(@Nullable Uri uri) { - if (uri == null) return Optional.absent(); + if (uri == null) return Optional.empty(); - return parseActionUri(uri).or(parseShareLink(uri.toString())); + return OptionalUtil.or(parseActionUri(uri), parseShareLink(uri.toString())); } public static Optional> parseActionUri(@Nullable Uri uri) { - if (uri == null) return Optional.absent(); + if (uri == null) return Optional.empty(); String packId = uri.getQueryParameter("pack_id"); String packKey = uri.getQueryParameter("pack_key"); if (TextUtils.isEmpty(packId) || TextUtils.isEmpty(packKey) || !isValidHex(packId) || !isValidHex(packKey)) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(new Pair<>(packId, packKey)); @@ -48,7 +49,7 @@ public class StickerUrl { } public static @NonNull Optional> parseShareLink(@Nullable String url) { - if (url == null) return Optional.absent(); + if (url == null) return Optional.empty(); Matcher matcher = STICKER_URL_PATTERN.matcher(url); @@ -61,7 +62,7 @@ public class StickerUrl { } } - return Optional.absent(); + return Optional.empty(); } public static String createShareLink(@NonNull String packId, @NonNull String packKey) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java index 791fae137..3d3311af1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/AccountRecordProcessor.java @@ -8,15 +8,15 @@ import androidx.annotation.Nullable; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.recipients.Recipient; -import org.thoughtcrime.securesms.subscription.Subscriber; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; import org.whispersystems.signalservice.api.storage.SignalAccountRecord.PinnedConversation; +import org.whispersystems.signalservice.api.util.OptionalUtil; import org.whispersystems.signalservice.internal.storage.protos.AccountRecord; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * Processes {@link SignalAccountRecord}s. Unlike some other {@link StorageRecordProcessor}s, this @@ -69,11 +69,11 @@ public class AccountRecordProcessor extends DefaultStorageRecordProcessor { @@ -68,21 +68,22 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor getMatching(@NonNull SignalContactRecord remote, @NonNull StorageKeyGenerator keyGenerator) { SignalServiceAddress address = remote.getAddress(); Optional byUuid = recipientDatabase.getByServiceId(address.getServiceId()); - Optional byE164 = address.getNumber().isPresent() ? recipientDatabase.getByE164(address.getNumber().get()) : Optional.absent(); + Optional byE164 = address.getNumber().isPresent() ? recipientDatabase.getByE164(address.getNumber().get()) : Optional.empty(); - return byUuid.or(byE164).transform(recipientDatabase::getRecordForSync) - .transform(settings -> { - if (settings.getStorageId() != null) { - return StorageSyncModels.localToRemoteRecord(settings); - } else { - Log.w(TAG, "Newly discovering a registered user via storage service. Saving a storageId for them."); - recipientDatabase.updateStorageId(settings.getId(), keyGenerator.generate()); + return OptionalUtil.or(byUuid, byE164) + .map(recipientDatabase::getRecordForSync) + .map(settings -> { + if (settings.getStorageId() != null) { + return StorageSyncModels.localToRemoteRecord(settings); + } else { + Log.w(TAG, "Newly discovering a registered user via storage service. Saving a storageId for them."); + recipientDatabase.updateStorageId(settings.getId(), keyGenerator.generate()); - RecipientRecord updatedSettings = Objects.requireNonNull(recipientDatabase.getRecordForSync(settings.getId())); - return StorageSyncModels.localToRemoteRecord(updatedSettings); - } - }) - .transform(r -> r.getContact().get()); + RecipientRecord updatedSettings = Objects.requireNonNull(recipientDatabase.getRecordForSync(settings.getId())); + return StorageSyncModels.localToRemoteRecord(updatedSettings); + } + }) + .map(r -> r.getContact().get()); } @NonNull SignalContactRecord merge(@NonNull SignalContactRecord remote, @NonNull SignalContactRecord local, @NonNull StorageKeyGenerator keyGenerator) { @@ -90,21 +91,21 @@ public class ContactRecordProcessor extends DefaultStorageRecordProcessor v2Record = groupDatabase.getGroup(id.deriveV2MigrationGroupId()); if (v2Record.isPresent()) { @@ -67,9 +67,9 @@ public final class GroupV1RecordProcessor extends DefaultStorageRecordProcessor< Optional recipientId = recipientDatabase.getByGroupId(groupId); - return recipientId.transform(recipientDatabase::getRecordForSync) - .transform(StorageSyncModels::localToRemoteRecord) - .transform(r -> r.getGroupV1().get()); + return recipientId.map(recipientDatabase::getRecordForSync) + .map(StorageSyncModels::localToRemoteRecord) + .map(r -> r.getGroupV1().get()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java index 67995ac88..9e4856616 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/GroupV2RecordProcessor.java @@ -13,12 +13,12 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.GroupId; import org.thoughtcrime.securesms.groups.GroupsV1MigrationUtil; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.storage.SignalGroupV2Record; import java.io.IOException; import java.util.Arrays; import java.util.Map; +import java.util.Optional; public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor { @@ -51,8 +51,8 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor< Optional recipientId = recipientDatabase.getByGroupId(groupId); - return recipientId.transform(recipientDatabase::getRecordForSync) - .transform(settings -> { + return recipientId.map(recipientDatabase::getRecordForSync) + .map(settings -> { if (settings.getSyncExtras().getGroupMasterKey() != null) { return StorageSyncModels.localToRemoteRecord(settings); } else { @@ -61,7 +61,7 @@ public final class GroupV2RecordProcessor extends DefaultStorageRecordProcessor< return StorageSyncModels.localToRemoteRecord(settings, record.getMasterKeyOrThrow()); } }) - .transform(r -> r.getGroupV2().get()); + .map(r -> r.getGroupV2().get()); } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageRecordProcessor.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageRecordProcessor.java index 380ed88e0..43f860d13 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageRecordProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageRecordProcessor.java @@ -2,10 +2,7 @@ package org.thoughtcrime.securesms.storage; import androidx.annotation.NonNull; -import com.annimon.stream.Stream; - import org.whispersystems.signalservice.api.storage.SignalRecord; -import org.whispersystems.signalservice.api.storage.SignalStorageRecord; import java.io.IOException; import java.util.Collection; diff --git a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java index fa74457b7..d928a3f76 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncHelper.java @@ -11,8 +11,8 @@ import com.annimon.stream.Stream; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.database.RecipientDatabase; -import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.database.SignalDatabase; +import org.thoughtcrime.securesms.database.model.RecipientRecord; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.jobs.RetrieveProfileAvatarJob; import org.thoughtcrime.securesms.jobs.StorageSyncJob; @@ -25,7 +25,6 @@ import org.thoughtcrime.securesms.util.Base64; import org.thoughtcrime.securesms.util.SetUtil; import org.thoughtcrime.securesms.util.TextSecurePreferences; import org.thoughtcrime.securesms.util.Util; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; import org.whispersystems.signalservice.api.storage.SignalContactRecord; import org.whispersystems.signalservice.api.storage.SignalStorageManifest; @@ -38,6 +37,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.concurrent.TimeUnit; @@ -126,7 +126,7 @@ public final class StorageSyncHelper { .setPhoneNumberSharingMode(StorageSyncModels.localToRemotePhoneNumberSharingMode(SignalStore.phoneNumberPrivacy().getPhoneNumberSharingMode())) .setPinnedConversations(StorageSyncModels.localToRemotePinnedConversations(pinned)) .setPreferContactAvatars(SignalStore.settings().isPreferSystemContactPhotos()) - .setPayments(SignalStore.paymentsValues().mobileCoinPaymentsEnabled(), Optional.fromNullable(SignalStore.paymentsValues().getPaymentsEntropy()).transform(Entropy::getBytes).orNull()) + .setPayments(SignalStore.paymentsValues().mobileCoinPaymentsEnabled(), Optional.ofNullable(SignalStore.paymentsValues().getPaymentsEntropy()).map(Entropy::getBytes).orElse(null)) .setPrimarySendsSms(Util.isDefaultSmsProvider(context)) .setUniversalExpireTimer(SignalStore.settings().getUniversalExpireTimer()) .setE164(self.requireE164()) @@ -154,7 +154,7 @@ public final class StorageSyncHelper { SignalStore.phoneNumberPrivacy().setPhoneNumberListingMode(update.getNew().isPhoneNumberUnlisted() ? PhoneNumberPrivacyValues.PhoneNumberListingMode.UNLISTED : PhoneNumberPrivacyValues.PhoneNumberListingMode.LISTED); SignalStore.phoneNumberPrivacy().setPhoneNumberSharingMode(StorageSyncModels.remoteToLocalPhoneNumberSharingMode(update.getNew().getPhoneNumberSharingMode())); SignalStore.settings().setPreferSystemContactPhotos(update.getNew().isPreferContactAvatars()); - SignalStore.paymentsValues().setEnabledAndEntropy(update.getNew().getPayments().isEnabled(), Entropy.fromBytes(update.getNew().getPayments().getEntropy().orNull())); + SignalStore.paymentsValues().setEnabledAndEntropy(update.getNew().getPayments().isEnabled(), Entropy.fromBytes(update.getNew().getPayments().getEntropy().orElse(null))); SignalStore.settings().setUniversalExpireTimer(update.getNew().getUniversalExpireTimer()); SignalStore.emojiValues().setReactions(update.getNew().getDefaultReactions()); SignalStore.donationsValues().setDisplayBadgesOnProfile(update.getNew().isDisplayBadgesOnProfile()); 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 f0d941aeb..0e0e6439c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java +++ b/app/src/main/java/org/thoughtcrime/securesms/storage/StorageSyncValidations.java @@ -142,7 +142,7 @@ public final class StorageSyncValidations { if (insert.getContact().isPresent()) { SignalServiceAddress address = insert.getContact().get().getAddress(); - if (self.requireE164().equals(address.getNumber().or("")) || self.requireServiceId().equals(address.getServiceId())) { + if (self.requireE164().equals(address.getNumber().orElse("")) || self.requireServiceId().equals(address.getServiceId())) { throw new SelfAddedAsContactError(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt index 9358ce8ba..ffc3c1aa4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt @@ -41,7 +41,7 @@ class StoryLinkPreviewView @JvmOverloads constructor( val corners = DimensionUnit.DP.toPixels(18f).toInt() image.setCorners(corners, corners, corners, corners) - val imageSlide: ImageSlide? = linkPreview.thumbnail.transform { ImageSlide(image.context, it) }.orNull() + val imageSlide: ImageSlide? = linkPreview.thumbnail.map { ImageSlide(image.context, it) }.orElse(null) if (imageSlide != null) { image.setImageResource(GlideApp.with(image), imageSlide, false, false) image.visible = true @@ -59,7 +59,7 @@ class StoryLinkPreviewView @JvmOverloads constructor( } fun bind(linkPreviewState: LinkPreviewViewModel.LinkPreviewState, hiddenVisibility: Int = View.INVISIBLE) { - bind(linkPreviewState.linkPreview.orNull(), hiddenVisibility) + bind(linkPreviewState.linkPreview.orElse(null), hiddenVisibility) } private fun formatUrl(linkPreview: LinkPreview) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt index 758cab382..fb9f2e384 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/settings/select/BaseStoryRecipientSelectionFragment.kt @@ -20,7 +20,7 @@ import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sharing.ShareContact import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.fragments.findListener -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import java.util.function.Consumer abstract class BaseStoryRecipientSelectionFragment : Fragment(R.layout.stories_base_recipient_selection_fragment), ContactSelectionListFragment.OnContactSelectedListener, ContactSelectionListFragment.HeaderActionProvider { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/StoryViewsAndRepliesPagerParent.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/StoryViewsAndRepliesPagerParent.kt index 3b8c9b5ed..09db8cbd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/StoryViewsAndRepliesPagerParent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/StoryViewsAndRepliesPagerParent.kt @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.stories.viewer.reply -import java.lang.IllegalArgumentException - /** * Implemented by a Fragment who contains a view-pager. * Used to notify children when the selected child changes. diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt index a421bc051..dee9af946 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyDataSource.kt @@ -8,7 +8,6 @@ import org.thoughtcrime.securesms.database.SignalDatabase import org.thoughtcrime.securesms.database.model.MessageRecord import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.recipients.Recipient -import java.lang.UnsupportedOperationException class StoryGroupReplyDataSource(private val parentStoryId: Long) : PagedDataSource { override fun size(): Int { diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt index 093705676..2130f040f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/viewer/reply/group/StoryGroupReplyFragment.kt @@ -40,7 +40,6 @@ import org.thoughtcrime.securesms.util.adapter.mapping.PagingMappingAdapter import org.thoughtcrime.securesms.util.fragments.findListener import org.thoughtcrime.securesms.util.fragments.requireListener import org.thoughtcrime.securesms.util.visible -import java.lang.AssertionError /** * Fragment which contains UI to reply to a group story diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AppSignatureUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/AppSignatureUtil.java index 8e8578b41..d3aeade66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AppSignatureUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AppSignatureUtil.java @@ -9,12 +9,12 @@ import android.content.pm.Signature; import androidx.annotation.NonNull; import org.signal.core.util.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Arrays; +import java.util.Optional; public final class AppSignatureUtil { @@ -39,13 +39,13 @@ public final class AppSignatureUtil { if (signatures.length > 0) { String hash = hash(packageName, signatures[0].toCharsString()); - return Optional.fromNullable(hash); + return Optional.ofNullable(hash); } } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, e); } - return Optional.absent(); + return Optional.empty(); } private static String hash(String packageName, String signature) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java index 639ade90f..382010325 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/AvatarUtil.java @@ -25,8 +25,8 @@ import org.thoughtcrime.securesms.contacts.avatars.ProfileContactPhoto; import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideRequest; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; import java.util.concurrent.ExecutionException; public final class AvatarUtil { @@ -167,7 +167,7 @@ public final class AvatarUtil { } private static Drawable getFallback(@NonNull Context context, @NonNull Recipient recipient, int targetSize) { - String name = Optional.fromNullable(recipient.getDisplayName(context)).or(""); + String name = Optional.ofNullable(recipient.getDisplayName(context)).orElse(""); return new GeneratedContactPhoto(name, R.drawable.ic_profile_outline_40, targetSize).asDrawable(context, recipient.getAvatarColor()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Bitmask.java b/app/src/main/java/org/thoughtcrime/securesms/util/Bitmask.java index 176931348..5fed8736b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Bitmask.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Bitmask.java @@ -1,6 +1,8 @@ package org.thoughtcrime.securesms.util; -import org.whispersystems.libsignal.util.guava.Preconditions; + + +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/BlurTransformation.java b/app/src/main/java/org/thoughtcrime/securesms/util/BlurTransformation.java index 27050d3ac..4292af93b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/BlurTransformation.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/BlurTransformation.java @@ -13,7 +13,7 @@ import androidx.annotation.NonNull; import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.security.MessageDigest; import java.util.Locale; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java index 6fc6dcf8e..cd3326565 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/CommunicationActions.java @@ -197,7 +197,7 @@ public class CommunicationActions { GroupId.V2 groupId = GroupId.v2(groupInviteLinkUrl.getGroupMasterKey()); SimpleTask.run(SignalExecutors.BOUNDED, () -> { - GroupDatabase.GroupRecord group = SignalDatabase.groups().getGroup(groupId).orNull(); + GroupDatabase.GroupRecord group = SignalDatabase.groups().getGroup(groupId).orElse(null); return group != null && group.isActive() ? Recipient.resolved(group.getRecipientId()) : null; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/CursorUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/CursorUtil.java index 2503a5cfc..83fd019c8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/CursorUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/CursorUtil.java @@ -4,7 +4,8 @@ import android.database.Cursor; import androidx.annotation.NonNull; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; + public final class CursorUtil { @@ -48,15 +49,15 @@ public final class CursorUtil { public static Optional getString(@NonNull Cursor cursor, @NonNull String column) { if (cursor.getColumnIndex(column) < 0) { - return Optional.absent(); + return Optional.empty(); } else { - return Optional.fromNullable(requireString(cursor, column)); + return Optional.ofNullable(requireString(cursor, column)); } } public static Optional getInt(@NonNull Cursor cursor, @NonNull String column) { if (cursor.getColumnIndex(column) < 0) { - return Optional.absent(); + return Optional.empty(); } else { return Optional.of(requireInt(cursor, column)); } @@ -64,7 +65,7 @@ public final class CursorUtil { public static Optional getBoolean(@NonNull Cursor cursor, @NonNull String column) { if (cursor.getColumnIndex(column) < 0) { - return Optional.absent(); + return Optional.empty(); } else { return Optional.of(requireBoolean(cursor, column)); } @@ -72,9 +73,9 @@ public final class CursorUtil { public static Optional getBlob(@NonNull Cursor cursor, @NonNull String column) { if (cursor.getColumnIndex(column) < 0) { - return Optional.absent(); + return Optional.empty(); } else { - return Optional.fromNullable(requireBlob(cursor, column)); + return Optional.ofNullable(requireBlob(cursor, column)); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DefaultValueLiveData.java b/app/src/main/java/org/thoughtcrime/securesms/util/DefaultValueLiveData.java index 7c91e1922..2f6eb1ef7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/DefaultValueLiveData.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/DefaultValueLiveData.java @@ -3,7 +3,8 @@ package org.thoughtcrime.securesms.util; import androidx.annotation.NonNull; import androidx.lifecycle.MutableLiveData; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; + /** * Helps prevent all the @Nullable warnings when working with LiveData. diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java index c479479c4..eb1ae5ac0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/EarlyMessageCache.java @@ -3,12 +3,12 @@ package org.thoughtcrime.securesms.util; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceContent; import java.util.LinkedList; import java.util.List; import java.util.Objects; +import java.util.Optional; /** * Sometimes a message that is referencing another message can arrive out of order. In these cases, @@ -42,7 +42,7 @@ public final class EarlyMessageCache { * @param sentTimestamp The sent timestamp of the message in question. */ public Optional> retrieve(@NonNull RecipientId sender, long sentTimestamp) { - return Optional.fromNullable(cache.remove(new MessageId(sender, sentTimestamp))); + return Optional.ofNullable(cache.remove(new MessageId(sender, sentTimestamp))); } private static final class MessageId { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java index 416b5e46d..7f8c37cda 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/GroupUtil.java @@ -21,7 +21,6 @@ import org.thoughtcrime.securesms.mms.OutgoingGroupUpdateMessage; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.SignalServiceContent; import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage; import org.whispersystems.signalservice.api.messages.SignalServiceGroup; @@ -32,6 +31,7 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos.GroupC import java.io.IOException; import java.util.Collections; import java.util.List; +import java.util.Optional; public final class GroupUtil { @@ -96,7 +96,7 @@ public final class GroupUtil { if (groupContext.isPresent()) { return Optional.of(idFromGroupContext(groupContext.get())); } - return Optional.absent(); + return Optional.empty(); } public static @NonNull GroupMasterKey requireMasterKey(@NonNull byte[] masterKey) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java index fd7b9e128..6b332b7d1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java @@ -34,12 +34,12 @@ import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.SignalProtocolAddress; import org.whispersystems.libsignal.state.SessionRecord; import org.whispersystems.libsignal.state.SessionStore; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalSessionLock; import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.List; +import java.util.Optional; public final class IdentityUtil { @@ -95,7 +95,7 @@ public final class IdentityUtil { } if (remote) { - IncomingTextMessage incoming = new IncomingTextMessage(recipient.getId(), 1, time, -1, time, null, Optional.absent(), 0, false, null); + IncomingTextMessage incoming = new IncomingTextMessage(recipient.getId(), 1, time, -1, time, null, Optional.empty(), 0, false, null); if (verified) incoming = new IncomingIdentityVerifiedMessage(incoming); else incoming = new IncomingIdentityDefaultMessage(incoming); @@ -133,7 +133,7 @@ public final class IdentityUtil { } } - IncomingTextMessage incoming = new IncomingTextMessage(recipientId, 1, time, -1, time, null, Optional.absent(), 0, false, null); + IncomingTextMessage incoming = new IncomingTextMessage(recipientId, 1, time, -1, time, null, Optional.empty(), 0, false, null); IncomingIdentityUpdateMessage individualUpdate = new IncomingIdentityUpdateMessage(incoming); Optional insertResult = smsDatabase.insertMessageInbox(individualUpdate); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java index 577b51121..d1a933cab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/LocaleFeatureFlags.java @@ -39,7 +39,7 @@ public final class LocaleFeatureFlags { public static @NonNull Optional getMediaQualityLevel() { Map countryValues = parseCountryValues(FeatureFlags.getMediaQualityLevels(), NOT_FOUND); - int level = getCountryValue(countryValues, Recipient.self().getE164().or(""), NOT_FOUND); + int level = getCountryValue(countryValues, Recipient.self().getE164().orElse(""), NOT_FOUND); return Optional.ofNullable(PushMediaConstraints.MediaConfig.forLevel(level)); } @@ -73,7 +73,7 @@ public final class LocaleFeatureFlags { return false; } - long countEnabled = getCountryValue(countryCodeValues, self.getE164().or(""), 0); + long countEnabled = getCountryValue(countryCodeValues, self.getE164().orElse(""), 0); long currentUserBucket = BucketingUtil.bucket(flag, self.requireServiceId().uuid(), 1_000_000); return countEnabled > currentUserBucket; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/MessageUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/MessageUtil.java index e166c15d2..60f678a02 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/MessageUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/MessageUtil.java @@ -7,11 +7,11 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.mms.TextSlide; import org.thoughtcrime.securesms.providers.BlobProvider; -import org.whispersystems.libsignal.util.guava.Optional; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; +import java.util.Optional; public final class MessageUtil { @@ -23,7 +23,7 @@ public final class MessageUtil { */ public static SplitResult getSplitMessage(@NonNull Context context, @NonNull String rawText, int maxPrimaryMessageSize) { String bodyText = rawText; - Optional textSlide = Optional.absent(); + Optional textSlide = Optional.empty(); if (bodyText.length() > maxPrimaryMessageSize) { bodyText = rawText.substring(0, maxPrimaryMessageSize); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java index d13443ded..965817aaf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -33,7 +33,6 @@ import org.whispersystems.libsignal.IdentityKey; import org.whispersystems.libsignal.IdentityKeyPair; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException; import org.whispersystems.signalservice.api.crypto.ProfileCipher; @@ -51,6 +50,7 @@ import org.whispersystems.signalservice.internal.push.SignalServiceProtos; import java.io.IOException; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.stream.Collectors; import io.reactivex.rxjava3.core.Single; @@ -125,7 +125,7 @@ public final class ProfileUtil { @NonNull ProfileService profileService, boolean allowUnidentifiedAccess) { - Optional unidentifiedAccess = allowUnidentifiedAccess ? getUnidentifiedAccess(context, recipient) : Optional.absent(); + Optional unidentifiedAccess = allowUnidentifiedAccess ? getUnidentifiedAccess(context, recipient) : Optional.empty(); Optional profileKey = ProfileKeyUtil.profileKeyOptional(recipient.getProfileKey()); return Single.fromCallable(() -> toSignalServiceAddress(context, recipient)) @@ -222,8 +222,8 @@ public final class ProfileUtil { public static void uploadProfileWithBadges(@NonNull Context context, @NonNull List badges) throws IOException { Log.d(TAG, "uploadProfileWithBadges()"); uploadProfile(Recipient.self().getProfileName(), - Optional.fromNullable(Recipient.self().getAbout()).or(""), - Optional.fromNullable(Recipient.self().getAboutEmoji()).or(""), + Optional.ofNullable(Recipient.self().getAbout()).orElse(""), + Optional.ofNullable(Recipient.self().getAboutEmoji()).orElse(""), getSelfPaymentsAddressProtobuf(), AvatarUploadParams.unchanged(AvatarHelper.hasAvatar(context, Recipient.self().getId())), badges); @@ -238,8 +238,8 @@ public final class ProfileUtil { Log.d(TAG, "uploadProfileWithName()"); try (StreamDetails avatar = AvatarHelper.getSelfProfileAvatarStream(context)) { uploadProfile(profileName, - Optional.fromNullable(Recipient.self().getAbout()).or(""), - Optional.fromNullable(Recipient.self().getAboutEmoji()).or(""), + Optional.ofNullable(Recipient.self().getAbout()).orElse(""), + Optional.ofNullable(Recipient.self().getAboutEmoji()).orElse(""), getSelfPaymentsAddressProtobuf(), AvatarUploadParams.unchanged(AvatarHelper.hasAvatar(context, Recipient.self().getId())), Recipient.self().getBadges()); @@ -281,8 +281,8 @@ public final class ProfileUtil { public static void uploadProfileWithAvatar(@Nullable StreamDetails avatar) throws IOException { Log.d(TAG, "uploadProfileWithAvatar()"); uploadProfile(Recipient.self().getProfileName(), - Optional.fromNullable(Recipient.self().getAbout()).or(""), - Optional.fromNullable(Recipient.self().getAboutEmoji()).or(""), + Optional.ofNullable(Recipient.self().getAbout()).orElse(""), + Optional.ofNullable(Recipient.self().getAboutEmoji()).orElse(""), getSelfPaymentsAddressProtobuf(), AvatarUploadParams.forAvatar(avatar), Recipient.self().getBadges()); @@ -320,9 +320,9 @@ public final class ProfileUtil { profileName.serialize(), about, aboutEmoji, - Optional.fromNullable(paymentsAddress), + Optional.ofNullable(paymentsAddress), avatar, - badgeIds).orNull(); + badgeIds).orElse(null); SignalStore.registrationValues().markHasUploadedProfile(); if (!avatar.keepTheSame) { SignalDatabase.recipients().setProfileAvatar(Recipient.self().getId(), avatarPath); @@ -350,13 +350,13 @@ public final class ProfileUtil { return unidentifiedAccess.get().getTargetUnidentifiedAccess(); } - return Optional.absent(); + return Optional.empty(); } private static @NonNull SignalServiceAddress toSignalServiceAddress(@NonNull Context context, @NonNull Recipient recipient) throws IOException { if (recipient.getRegistered() == RecipientDatabase.RegisteredState.NOT_REGISTERED) { if (recipient.hasServiceId()) { - return new SignalServiceAddress(recipient.requireServiceId(), recipient.getE164().orNull()); + return new SignalServiceAddress(recipient.requireServiceId(), recipient.getE164().orElse(null)); } else { throw new IOException(recipient.getId() + " not registered!"); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SignalLocalMetrics.java b/app/src/main/java/org/thoughtcrime/securesms/util/SignalLocalMetrics.java index 19775d08f..657015b3f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SignalLocalMetrics.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SignalLocalMetrics.java @@ -6,7 +6,6 @@ import androidx.annotation.Nullable; import java.util.HashMap; import java.util.Map; -import java.util.Objects; /** * A nice interface for {@link LocalMetrics} that gives us a place to define string constants and nicer method names. diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java index c64afaf97..f2e280294 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SqlUtil.java @@ -11,8 +11,7 @@ import com.annimon.stream.Stream; import net.zetetic.database.sqlcipher.SQLiteDatabase; import org.thoughtcrime.securesms.database.model.DatabaseId; -import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Preconditions; +import org.whispersystems.signalservice.api.util.Preconditions; import java.util.ArrayList; import java.util.Arrays; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java index 5d1212a97..9d6f63183 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/SupportEmailUtil.java @@ -83,7 +83,7 @@ public final class SupportEmailUtil { } private static CharSequence getSignalPackage(@NonNull Context context) { - return String.format("%s (%s)", BuildConfig.APPLICATION_ID, AppSignatureUtil.getAppSignature(context).or("Unknown")); + return String.format("%s (%s)", BuildConfig.APPLICATION_ID, AppSignatureUtil.getAppSignature(context).orElse("Unknown")); } private static CharSequence getRegistrationLockEnabled(@NonNull Context context) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java b/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java index 0b901b3f3..16094d12c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/TextSecurePreferences.java @@ -28,10 +28,7 @@ import org.thoughtcrime.securesms.lock.RegistrationLockReminders; import org.thoughtcrime.securesms.notifications.NotificationChannels; import org.thoughtcrime.securesms.preferences.widgets.NotificationPrivacyPreference; import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.libsignal.util.Medium; -import java.io.IOException; -import java.security.SecureRandom; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/UsernameUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/UsernameUtil.java index 863bf8cc3..a3d6d93a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/UsernameUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/UsernameUtil.java @@ -11,12 +11,12 @@ import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.dependencies.ApplicationDependencies; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.profiles.SignalServiceProfile; import org.whispersystems.signalservice.api.push.ServiceId; import java.io.IOException; import java.util.Locale; +import java.util.Optional; import java.util.regex.Pattern; public class UsernameUtil { @@ -45,7 +45,7 @@ public class UsernameUtil { } else if (!FULL_PATTERN.matcher(value).matches()) { return Optional.of(InvalidReason.INVALID_CHARACTERS); } else { - return Optional.absent(); + return Optional.empty(); } } @@ -67,10 +67,10 @@ public class UsernameUtil { try { Log.d(TAG, "No local user with this username. Searching remotely."); - SignalServiceProfile profile = ApplicationDependencies.getSignalServiceMessageReceiver().retrieveProfileByUsername(username, Optional.absent(), Locale.getDefault()); - return Optional.fromNullable(profile.getServiceId()); + SignalServiceProfile profile = ApplicationDependencies.getSignalServiceMessageReceiver().retrieveProfileByUsername(username, Optional.empty(), Locale.getDefault()); + return Optional.ofNullable(profile.getServiceId()); } catch (IOException e) { - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java index 925facae6..420d0662e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/Util.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/Util.java @@ -51,7 +51,6 @@ import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.ComposeText; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.OutgoingLegacyMmsConnection; -import org.whispersystems.libsignal.util.guava.Optional; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -64,6 +63,7 @@ import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; public class Util { @@ -245,19 +245,19 @@ public class Util { final String localNumber = ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getLine1Number(); final Optional countryIso = getSimCountryIso(context); - if (TextUtils.isEmpty(localNumber)) return Optional.absent(); - if (!countryIso.isPresent()) return Optional.absent(); + if (TextUtils.isEmpty(localNumber)) return Optional.empty(); + if (!countryIso.isPresent()) return Optional.empty(); - return Optional.fromNullable(PhoneNumberUtil.getInstance().parse(localNumber, countryIso.get())); + return Optional.ofNullable(PhoneNumberUtil.getInstance().parse(localNumber, countryIso.get())); } catch (NumberParseException e) { Log.w(TAG, e); - return Optional.absent(); + return Optional.empty(); } } public static Optional getSimCountryIso(Context context) { String simCountryIso = ((TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE)).getSimCountryIso(); - return Optional.fromNullable(simCountryIso != null ? simCountryIso.toUpperCase() : null); + return Optional.ofNullable(simCountryIso != null ? simCountryIso.toUpperCase() : null); } public static @NonNull T firstNonNull(@Nullable T optional, @NonNull T fallback) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/VerifySpan.java b/app/src/main/java/org/thoughtcrime/securesms/util/VerifySpan.java index 7f9d2ccad..2b69a4c64 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/VerifySpan.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/VerifySpan.java @@ -6,9 +6,9 @@ import android.view.View; import androidx.annotation.NonNull; -import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch; import org.thoughtcrime.securesms.recipients.RecipientId; +import org.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.whispersystems.libsignal.IdentityKey; public class VerifySpan extends ClickableSpan { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.java b/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.java index f3d401d9f..270343575 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/VersionTracker.java @@ -11,7 +11,6 @@ import org.thoughtcrime.securesms.jobs.RemoteConfigRefreshJob; import org.thoughtcrime.securesms.jobs.RetrieveReleaseChannelJob; import org.thoughtcrime.securesms.keyvalue.SignalStore; -import java.io.IOException; import java.util.concurrent.TimeUnit; public class VersionTracker { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java index b97d4e406..c648239ad 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/RecyclerViewConcatenateAdapterStickyHeader.java @@ -7,7 +7,9 @@ import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.components.RecyclerViewFastScroller; import org.thoughtcrime.securesms.util.StickyHeaderDecoration; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public final class RecyclerViewConcatenateAdapterStickyHeader extends RecyclerViewConcatenateAdapter implements StickyHeaderDecoration.StickyHeaderAdapter, @@ -16,12 +18,12 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle @Override public long getHeaderId(int position) { - return getForPosition(position).transform(p -> p.first().getHeaderId(p.second())).or(-1L); + return getForPosition(position).map(p -> p.first().getHeaderId(p.second())).orElse(-1L); } @Override public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position, int type) { - return getForPosition(position).transform(p -> p.first().onCreateHeaderViewHolder(parent, p.second(), type)).orNull(); + return getForPosition(position).map(p -> p.first().onCreateHeaderViewHolder(parent, p.second(), type)).orElse(null); } @Override @@ -39,13 +41,13 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle public CharSequence getBubbleText(int position) { Optional> forPosition = getForPosition(position); - return forPosition.transform(a -> { + return forPosition.map(a -> { if (a.first() instanceof RecyclerViewFastScroller.FastScrollAdapter) { return ((RecyclerViewFastScroller.FastScrollAdapter) a.first()).getBubbleText(a.second()); } else { return ""; } - }).or(""); + }).orElse(""); } private Optional> getForPosition(int position) { @@ -56,6 +58,6 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle StickyHeaderDecoration.StickyHeaderAdapter sticky = (StickyHeaderDecoration.StickyHeaderAdapter) adapter; return Optional.of(new Pair<>(sticky, localAdapterPosition.localPosition)); } - return Optional.absent(); + return Optional.empty(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory.java b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory.java index 168a53f0a..438bb89e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/LayoutFactory.java @@ -7,7 +7,8 @@ import android.view.ViewGroup; import androidx.annotation.LayoutRes; import androidx.annotation.NonNull; -import org.whispersystems.libsignal.util.guava.Function; +import java.util.function.Function; + public class LayoutFactory> implements Factory { private Function> creator; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter.java b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter.java index d16bf3608..1d2e10621 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/adapter/mapping/MappingAdapter.java @@ -10,13 +10,13 @@ import androidx.recyclerview.widget.ListAdapter; import androidx.recyclerview.widget.RecyclerView; import org.thoughtcrime.securesms.util.NoCrossfadeChangeDefaultAnimator; -import org.whispersystems.libsignal.util.guava.Function; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.function.Function; import kotlin.collections.CollectionsKt; import kotlin.jvm.functions.Function1; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat.java b/app/src/main/java/org/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat.java index 9df9e1bc2..16e06a3b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/dualsim/SubscriptionManagerCompat.java @@ -12,8 +12,6 @@ import androidx.annotation.RequiresApi; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.util.ServiceUtil; -import org.whispersystems.libsignal.util.guava.Function; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Collection; import java.util.Collections; @@ -22,7 +20,9 @@ import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; +import java.util.function.Function; public final class SubscriptionManagerCompat { @@ -36,7 +36,7 @@ public final class SubscriptionManagerCompat { public Optional getPreferredSubscriptionId() { if (Build.VERSION.SDK_INT < 24) { - return Optional.absent(); + return Optional.empty(); } return Optional.of(SubscriptionManager.getDefaultSmsSubscriptionId()); @@ -44,10 +44,10 @@ public final class SubscriptionManagerCompat { public Optional getActiveSubscriptionInfo(int subscriptionId) { if (Build.VERSION.SDK_INT < 22) { - return Optional.absent(); + return Optional.empty(); } - return Optional.fromNullable(getActiveSubscriptionInfoMap(false).get(subscriptionId)); + return Optional.ofNullable(getActiveSubscriptionInfoMap(false).get(subscriptionId)); } public @NonNull Collection getActiveAndReadySubscriptionInfos() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/fragments/ListenerExtensions.kt b/app/src/main/java/org/thoughtcrime/securesms/util/fragments/ListenerExtensions.kt index 9fce0bf62..3a6ccbd53 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/fragments/ListenerExtensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/util/fragments/ListenerExtensions.kt @@ -1,7 +1,6 @@ package org.thoughtcrime.securesms.util.fragments import androidx.fragment.app.Fragment -import java.lang.Exception /** * Given an input type [T], find an instance of it first looking through all diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataUtil.java index 199c81714..85ea6dd42 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/livedata/LiveDataUtil.java @@ -14,13 +14,13 @@ import com.annimon.stream.function.Predicate; import org.signal.core.util.concurrent.SignalExecutors; import org.thoughtcrime.securesms.util.concurrent.SerialMonoLifoExecutor; -import org.whispersystems.libsignal.util.guava.Function; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.concurrent.Executor; +import java.util.function.Function; public final class LiveDataUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaper.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaper.java index a55eaa08d..53ef7adcc 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaper.java @@ -7,7 +7,6 @@ import androidx.annotation.NonNull; import org.thoughtcrime.securesms.conversation.colors.ChatColors; import org.thoughtcrime.securesms.conversation.colors.ChatColorsMapper; -import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper; import java.util.Arrays; diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperActivity.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperActivity.java index 166340959..5965d4236 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperActivity.java @@ -6,7 +6,6 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.ViewModelProviders; import androidx.navigation.NavGraph; import androidx.navigation.Navigation; diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperFactory.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperFactory.java index 782a09a6c..ba95bf9e5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperFactory.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperFactory.java @@ -2,7 +2,6 @@ package org.thoughtcrime.securesms.wallpaper; import android.net.Uri; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper; 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 f90180950..2a26bb0ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperPreviewActivity.java @@ -23,10 +23,10 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.FullscreenHelper; -import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.Projection; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.WindowUtil; +import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import java.util.Collections; import java.util.Objects; 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 19d775fa2..e78a1c418 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/ChatWallpaperViewModel.java @@ -20,16 +20,16 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.DefaultValueLiveData; import org.thoughtcrime.securesms.util.adapter.mapping.MappingModel; import org.thoughtcrime.securesms.util.livedata.LiveDataUtil; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.List; import java.util.Objects; +import java.util.Optional; public class ChatWallpaperViewModel extends ViewModel { - private final ChatWallpaperRepository repository = new ChatWallpaperRepository(); - private final MutableLiveData> wallpaper = new MutableLiveData<>(); - private final MutableLiveData> builtins = new MutableLiveData<>(); + private final ChatWallpaperRepository repository = new ChatWallpaperRepository(); + private final MutableLiveData> wallpaper = new MutableLiveData<>(); + private final MutableLiveData> builtins = new MutableLiveData<>(); private final MutableLiveData dimInDarkTheme = new MutableLiveData<>(); private final MutableLiveData enableWallpaperControls = new MutableLiveData<>(); private final MutableLiveData chatColors = new MutableLiveData<>(); @@ -44,7 +44,7 @@ public class ChatWallpaperViewModel extends ViewModel { ChatWallpaper currentWallpaper = repository.getCurrentWallpaper(recipientId); dimInDarkTheme.setValue(currentWallpaper == null || currentWallpaper.getDimLevelForDarkTheme() > 0f); enableWallpaperControls.setValue(hasClearableWallpaper()); - wallpaper.setValue(Optional.fromNullable(currentWallpaper)); + wallpaper.setValue(Optional.ofNullable(currentWallpaper)); if (recipientId != null) { liveRecipient = Recipient.live(recipientId); @@ -87,7 +87,7 @@ public class ChatWallpaperViewModel extends ViewModel { } void setWallpaper(@Nullable ChatWallpaper chatWallpaper) { - wallpaper.setValue(Optional.fromNullable(chatWallpaper)); + wallpaper.setValue(Optional.ofNullable(chatWallpaper)); } void saveWallpaperSelection() { @@ -100,7 +100,7 @@ public class ChatWallpaperViewModel extends ViewModel { if (recipientId != null) { ChatWallpaper globalWallpaper = SignalStore.wallpaper().getWallpaper(); - this.wallpaper.setValue(Optional.fromNullable(globalWallpaper)); + this.wallpaper.setValue(Optional.ofNullable(globalWallpaper)); this.dimInDarkTheme.setValue(globalWallpaper == null || globalWallpaper.getDimLevelForDarkTheme() > 0); } @@ -110,7 +110,7 @@ public class ChatWallpaperViewModel extends ViewModel { enableWallpaperControls.setValue(true); } - Optional updated = wallpaper.transform(paper -> ChatWallpaperFactory.updateWithDimming(paper, dimInDarkTheme ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f)); + Optional updated = wallpaper.map(paper -> ChatWallpaperFactory.updateWithDimming(paper, dimInDarkTheme ? ChatWallpaper.FIXED_DIM_LEVEL_FOR_DARK_THEME : 0f)); if (updated.isPresent()) { repository.saveWallpaper(recipientId, updated.get(), this::refreshChatColors); diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/UriChatWallpaper.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/UriChatWallpaper.java index 8821404df..041df2e31 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/UriChatWallpaper.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/UriChatWallpaper.java @@ -10,15 +10,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; -import org.jetbrains.annotations.NotNull; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.conversation.colors.ChatColors; -import org.thoughtcrime.securesms.conversation.colors.ChatColorsPalette; import org.thoughtcrime.securesms.database.model.databaseprotos.Wallpaper; import org.thoughtcrime.securesms.mms.DecryptableStreamUriLoader; import org.thoughtcrime.securesms.mms.GlideApp; diff --git a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/crop/WallpaperCropViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/crop/WallpaperCropViewModel.java index 0c186b948..4924a3aa2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/wallpaper/crop/WallpaperCropViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/wallpaper/crop/WallpaperCropViewModel.java @@ -15,7 +15,6 @@ import androidx.lifecycle.ViewModelProvider; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.logging.Log; -import org.signal.imageeditor.core.RendererContext; import org.signal.imageeditor.core.model.EditorModel; import org.thoughtcrime.securesms.fonts.FontTypefaceProvider; import org.thoughtcrime.securesms.recipients.Recipient; diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBandwidthMode.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBandwidthMode.java index 915263264..c9cdac5ab 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBandwidthMode.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/CallBandwidthMode.java @@ -1,14 +1,5 @@ package org.thoughtcrime.securesms.webrtc; -import android.content.Context; - -import androidx.annotation.NonNull; - -import org.signal.core.util.logging.Log; -import org.signal.ringrtc.CallException; -import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.util.NetworkUtil; - /** * Represents the user's desired bandwidth mode for calls. */ diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/SignalAudioManager.kt b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/SignalAudioManager.kt index dfe1888b1..c81905827 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/SignalAudioManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/audio/SignalAudioManager.kt @@ -15,7 +15,7 @@ import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.service.webrtc.AndroidTelecomUtil import org.thoughtcrime.securesms.util.safeUnregisterReceiver -import org.whispersystems.libsignal.util.guava.Preconditions +import org.whispersystems.signalservice.api.util.Preconditions private val TAG = Log.tag(SignalAudioManager::class.java) diff --git a/app/src/main/java/org/thoughtcrime/securesms/webrtc/locks/ProximityLock.java b/app/src/main/java/org/thoughtcrime/securesms/webrtc/locks/ProximityLock.java index dde1884b9..0246dbd9e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/webrtc/locks/ProximityLock.java +++ b/app/src/main/java/org/thoughtcrime/securesms/webrtc/locks/ProximityLock.java @@ -4,10 +4,10 @@ import android.os.Build; import android.os.PowerManager; import org.signal.core.util.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.util.Optional; /** * Controls access to the proximity lock. @@ -19,7 +19,7 @@ class ProximityLock { private static final String TAG = Log.tag(ProximityLock.class); - private final Method wakelockParameterizedRelease = getWakelockParamterizedReleaseMethod(); + private final Method wakelockParameterizedRelease = getWakelockParamterizedReleaseMethod(); private final Optional proximityLock; private static final int PROXIMITY_SCREEN_OFF_WAKE_LOCK = 32; @@ -32,16 +32,16 @@ class ProximityLock { private Optional getProximityLock(PowerManager pm) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { if (pm.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) { - return Optional.fromNullable(pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "signal:proximity")); + return Optional.ofNullable(pm.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "signal:proximity")); } else { - return Optional.absent(); + return Optional.empty(); } } else { try { - return Optional.fromNullable(pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "signal:incall")); + return Optional.ofNullable(pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "signal:incall")); } catch (Throwable t) { Log.e(TAG, "Failed to create proximity lock", t); - return Optional.absent(); + return Optional.empty(); } } } diff --git a/app/src/main/res/layout/fragment_add_allowed_members.xml b/app/src/main/res/layout/fragment_add_allowed_members.xml index 0c5d8e580..e83a0f304 100644 --- a/app/src/main/res/layout/fragment_add_allowed_members.xml +++ b/app/src/main/res/layout/fragment_add_allowed_members.xml @@ -1,7 +1,6 @@ diff --git a/app/src/main/res/layout/subscribe_learn_more_bottom_sheet_dialog_fragment.xml b/app/src/main/res/layout/subscribe_learn_more_bottom_sheet_dialog_fragment.xml index 975c3408c..8a62e4e19 100644 --- a/app/src/main/res/layout/subscribe_learn_more_bottom_sheet_dialog_fragment.xml +++ b/app/src/main/res/layout/subscribe_learn_more_bottom_sheet_dialog_fragment.xml @@ -1,7 +1,6 @@ diff --git a/app/src/main/res/transition/conversation_settings_exit_transition.xml b/app/src/main/res/transition/conversation_settings_exit_transition.xml index d5eac1bbd..aaa55fb59 100644 --- a/app/src/main/res/transition/conversation_settings_exit_transition.xml +++ b/app/src/main/res/transition/conversation_settings_exit_transition.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/app/src/main/res/transition/transparent_window_wipe_transition.xml b/app/src/main/res/transition/transparent_window_wipe_transition.xml index 5e3f17b6f..c76e883ca 100644 --- a/app/src/main/res/transition/transparent_window_wipe_transition.xml +++ b/app/src/main/res/transition/transparent_window_wipe_transition.xml @@ -1,5 +1,5 @@ - + diff --git a/app/src/spinner/java/org/thoughtcrime/securesms/SpinnerApplicationContext.kt b/app/src/spinner/java/org/thoughtcrime/securesms/SpinnerApplicationContext.kt index 019af6df9..0c243221f 100644 --- a/app/src/spinner/java/org/thoughtcrime/securesms/SpinnerApplicationContext.kt +++ b/app/src/spinner/java/org/thoughtcrime/securesms/SpinnerApplicationContext.kt @@ -27,7 +27,7 @@ class SpinnerApplicationContext : ApplicationContext() { this, mapOf( "Device" to "${Build.MODEL} (Android ${Build.VERSION.RELEASE}, API ${Build.VERSION.SDK_INT})", - "Package" to "$packageName (${AppSignatureUtil.getAppSignature(this).or("Unknown")})", + "Package" to "$packageName (${AppSignatureUtil.getAppSignature(this).orElse("Unknown")})", "App Version" to "${BuildConfig.VERSION_NAME} (${BuildConfig.CANONICAL_VERSION_CODE}, ${BuildConfig.GIT_HASH})", "Profile Name" to (if (SignalStore.account().isRegistered) Recipient.self().profileName.toString() else "none"), "E164" to (SignalStore.account().e164 ?: "none"), diff --git a/app/src/test/java/org/thoughtcrime/securesms/BaseUnitTest.java b/app/src/test/java/org/thoughtcrime/securesms/BaseUnitTest.java index 0bc4b3a41..6299696f5 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/BaseUnitTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/BaseUnitTest.java @@ -9,11 +9,9 @@ import android.text.TextUtils; import org.junit.Before; import org.junit.Rule; -import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; -import org.mockito.invocation.InvocationOnMock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.stubbing.Answer; diff --git a/app/src/test/java/org/thoughtcrime/securesms/components/emoji/EmojiUtilTest_isEmoji.java b/app/src/test/java/org/thoughtcrime/securesms/components/emoji/EmojiUtilTest_isEmoji.java index c8c8b89b9..8727eb458 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/components/emoji/EmojiUtilTest_isEmoji.java +++ b/app/src/test/java/org/thoughtcrime/securesms/components/emoji/EmojiUtilTest_isEmoji.java @@ -4,7 +4,6 @@ import android.app.Application; import androidx.test.core.app.ApplicationProvider; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/test/java/org/thoughtcrime/securesms/contacts/SelectedContactSetTest.java b/app/src/test/java/org/thoughtcrime/securesms/contacts/SelectedContactSetTest.java index f32bef64f..10d3a15a7 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/contacts/SelectedContactSetTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/contacts/SelectedContactSetTest.java @@ -3,13 +3,13 @@ package org.thoughtcrime.securesms.contacts; import org.junit.Test; import org.thoughtcrime.securesms.recipients.RecipientId; -import static java.util.Arrays.asList; -import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; public final class SelectedContactSetTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java b/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java index b671a3317..a1b50b575 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/conversationlist/UnarchivedConversationListDataSourceTest.java @@ -3,9 +3,7 @@ package org.thoughtcrime.securesms.conversationlist; import android.app.Application; import android.database.Cursor; - import org.junit.Before; -import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt index 233f56549..aeab324ef 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/GroupTestUtil.kt @@ -15,12 +15,12 @@ import org.signal.storageservice.protos.groups.local.EnabledState import org.signal.zkgroup.groups.GroupMasterKey import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.RecipientId -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.groupsv2.DecryptedGroupHistoryEntry import org.whispersystems.signalservice.api.groupsv2.GroupHistoryPage import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations import org.whispersystems.signalservice.api.push.DistributionId import org.whispersystems.signalservice.api.push.ServiceId +import java.util.Optional import java.util.UUID fun DecryptedGroupChange.Builder.setNewDescription(description: String) { @@ -67,7 +67,7 @@ class ChangeSet { } fun toApiResponse(): GroupHistoryPage { - return GroupHistoryPage(changeSet.map { DecryptedGroupHistoryEntry(Optional.fromNullable(it.groupSnapshot), Optional.fromNullable(it.groupChange)) }, GroupHistoryPage.PagingData.NONE) + return GroupHistoryPage(changeSet.map { DecryptedGroupHistoryEntry(Optional.ofNullable(it.groupSnapshot), Optional.ofNullable(it.groupChange)) }, GroupHistoryPage.PagingData.NONE) } } @@ -100,7 +100,7 @@ class GroupChangeData(private val revision: Int, private val groupOperations: Gr class GroupStateTestData(private val masterKey: GroupMasterKey, private val groupOperations: GroupsV2Operations.GroupOperations? = null) { var localState: DecryptedGroup? = null - var groupRecord: Optional = Optional.absent() + var groupRecord: Optional = Optional.empty() var serverState: DecryptedGroup? = null var changeSet: ChangeSet? = null var groupChange: GroupChange? = null diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt index abb62c6ff..31b610718 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/RecipientDatabaseTestUtils.kt @@ -13,8 +13,8 @@ import org.thoughtcrime.securesms.recipients.RecipientDetails import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.util.Bitmask import org.thoughtcrime.securesms.wallpaper.ChatWallpaper -import org.whispersystems.libsignal.util.guava.Optional import org.whispersystems.signalservice.api.push.ServiceId +import java.util.Optional import java.util.UUID import kotlin.random.Random @@ -26,7 +26,7 @@ object RecipientDatabaseTestUtils { fun createRecipient( resolved: Boolean = false, groupName: String? = null, - groupAvatarId: Optional = Optional.absent(), + groupAvatarId: Optional = Optional.empty(), systemContact: Boolean = false, isSelf: Boolean = false, participants: List = listOf(), diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt b/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt index cdc34e73b..313dbd269 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/database/TestSms.kt @@ -5,7 +5,7 @@ import android.text.TextUtils import org.thoughtcrime.securesms.groups.GroupId import org.thoughtcrime.securesms.recipients.RecipientId import org.thoughtcrime.securesms.sms.IncomingTextMessage -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional import java.util.UUID import android.database.sqlite.SQLiteDatabase as AndroidSQLiteDatabase @@ -22,7 +22,7 @@ object TestSms { serverTimestampMillis: Long = System.currentTimeMillis(), receivedTimestampMillis: Long = System.currentTimeMillis(), encodedBody: String = "encodedBody", - groupId: Optional = Optional.absent(), + groupId: Optional = Optional.empty(), expiresInMillis: Long = 0, unidentified: Boolean = false, serverGuid: String = UUID.randomUUID().toString(), diff --git a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java index ee5849cc7..e1e522afe 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/database/model/GroupsV2UpdateMessageProducerTest.java @@ -9,7 +9,6 @@ import androidx.test.core.app.ApplicationProvider; import com.annimon.stream.Stream; import com.google.common.collect.ImmutableMap; -import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -41,7 +40,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mockStatic; import static org.thoughtcrime.securesms.groups.v2.ChangeBuilder.changeBy; import static org.thoughtcrime.securesms.groups.v2.ChangeBuilder.changeByUnknown; import static org.thoughtcrime.securesms.util.StringUtil.isolateBidi; diff --git a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java index 97f643ad6..723ccc6c2 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java +++ b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.java @@ -19,8 +19,8 @@ import org.thoughtcrime.securesms.payments.Payments; import org.thoughtcrime.securesms.push.SignalServiceNetworkAccess; import org.thoughtcrime.securesms.recipients.LiveRecipientCache; import org.thoughtcrime.securesms.revealable.ViewOnceMessageManager; -import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.ExpiringMessageManager; +import org.thoughtcrime.securesms.service.ExpiringStoriesManager; import org.thoughtcrime.securesms.service.PendingRetryReceiptManager; import org.thoughtcrime.securesms.service.TrimThreadsByDateManager; import org.thoughtcrime.securesms.service.webrtc.SignalCallManager; diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.java b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.java index 825b06e07..c593f3bc8 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/ProfileKeySetTest.java @@ -5,7 +5,6 @@ import org.signal.core.util.logging.Log; import org.signal.zkgroup.profiles.ProfileKey; import org.thoughtcrime.securesms.crypto.ProfileKeyUtil; import org.thoughtcrime.securesms.testutil.LogRecorder; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import java.util.Collections; diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GlobalGroupStateTest.java b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GlobalGroupStateTest.java index 6f06b0708..2b7585091 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GlobalGroupStateTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GlobalGroupStateTest.java @@ -4,9 +4,9 @@ import org.junit.Test; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; +import static org.junit.Assert.assertEquals; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; -import static org.junit.Assert.assertEquals; public final class GlobalGroupStateTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStateMapperTest.java b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStateMapperTest.java index c3a0f3aaf..a82b8bf8b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStateMapperTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/GroupStateMapperTest.java @@ -12,9 +12,6 @@ import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.UUID; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -23,6 +20,9 @@ import static org.junit.Assert.assertSame; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.thoughtcrime.securesms.groups.v2.processing.GroupStateMapper.LATEST; +import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; public final class GroupStateMapperTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/StateChainTest.java b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/StateChainTest.java index a32ba5695..fbeaf9093 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/StateChainTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/groups/v2/processing/StateChainTest.java @@ -2,11 +2,11 @@ package org.thoughtcrime.securesms.groups.v2.processing; import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; import static java.util.Arrays.asList; import static java.util.Collections.emptyList; import static java.util.Collections.singletonList; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertThat; public final class StateChainTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java index 1d6690e61..182b30e56 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdFollowUpJobMigrationTest.java @@ -1,6 +1,5 @@ package org.thoughtcrime.securesms.jobmanager.migrations; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; diff --git a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java index 506d32af4..af54d778b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/jobmanager/migrations/RecipientIdJobMigrationTest.java @@ -1,12 +1,9 @@ package org.thoughtcrime.securesms.jobmanager.migrations; import android.app.Application; -import android.content.Context; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; @@ -39,7 +36,6 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; diff --git a/app/src/test/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtilTest_parseOpenGraphFields.java b/app/src/test/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtilTest_parseOpenGraphFields.java index 17914b714..f432bf7e3 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtilTest_parseOpenGraphFields.java +++ b/app/src/test/java/org/thoughtcrime/securesms/linkpreview/LinkPreviewUtilTest_parseOpenGraphFields.java @@ -4,13 +4,12 @@ import android.app.Application; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; import org.robolectric.ParameterizedRobolectricTestRunner; import org.robolectric.annotation.Config; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Arrays; import java.util.Collection; +import java.util.Optional; import static junit.framework.TestCase.assertEquals; @@ -179,9 +178,9 @@ public class LinkPreviewUtilTest_parseOpenGraphFields { @Test public void parseOpenGraphFields() { LinkPreviewUtil.OpenGraph openGraph = LinkPreviewUtil.parseOpenGraphFields(html); - assertEquals(Optional.fromNullable(title), openGraph.getTitle()); - assertEquals(Optional.fromNullable(description), openGraph.getDescription()); + assertEquals(Optional.ofNullable(title), openGraph.getTitle()); + assertEquals(Optional.ofNullable(description), openGraph.getDescription()); assertEquals(date, openGraph.getDate()); - assertEquals(Optional.fromNullable(imageUrl), openGraph.getImageUrl()); + assertEquals(Optional.ofNullable(imageUrl), openGraph.getImageUrl()); } } diff --git a/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt b/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt index 65438dda5..fe0b2ea40 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/mediasend/MediaRepositoryTest.kt @@ -21,7 +21,7 @@ import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.database.AttachmentDatabase.TransformProperties import org.thoughtcrime.securesms.testutil.EmptyLogger import org.thoughtcrime.securesms.util.MediaUtil -import org.whispersystems.libsignal.util.guava.Optional +import java.util.Optional @RunWith(RobolectricTestRunner::class) @Config(manifest = Config.NONE, application = Application::class) @@ -113,9 +113,9 @@ class MediaRepositoryTest { duration: Long = 0, borderless: Boolean = false, videoGif: Boolean = false, - bucketId: Optional = Optional.absent(), - caption: Optional = Optional.absent(), - transformProperties: Optional = Optional.absent() + bucketId: Optional = Optional.empty(), + caption: Optional = Optional.empty(), + transformProperties: Optional = Optional.empty() ): Media { return Media( uri, diff --git a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java index e07809124..ca3e37578 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/notifications/MarkReadReceiverTest.java @@ -9,7 +9,6 @@ import com.annimon.stream.Stream; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; diff --git a/app/src/test/java/org/thoughtcrime/securesms/payments/GeographicalRestrictionsTest.java b/app/src/test/java/org/thoughtcrime/securesms/payments/GeographicalRestrictionsTest.java index 7d23e7f29..b467bf902 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/payments/GeographicalRestrictionsTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/payments/GeographicalRestrictionsTest.java @@ -1,14 +1,11 @@ package org.thoughtcrime.securesms.payments; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.testutil.EmptyLogger; import org.thoughtcrime.securesms.util.FeatureFlags; import static org.junit.Assert.assertFalse; diff --git a/app/src/test/java/org/thoughtcrime/securesms/payments/history/BlockTransactionReconstructionTests.java b/app/src/test/java/org/thoughtcrime/securesms/payments/history/BlockTransactionReconstructionTests.java index 45b5bebc5..368823101 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/payments/history/BlockTransactionReconstructionTests.java +++ b/app/src/test/java/org/thoughtcrime/securesms/payments/history/BlockTransactionReconstructionTests.java @@ -19,9 +19,9 @@ import java.util.Collection; import java.util.List; import java.util.Locale; -import static java.util.stream.IntStream.range; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static java.util.stream.IntStream.range; @RunWith(Parameterized.class) public final class BlockTransactionReconstructionTests { 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 6e5d7021f..79200e420 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 @@ -19,7 +19,6 @@ import org.thoughtcrime.securesms.payments.proto.MobileCoinLedger; import org.thoughtcrime.securesms.payments.proto.PaymentMetaData; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.testutil.LogRecorder; -import org.thoughtcrime.securesms.testutil.SystemOutLogger; import org.whispersystems.libsignal.util.ByteUtil; import org.whispersystems.signalservice.api.payments.Money; import org.whispersystems.signalservice.api.util.Uint64RangeException; diff --git a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/ZipListTest.java b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/ZipListTest.java index 433e29586..41d6a4b7d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/ZipListTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/payments/reconciliation/ZipListTest.java @@ -5,9 +5,9 @@ import org.junit.Test; import java.util.Arrays; import java.util.List; -import static java.util.Collections.emptyList; import static org.junit.Assert.assertEquals; import static org.thoughtcrime.securesms.payments.reconciliation.ZipList.zipList; +import static java.util.Collections.emptyList; public final class ZipListTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java index b8ab1f5b3..88807d652 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientExporterTest.java @@ -9,7 +9,8 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import org.thoughtcrime.securesms.profiles.ProfileName; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; import static android.provider.ContactsContract.Intents.Insert.EMAIL; import static android.provider.ContactsContract.Intents.Insert.NAME; @@ -55,7 +56,7 @@ public final class RecipientExporterTest { when(recipient.requireE164()).thenReturn(phone); when(recipient.getE164()).thenAnswer(i -> Optional.of(phone)); - when(recipient.getEmail()).thenAnswer(i -> Optional.absent()); + when(recipient.getEmail()).thenAnswer(i -> Optional.empty()); return recipient; } @@ -66,7 +67,7 @@ public final class RecipientExporterTest { when(recipient.requireEmail()).thenReturn(email); when(recipient.getEmail()).thenAnswer(i -> Optional.of(email)); - when(recipient.getE164()).thenAnswer(i -> Optional.absent()); + when(recipient.getE164()).thenAnswer(i -> Optional.empty()); return recipient; } diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.java b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.java index 86134c7fe..23b84b782 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdCacheTest.java @@ -7,10 +7,9 @@ import org.junit.Before; import org.junit.Test; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.testutil.LogRecorder; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; +import java.util.Optional; import java.util.UUID; import static org.junit.Assert.assertEquals; @@ -267,8 +266,8 @@ public final class RecipientIdCacheTest { Recipient mock = mock(Recipient.class); when(mock.getId()).thenReturn(recipientId); - when(mock.getServiceId()).thenReturn(Optional.fromNullable(serviceId)); - when(mock.getE164()).thenReturn(Optional.fromNullable(e164)); + when(mock.getServiceId()).thenReturn(Optional.ofNullable(serviceId)); + when(mock.getE164()).thenReturn(Optional.ofNullable(e164)); return mock; } diff --git a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdSerializationTest.java b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdSerializationTest.java index 325ac75f1..1da168d38 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdSerializationTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/recipients/RecipientIdSerializationTest.java @@ -2,14 +2,14 @@ package org.thoughtcrime.securesms.recipients; import org.junit.Test; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; +import static java.util.Arrays.asList; +import static java.util.Collections.emptyList; +import static java.util.Collections.singletonList; public final class RecipientIdSerializationTest { diff --git a/app/src/test/java/org/thoughtcrime/securesms/registration/PushChallengeRequestTest.java b/app/src/test/java/org/thoughtcrime/securesms/registration/PushChallengeRequestTest.java index d2847861f..05443cd7d 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/registration/PushChallengeRequestTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/registration/PushChallengeRequestTest.java @@ -7,10 +7,10 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceAccountManager; import java.io.IOException; +import java.util.Optional; import static org.hamcrest.Matchers.greaterThanOrEqualTo; import static org.hamcrest.Matchers.lessThan; @@ -23,8 +23,8 @@ import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.verifyNoMoreInteractions; @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, application = Application.class) @@ -75,7 +75,7 @@ public final class PushChallengeRequestTest { SignalServiceAccountManager signal = mock(SignalServiceAccountManager.class); long startTime = System.currentTimeMillis(); - PushChallengeRequest.getPushChallengeBlocking(signal, Optional.absent(), "+123456", 500L); + PushChallengeRequest.getPushChallengeBlocking(signal, Optional.empty(), "+123456", 500L); long duration = System.currentTimeMillis() - startTime; assertThat(duration, lessThan(500L)); @@ -85,7 +85,7 @@ public final class PushChallengeRequestTest { public void getPushChallengeBlocking_returns_absent_if_no_fcm_token_supplied() { SignalServiceAccountManager signal = mock(SignalServiceAccountManager.class); - Optional challenge = PushChallengeRequest.getPushChallengeBlocking(signal, Optional.absent(), "+123456", 500L); + Optional challenge = PushChallengeRequest.getPushChallengeBlocking(signal, Optional.empty(), "+123456", 500L); verifyNoInteractions(signal); assertFalse(challenge.isPresent()); diff --git a/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java b/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java index ac4967313..b15028f38 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/registration/viewmodel/LocalCodeRequestRateLimiterTest.java @@ -1,11 +1,11 @@ package org.thoughtcrime.securesms.registration.viewmodel; +import org.junit.Test; + import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.thoughtcrime.securesms.registration.VerifyAccountRepository.Mode; -import org.junit.Test; - public final class LocalCodeRequestRateLimiterTest { @Test diff --git a/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java b/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java index 77464d592..571650f5b 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/service/VerificationCodeParserTest.java @@ -3,10 +3,10 @@ package org.thoughtcrime.securesms.service; import org.junit.Before; import org.junit.Test; import org.thoughtcrime.securesms.BaseUnitTest; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.Arrays; import java.util.Collection; +import java.util.Optional; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; diff --git a/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.java b/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.java index 43b109896..036fb715c 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/storage/StorageSyncHelperTest.java @@ -5,8 +5,6 @@ import com.annimon.stream.Stream; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.junit.MockitoJUnit; @@ -15,7 +13,6 @@ import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.storage.StorageSyncHelper.IdDifferenceResult; import org.thoughtcrime.securesms.util.FeatureFlags; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.storage.SignalAccountRecord; @@ -30,6 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertEquals; diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/DelimiterUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/util/DelimiterUtilTest.java index 87217345b..0aac40890 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/DelimiterUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/DelimiterUtilTest.java @@ -8,7 +8,6 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockedStatic; -import org.mockito.Mockito; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.stubbing.Answer; diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/SqlUtilTest.java b/app/src/test/java/org/thoughtcrime/securesms/util/SqlUtilTest.java index 0312de1a9..c6b4b0781 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/SqlUtilTest.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/SqlUtilTest.java @@ -7,7 +7,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import java.util.ArrayList; diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_abbreviateInMiddle.java b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_abbreviateInMiddle.java index 2e45b70d2..a0a2ca81a 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_abbreviateInMiddle.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_abbreviateInMiddle.java @@ -1,7 +1,5 @@ package org.thoughtcrime.securesms.util; -import androidx.annotation.Nullable; - import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; diff --git a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_trimToFit.java b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_trimToFit.java index 471e3a011..7ae5bbc41 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_trimToFit.java +++ b/app/src/test/java/org/thoughtcrime/securesms/util/StringUtilTest_trimToFit.java @@ -1,11 +1,6 @@ package org.thoughtcrime.securesms.util; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.junit.Assume.assumeTrue; - import android.app.Application; - import android.os.Build; import org.junit.Test; @@ -13,6 +8,9 @@ import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; +import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeTrue; + @RunWith(RobolectricTestRunner.class) @Config(manifest = Config.NONE, application = Application.class) public final class StringUtilTest_trimToFit { diff --git a/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt b/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt new file mode 100644 index 000000000..402b53971 --- /dev/null +++ b/core-util/src/main/java/org/signal/core/util/OptionalExtensions.kt @@ -0,0 +1,11 @@ +package org.signal.core.util + +import java.util.Optional + +fun Optional.or(other: Optional): Optional { + return if (this.isPresent) { + this + } else { + other + } +} \ No newline at end of file diff --git a/dependencies.gradle b/dependencies.gradle index 4794728f7..e29fee87d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -4,7 +4,7 @@ dependencyResolutionManagement { versionCatalogs { libs { - version('signal-client', '0.12.3') + version('signal-client', '0.14.0') version('exoplayer', '2.15.0') version('androidx-camera', '1.0.0-beta11') version('androidx-lifecycle', '2.3.1') diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index e02e39eee..92076f81d 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -3427,11 +3427,27 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + + + + + + + + + diff --git a/libsignal/service/lint.xml b/libsignal/service/lint.xml new file mode 100644 index 000000000..63a9d791d --- /dev/null +++ b/libsignal/service/lint.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/InvalidMessageStructureException.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/InvalidMessageStructureException.java index 44337e8c8..9a1fea405 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/InvalidMessageStructureException.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/InvalidMessageStructureException.java @@ -1,6 +1,7 @@ package org.whispersystems.signalservice.api; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; /** * An exception thrown when something about the proto is malformed. e.g. one of the fields has an invalid value. @@ -12,26 +13,26 @@ public final class InvalidMessageStructureException extends Exception { public InvalidMessageStructureException(String message) { super(message); - this.sender = Optional.absent(); - this.device = Optional.absent(); + this.sender = Optional.empty(); + this.device = Optional.empty(); } public InvalidMessageStructureException(String message, String sender, int device) { super(message); - this.sender = Optional.fromNullable(sender); + this.sender = Optional.ofNullable(sender); this.device = Optional.of(device); } public InvalidMessageStructureException(Exception e, String sender, int device) { super(e); - this.sender = Optional.fromNullable(sender); + this.sender = Optional.ofNullable(sender); this.device = Optional.of(device); } public InvalidMessageStructureException(Exception e) { super(e); - this.sender = Optional.absent(); - this.device = Optional.absent(); + this.sender = Optional.empty(); + this.device = Optional.empty(); } public Optional getSender() { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/KeyBackupService.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/KeyBackupService.java index 9a432a55d..178e1da80 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/KeyBackupService.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/KeyBackupService.java @@ -18,7 +18,6 @@ import org.whispersystems.signalservice.internal.keybackup.protos.BackupResponse import org.whispersystems.signalservice.internal.keybackup.protos.RestoreResponse; import org.whispersystems.signalservice.internal.push.PushServiceSocket; import org.whispersystems.signalservice.internal.push.RemoteAttestationUtil; -import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.Util; import java.io.IOException; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountDataStore.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountDataStore.java index 5a41a4f1a..9fccc5163 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountDataStore.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountDataStore.java @@ -2,8 +2,6 @@ package org.whispersystems.signalservice.api; import org.whispersystems.libsignal.state.SignalProtocolStore; -import java.io.Closeable; - /** * And extension of the normal protocol store interface that has additional methods that are needed * in the service layer, but not the protocol layer. diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index 38f65898a..ad5e5a86f 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -18,8 +18,6 @@ import org.whispersystems.libsignal.ecc.ECPublicKey; import org.whispersystems.libsignal.logging.Log; import org.whispersystems.libsignal.state.PreKeyRecord; import org.whispersystems.libsignal.state.SignedPreKeyRecord; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.account.AccountAttributes; import org.whispersystems.signalservice.api.crypto.InvalidCiphertextException; import org.whispersystems.signalservice.api.crypto.ProfileCipher; @@ -36,8 +34,8 @@ import org.whispersystems.signalservice.api.profiles.AvatarUploadParams; import org.whispersystems.signalservice.api.profiles.ProfileAndCredential; import org.whispersystems.signalservice.api.profiles.SignalServiceProfileWrite; import org.whispersystems.signalservice.api.push.ACI; -import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.PNI; +import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.ServiceIdType; import org.whispersystems.signalservice.api.push.SignedPreKeyEntity; import org.whispersystems.signalservice.api.push.exceptions.NoContentException; @@ -54,6 +52,7 @@ import org.whispersystems.signalservice.api.storage.StorageId; import org.whispersystems.signalservice.api.storage.StorageKey; import org.whispersystems.signalservice.api.storage.StorageManifestKey; import org.whispersystems.signalservice.api.util.CredentialsProvider; +import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.internal.ServiceResponse; import org.whispersystems.signalservice.internal.configuration.SignalServiceConfiguration; import org.whispersystems.signalservice.internal.contacts.crypto.ContactDiscoveryCipher; @@ -100,6 +99,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; @@ -566,7 +566,7 @@ public class SignalServiceAccountManager { return Optional.of(SignalStorageModels.remoteToLocalStorageManifest(storageManifest, storageKey)); } catch (InvalidKeyException | NotFoundException e) { Log.w(TAG, "Error while fetching manifest.", e); - return Optional.absent(); + return Optional.empty(); } } @@ -588,12 +588,12 @@ public class SignalServiceAccountManager { if (storageManifest.getValue().isEmpty()) { Log.w(TAG, "Got an empty storage manifest!"); - return Optional.absent(); + return Optional.empty(); } return Optional.of(SignalStorageModels.remoteToLocalStorageManifest(storageManifest, storageKey)); } catch (NoContentException e) { - return Optional.absent(); + return Optional.empty(); } } @@ -725,7 +725,7 @@ public class SignalServiceAccountManager { return Optional.of(conflictManifest); } else { - return Optional.absent(); + return Optional.empty(); } } @@ -821,7 +821,7 @@ public class SignalServiceAccountManager { byte[] ciphertextName = profileCipher.encryptString(name, ProfileCipher.getTargetNameLength(name)); byte[] ciphertextAbout = profileCipher.encryptString(about, ProfileCipher.getTargetAboutLength(about)); byte[] ciphertextEmoji = profileCipher.encryptString(aboutEmoji, ProfileCipher.EMOJI_PADDED_LENGTH); - byte[] ciphertextMobileCoinAddress = paymentsAddress.transform(address -> profileCipher.encryptWithLength(address.toByteArray(), ProfileCipher.PAYMENTS_ADDRESS_CONTENT_SIZE)).orNull(); + byte[] ciphertextMobileCoinAddress = paymentsAddress.map(address -> profileCipher.encryptWithLength(address.toByteArray(), ProfileCipher.PAYMENTS_ADDRESS_CONTENT_SIZE)).orElse(null); ProfileAvatarData profileAvatarData = null; if (avatar.stream != null && !avatar.keepTheSame) { @@ -847,7 +847,7 @@ public class SignalServiceAccountManager { throws NonSuccessfulResponseCodeException, PushNetworkException { try { - ProfileAndCredential credential = this.pushServiceSocket.retrieveVersionedProfileAndCredential(serviceId.uuid(), profileKey, Optional.absent(), locale).get(10, TimeUnit.SECONDS); + ProfileAndCredential credential = this.pushServiceSocket.retrieveVersionedProfileAndCredential(serviceId.uuid(), profileKey, Optional.empty(), locale).get(10, TimeUnit.SECONDS); return credential.getProfileKeyCredential(); } catch (InterruptedException | TimeoutException e) { throw new PushNetworkException(e); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java index 2040abd98..31c8a4802 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageReceiver.java @@ -9,7 +9,6 @@ package org.whispersystems.signalservice.api; import org.signal.zkgroup.profiles.ClientZkProfileOperations; import org.signal.zkgroup.profiles.ProfileKey; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.AttachmentCipherInputStream; import org.whispersystems.signalservice.api.crypto.ProfileCipherInputStream; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; @@ -42,6 +41,7 @@ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Locale; +import java.util.Optional; /** * The primary interface for receiving Signal Service messages. @@ -98,14 +98,14 @@ public class SignalServiceMessageReceiver { return FutureTransformers.map(socket.retrieveVersionedProfile(serviceId.uuid(), profileKey.get(), unidentifiedAccess, locale), profile -> { return new ProfileAndCredential(profile, SignalServiceProfile.RequestType.PROFILE, - Optional.absent()); + Optional.empty()); }); } } else { return FutureTransformers.map(socket.retrieveProfile(address, unidentifiedAccess, locale), profile -> { return new ProfileAndCredential(profile, SignalServiceProfile.RequestType.PROFILE, - Optional.absent()); + Optional.empty()); }); } } @@ -148,7 +148,7 @@ public class SignalServiceMessageReceiver { if (!pointer.getDigest().isPresent()) throw new InvalidMessageException("No attachment digest!"); socket.retrieveAttachment(pointer.getCdnNumber(), pointer.getRemoteId(), destination, maxSizeBytes, listener); - return AttachmentCipherInputStream.createForAttachment(destination, pointer.getSize().or(0), pointer.getKey(), pointer.getDigest().get()); + return AttachmentCipherInputStream.createForAttachment(destination, pointer.getSize().orElse(0), pointer.getKey(), pointer.getDigest().get()); } public InputStream retrieveSticker(byte[] packId, byte[] packKey, int stickerId) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index ef85c32af..e0a0706f4 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -21,8 +21,6 @@ import org.whispersystems.libsignal.protocol.PlaintextContent; import org.whispersystems.libsignal.protocol.SenderKeyDistributionMessage; import org.whispersystems.libsignal.state.PreKeyBundle; import org.whispersystems.libsignal.util.Pair; -import org.whispersystems.libsignal.util.guava.Optional; -import org.whispersystems.libsignal.util.guava.Preconditions; import org.whispersystems.signalservice.api.crypto.AttachmentCipherOutputStream; import org.whispersystems.signalservice.api.crypto.ContentHint; import org.whispersystems.signalservice.api.crypto.EnvelopeContent; @@ -65,7 +63,6 @@ import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMessage; import org.whispersystems.signalservice.api.messages.multidevice.ViewedMessage; import org.whispersystems.signalservice.api.messages.shared.SharedContact; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.DistributionId; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; @@ -82,6 +79,7 @@ import org.whispersystems.signalservice.api.services.AttachmentService; import org.whispersystems.signalservice.api.services.MessagingService; import org.whispersystems.signalservice.api.util.AttachmentPointerUtil; import org.whispersystems.signalservice.api.util.CredentialsProvider; +import org.whispersystems.signalservice.api.util.Preconditions; import org.whispersystems.signalservice.api.util.Uint64RangeException; import org.whispersystems.signalservice.api.util.Uint64Util; import org.whispersystems.signalservice.api.websocket.WebSocketUnavailableException; @@ -137,6 +135,7 @@ import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; @@ -159,8 +158,8 @@ public class SignalServiceMessageSender { private final SignalServiceAccountDataStore store; private final SignalSessionLock sessionLock; private final SignalServiceAddress localAddress; - private final int localDeviceId; - private final Optional eventListener; + private final int localDeviceId; + private final Optional eventListener; private final AttachmentService attachmentService; private final MessagingService messagingService; @@ -204,7 +203,7 @@ public class SignalServiceMessageSender { throws IOException, UntrustedIdentityException { Content content = createReceiptContent(message); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); return sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), message.getWhen(), envelopeContent, false, null); } @@ -235,7 +234,7 @@ public class SignalServiceMessageSender { throws IOException { Content content = createTypingContent(message); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), message.getTimestamp(), envelopeContent, true, null, cancelationSignal); } @@ -260,7 +259,7 @@ public class SignalServiceMessageSender { throws IOException, UntrustedIdentityException { Content content = createStoryContent(message); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.RESENDABLE, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.RESENDABLE, Optional.empty()); return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), timestamp, envelopeContent, false, null, null); } @@ -295,7 +294,7 @@ public class SignalServiceMessageSender { throws IOException, UntrustedIdentityException { Content content = createCallContent(message); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.empty()); sendMessage(recipient, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null); } @@ -306,7 +305,7 @@ public class SignalServiceMessageSender { throws IOException { Content content = createCallContent(message); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.DEFAULT, Optional.empty()); return sendMessage(recipients, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null, null); } @@ -364,9 +363,9 @@ public class SignalServiceMessageSender { if (result.getSuccess() != null && result.getSuccess().isNeedsSync()) { Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.of(recipient), timestamp, Collections.singletonList(result), false); - EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.absent(), timestamp, syncMessageContent, false, null); + sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null); } sendEvents.onSyncMessageSent(); @@ -421,7 +420,7 @@ public class SignalServiceMessageSender { throws UntrustedIdentityException, IOException { EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, contentHint, groupId); - Optional access = unidentifiedAccess.isPresent() ? unidentifiedAccess.get().getTargetUnidentifiedAccess() : Optional.absent(); + Optional access = unidentifiedAccess.isPresent() ? unidentifiedAccess.get().getTargetUnidentifiedAccess() : Optional.empty(); return sendMessage(address, access, timestamp, envelopeContent, false, null); } @@ -447,10 +446,10 @@ public class SignalServiceMessageSender { sendEvents.onMessageSent(); if (store.isMultiDevice()) { - Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.absent(), message.getTimestamp(), results, isRecipientUpdate); - EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.absent()); + Content syncMessage = createMultiDeviceSentTranscriptContent(content, Optional.empty(), message.getTimestamp(), results, isRecipientUpdate); + EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.absent(), message.getTimestamp(), syncMessageContent, false, null); + sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null); } sendEvents.onSyncMessageSent(); @@ -492,15 +491,15 @@ public class SignalServiceMessageSender { } if (needsSyncInResults || store.isMultiDevice()) { - Optional recipient = Optional.absent(); + Optional recipient = Optional.empty(); if (!message.getGroupContext().isPresent() && recipients.size() == 1) { recipient = Optional.of(recipients.get(0)); } Content syncMessage = createMultiDeviceSentTranscriptContent(content, recipient, timestamp, results, isRecipientUpdate); - EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.absent(), timestamp, syncMessageContent, false, null); + sendMessage(localAddress, Optional.empty(), timestamp, syncMessageContent, false, null); } sendEvents.onSyncMessageSent(); @@ -511,7 +510,7 @@ public class SignalServiceMessageSender { public SendMessageResult sendSyncMessage(SignalServiceDataMessage dataMessage) throws IOException, UntrustedIdentityException { - return sendSyncMessage(createSelfSendSyncMessage(dataMessage), Optional.absent()); + return sendSyncMessage(createSelfSendSyncMessage(dataMessage), Optional.empty()); } public SendMessageResult sendSyncMessage(SignalServiceSyncMessage message, Optional unidentifiedAccess) @@ -557,9 +556,9 @@ public class SignalServiceMessageSender { long timestamp = message.getSent().isPresent() ? message.getSent().get().getTimestamp() : System.currentTimeMillis(); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - return sendMessage(localAddress, Optional.absent(), timestamp, envelopeContent, false, null); + return sendMessage(localAddress, Optional.empty(), timestamp, envelopeContent, false, null); } public void setSoTimeoutMillis(long soTimeoutMillis) { @@ -571,8 +570,8 @@ public class SignalServiceMessageSender { } public SignalServiceAttachmentPointer uploadAttachment(SignalServiceAttachmentStream attachment) throws IOException { - byte[] attachmentKey = attachment.getResumableUploadSpec().transform(ResumableUploadSpec::getSecretKey).or(() -> Util.getSecretBytes(64)); - byte[] attachmentIV = attachment.getResumableUploadSpec().transform(ResumableUploadSpec::getIV).or(() -> Util.getSecretBytes(16)); + byte[] attachmentKey = attachment.getResumableUploadSpec().map(ResumableUploadSpec::getSecretKey).orElseGet(() -> Util.getSecretBytes(64)); + byte[] attachmentIV = attachment.getResumableUploadSpec().map(ResumableUploadSpec::getIV).orElseGet(() -> Util.getSecretBytes(16)); long paddedLength = PaddingInputStream.getPaddedSize(attachment.getLength()); InputStream dataStream = new PaddingInputStream(attachment.getInputStream(), attachment.getLength()); long ciphertextLength = AttachmentCipherOutputStream.getCiphertextLength(paddedLength); @@ -582,7 +581,7 @@ public class SignalServiceMessageSender { new AttachmentCipherOutputStreamFactory(attachmentKey, attachmentIV), attachment.getListener(), attachment.getCancelationSignal(), - attachment.getResumableUploadSpec().orNull()); + attachment.getResumableUploadSpec().orElse(null)); if (attachment.getResumableUploadSpec().isPresent()) { return uploadAttachmentV3(attachment, attachmentKey, attachmentData); @@ -694,15 +693,15 @@ public class SignalServiceMessageSender { .setNullMessage(nullMessage) .build(); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); - SendMessageResult result = sendMessage(message.getDestination(), Optional.absent(), message.getTimestamp(), envelopeContent, false, null); + SendMessageResult result = sendMessage(message.getDestination(), Optional.empty(), message.getTimestamp(), envelopeContent, false, null); if (result.getSuccess().isNeedsSync()) { Content syncMessage = createMultiDeviceVerifiedContent(message, nullMessage.toByteArray()); - EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent syncMessageContent = EnvelopeContent.encrypted(syncMessage, ContentHint.IMPLICIT, Optional.empty()); - sendMessage(localAddress, Optional.absent(), message.getTimestamp(), syncMessageContent, false, null); + sendMessage(localAddress, Optional.empty(), message.getTimestamp(), syncMessageContent, false, null); } return result; @@ -724,7 +723,7 @@ public class SignalServiceMessageSender { .setNullMessage(nullMessage) .build(); - EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.absent()); + EnvelopeContent envelopeContent = EnvelopeContent.encrypted(content, ContentHint.IMPLICIT, Optional.empty()); return sendMessage(address, getTargetUnidentifiedAccess(unidentifiedAccess), System.currentTimeMillis(), envelopeContent, false, null); } @@ -770,7 +769,7 @@ public class SignalServiceMessageSender { builder.setTextAttachment(createTextAttachment(message.getTextAttachment().get())); } - builder.setAllowsReplies(message.getAllowsReplies().or(true)); + builder.setAllowsReplies(message.getAllowsReplies().orElse(true)); return container.setStoryMessage(builder).build(); } @@ -1689,7 +1688,7 @@ public class SignalServiceMessageSender { if (!unidentifiedAccess.isPresent()) { try { - SendMessageResponse response = new MessagingService.SendResponseProcessor<>(messagingService.send(messages, Optional.absent()).blockingGet()).getResultOrThrow(); + SendMessageResponse response = new MessagingService.SendResponseProcessor<>(messagingService.send(messages, Optional.empty()).blockingGet()).getResultOrThrow(); return SendMessageResult.success(recipient, messages.getDevices(), response.sentUnidentified(), response.getNeedsSync() || store.isMultiDevice(), System.currentTimeMillis() - startTime, content.getContent()); } catch (InvalidUnidentifiedAccessHeaderException | UnregisteredUserException | MismatchedDevicesException | StaleDevicesException e) { // Non-technical failures shouldn't be retried with socket @@ -1725,11 +1724,11 @@ public class SignalServiceMessageSender { } catch (InvalidKeyException ike) { Log.w(TAG, ike); - unidentifiedAccess = Optional.absent(); + unidentifiedAccess = Optional.empty(); } catch (AuthorizationFailedException afe) { Log.w(TAG, afe); if (unidentifiedAccess.isPresent()) { - unidentifiedAccess = Optional.absent(); + unidentifiedAccess = Optional.empty(); } else { throw afe; } @@ -1874,13 +1873,13 @@ public class SignalServiceMessageSender { } catch (GroupMismatchedDevicesException e) { Log.w(TAG, "[sendGroupMessage][" + timestamp + "] Handling mismatched devices. (" + e.getMessage() + ")"); for (GroupMismatchedDevices mismatched : e.getMismatchedDevices()) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(mismatched.getUuid()), Optional.absent()); + SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(mismatched.getUuid()), Optional.empty()); handleMismatchedDevices(socket, address, mismatched.getDevices()); } } catch (GroupStaleDevicesException e) { Log.w(TAG, "[sendGroupMessage][" + timestamp + "] Handling stale devices. (" + e.getMessage() + ")"); for (GroupStaleDevices stale : e.getStaleDevices()) { - SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(stale.getUuid()), Optional.absent()); + SignalServiceAddress address = new SignalServiceAddress(ServiceId.parseOrThrow(stale.getUuid()), Optional.empty()); handleStaleDevices(address, stale.getDevices()); } } @@ -2151,7 +2150,7 @@ public class SignalServiceMessageSender { return unidentifiedAccess.get().getTargetUnidentifiedAccess(); } - return Optional.absent(); + return Optional.empty(); } private List> getTargetUnidentifiedAccess(List> unidentifiedAccess) { @@ -2159,7 +2158,7 @@ public class SignalServiceMessageSender { for (Optional item : unidentifiedAccess) { if (item.isPresent()) results.add(item.get().getTargetUnidentifiedAccess()); - else results.add(Optional.absent()); + else results.add(Optional.empty()); } return results; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalWebSocket.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalWebSocket.java index d9874ca85..4e74ed874 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalWebSocket.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalWebSocket.java @@ -1,7 +1,6 @@ package org.whispersystems.signalservice.api; import org.whispersystems.libsignal.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.messages.SignalServiceEnvelope; import org.whispersystems.signalservice.api.websocket.WebSocketConnectionState; @@ -14,6 +13,7 @@ import org.whispersystems.signalservice.internal.websocket.WebsocketResponse; import org.whispersystems.util.Base64; import java.io.IOException; +import java.util.Optional; import java.util.concurrent.TimeoutException; import io.reactivex.rxjava3.core.Observable; @@ -261,7 +261,7 @@ public final class SignalWebSocket { callback.onMessage(envelope); return Optional.of(envelope); } else if (isSocketEmptyRequest(request)) { - return Optional.absent(); + return Optional.empty(); } } finally { getWebSocket().sendResponse(response); @@ -295,7 +295,7 @@ public final class SignalWebSocket { private static Optional findHeader(WebSocketRequestMessage message) { if (message.getHeadersCount() == 0) { - return Optional.absent(); + return Optional.empty(); } for (String header : message.getHeadersList()) { @@ -307,7 +307,7 @@ public final class SignalWebSocket { } } - return Optional.absent(); + return Optional.empty(); } /** diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeContent.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeContent.java index 7ca33859c..a2b4b3192 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeContent.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/EnvelopeContent.java @@ -8,13 +8,14 @@ import org.whispersystems.libsignal.UntrustedIdentityException; import org.whispersystems.libsignal.protocol.CiphertextMessage; import org.whispersystems.libsignal.protocol.DecryptionErrorMessage; import org.whispersystems.libsignal.protocol.PlaintextContent; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.internal.push.OutgoingPushMessage; import org.whispersystems.signalservice.internal.push.PushTransportDetails; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Content; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Envelope.Type; import org.whispersystems.util.Base64; +import java.util.Optional; + /** * An abstraction over the different types of message contents we can have. */ @@ -165,7 +166,7 @@ public interface EnvelopeContent { @Override public Optional getContent() { - return Optional.absent(); + return Optional.empty(); } } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java index 74f58d1a7..603466bf1 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/HmacSIV.java @@ -4,10 +4,10 @@ import org.whispersystems.util.StringUtil; import java.util.Arrays; -import static java.util.Arrays.copyOfRange; import static org.whispersystems.signalservice.api.crypto.CryptoUtil.hmacSha256; import static org.whispersystems.util.ByteArrayUtil.concat; import static org.whispersystems.util.ByteArrayUtil.xor; +import static java.util.Arrays.copyOfRange; /** * Encrypts or decrypts with a Synthetic IV. diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java index 5810b147b..f7d0f5aa9 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalSealedSessionCipher.java @@ -13,7 +13,6 @@ import org.signal.libsignal.metadata.ProtocolUntrustedIdentityException; import org.signal.libsignal.metadata.SealedSessionCipher; import org.signal.libsignal.metadata.SelfSendException; import org.signal.libsignal.metadata.certificate.CertificateValidator; -import org.signal.libsignal.metadata.certificate.SenderCertificate; import org.signal.libsignal.metadata.protocol.UnidentifiedSenderMessageContent; import org.whispersystems.libsignal.InvalidKeyException; import org.whispersystems.libsignal.InvalidRegistrationIdException; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java index 83f450204..52185e547 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SignalServiceCipher.java @@ -41,7 +41,6 @@ import org.whispersystems.libsignal.protocol.CiphertextMessage; import org.whispersystems.libsignal.protocol.PlaintextContent; import org.whispersystems.libsignal.protocol.PreKeySignalMessage; import org.whispersystems.libsignal.protocol.SignalMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.InvalidMessageStructureException; import org.whispersystems.signalservice.api.SignalServiceAccountDataStore; import org.whispersystems.signalservice.api.SignalSessionLock; @@ -61,6 +60,7 @@ import org.whispersystems.signalservice.internal.serialize.protos.SignalServiceC import java.util.Collections; import java.util.List; +import java.util.Optional; /** * This is used to encrypt + decrypt received {@link SignalServiceEnvelope}s. @@ -100,7 +100,7 @@ public class SignalServiceCipher { PushTransportDetails transport = new PushTransportDetails(); SignalProtocolAddress localProtocolAddress = new SignalProtocolAddress(localAddress.getIdentifier(), localDeviceId); SignalGroupCipher groupCipher = new SignalGroupCipher(sessionLock, new GroupCipher(signalProtocolStore, localProtocolAddress)); - SignalSealedSessionCipher sessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orNull(), localDeviceId)); + SignalSealedSessionCipher sessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orElse(null), localDeviceId)); CiphertextMessage message = groupCipher.encrypt(distributionId.asUuid(), transport.getPaddedMessageBody(unpaddedMessage)); UnidentifiedSenderMessageContent messageContent = new UnidentifiedSenderMessageContent(message, senderCertificate, @@ -117,7 +117,7 @@ public class SignalServiceCipher { { if (unidentifiedAccess.isPresent()) { SignalSessionCipher sessionCipher = new SignalSessionCipher(sessionLock, new SessionCipher(signalProtocolStore, destination)); - SignalSealedSessionCipher sealedSessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orNull(), localDeviceId)); + SignalSealedSessionCipher sealedSessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orElse(null), localDeviceId)); return content.processSealedSender(sessionCipher, sealedSessionCipher, destination, unidentifiedAccess.get().getUnidentifiedCertificate()); } else { @@ -195,7 +195,7 @@ public class SignalServiceCipher { SignalSessionCipher sessionCipher = new SignalSessionCipher(sessionLock, new SessionCipher(signalProtocolStore, sourceAddress)); paddedMessage = sessionCipher.decrypt(new PreKeySignalMessage(ciphertext)); - metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.absent()); + metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.empty()); signalProtocolStore.clearSenderKeySharedWith(Collections.singleton(sourceAddress)); } else if (envelope.isSignalMessage()) { @@ -203,12 +203,12 @@ public class SignalServiceCipher { SignalSessionCipher sessionCipher = new SignalSessionCipher(sessionLock, new SessionCipher(signalProtocolStore, sourceAddress)); paddedMessage = sessionCipher.decrypt(new SignalMessage(ciphertext)); - metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.absent()); + metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.empty()); } else if (envelope.isPlaintextContent()) { paddedMessage = new PlaintextContent(ciphertext).getBody(); - metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.absent()); + metadata = new SignalServiceMetadata(envelope.getSourceAddress(), envelope.getSourceDevice(), envelope.getTimestamp(), envelope.getServerReceivedTimestamp(), envelope.getServerDeliveredTimestamp(), false, envelope.getServerGuid(), Optional.empty()); } else if (envelope.isUnidentifiedSender()) { - SignalSealedSessionCipher sealedSessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orNull(), localDeviceId)); + SignalSealedSessionCipher sealedSessionCipher = new SignalSealedSessionCipher(sessionLock, new SealedSessionCipher(signalProtocolStore, localAddress.getServiceId().uuid(), localAddress.getNumber().orElse(null), localDeviceId)); DecryptionResult result = sealedSessionCipher.decrypt(certificateValidator, ciphertext, envelope.getServerReceivedTimestamp()); SignalServiceAddress resultAddress = new SignalServiceAddress(ACI.parseOrThrow(result.getSenderUuid()), result.getSenderE164()); Optional groupId = result.getGroupId(); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SkippingOutputStream.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SkippingOutputStream.java index daf9734fe..36c0c1705 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SkippingOutputStream.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/SkippingOutputStream.java @@ -3,7 +3,6 @@ package org.whispersystems.signalservice.api.crypto; import java.io.FilterOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Arrays; /** * SkippingOutputStream will skip a number of bytes being written as specified by toSkip and then diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/UnidentifiedAccessPair.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/UnidentifiedAccessPair.java index 5e9ae1903..9d0425c51 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/UnidentifiedAccessPair.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/crypto/UnidentifiedAccessPair.java @@ -1,7 +1,7 @@ package org.whispersystems.signalservice.api.crypto; -import org.whispersystems.libsignal.util.guava.Optional; +import java.util.Optional; public class UnidentifiedAccessPair { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupHistoryEntry.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupHistoryEntry.java index 6a809b713..dfcfc0ba7 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupHistoryEntry.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupHistoryEntry.java @@ -2,7 +2,9 @@ package org.whispersystems.signalservice.api.groupsv2; import org.signal.storageservice.protos.groups.local.DecryptedGroup; import org.signal.storageservice.protos.groups.local.DecryptedGroupChange; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + /** * Pair of a {@link DecryptedGroup} and the {@link DecryptedGroupChange} for that version. diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java index 7eae0ccf6..e34ff7644 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/DecryptedGroupUtil.java @@ -15,7 +15,6 @@ import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemov import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; import org.signal.storageservice.protos.groups.local.EnabledState; import org.whispersystems.libsignal.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.UuidUtil; import java.util.ArrayList; @@ -24,6 +23,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -148,7 +148,7 @@ public final class DecryptedGroupUtil { * The UUID of the member that made the change. */ public static Optional editorUuid(DecryptedGroupChange change) { - return Optional.fromNullable(change != null ? UuidUtil.fromByteStringOrNull(change.getEditor()) : null); + return Optional.ofNullable(change != null ? UuidUtil.fromByteStringOrNull(change.getEditor()) : null); } public static Optional findMemberByUuid(Collection members, UUID uuid) { @@ -160,7 +160,7 @@ public final class DecryptedGroupUtil { } } - return Optional.absent(); + return Optional.empty(); } public static Optional findPendingByUuid(Collection members, UUID uuid) { @@ -172,7 +172,7 @@ public final class DecryptedGroupUtil { } } - return Optional.absent(); + return Optional.empty(); } private static int findPendingIndexByUuidCipherText(List members, ByteString cipherText) { @@ -206,7 +206,7 @@ public final class DecryptedGroupUtil { } } - return Optional.absent(); + return Optional.empty(); } public static boolean isPendingOrRequesting(DecryptedGroup group, UUID uuid) { @@ -617,9 +617,9 @@ public final class DecryptedGroupUtil { } public static Optional findInviter(List pendingMembersList, UUID uuid) { - return Optional.fromNullable(findPendingByUuid(pendingMembersList, uuid).transform(DecryptedPendingMember::getAddedByUuid) - .transform(UuidUtil::fromByteStringOrNull) - .orNull()); + return Optional.ofNullable(findPendingByUuid(pendingMembersList, uuid).map(DecryptedPendingMember::getAddedByUuid) + .map(UuidUtil::fromByteStringOrNull) + .orElse(null)); } public static boolean changeIsEmpty(DecryptedGroupChange change) { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java index 69d4d8539..e225464e1 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupCandidate.java @@ -1,12 +1,12 @@ package org.whispersystems.signalservice.api.groupsv2; import org.signal.zkgroup.profiles.ProfileKeyCredential; -import org.whispersystems.libsignal.util.guava.Optional; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -52,7 +52,7 @@ public final class GroupCandidate { } public GroupCandidate withoutProfileKeyCredential() { - return hasProfileKeyCredential() ? new GroupCandidate(uuid, Optional.absent()) + return hasProfileKeyCredential() ? new GroupCandidate(uuid, Optional.empty()) : this; } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil.java index 3075f7efb..7aa987d0a 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupChangeUtil.java @@ -12,7 +12,6 @@ import org.signal.storageservice.protos.groups.local.DecryptedModifyMemberRole; import org.signal.storageservice.protos.groups.local.DecryptedPendingMember; import org.signal.storageservice.protos.groups.local.DecryptedPendingMemberRemoval; import org.signal.storageservice.protos.groups.local.DecryptedRequestingMember; -import org.signal.storageservice.protos.groups.local.EnabledState; import java.util.HashMap; import java.util.List; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupLinkNotActiveException.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupLinkNotActiveException.java index c5973465e..2c3448730 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupLinkNotActiveException.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupLinkNotActiveException.java @@ -1,6 +1,7 @@ package org.whispersystems.signalservice.api.groupsv2; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; /** * Thrown when a group link: diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java index 2305ace92..e7dda2898 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Api.java @@ -20,7 +20,6 @@ import org.signal.zkgroup.auth.AuthCredentialResponse; import org.signal.zkgroup.auth.ClientZkAuthOperations; import org.signal.zkgroup.groups.ClientZkGroupCipher; import org.signal.zkgroup.groups.GroupSecretParams; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.internal.push.PushServiceSocket; import org.whispersystems.signalservice.internal.push.exceptions.ForbiddenException; @@ -30,6 +29,7 @@ import java.security.SecureRandom; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Optional; public class GroupsV2Api { @@ -114,8 +114,8 @@ public class GroupsV2Api { GroupsV2Operations.GroupOperations groupOperations = groupsOperations.forGroup(groupSecretParams); for (GroupChanges.GroupChangeState change : group.getGroupChanges().getGroupChangesList()) { - Optional decryptedGroup = change.hasGroupState() ? Optional.of(groupOperations.decryptGroup(change.getGroupState())) : Optional.absent(); - Optional decryptedChange = change.hasGroupChange() ? groupOperations.decryptChange(change.getGroupChange(), false) : Optional.absent(); + Optional decryptedGroup = change.hasGroupState() ? Optional.of(groupOperations.decryptGroup(change.getGroupState())) : Optional.empty(); + Optional decryptedChange = change.hasGroupChange() ? groupOperations.decryptChange(change.getGroupChange(), false) : Optional.empty(); result.add(new DecryptedGroupHistoryEntry(decryptedGroup, decryptedChange)); } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java index a2b9eb6ed..2ce0bdee6 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/groupsv2/GroupsV2Operations.java @@ -39,7 +39,6 @@ import org.signal.zkgroup.profiles.ProfileKey; import org.signal.zkgroup.profiles.ProfileKeyCredential; import org.signal.zkgroup.profiles.ProfileKeyCredentialPresentation; import org.whispersystems.libsignal.logging.Log; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.util.UuidUtil; import java.security.SecureRandom; @@ -47,6 +46,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; @@ -109,7 +109,7 @@ public final class GroupsV2Operations { group.addMembers(groupOperations.member(self.getProfileKeyCredential().get(), Member.Role.ADMINISTRATOR)); for (GroupCandidate credential : members) { - ProfileKeyCredential profileKeyCredential = credential.getProfileKeyCredential().orNull(); + ProfileKeyCredential profileKeyCredential = credential.getProfileKeyCredential().orElse(null); if (profileKeyCredential != null) { group.addMembers(groupOperations.member(profileKeyCredential, memberRole)); @@ -167,7 +167,7 @@ public final class GroupsV2Operations { for (GroupCandidate credential : membersToAdd) { Member.Role newMemberRole = Member.Role.DEFAULT; - ProfileKeyCredential profileKeyCredential = credential.getProfileKeyCredential().orNull(); + ProfileKeyCredential profileKeyCredential = credential.getProfileKeyCredential().orElse(null); if (profileKeyCredential != null) { actions.addAddMembers(GroupChange.Actions.AddMemberAction @@ -486,7 +486,7 @@ public final class GroupsV2Operations { { if (groupChange.getChangeEpoch() > HIGHEST_KNOWN_EPOCH) { Log.w(TAG, String.format(Locale.US, "Ignoring change from Epoch %d. Highest known Epoch is %d", groupChange.getChangeEpoch(), HIGHEST_KNOWN_EPOCH)); - return Optional.absent(); + return Optional.empty(); } GroupChange.Actions actions = verifySignature ? getVerifiedActions(groupChange) : getActions(groupChange); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SendMessageResult.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SendMessageResult.java index 4f6a60c38..1a916b954 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SendMessageResult.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SendMessageResult.java @@ -2,13 +2,13 @@ package org.whispersystems.signalservice.api.messages; import org.whispersystems.libsignal.IdentityKey; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.push.exceptions.ProofRequiredException; import org.whispersystems.signalservice.api.push.exceptions.RateLimitException; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Content; import java.util.List; +import java.util.Optional; public class SendMessageResult { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachment.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachment.java index 948f13ca3..c7c369267 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachment.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachment.java @@ -6,12 +6,13 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + import org.whispersystems.signalservice.internal.push.http.CancelationSignal; import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.util.Optional; public abstract class SignalServiceAttachment { @@ -41,7 +42,7 @@ public abstract class SignalServiceAttachment { } public static SignalServiceAttachmentStream emptyStream(String contentType) { - return new SignalServiceAttachmentStream(new ByteArrayInputStream(new byte[0]), contentType, 0, Optional.absent(), false, false, false, null, null); + return new SignalServiceAttachmentStream(new ByteArrayInputStream(new byte[0]), contentType, 0, Optional.empty(), false, false, false, null, null); } public static class Builder { @@ -147,19 +148,19 @@ public abstract class SignalServiceAttachment { return new SignalServiceAttachmentStream(inputStream, contentType, length, - Optional.fromNullable(fileName), + Optional.ofNullable(fileName), voiceNote, borderless, gif, - Optional.absent(), + Optional.empty(), width, height, uploadTimestamp, - Optional.fromNullable(caption), - Optional.fromNullable(blurHash), + Optional.ofNullable(caption), + Optional.ofNullable(blurHash), listener, cancelationSignal, - Optional.fromNullable(resumableUploadSpec)); + Optional.ofNullable(resumableUploadSpec)); } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer.java index 4cd57af1d..6ea49c346 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentPointer.java @@ -6,9 +6,10 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; +import java.util.Optional; + /** * Represents a received SignalServiceAttachment "handle." This * is a pointer to the actual attachment content, which needs to be diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId.java index 58e1e97fe..bb5452d72 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentRemoteId.java @@ -1,11 +1,10 @@ package org.whispersystems.signalservice.api.messages; -import org.signal.libsignal.metadata.ProtocolInvalidMessageException; -import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.InvalidMessageStructureException; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.AttachmentPointer; +import java.util.Optional; + /** * Represents a signal service attachment identifier. This can be either a CDN key or a long, but * not both at once. Attachments V2 used a long as an attachment identifier. This lacks sufficient @@ -19,11 +18,11 @@ public final class SignalServiceAttachmentRemoteId { public SignalServiceAttachmentRemoteId(long v2) { this.v2 = Optional.of(v2); - this.v3 = Optional.absent(); + this.v3 = Optional.empty(); } public SignalServiceAttachmentRemoteId(String v3) { - this.v2 = Optional.absent(); + this.v2 = Optional.empty(); this.v3 = Optional.of(v3); } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentStream.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentStream.java index afea6e935..559b44cd8 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentStream.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceAttachmentStream.java @@ -6,32 +6,33 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + import org.whispersystems.signalservice.internal.push.http.CancelationSignal; import org.whispersystems.signalservice.internal.push.http.ResumableUploadSpec; import java.io.InputStream; +import java.util.Optional; /** * Represents a local SignalServiceAttachment to be sent. */ public class SignalServiceAttachmentStream extends SignalServiceAttachment { - private final InputStream inputStream; - private final long length; - private final Optional fileName; - private final ProgressListener listener; - private final CancelationSignal cancelationSignal; - private final Optional preview; - private final boolean voiceNote; - private final boolean borderless; - private final boolean gif; - private final int width; - private final int height; - private final long uploadTimestamp; - private final Optional caption; - private final Optional blurHash; - private final Optional resumableUploadSpec; + private final InputStream inputStream; + private final long length; + private final Optional fileName; + private final ProgressListener listener; + private final CancelationSignal cancelationSignal; + private final Optional preview; + private final boolean voiceNote; + private final boolean borderless; + private final boolean gif; + private final int width; + private final int height; + private final long uploadTimestamp; + private final Optional caption; + private final Optional blurHash; + private final Optional resumableUploadSpec; public SignalServiceAttachmentStream(InputStream inputStream, String contentType, @@ -43,7 +44,7 @@ public class SignalServiceAttachmentStream extends SignalServiceAttachment { ProgressListener listener, CancelationSignal cancelationSignal) { - this(inputStream, contentType, length, fileName, voiceNote, borderless, gif, Optional.absent(), 0, 0, System.currentTimeMillis(), Optional.absent(), Optional.absent(), listener, cancelationSignal, Optional.absent()); + this(inputStream, contentType, length, fileName, voiceNote, borderless, gif, Optional.empty(), 0, 0, System.currentTimeMillis(), Optional.empty(), Optional.empty(), listener, cancelationSignal, Optional.empty()); } public SignalServiceAttachmentStream(InputStream inputStream, diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java index 770f3be72..f90297db4 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceContent.java @@ -20,7 +20,6 @@ import org.whispersystems.libsignal.LegacyMessageException; import org.whispersystems.libsignal.logging.Log; import org.whispersystems.libsignal.protocol.DecryptionErrorMessage; import org.whispersystems.libsignal.protocol.SenderKeyDistributionMessage; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.InvalidMessageStructureException; import org.whispersystems.signalservice.api.messages.calls.AnswerMessage; import org.whispersystems.signalservice.api.messages.calls.BusyMessage; @@ -45,7 +44,6 @@ import org.whispersystems.signalservice.api.messages.multidevice.ViewOnceOpenMes import org.whispersystems.signalservice.api.messages.multidevice.ViewedMessage; import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.payments.Money; -import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; import org.whispersystems.signalservice.api.storage.StorageKey; @@ -62,6 +60,7 @@ import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Optional; public final class SignalServiceContent { @@ -108,14 +107,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.fromNullable(message); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); + this.message = Optional.ofNullable(message); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = senderKeyDistributionMessage; - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SignalServiceSyncMessage synchronizeMessage, @@ -140,14 +139,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.fromNullable(synchronizeMessage); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.ofNullable(synchronizeMessage); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = senderKeyDistributionMessage; - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SignalServiceCallMessage callMessage, @@ -172,14 +171,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); this.callMessage = Optional.of(callMessage); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = senderKeyDistributionMessage; - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SignalServiceReceiptMessage receiptMessage, @@ -204,14 +203,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); this.readMessage = Optional.of(receiptMessage); - this.typingMessage = Optional.absent(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = senderKeyDistributionMessage; - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(DecryptionErrorMessage errorMessage, @@ -236,14 +235,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = senderKeyDistributionMessage; this.decryptionErrorMessage = Optional.of(errorMessage); - this.storyMessage = Optional.absent(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SignalServiceTypingMessage typingMessage, @@ -268,14 +267,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); this.typingMessage = Optional.of(typingMessage); this.senderKeyDistributionMessage = senderKeyDistributionMessage; - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SenderKeyDistributionMessage senderKeyDistributionMessage, @@ -299,14 +298,14 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); this.senderKeyDistributionMessage = Optional.of(senderKeyDistributionMessage); - this.decryptionErrorMessage = Optional.absent(); - this.storyMessage = Optional.absent(); + this.decryptionErrorMessage = Optional.empty(); + this.storyMessage = Optional.empty(); } private SignalServiceContent(SignalServiceStoryMessage storyMessage, @@ -330,13 +329,13 @@ public final class SignalServiceContent { this.groupId = groupId; this.serializedState = serializedState; - this.message = Optional.absent(); - this.synchronizeMessage = Optional.absent(); - this.callMessage = Optional.absent(); - this.readMessage = Optional.absent(); - this.typingMessage = Optional.absent(); - this.senderKeyDistributionMessage = Optional.absent(); - this.decryptionErrorMessage = Optional.absent(); + this.message = Optional.empty(); + this.synchronizeMessage = Optional.empty(); + this.callMessage = Optional.empty(); + this.readMessage = Optional.empty(); + this.typingMessage = Optional.empty(); + this.senderKeyDistributionMessage = Optional.empty(); + this.decryptionErrorMessage = Optional.empty(); this.storyMessage = Optional.of(storyMessage); } @@ -434,7 +433,7 @@ public final class SignalServiceContent { SignalServiceProtos.DataMessage message = serviceContentProto.getLegacyDataMessage(); return new SignalServiceContent(createSignalServiceMessage(metadata, message), - Optional.absent(), + Optional.empty(), metadata.getSender(), metadata.getSenderDevice(), metadata.getTimestamp(), @@ -446,7 +445,7 @@ public final class SignalServiceContent { serviceContentProto); } else if (serviceContentProto.getDataCase() == SignalServiceContentProto.DataCase.CONTENT) { SignalServiceProtos.Content message = serviceContentProto.getContent(); - Optional senderKeyDistributionMessage = Optional.absent(); + Optional senderKeyDistributionMessage = Optional.empty(); if (message.hasSenderKeyDistributionMessage()) { try { @@ -646,7 +645,7 @@ public final class SignalServiceContent { SignalServiceDataMessage dataMessage = createSignalServiceMessage(metadata, sentContent.getMessage()); Optional address = SignalServiceAddress.isValidAddress(sentContent.getDestinationUuid()) ? Optional.of(new SignalServiceAddress(ServiceId.parseOrThrow(sentContent.getDestinationUuid()))) - : Optional.absent(); + : Optional.empty(); if (!address.isPresent() && !dataMessage.getGroupContext().isPresent()) { throw new InvalidMessageStructureException("SyncMessage missing both destination and group ID!"); @@ -789,10 +788,10 @@ public final class SignalServiceContent { Boolean typingIndicators = content.getConfiguration().hasTypingIndicators() ? content.getConfiguration().getTypingIndicators() : null; Boolean linkPreviews = content.getConfiguration().hasLinkPreviews() ? content.getConfiguration().getLinkPreviews() : null; - return SignalServiceSyncMessage.forConfiguration(new ConfigurationMessage(Optional.fromNullable(readReceipts), - Optional.fromNullable(unidentifiedDeliveryIndicators), - Optional.fromNullable(typingIndicators), - Optional.fromNullable(linkPreviews))); + return SignalServiceSyncMessage.forConfiguration(new ConfigurationMessage(Optional.ofNullable(readReceipts), + Optional.ofNullable(unidentifiedDeliveryIndicators), + Optional.ofNullable(typingIndicators), + Optional.ofNullable(linkPreviews))); } if (content.hasFetchLatest() && content.getFetchLatest().hasType()) { @@ -857,7 +856,7 @@ public final class SignalServiceContent { mobileCoin.getReceipt(), mobileCoin.getLedgerBlockIndex(), mobileCoin.getLedgerBlockTimestamp(), - address.isEmpty() ? Optional.absent() : Optional.of(address.toByteArray()), + address.isEmpty() ? Optional.empty() : Optional.of(address.toByteArray()), Optional.of(outgoingPayment.getNote()), mobileCoin.getOutputPublicKeysList(), mobileCoin.getSpentKeyImagesList())); @@ -949,7 +948,7 @@ public final class SignalServiceContent { return new SignalServiceTypingMessage(action, content.getTimestamp(), content.hasGroupId() ? Optional.of(content.getGroupId().toByteArray()) : - Optional.absent()); + Optional.empty()); } private static SignalServiceStoryMessage createStoryMessage(SignalServiceProtos.StoryMessage content) throws InvalidMessageStructureException { @@ -1018,7 +1017,7 @@ public final class SignalServiceContent { preview.getTitle(), preview.getDescription(), preview.getDate(), - Optional.fromNullable(attachment)); + Optional.ofNullable(attachment)); } private static List createMentions(List bodyRanges, String body, boolean isGroupV2) @@ -1274,10 +1273,10 @@ public final class SignalServiceContent { } } - Optional text = Optional.fromNullable(attachment.hasText() ? attachment.getText() : null); - Optional textForegroundColor = Optional.fromNullable(attachment.hasTextForegroundColor() ? attachment.getTextForegroundColor() : null); - Optional textBackgroundColor = Optional.fromNullable(attachment.hasTextBackgroundColor() ? attachment.getTextBackgroundColor() : null); - Optional preview = Optional.fromNullable(attachment.hasPreview() ? createPreview(attachment.getPreview()) : null); + Optional text = Optional.ofNullable(attachment.hasText() ? attachment.getText() : null); + Optional textForegroundColor = Optional.ofNullable(attachment.hasTextForegroundColor() ? attachment.getTextForegroundColor() : null); + Optional textBackgroundColor = Optional.ofNullable(attachment.hasTextBackgroundColor() ? attachment.getTextBackgroundColor() : null); + Optional preview = Optional.ofNullable(attachment.hasPreview() ? createPreview(attachment.getPreview()) : null); if (attachment.hasGradient()) { SignalServiceProtos.TextAttachment.Gradient attachmentGradient = attachment.getGradient(); @@ -1285,13 +1284,13 @@ public final class SignalServiceContent { Integer startColor = attachmentGradient.hasStartColor() ? attachmentGradient.getStartColor() : null; Integer endColor = attachmentGradient.hasEndColor() ? attachmentGradient.getEndColor() : null; Integer angle = attachmentGradient.hasAngle() ? attachmentGradient.getAngle() : null; - SignalServiceTextAttachment.Gradient gradient = new SignalServiceTextAttachment.Gradient(Optional.fromNullable(startColor), - Optional.fromNullable(endColor), - Optional.fromNullable(angle)); + SignalServiceTextAttachment.Gradient gradient = new SignalServiceTextAttachment.Gradient(Optional.ofNullable(startColor), + Optional.ofNullable(endColor), + Optional.ofNullable(angle)); - return SignalServiceTextAttachment.forGradientBackground(text, Optional.fromNullable(style), textForegroundColor, textBackgroundColor, preview, gradient); + return SignalServiceTextAttachment.forGradientBackground(text, Optional.ofNullable(style), textForegroundColor, textBackgroundColor, preview, gradient); } else { - return SignalServiceTextAttachment.forSolidBackground(text, Optional.fromNullable(style), textForegroundColor, textBackgroundColor, preview, attachment.getColor()); + return SignalServiceTextAttachment.forSolidBackground(text, Optional.ofNullable(style), textForegroundColor, textBackgroundColor, preview, attachment.getColor()); } } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java index f100a33a4..63626e30d 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceDataMessage.java @@ -8,7 +8,6 @@ package org.whispersystems.signalservice.api.messages; import org.signal.zkgroup.groups.GroupSecretParams; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.messages.shared.SharedContact; import org.whispersystems.signalservice.api.push.ServiceId; import org.whispersystems.signalservice.api.push.SignalServiceAddress; @@ -16,6 +15,7 @@ import org.whispersystems.signalservice.api.util.OptionalUtil; import java.util.LinkedList; import java.util.List; +import java.util.Optional; /** * Represents a decrypted Signal Service data message. @@ -87,39 +87,39 @@ public class SignalServiceDataMessage { this.endSession = endSession; this.expiresInSeconds = expiresInSeconds; this.expirationUpdate = expirationUpdate; - this.profileKey = Optional.fromNullable(profileKey); + this.profileKey = Optional.ofNullable(profileKey); this.profileKeyUpdate = profileKeyUpdate; - this.quote = Optional.fromNullable(quote); - this.sticker = Optional.fromNullable(sticker); + this.quote = Optional.ofNullable(quote); + this.sticker = Optional.ofNullable(sticker); this.viewOnce = viewOnce; - this.reaction = Optional.fromNullable(reaction); - this.remoteDelete = Optional.fromNullable(remoteDelete); - this.groupCallUpdate = Optional.fromNullable(groupCallUpdate); - this.payment = Optional.fromNullable(payment); - this.storyContext = Optional.fromNullable(storyContext); + this.reaction = Optional.ofNullable(reaction); + this.remoteDelete = Optional.ofNullable(remoteDelete); + this.groupCallUpdate = Optional.ofNullable(groupCallUpdate); + this.payment = Optional.ofNullable(payment); + this.storyContext = Optional.ofNullable(storyContext); if (attachments != null && !attachments.isEmpty()) { this.attachments = Optional.of(attachments); } else { - this.attachments = Optional.absent(); + this.attachments = Optional.empty(); } if (sharedContacts != null && !sharedContacts.isEmpty()) { this.contacts = Optional.of(sharedContacts); } else { - this.contacts = Optional.absent(); + this.contacts = Optional.empty(); } if (previews != null && !previews.isEmpty()) { this.previews = Optional.of(previews); } else { - this.previews = Optional.absent(); + this.previews = Optional.empty(); } if (mentions != null && !mentions.isEmpty()) { this.mentions = Optional.of(mentions); } else { - this.mentions = Optional.absent(); + this.mentions = Optional.empty(); } } @@ -264,7 +264,7 @@ public class SignalServiceDataMessage { .serialize(); } - return Optional.fromNullable(groupId); + return Optional.ofNullable(groupId); } public static class Builder { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceEnvelope.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceEnvelope.java index 66c35a386..366a42b08 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceEnvelope.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceEnvelope.java @@ -9,14 +9,15 @@ package org.whispersystems.signalservice.api.messages; import com.google.protobuf.ByteString; import com.google.protobuf.InvalidProtocolBufferException; -import org.whispersystems.libsignal.util.guava.Optional; import org.whispersystems.signalservice.api.push.ACI; import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import org.whispersystems.signalservice.api.util.OptionalUtil; import org.whispersystems.signalservice.internal.push.SignalServiceProtos.Envelope; import org.whispersystems.signalservice.internal.serialize.protos.SignalServiceEnvelopeProto; import org.whispersystems.util.Base64; import java.io.IOException; +import java.util.Optional; /** * This class represents an encrypted Signal Service envelope. @@ -131,18 +132,18 @@ public class SignalServiceEnvelope { * @return The envelope's sender as an E164 number. */ public Optional getSourceE164() { - return Optional.fromNullable(envelope.getSourceE164()); + return Optional.ofNullable(envelope.getSourceE164()); } /** * @return The envelope's sender as a UUID. */ public Optional getSourceUuid() { - return Optional.fromNullable(envelope.getSourceUuid()); + return Optional.ofNullable(envelope.getSourceUuid()); } public String getSourceIdentifier() { - return getSourceUuid().or(getSourceE164()).orNull(); + return OptionalUtil.or(getSourceUuid(), getSourceE164()).orElse(null); } public boolean hasSourceDevice() { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroup.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroup.java index ed22e67d6..010bb204f 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroup.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroup.java @@ -6,10 +6,11 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + import org.whispersystems.signalservice.api.push.SignalServiceAddress; import java.util.List; +import java.util.Optional; /** * Group information to include in SignalServiceMessages destined to groups. @@ -63,9 +64,9 @@ public class SignalServiceGroup { { this.type = type; this.groupId = groupId; - this.name = Optional.fromNullable(name); - this.members = Optional.fromNullable(members); - this.avatar = Optional.fromNullable(avatar); + this.name = Optional.ofNullable(name); + this.members = Optional.ofNullable(members); + this.avatar = Optional.ofNullable(avatar); } public byte[] getGroupId() { diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroupContext.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroupContext.java index c588045b8..204a30254 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroupContext.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceGroupContext.java @@ -1,7 +1,9 @@ package org.whispersystems.signalservice.api.messages; import org.whispersystems.libsignal.InvalidMessageException; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; + public final class SignalServiceGroupContext { @@ -10,11 +12,11 @@ public final class SignalServiceGroupContext { private SignalServiceGroupContext(SignalServiceGroup groupV1) { this.groupV1 = Optional.of(groupV1); - this.groupV2 = Optional.absent(); + this.groupV2 = Optional.empty(); } private SignalServiceGroupContext(SignalServiceGroupV2 groupV2) { - this.groupV1 = Optional.absent(); + this.groupV1 = Optional.empty(); this.groupV2 = Optional.of(groupV2); } @@ -29,7 +31,7 @@ public final class SignalServiceGroupContext { static Optional createOptional(SignalServiceGroup groupV1, SignalServiceGroupV2 groupV2) throws InvalidMessageException { - return Optional.fromNullable(create(groupV1, groupV2)); + return Optional.ofNullable(create(groupV1, groupV2)); } public static SignalServiceGroupContext create(SignalServiceGroup groupV1, SignalServiceGroupV2 groupV2) diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceMetadata.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceMetadata.java index e308ebce6..cef21fec5 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceMetadata.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceMetadata.java @@ -1,8 +1,10 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + import org.whispersystems.signalservice.api.push.SignalServiceAddress; +import java.util.Optional; + public final class SignalServiceMetadata { private final SignalServiceAddress sender; private final int senderDevice; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServicePreview.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServicePreview.java index 3dd2b7463..abaaa1bda 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServicePreview.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServicePreview.java @@ -1,6 +1,7 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; public class SignalServicePreview { private final String url; diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStickerManifest.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStickerManifest.java index 4625862f8..4f356d0cf 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStickerManifest.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStickerManifest.java @@ -1,10 +1,11 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Optional; public class SignalServiceStickerManifest { @@ -14,9 +15,9 @@ public class SignalServiceStickerManifest { private final List stickers; public SignalServiceStickerManifest(String title, String author, StickerInfo cover, List stickers) { - this.title = Optional.fromNullable(title); - this.author = Optional.fromNullable(author); - this.cover = Optional.fromNullable(cover); + this.title = Optional.ofNullable(title); + this.author = Optional.ofNullable(author); + this.cover = Optional.ofNullable(cover); this.stickers = (stickers == null) ? Collections.emptyList() : new ArrayList<>(stickers); } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStoryMessage.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStoryMessage.java index 42d41da7d..7c309fadd 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStoryMessage.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceStoryMessage.java @@ -1,11 +1,12 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; public class SignalServiceStoryMessage { - private final Optional profileKey; - private final Optional groupContext; - private final Optional fileAttachment; + private final Optional profileKey; + private final Optional groupContext; + private final Optional fileAttachment; private final Optional textAttachment; private final Optional allowsReplies; @@ -14,10 +15,10 @@ public class SignalServiceStoryMessage { SignalServiceAttachment fileAttachment, SignalServiceTextAttachment textAttachment, boolean allowsReplies) { - this.profileKey = Optional.fromNullable(profileKey); - this.groupContext = Optional.fromNullable(groupContext); - this.fileAttachment = Optional.fromNullable(fileAttachment); - this.textAttachment = Optional.fromNullable(textAttachment); + this.profileKey = Optional.ofNullable(profileKey); + this.groupContext = Optional.ofNullable(groupContext); + this.fileAttachment = Optional.ofNullable(fileAttachment); + this.textAttachment = Optional.ofNullable(textAttachment); this.allowsReplies = Optional.of(allowsReplies); } diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceTextAttachment.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceTextAttachment.java index 74fa79650..c11a23dc1 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceTextAttachment.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/messages/SignalServiceTextAttachment.java @@ -1,12 +1,13 @@ package org.whispersystems.signalservice.api.messages; -import org.whispersystems.libsignal.util.guava.Optional; + +import java.util.Optional; public class SignalServiceTextAttachment { - private final Optional text; - private final Optional