diff --git a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java index 23d0c4156b..c9944e8310 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/InviteActivity.java @@ -17,17 +17,16 @@ import android.widget.Toast; import androidx.annotation.AnimRes; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import org.signal.core.util.concurrent.ListenableFuture.Listener; import org.thoughtcrime.securesms.components.ContactFilterView; import org.thoughtcrime.securesms.components.ContactFilterView.OnFilterChangedListener; import org.thoughtcrime.securesms.contacts.ContactSelectionDisplayMode; import org.thoughtcrime.securesms.contacts.SelectedContact; -import org.thoughtcrime.securesms.database.SignalDatabase; import org.thoughtcrime.securesms.groups.SelectionLimits; import org.thoughtcrime.securesms.keyvalue.SignalStore; import org.thoughtcrime.securesms.mms.OutgoingMessage; @@ -38,7 +37,6 @@ import org.thoughtcrime.securesms.util.DynamicNoActionBarInviteTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.Util; 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; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java index f68c3ea781..678d350949 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideBitmapListeningTarget.java @@ -9,7 +9,7 @@ import androidx.annotation.Nullable; import com.bumptech.glide.request.target.BitmapImageViewTarget; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; +import org.signal.core.util.concurrent.SettableFuture; public class GlideBitmapListeningTarget extends BitmapImageViewTarget { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java index e830a6c538..b20fb0069f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/GlideDrawableListeningTarget.java @@ -8,8 +8,8 @@ import androidx.annotation.Nullable; import com.bumptech.glide.request.target.DrawableImageViewTarget; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; public class GlideDrawableListeningTarget extends DrawableImageViewTarget { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java index b64426073e..2152b1c970 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/InputPanel.java @@ -37,6 +37,8 @@ import com.bumptech.glide.RequestManager; import com.bumptech.glide.load.engine.DiskCacheStrategy; import org.signal.core.util.ThreadUtil; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.animation.AnimationCompleteListener; @@ -51,9 +53,9 @@ import org.thoughtcrime.securesms.conversation.ConversationStickerSuggestionAdap import org.thoughtcrime.securesms.conversation.MessageStyler; import org.thoughtcrime.securesms.conversation.VoiceNoteDraftView; import org.thoughtcrime.securesms.database.DraftTable; -import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.MessageId; import org.thoughtcrime.securesms.database.model.MessageRecord; +import org.thoughtcrime.securesms.database.model.MmsMessageRecord; import org.thoughtcrime.securesms.database.model.Quote; import org.thoughtcrime.securesms.database.model.StickerRecord; import org.thoughtcrime.securesms.keyboard.KeyboardPage; @@ -69,8 +71,6 @@ import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.util.MessageRecordUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import java.util.Arrays; import java.util.List; 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 329378bc80..cfc0414e52 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ThumbnailView.java @@ -33,6 +33,8 @@ import com.bumptech.glide.request.Request; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestOptions; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.logging.Log; import org.signal.glide.transforms.SignalDownsampleStrategy; import org.thoughtcrime.securesms.R; @@ -48,8 +50,6 @@ import org.thoughtcrime.securesms.mms.VideoSlide; import org.thoughtcrime.securesms.stories.StoryTextPostModel; import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.Util; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.util.views.Stub; import java.util.Arrays; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java b/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java index 27834e4e21..00156d5c86 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/location/SignalMapView.java @@ -17,9 +17,9 @@ import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.R; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import java.util.concurrent.ExecutionException; diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationPinKeyboard.java b/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationPinKeyboard.java index d6185e25c8..f9b72eb034 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationPinKeyboard.java +++ b/app/src/main/java/org/thoughtcrime/securesms/components/registration/VerificationPinKeyboard.java @@ -18,11 +18,11 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.NumericKeyboardView; import org.thoughtcrime.securesms.util.ViewUtil; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; public class VerificationPinKeyboard extends FrameLayout { 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 64fb93bc71..9c62440ffb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -24,6 +24,7 @@ import com.bumptech.glide.RequestManager; import com.google.android.material.button.MaterialButton; import com.google.common.collect.Sets; +import org.signal.core.util.concurrent.ListenableFuture; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.BindableConversationItem; import org.thoughtcrime.securesms.R; @@ -47,7 +48,6 @@ import org.thoughtcrime.securesms.util.ProjectionList; import org.thoughtcrime.securesms.util.ThemeUtil; 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.thoughtcrime.securesms.verify.VerifyIdentityActivity; import org.whispersystems.signalservice.api.push.ServiceId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/SignalBottomActionBarController.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/SignalBottomActionBarController.kt index b9d2bba3ca..9b8255cb4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/SignalBottomActionBarController.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/SignalBottomActionBarController.kt @@ -5,10 +5,10 @@ import android.view.ViewTreeObserver import androidx.core.view.doOnPreDraw import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView +import org.signal.core.util.concurrent.ListenableFuture.Listener import org.signal.core.util.dp import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar import org.thoughtcrime.securesms.util.ViewUtil -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener import java.util.concurrent.ExecutionException class SignalBottomActionBarController( diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt index 3a3dc03086..093a6e1a66 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationFragment.kt @@ -84,6 +84,7 @@ import org.signal.core.util.PendingIntentFlags import org.signal.core.util.Result import org.signal.core.util.ThreadUtil import org.signal.core.util.concurrent.LifecycleDisposable +import org.signal.core.util.concurrent.ListenableFuture import org.signal.core.util.concurrent.addTo import org.signal.core.util.dp import org.signal.core.util.logging.Log @@ -303,7 +304,6 @@ import org.thoughtcrime.securesms.util.StorageUtil import org.thoughtcrime.securesms.util.TextSecurePreferences import org.thoughtcrime.securesms.util.ViewUtil import org.thoughtcrime.securesms.util.WindowUtil -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture import org.thoughtcrime.securesms.util.createActivityViewModel import org.thoughtcrime.securesms.util.doAfterNextLayout import org.thoughtcrime.securesms.util.fragments.requireListener 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 24884f4a28..e34884e83a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/maps/PlacePickerActivity.java @@ -32,6 +32,7 @@ import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MapStyleOptions; +import org.signal.core.util.concurrent.ListenableFuture; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.components.location.SignalMapView; @@ -40,7 +41,6 @@ import org.thoughtcrime.securesms.util.BitmapUtil; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.MediaUtil; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; import org.thoughtcrime.securesms.util.views.SimpleProgressDialog; import java.io.IOException; 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 9e5d4d6f85..b61809d34c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -44,6 +44,9 @@ import com.bumptech.glide.RequestManager; import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.signal.core.util.ThreadUtil; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.ListenableFuture.Listener; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.R; @@ -83,9 +86,6 @@ import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.ProfileUtil; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.concurrent.AssertedSuccessListener; -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.signalservice.api.util.ExpiringProfileCredentialUtil; diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/SystemProfileUtil.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/SystemProfileUtil.java index 946e2934e8..0b03302e23 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/SystemProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/SystemProfileUtil.java @@ -14,12 +14,12 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.mms.MediaConstraints; import org.thoughtcrime.securesms.util.BitmapDecodingException; import org.thoughtcrime.securesms.util.BitmapUtil; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; public class SystemProfileUtil { 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 b76341a361..6a135fa45b 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 @@ -8,6 +8,8 @@ import androidx.annotation.Nullable; import androidx.core.util.Consumer; import org.signal.core.util.StreamUtil; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; import org.thoughtcrime.securesms.conversation.colors.AvatarColor; import org.thoughtcrime.securesms.database.SignalDatabase; @@ -23,8 +25,6 @@ import org.thoughtcrime.securesms.profiles.SystemProfileUtil; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; import org.thoughtcrime.securesms.registration.RegistrationUtil; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.signal.core.util.concurrent.SimpleTask; import java.io.ByteArrayInputStream; import java.io.IOException; 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 b00b1d03d6..bd4da75ec7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryLinkPreviewView.kt @@ -8,6 +8,8 @@ import android.util.AttributeSet import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import com.bumptech.glide.Glide +import org.signal.core.util.concurrent.ListenableFuture +import org.signal.core.util.concurrent.SettableFuture import org.signal.core.util.isAbsent import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ThumbnailView @@ -17,8 +19,6 @@ import org.thoughtcrime.securesms.linkpreview.LinkPreviewState import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil import org.thoughtcrime.securesms.mms.ImageSlide import org.thoughtcrime.securesms.mms.Slide -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture -import org.thoughtcrime.securesms.util.concurrent.SettableFuture import org.thoughtcrime.securesms.util.views.Stub import org.thoughtcrime.securesms.util.visible import java.text.DateFormat diff --git a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt index 4e8f72042b..3732af36cf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/stories/StoryTextPostView.kt @@ -12,6 +12,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.graphics.ColorUtils import androidx.core.view.doOnNextLayout import androidx.core.view.isVisible +import org.signal.core.util.concurrent.ListenableFuture import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.components.ClippedCardView import org.thoughtcrime.securesms.conversation.MessageStyler @@ -25,7 +26,6 @@ import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryPostCreationState import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryScale import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryTextWatcher import org.thoughtcrime.securesms.util.LongClickMovementMethod -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture import org.thoughtcrime.securesms.util.visible import java.util.Locale 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 b4c3fbffdd..9791076f42 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/IdentityUtil.java @@ -6,6 +6,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.StringRes; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.core.util.concurrent.SignalExecutors; import org.signal.core.util.concurrent.SimpleTask; import org.signal.core.util.logging.Log; @@ -31,8 +33,6 @@ import org.thoughtcrime.securesms.mms.OutgoingMessage; import org.thoughtcrime.securesms.notifications.v2.ConversationId; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.RecipientId; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; import org.whispersystems.signalservice.api.SignalSessionLock; import org.whispersystems.signalservice.api.messages.multidevice.VerifiedMessage; import org.whispersystems.signalservice.api.push.ServiceId; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java index 56113b7afc..af256d61b8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ViewUtil.java @@ -46,8 +46,8 @@ import androidx.core.view.WindowInsetsCompat; import androidx.interpolator.view.animation.FastOutSlowInInterpolator; import androidx.lifecycle.Lifecycle; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture; -import org.thoughtcrime.securesms.util.concurrent.SettableFuture; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.thoughtcrime.securesms.util.views.Stub; public final class ViewUtil { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java index 1bd4e81248..735c0c2536 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/AssertedSuccessListener.java @@ -1,6 +1,6 @@ package org.thoughtcrime.securesms.util.concurrent; -import org.thoughtcrime.securesms.util.concurrent.ListenableFuture.Listener; +import org.signal.core.util.concurrent.ListenableFuture.Listener; import java.util.concurrent.ExecutionException; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/CascadingFuture.java b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/CascadingFuture.java similarity index 94% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/CascadingFuture.java rename to core-util-jvm/src/main/java/org/signal/core/util/concurrent/CascadingFuture.java index dceafe8121..2bba91026f 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/CascadingFuture.java +++ b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/CascadingFuture.java @@ -1,6 +1,9 @@ -package org.whispersystems.signalservice.internal.util.concurrent; +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ -import org.signal.libsignal.protocol.logging.Log; +package org.signal.core.util.concurrent; import java.util.ArrayList; import java.util.List; @@ -75,7 +78,6 @@ public final class CascadingFuture implements ListenableFuture { @Override public void onFailure(ExecutionException e) { if (callables.isEmpty() || !exceptionChecker.shouldContinue(e)) { - Log.w(TAG, e); result.setException(e.getCause()); } else if (!result.isCancelled()) { doNext(callables, exceptionChecker); @@ -86,7 +88,6 @@ public final class CascadingFuture implements ListenableFuture { if (callables.isEmpty() || !exceptionChecker.shouldContinue(e)) { result.setException(e.getCause()); } else if (!result.isCancelled()) { - Log.w(TAG, e); doNext(callables, exceptionChecker); } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureMapTransformer.java b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureMapTransformer.java similarity index 93% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureMapTransformer.java rename to core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureMapTransformer.java index cc2e926e30..5ac82039db 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureMapTransformer.java +++ b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureMapTransformer.java @@ -1,4 +1,9 @@ -package org.whispersystems.signalservice.internal.util.concurrent; +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util.concurrent; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureTransformers.java b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureTransformers.java similarity index 72% rename from libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureTransformers.java rename to core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureTransformers.java index 56ea40e717..7a6d84e9d8 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/FutureTransformers.java +++ b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/FutureTransformers.java @@ -1,4 +1,9 @@ -package org.whispersystems.signalservice.internal.util.concurrent; +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util.concurrent; public final class FutureTransformers { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/ListenableFuture.java similarity index 70% rename from app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java rename to core-util-jvm/src/main/java/org/signal/core/util/concurrent/ListenableFuture.java index b943a26fb9..a8ae831e43 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/ListenableFuture.java +++ b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/ListenableFuture.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.util.concurrent; +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util.concurrent; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/SettableFuture.java similarity index 91% rename from app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java rename to core-util-jvm/src/main/java/org/signal/core/util/concurrent/SettableFuture.java index 81aaadbef1..16e4c67196 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/concurrent/SettableFuture.java +++ b/core-util-jvm/src/main/java/org/signal/core/util/concurrent/SettableFuture.java @@ -1,4 +1,9 @@ -package org.thoughtcrime.securesms.util.concurrent; +/* + * Copyright 2024 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ + +package org.signal.core.util.concurrent; import java.util.LinkedList; import java.util.List; @@ -22,6 +27,11 @@ public class SettableFuture implements ListenableFuture { this.completed = true; } + public SettableFuture(Throwable throwable) { + this.exception = throwable; + this.completed = true; + } + @Override public synchronized boolean cancel(boolean mayInterruptIfRunning) { if (!completed && !canceled) { @@ -98,7 +108,7 @@ public class SettableFuture implements ListenableFuture { { long startTime = System.currentTimeMillis(); - while (!completed && System.currentTimeMillis() - startTime > unit.toMillis(timeout)) { + while (!completed && System.currentTimeMillis() - startTime < unit.toMillis(timeout)) { wait(unit.toMillis(timeout)); } 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 a68215bbdb..1aea808a3a 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 @@ -6,6 +6,9 @@ package org.whispersystems.signalservice.api; +import org.signal.core.util.concurrent.FutureTransformers; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.libsignal.protocol.InvalidMessageException; import org.signal.libsignal.zkgroup.profiles.ClientZkProfileOperations; import org.signal.libsignal.zkgroup.profiles.ProfileKey; @@ -29,9 +32,6 @@ import org.whispersystems.signalservice.internal.push.IdentityCheckResponse; import org.whispersystems.signalservice.internal.push.PushServiceSocket; import org.whispersystems.signalservice.internal.sticker.Pack; import org.whispersystems.signalservice.internal.util.Util; -import org.whispersystems.signalservice.internal.util.concurrent.FutureTransformers; -import org.whispersystems.signalservice.internal.util.concurrent.ListenableFuture; -import org.whispersystems.signalservice.internal.util.concurrent.SettableFuture; import org.whispersystems.signalservice.internal.websocket.ResponseMapper; import java.io.File; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java index f845851842..2d4f33f01b 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/push/PushServiceSocket.java @@ -10,6 +10,10 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.core.JsonProcessingException; import com.squareup.wire.Message; +import org.signal.core.util.Base64; +import org.signal.core.util.concurrent.FutureTransformers; +import org.signal.core.util.concurrent.ListenableFuture; +import org.signal.core.util.concurrent.SettableFuture; import org.signal.libsignal.protocol.InvalidKeyException; import org.signal.libsignal.protocol.ecc.ECPublicKey; import org.signal.libsignal.protocol.kem.KEMPublicKey; @@ -44,10 +48,10 @@ import org.whispersystems.signalservice.api.account.PniKeyDistributionRequest; import org.whispersystems.signalservice.api.account.PreKeyCollection; import org.whispersystems.signalservice.api.account.PreKeyUpload; import org.whispersystems.signalservice.api.archive.ArchiveCredentialPresentation; -import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse; -import org.whispersystems.signalservice.api.archive.ArchiveServiceCredentialsResponse; import org.whispersystems.signalservice.api.archive.ArchiveGetBackupInfoResponse; +import org.whispersystems.signalservice.api.archive.ArchiveGetMediaItemsResponse; import org.whispersystems.signalservice.api.archive.ArchiveMessageBackupUploadFormResponse; +import org.whispersystems.signalservice.api.archive.ArchiveServiceCredentialsResponse; import org.whispersystems.signalservice.api.archive.ArchiveSetBackupIdRequest; import org.whispersystems.signalservice.api.archive.ArchiveSetPublicKeyRequest; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; @@ -143,11 +147,7 @@ import org.whispersystems.signalservice.internal.util.BlacklistingTrustManager; import org.whispersystems.signalservice.internal.util.Hex; import org.whispersystems.signalservice.internal.util.JsonUtil; import org.whispersystems.signalservice.internal.util.Util; -import org.whispersystems.signalservice.internal.util.concurrent.FutureTransformers; -import org.whispersystems.signalservice.internal.util.concurrent.ListenableFuture; -import org.whispersystems.signalservice.internal.util.concurrent.SettableFuture; import org.whispersystems.signalservice.internal.websocket.ResponseMapper; -import org.signal.core.util.Base64; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/ListenableFuture.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/ListenableFuture.java deleted file mode 100644 index 45d5ae351f..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/ListenableFuture.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.whispersystems.signalservice.internal.util.concurrent; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; - -public interface ListenableFuture extends Future { - void addListener(Listener listener); - - public interface Listener { - public void onSuccess(T result); - public void onFailure(ExecutionException e); - } -} diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/SettableFuture.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/SettableFuture.java deleted file mode 100644 index 7228d3dc09..0000000000 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/internal/util/concurrent/SettableFuture.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.whispersystems.signalservice.internal.util.concurrent; - -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; - -public class SettableFuture implements ListenableFuture { - - private final List> listeners = new LinkedList<>(); - - private boolean completed; - private boolean canceled; - private volatile T result; - private volatile Throwable exception; - - @Override - public synchronized boolean cancel(boolean mayInterruptIfRunning) { - if (!completed && !canceled) { - canceled = true; - return true; - } - - return false; - } - - @Override - public synchronized boolean isCancelled() { - return canceled; - } - - @Override - public synchronized boolean isDone() { - return completed; - } - - public boolean set(T result) { - synchronized (this) { - if (completed || canceled) return false; - - this.result = result; - this.completed = true; - - notifyAll(); - } - - notifyAllListeners(); - return true; - } - - public boolean setException(Throwable throwable) { - synchronized (this) { - if (completed || canceled) return false; - - this.exception = throwable; - this.completed = true; - - notifyAll(); - } - - notifyAllListeners(); - return true; - } - - @Override - public synchronized T get() throws InterruptedException, ExecutionException { - while (!completed) wait(); - - if (exception != null) throw new ExecutionException(exception); - else return result; - } - - @Override - public synchronized T get(long timeout, TimeUnit unit) - throws InterruptedException, ExecutionException, TimeoutException - { - long startTime = System.currentTimeMillis(); - - while (!completed && System.currentTimeMillis() - startTime < unit.toMillis(timeout)) { - wait(unit.toMillis(timeout)); - } - - if (!completed) throw new TimeoutException(); - else return get(); - } - - @Override - public void addListener(Listener listener) { - synchronized (this) { - listeners.add(listener); - - if (!completed) return; - } - - notifyListener(listener); - } - - private void notifyAllListeners() { - List> localListeners; - - synchronized (this) { - localListeners = new LinkedList<>(listeners); - } - - for (Listener listener : localListeners) { - notifyListener(listener); - } - } - - private void notifyListener(Listener listener) { - if (exception != null) listener.onFailure(new ExecutionException(exception)); - else listener.onSuccess(result); - } -}