Update to libsignal 0.86.1

This commit is contained in:
Jordan Rose
2025-11-07 13:34:31 -08:00
committed by GitHub
parent 945453cb81
commit b2e547f9f2
37 changed files with 119 additions and 103 deletions

View File

@@ -9,7 +9,6 @@ import com.google.android.flexbox.FlexboxLayoutManager
import com.google.android.flexbox.JustifyContent
import org.signal.core.util.DimensionUnit
import org.signal.core.util.logging.Log
import org.signal.libsignal.protocol.util.Pair
import org.thoughtcrime.securesms.BuildConfig
import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.badges.models.Badge.Category.Companion.fromCode
@@ -76,7 +75,7 @@ object Badges {
"xxxhdpi" -> Pair(getBadgeImageUri(serviceBadge.sprites6[5]), "xxxhdpi")
else -> Pair(getBadgeImageUri(serviceBadge.sprites6[3]), "xhdpi")
}.also {
Log.d(TAG, "Selected badge density ${it.second()}")
Log.d(TAG, "Selected badge density ${it.second}")
}
}
@@ -121,8 +120,8 @@ object Badges {
fromCode(serviceBadge.category),
serviceBadge.name,
serviceBadge.description,
uriAndDensity.first(),
uriAndDensity.second(),
uriAndDensity.first,
uriAndDensity.second,
serviceBadge.expiration?.let { getTimestamp(it) } ?: 0,
serviceBadge.isVisible,
TimeUnit.SECONDS.toMillis(serviceBadge.duration)

View File

@@ -8,7 +8,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.WorkerThread;
import org.signal.core.util.CursorUtil;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.contacts.paged.ContactSearchSortOrder;
import org.thoughtcrime.securesms.database.RecipientTable;
import org.thoughtcrime.securesms.database.SignalDatabase;
@@ -20,6 +19,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import kotlin.Pair;
/**
* Repository for all contacts. Allows you to filter them via queries.
*
@@ -140,8 +141,8 @@ public class ContactRepository {
for (int i = 0; i < mappers.size(); i++) {
Pair<String, ValueMapper> pair = mappers.get(i);
positions.put(pair.first(), i);
columnNames[i] = pair.first();
positions.put(pair.getFirst(), i);
columnNames[i] = pair.getFirst();
}
}
@@ -168,17 +169,17 @@ public class ContactRepository {
@Override
public String getString(int columnIndex) {
return String.valueOf(mappers.get(columnIndex).second().get(wrapped));
return String.valueOf(mappers.get(columnIndex).getSecond().get(wrapped));
}
@Override
public int getInt(int columnIndex) {
return (int) mappers.get(columnIndex).second().get(wrapped);
return (int) mappers.get(columnIndex).getSecond().get(wrapped);
}
@Override
public long getLong(int columnIndex) {
return (long) mappers.get(columnIndex).second().get(wrapped);
return (long) mappers.get(columnIndex).getSecond().get(wrapped);
}
}

View File

@@ -414,7 +414,7 @@ class ConversationRepository(
if (details == null) {
-1
} else {
SignalDatabase.messages.getMessagePositionInConversation(threadId, details.second(), details.first())
SignalDatabase.messages.getMessagePositionInConversation(threadId, details.second, details.first)
}
}.subscribeOn(Schedulers.io())
}

View File

@@ -16,7 +16,6 @@ import org.signal.core.util.requireLong
import org.signal.core.util.select
import org.signal.core.util.update
import org.signal.core.util.withinTransaction
import org.signal.libsignal.protocol.util.Pair
import org.thoughtcrime.securesms.recipients.RecipientId
class GroupReceiptTable(context: Context?, databaseHelper: SignalDatabase?) : DatabaseTable(context, databaseHelper), RecipientIdDatabaseReference {
@@ -86,12 +85,12 @@ class GroupReceiptTable(context: Context?, databaseHelper: SignalDatabase?) : Da
val mmsMatchPrefix = "$MMS_ID = $mmsId AND"
val unidentifiedQueries = SqlUtil.buildCollectionQuery(
column = RECIPIENT_ID,
values = results.filter { it.second() }.map { it.first().serialize() },
values = results.filter { it.second }.map { it.first.serialize() },
prefix = mmsMatchPrefix
)
val identifiedQueries = SqlUtil.buildCollectionQuery(
column = RECIPIENT_ID,
values = results.filterNot { it.second() }.map { it.first().serialize() },
values = results.filterNot { it.second }.map { it.first.serialize() },
prefix = mmsMatchPrefix
)
writableDatabase.withinTransaction { db ->

View File

@@ -64,7 +64,6 @@ import org.signal.core.util.toSingleLine
import org.signal.core.util.update
import org.signal.core.util.withinTransaction
import org.signal.libsignal.protocol.IdentityKey
import org.signal.libsignal.protocol.util.Pair
import org.thoughtcrime.securesms.attachments.Attachment
import org.thoughtcrime.securesms.attachments.AttachmentId
import org.thoughtcrime.securesms.attachments.DatabaseAttachment
@@ -4295,12 +4294,12 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
do {
pair = getGroupAddedBy(threadId, lastQuitChecked)
if (pair.first() != null) {
return pair.first()
if (pair.first != null) {
return pair.first
} else {
lastQuitChecked = pair.second()
lastQuitChecked = pair.second
}
} while (pair.second() != -1L)
} while (pair.second != -1L)
return null
}
@@ -4925,7 +4924,7 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
}
for (expiringMessage in expiringMessages) {
AppDependencies.expiringMessageManager.scheduleDeletion(expiringMessage.first(), true, proposedExpireStarted, expiringMessage.second())
AppDependencies.expiringMessageManager.scheduleDeletion(expiringMessage.first, true, proposedExpireStarted, expiringMessage.second)
}
for (threadId in updatedThreads) {

View File

@@ -45,8 +45,8 @@ data class StickerPackParams(
return (StickerUrl.parseActionUri(uri) ?: StickerUrl.parseShareLink(uri.toString()))
.map { parseResult ->
StickerPackParams(
id = StickerPackId(parseResult.first()),
key = StickerPackKey(parseResult.second())
id = StickerPackId(parseResult.first),
key = StickerPackKey(parseResult.second)
)
}.orNull()
}

View File

@@ -11,7 +11,6 @@ import com.annimon.stream.Stream;
import org.signal.core.util.SetUtil;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.database.GroupReceiptTable;
import org.thoughtcrime.securesms.database.GroupReceiptTable.GroupReceiptInfo;
@@ -74,6 +73,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import kotlin.Pair;
import okio.ByteString;
import okio.Utf8;
@@ -455,7 +456,7 @@ public final class PushGroupSendJob extends PushSendJob {
ProofRequiredException proofRequired = Stream.of(results).filter(r -> r.getProofRequiredFailure() != null).findLast().map(SendMessageResult::getProofRequiredFailure).orElse(null);
List<SendMessageResult> successes = Stream.of(results).filter(result -> result.getSuccess() != null).toList();
List<Pair<RecipientId, Boolean>> successUnidentifiedStatus = Stream.of(successes).map(result -> new Pair<>(accessList.requireIdByAddress(result.getAddress()), result.getSuccess().isUnidentified())).toList();
Set<RecipientId> successIds = Stream.of(successUnidentifiedStatus).map(Pair::first).collect(Collectors.toSet());
Set<RecipientId> successIds = Stream.of(successUnidentifiedStatus).map(Pair::getFirst).collect(Collectors.toSet());
Set<NetworkFailure> resolvedNetworkFailures = Stream.of(existingNetworkFailures).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
Set<IdentityKeyMismatch> resolvedIdentityFailures = Stream.of(existingIdentityMismatches).filter(failure -> successIds.contains(failure.getRecipientId())).collect(Collectors.toSet());
List<RecipientId> unregisteredRecipients = Stream.of(results).filter(SendMessageResult::isUnregisteredFailure).map(result -> RecipientId.from(result.getAddress())).toList();

View File

@@ -11,7 +11,6 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SmoothScroller
import com.bumptech.glide.Glide
import com.google.android.material.appbar.AppBarLayout
import org.signal.libsignal.protocol.util.Pair
import org.thoughtcrime.securesms.LoggingFragment
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.database.DatabaseObserver

View File

@@ -17,7 +17,6 @@ import org.signal.core.util.Result;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.InvalidMessageException;
import org.signal.libsignal.protocol.util.Pair;
import org.signal.libsignal.zkgroup.VerificationFailedException;
import org.signal.libsignal.zkgroup.groups.GroupMasterKey;
import org.signal.ringrtc.CallLinkEpoch;
@@ -69,6 +68,8 @@ import java.util.List;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import kotlin.Pair;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.disposables.Disposable;
import io.reactivex.rxjava3.schedulers.Schedulers;
@@ -287,8 +288,8 @@ public class LinkPreviewRepository {
SignalExecutors.UNBOUNDED.execute(() -> {
try {
Pair<String, String> stickerParams = StickerUrl.parseShareLink(packUrl).orElse(new Pair<>("", ""));
String packIdString = stickerParams.first();
String packKeyString = stickerParams.second();
String packIdString = stickerParams.getFirst();
String packKeyString = stickerParams.getSecond();
byte[] packIdBytes = Hex.fromStringCondensed(packIdString);
byte[] packKeyBytes = Hex.fromStringCondensed(packKeyString);

View File

@@ -6,13 +6,14 @@ import android.content.pm.PackageManager;
import androidx.annotation.NonNull;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.BuildConfig;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import kotlin.Pair;
public class LogSectionPermissions implements LogSection {
@Override
public @NonNull String getTitle() {
@@ -35,11 +36,11 @@ public class LogSectionPermissions implements LogSection {
return "Unable to retrieve.";
}
Collections.sort(status, (o1, o2) -> o1.first().compareTo(o2.first()));
Collections.sort(status, (o1, o2) -> o1.getFirst().compareTo(o2.getFirst()));
for (Pair<String, Boolean> pair : status) {
out.append(pair.first()).append(": ");
out.append(pair.second() ? "YES" : "NO");
out.append(pair.getFirst()).append(": ");
out.append(pair.getSecond() ? "YES" : "NO");
out.append("\n");
}

View File

@@ -38,7 +38,6 @@ import com.bumptech.glide.RequestManager;
import com.codewaves.stickyheadergrid.StickyHeaderGridAdapter;
import org.signal.core.util.ByteSize;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.attachments.AttachmentId;
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
@@ -69,6 +68,8 @@ import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import kotlin.Pair;
final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
private static final long SELECTION_ANIMATION_DURATION = TimeUnit.MILLISECONDS.toMillis(150);
@@ -461,7 +462,7 @@ final class MediaGalleryAllAdapter extends StickyHeaderGridAdapter {
@Override
public void onChanged(Pair<Recipient, Recipient> fromToPair) {
line1.setText(describe(fromToPair.first(), fromToPair.second()));
line1.setText(describe(fromToPair.getFirst(), fromToPair.getSecond()));
}
protected @Nullable String getMediaTitle() {

View File

@@ -36,7 +36,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.tabs.TabLayout;
import com.google.android.material.transition.platform.MaterialContainerTransformSharedElementCallback;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.AnimatingToggle;
@@ -53,6 +52,8 @@ import org.signal.core.util.concurrent.SimpleTask;
import java.util.ArrayList;
import java.util.List;
import kotlin.Pair;
/**
* Activity for displaying media attachments in-app
*/
@@ -276,7 +277,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity {
? MediaOverviewPageFragment.GridMode.FOLLOW_MODEL
: MediaOverviewPageFragment.GridMode.FIXED_DETAIL;
return MediaOverviewPageFragment.newInstance(threadId, pages.get(position).first(), gridMode);
return MediaOverviewPageFragment.newInstance(threadId, pages.get(position).getFirst(), gridMode);
}
@Override
@@ -286,7 +287,7 @@ public final class MediaOverviewActivity extends PassphraseRequiredActivity {
@Override
public CharSequence getPageTitle(int position) {
return pages.get(position).second();
return pages.get(position).getSecond();
}
}
}

View File

@@ -9,7 +9,6 @@ import org.signal.core.util.orNull
import org.signal.libsignal.protocol.IdentityKey
import org.signal.libsignal.protocol.InvalidKeyException
import org.signal.libsignal.protocol.SignalProtocolAddress
import org.signal.libsignal.protocol.util.Pair
import org.signal.ringrtc.CallException
import org.signal.ringrtc.CallId
import org.signal.ringrtc.CallLinkRootKey

View File

@@ -9,7 +9,6 @@ import com.bumptech.glide.util.ContentLengthInputStream;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.util.Util;
import java.io.FilterInputStream;
@@ -21,6 +20,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Optional;
import kotlin.Pair;
import okhttp3.CacheControl;
import okhttp3.Call;
import okhttp3.OkHttpClient;
@@ -137,9 +138,9 @@ public class ChunkedDataFetcher {
List<ByteRange> requestPattern;
try {
if (firstChunk.isPresent()) {
requestPattern = Stream.of(getRequestPattern(contentLength - firstChunk.get().second()))
.map(b -> new ByteRange(b.start + firstChunk.get().second(),
b.end + firstChunk.get().second(),
requestPattern = Stream.of(getRequestPattern(contentLength - firstChunk.get().getSecond()))
.map(b -> new ByteRange(b.start + firstChunk.get().getSecond(),
b.end + firstChunk.get().getSecond(),
b.ignoreFirst))
.toList();
} else {
@@ -156,7 +157,7 @@ public class ChunkedDataFetcher {
List<InputStream> streams = new ArrayList<>(controllers.size() + (firstChunk.isPresent() ? 1 : 0));
if (firstChunk.isPresent()) {
streams.add(firstChunk.get().first());
streams.add(firstChunk.get().getFirst());
}
Stream.of(controllers).forEach(compositeController::addController);

View File

@@ -10,7 +10,6 @@ import androidx.lifecycle.ViewModelProvider;
import com.annimon.stream.Stream;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.BuildConfig;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.settings.SettingHeader;
@@ -32,6 +31,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Objects;
import kotlin.Pair;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
@@ -95,11 +96,11 @@ public final class SetCurrencyViewModel extends ViewModel {
private int findSelectedIndex(MappingModelList items) {
return Stream.of(items)
.mapIndexed(Pair::new)
.filter(p -> p.second() instanceof SingleSelectSetting.Item)
.map(p -> new Pair<>(p.first(), (SingleSelectSetting.Item) p.second()))
.filter(pair -> pair.second().isSelected())
.filter(p -> p.getSecond() instanceof SingleSelectSetting.Item)
.map(p -> new Pair<>(p.getFirst(), (SingleSelectSetting.Item) p.getSecond()))
.filter(pair -> pair.getSecond().isSelected())
.findFirst()
.map(Pair::first)
.map(Pair::getFirst)
.orElse(-1);
}

View File

@@ -18,7 +18,6 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import org.signal.core.util.ThreadUtil;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.BlockUnblockDialog;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.components.settings.conversation.ConversationSettingsActivity;
@@ -46,6 +45,8 @@ import org.thoughtcrime.securesms.verify.VerifyIdentityActivity;
import java.util.Objects;
import kotlin.Pair;
import io.reactivex.rxjava3.disposables.CompositeDisposable;
import io.reactivex.rxjava3.disposables.Disposable;
@@ -83,8 +84,8 @@ final class RecipientDialogViewModel extends ViewModel {
LiveData<GroupTable.MemberLevel> recipientMemberLevel = Transformations.switchMap(recipient, source::getMemberLevel);
adminActionStatus = LiveDataUtil.combineLatest(localStatus, recipientMemberLevel, (statuses, memberLevel) -> {
boolean localAdmin = statuses.first();
boolean isLinkActive = statuses.second();
boolean localAdmin = statuses.getFirst();
boolean isLinkActive = statuses.getSecond();
boolean inGroup = memberLevel.isInGroup();
boolean recipientAdmin = memberLevel == GroupTable.MemberLevel.ADMINISTRATOR;

View File

@@ -45,7 +45,6 @@ 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.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.animation.ResizeAnimation;
import org.thoughtcrime.securesms.attachments.AttachmentSaver;
@@ -76,6 +75,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import kotlin.Pair;
import io.reactivex.rxjava3.core.Single;
import io.reactivex.rxjava3.schedulers.Schedulers;
@@ -579,8 +580,8 @@ public final class ImageEditorFragment extends Fragment implements ImageEditorHu
Matrix inverseCropPosition = model.getInverseCropPosition();
if (cachedFaceDetection != null) {
if (cachedFaceDetection.first().equals(getUri()) && cachedFaceDetection.second().position.equals(inverseCropPosition)) {
renderFaceBlurs(cachedFaceDetection.second());
if (cachedFaceDetection.getFirst().equals(getUri()) && cachedFaceDetection.getSecond().position.equals(inverseCropPosition)) {
renderFaceBlurs(cachedFaceDetection.getSecond());
imageEditorHud.showBlurToast();
return;
} else {

View File

@@ -16,7 +16,6 @@ import com.annimon.stream.Stream;
import org.greenrobot.eventbus.EventBus;
import org.signal.core.util.concurrent.SignalExecutors;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.util.Pair;
import org.signal.libsignal.zkgroup.GenericServerPublicParams;
import org.signal.libsignal.zkgroup.InvalidInputException;
import org.signal.libsignal.zkgroup.VerificationFailedException;
@@ -115,6 +114,7 @@ import io.reactivex.rxjava3.core.Flowable;
import io.reactivex.rxjava3.schedulers.Schedulers;
import kotlin.jvm.functions.Function1;
import kotlin.text.Charsets;
import kotlin.Pair;
import static org.thoughtcrime.securesms.events.WebRtcViewModel.GroupCallState.IDLE;
import static org.thoughtcrime.securesms.events.WebRtcViewModel.State.CALL_INCOMING;

View File

@@ -20,7 +20,6 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.PassphraseRequiredActivity;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment;
@@ -37,6 +36,7 @@ import org.whispersystems.signalservice.api.util.OptionalUtil;
import java.util.Collections;
import java.util.Optional;
import kotlin.Pair;
/**
* Shows the contents of a pack and allows the user to install it (if not installed) or remove it
@@ -92,8 +92,8 @@ public final class StickerPackPreviewActivity extends PassphraseRequiredActivity
return;
}
String packId = stickerParams.get().first();
String packKey = stickerParams.get().second();
String packId = stickerParams.get().getFirst();
String packKey = stickerParams.get().getSecond();
initToolbar();
initView();

View File

@@ -11,13 +11,14 @@ import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.RequestManager;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.keyboard.sticker.KeyboardStickerListAdapter;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.lang.ref.WeakReference;
import kotlin.Pair;
public class StickerRolloverTouchListener implements RecyclerView.OnItemTouchListener {
private final StickerPreviewPopup popup;
private final RolloverEventListener eventListener;
@@ -95,7 +96,7 @@ public class StickerRolloverTouchListener implements RecyclerView.OnItemTouchLis
Pair<Object, String> stickerData = stickerRetriever.getStickerDataFromView(view);
if (stickerData != null) {
showSticker(recyclerView, stickerData.first(), stickerData.second());
showSticker(recyclerView, stickerData.getFirst(), stickerData.getSecond());
}
}

View File

@@ -7,13 +7,14 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.signal.core.util.Hex;
import org.signal.libsignal.protocol.util.Pair;
import org.whispersystems.signalservice.api.util.OptionalUtil;
import java.util.Optional;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import kotlin.Pair;
/**
* Manages creating and parsing the various sticker pack URLs.
*/

View File

@@ -11,7 +11,6 @@ import org.signal.core.util.logging.Log;
import org.signal.libsignal.protocol.IdentityKey;
import org.signal.libsignal.protocol.IdentityKeyPair;
import org.signal.libsignal.protocol.InvalidKeyException;
import org.signal.libsignal.protocol.util.Pair;
import org.signal.libsignal.zkgroup.InvalidInputException;
import org.signal.libsignal.zkgroup.profiles.ExpiringProfileKeyCredential;
import org.signal.libsignal.zkgroup.profiles.ProfileKey;
@@ -57,6 +56,8 @@ import java.util.Locale;
import java.util.Optional;
import java.util.stream.Collectors;
import kotlin.Pair;
import io.reactivex.rxjava3.core.Single;
/**
@@ -112,7 +113,7 @@ public final class ProfileUtil {
throws IOException
{
Pair<Recipient, ServiceResponse<ProfileAndCredential>> response = retrieveProfile(context, recipient, requestType, allowUnidentifiedAccess).blockingGet();
return new ProfileService.ProfileResponseProcessor(response.second()).getResultOrThrow();
return new ProfileService.ProfileResponseProcessor(response.getSecond()).getResultOrThrow();
}
@WorkerThread

View File

@@ -12,7 +12,6 @@ import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import org.signal.core.util.StringUtil;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.components.spoiler.SpoilerAnnotation;
import java.security.InvalidParameterException;
@@ -21,6 +20,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import kotlin.Pair;
public class SearchUtil {
public static final int STRICT = 0;
@@ -73,9 +74,9 @@ public class SearchUtil {
for (Pair<Integer, Integer> range : ranges) {
CharacterStyle[] styles = styleFactory.createStyles();
for (CharacterStyle style : styles) {
List<Annotation> annotations = SpoilerAnnotation.getSpoilerAnnotations(spanned, range.first(), range.second());
List<Annotation> annotations = SpoilerAnnotation.getSpoilerAnnotations(spanned, range.getFirst(), range.getSecond());
if (annotations.isEmpty()) {
spanned.setSpan(style, range.first(), range.second(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanned.setSpan(style, range.getFirst(), range.getSecond(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}

View File

@@ -4,12 +4,13 @@ import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import org.signal.libsignal.protocol.util.Pair;
import org.thoughtcrime.securesms.components.RecyclerViewFastScroller;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
import java.util.Optional;
import kotlin.Pair;
public final class RecyclerViewConcatenateAdapterStickyHeader extends RecyclerViewConcatenateAdapter
implements StickyHeaderDecoration.StickyHeaderAdapter,
@@ -18,12 +19,12 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle
@Override
public long getHeaderId(int position) {
return getForPosition(position).map(p -> p.first().getHeaderId(p.second())).orElse(-1L);
return getForPosition(position).map(p -> p.getFirst().getHeaderId(p.getSecond())).orElse(-1L);
}
@Override
public RecyclerView.ViewHolder onCreateHeaderViewHolder(ViewGroup parent, int position, int type) {
return getForPosition(position).map(p -> p.first().onCreateHeaderViewHolder(parent, p.second(), type)).orElse(null);
return getForPosition(position).map(p -> p.getFirst().onCreateHeaderViewHolder(parent, p.getSecond(), type)).orElse(null);
}
@Override
@@ -33,7 +34,7 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle
if (forPosition.isPresent()) {
Pair<StickyHeaderDecoration.StickyHeaderAdapter, Integer> stickyHeaderAdapterIntegerPair = forPosition.get();
//noinspection unchecked
stickyHeaderAdapterIntegerPair.first().onBindHeaderViewHolder(viewHolder, stickyHeaderAdapterIntegerPair.second(), type);
stickyHeaderAdapterIntegerPair.getFirst().onBindHeaderViewHolder(viewHolder, stickyHeaderAdapterIntegerPair.getSecond(), type);
}
}
@@ -42,8 +43,8 @@ public final class RecyclerViewConcatenateAdapterStickyHeader extends Recycle
Optional<Pair<StickyHeaderDecoration.StickyHeaderAdapter, Integer>> forPosition = getForPosition(position);
return forPosition.map(a -> {
if (a.first() instanceof RecyclerViewFastScroller.FastScrollAdapter) {
return ((RecyclerViewFastScroller.FastScrollAdapter) a.first()).getBubbleText(a.second());
if (a.getFirst() instanceof RecyclerViewFastScroller.FastScrollAdapter) {
return ((RecyclerViewFastScroller.FastScrollAdapter) a.getFirst()).getBubbleText(a.getSecond());
} else {
return "";
}

View File

@@ -5,7 +5,7 @@ import androidx.annotation.Nullable;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import org.signal.libsignal.protocol.util.Pair;
import kotlin.Pair;
public final class LiveDataPair<A, B> extends MediatorLiveData<Pair<A, B>> {
private A a;