diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index f59a7aa03..df87d3367 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -1913,13 +1913,10 @@ public class ConversationActivity extends PassphraseRequiredActivity if (previewState == null) return; if (previewState.isLoading()) { - Log.d(TAG, "Loading link preview."); inputPanel.setLinkPreviewLoading(); } else if (previewState.hasLinks() && !previewState.getLinkPreview().isPresent()) { - Log.d(TAG, "No preview found."); inputPanel.setLinkPreviewNoPreview(previewState.getError()); } else { - Log.d(TAG, "Setting link preview: " + previewState.getLinkPreview().isPresent()); inputPanel.setLinkPreview(glideRequests, previewState.getLinkPreview()); } 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 e33f1d57f..6b57f5f12 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationAdapter.java @@ -170,8 +170,6 @@ public class ConversationAdapter case MESSAGE_TYPE_OUTGOING_TEXT: case MESSAGE_TYPE_OUTGOING_MULTIMEDIA: case MESSAGE_TYPE_UPDATE: - long start = System.currentTimeMillis(); - View itemView = CachedInflater.from(parent.getContext()).inflate(getLayoutForViewType(viewType), parent, false); BindableConversationItem bindable = (BindableConversationItem) itemView; @@ -190,7 +188,6 @@ public class ConversationAdapter bindable.setEventListener(clickListener); - Log.d(TAG, String.format(Locale.US, "Inflate time: %d ms for View type: %d", System.currentTimeMillis() - start, viewType)); return new ConversationViewHolder(itemView); case MESSAGE_TYPE_PLACEHOLDER: View v = new FrameLayout(parent.getContext()); 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 ed4395274..ed4a2622f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/crypto/UnidentifiedAccessUtil.java @@ -7,6 +7,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.WorkerThread; +import com.annimon.stream.Stream; + import org.signal.libsignal.metadata.certificate.CertificateValidator; import org.signal.libsignal.metadata.certificate.InvalidCertificateException; import org.signal.zkgroup.profiles.ProfileKey; @@ -27,6 +29,11 @@ import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess; import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair; import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class UnidentifiedAccessUtil { @@ -42,34 +49,64 @@ public class UnidentifiedAccessUtil { } @WorkerThread - public static Optional getAccessFor(@NonNull Context context, - @NonNull Recipient recipient) - { - try { - byte[] theirUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient); - byte[] ourUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey()); - byte[] ourUnidentifiedAccessCertificate = getUnidentifiedAccessCertificate(recipient); + public static Optional getAccessFor(@NonNull Context context, @NonNull Recipient recipient) { + return getAccessFor(context, recipient, true); + } - if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) { - ourUnidentifiedAccessKey = Util.getSecretBytes(16); - } + @WorkerThread + public static Optional getAccessFor(@NonNull Context context, @NonNull Recipient recipient, boolean log) { + return getAccessFor(context, Collections.singletonList(recipient), log).get(0); + } - Log.i(TAG, "Their access key present? " + (theirUnidentifiedAccessKey != null) + - " | Our certificate present? " + (ourUnidentifiedAccessCertificate != null) + - " | UUID certificate supported? " + recipient.isUuidSupported()); + @WorkerThread + public static List> getAccessFor(@NonNull Context context, @NonNull List recipients) { + return getAccessFor(context, recipients, true); + } + + @WorkerThread + public static List> getAccessFor(@NonNull Context context, @NonNull List recipients, boolean log) { + byte[] ourUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(ProfileKeyUtil.getSelfProfileKey()); + + if (TextSecurePreferences.isUniversalUnidentifiedAccess(context)) { + ourUnidentifiedAccessKey = Util.getSecretBytes(16); + } + + List> access = new ArrayList<>(recipients.size()); + + Map typeCounts = new HashMap<>(); + + for (Recipient recipient : recipients) { + byte[] theirUnidentifiedAccessKey = getTargetUnidentifiedAccessKey(recipient); + CertificateType certificateType = getUnidentifiedAccessCertificateType(recipient); + byte[] ourUnidentifiedAccessCertificate = SignalStore.certificateValues().getUnidentifiedAccessCertificate(certificateType); + + int typeCount = Util.getOrDefault(typeCounts, certificateType, 0); + typeCount++; + typeCounts.put(certificateType, typeCount); if (theirUnidentifiedAccessKey != null && ourUnidentifiedAccessCertificate != null) { - return Optional.of(new UnidentifiedAccessPair(new UnidentifiedAccess(theirUnidentifiedAccessKey, - ourUnidentifiedAccessCertificate), - new UnidentifiedAccess(ourUnidentifiedAccessKey, - ourUnidentifiedAccessCertificate))); + try { + access.add(Optional.of(new UnidentifiedAccessPair(new UnidentifiedAccess(theirUnidentifiedAccessKey, + ourUnidentifiedAccessCertificate), + new UnidentifiedAccess(ourUnidentifiedAccessKey, + ourUnidentifiedAccessCertificate)))); + } catch (InvalidCertificateException e) { + Log.w(TAG, e); + access.add(Optional.absent()); + } + } else { + access.add(Optional.absent()); } - - return Optional.absent(); - } catch (InvalidCertificateException e) { - Log.w(TAG, e); - return Optional.absent(); } + + int unidentifiedCount = Stream.of(access).filter(Optional::isPresent).toList().size(); + int otherCount = access.size() - unidentifiedCount; + + if (log) { + Log.i(TAG, "Unidentified: " + unidentifiedCount + ", Other: " + otherCount + ". Types: " + typeCounts); + } + + return access; } public static Optional getAccessForSync(@NonNull Context context) { @@ -95,21 +132,20 @@ public class UnidentifiedAccessUtil { } } - private static byte[] getUnidentifiedAccessCertificate(@NonNull Recipient recipient) { - CertificateType certificateType; + private static @NonNull CertificateType getUnidentifiedAccessCertificateType(@NonNull Recipient recipient) { PhoneNumberPrivacyValues.PhoneNumberSharingMode sendPhoneNumberTo = SignalStore.phoneNumberPrivacy().getPhoneNumberSharingMode(); switch (sendPhoneNumberTo) { - case EVERYONE: certificateType = CertificateType.UUID_AND_E164; break; - case CONTACTS: certificateType = recipient.isSystemContact() ? CertificateType.UUID_AND_E164 : CertificateType.UUID_ONLY; break; - case NOBODY : certificateType = CertificateType.UUID_ONLY; break; + case EVERYONE: return CertificateType.UUID_AND_E164; + case CONTACTS: return recipient.isSystemContact() ? CertificateType.UUID_AND_E164 : CertificateType.UUID_ONLY; + case NOBODY : return CertificateType.UUID_ONLY; default : throw new AssertionError(); } + } - Log.i(TAG, String.format("Certificate type for %s with setting %s -> %s", recipient.getId(), sendPhoneNumberTo, certificateType)); - + private static byte[] getUnidentifiedAccessCertificate(@NonNull Recipient recipient) { return SignalStore.certificateValues() - .getUnidentifiedAccessCertificate(certificateType); + .getUnidentifiedAccessCertificate(getUnidentifiedAccessCertificateType(recipient)); } private static @Nullable byte[] getTargetUnidentifiedAccessKey(@NonNull Recipient recipient) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/EarlyReceiptCache.java b/app/src/main/java/org/thoughtcrime/securesms/database/EarlyReceiptCache.java index edca8df42..84f826c0e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/EarlyReceiptCache.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/EarlyReceiptCache.java @@ -22,8 +22,6 @@ public class EarlyReceiptCache { } public synchronized void increment(long timestamp, @NonNull RecipientId origin) { - Log.i(TAG, String.format(Locale.US, "[%s] Timestamp: %d, Recipient: %s", name, timestamp, origin.serialize())); - Map receipts = cache.get(timestamp); if (receipts == null) { @@ -43,10 +41,6 @@ public class EarlyReceiptCache { public synchronized Map remove(long timestamp) { Map receipts = cache.remove(timestamp); - - Log.i(TAG, this+""); - Log.i(TAG, String.format(Locale.US, "Checking early receipts (%d): %d", timestamp, receipts == null ? 0 : receipts.size())); - return receipts != null ? receipts : new HashMap<>(); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java index 37a0983cf..3aed20a7f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadBodyUtil.java @@ -69,10 +69,8 @@ public final class ThreadBodyUtil { } else if (hasImage) { return format(context, record, EmojiStrings.PHOTO, R.string.ThreadRecord_photo); } else if (TextUtils.isEmpty(record.getBody())) { - Log.w(TAG, "Got a media message without a body of a type we were not able to process. [contains media slide]:" + record.containsMediaSlide()); return context.getString(R.string.ThreadRecord_media_message); } else { - Log.w(TAG, "Got a media message with a body of a type we were not able to process. [contains media slide]:" + record.containsMediaSlide()); return getBody(context, record); } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java index 355a486ed..16bd4d024 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobmanager/JobSchedulerScheduler.java @@ -44,7 +44,6 @@ public class JobSchedulerScheduler implements Scheduler { constraint.applyToJobInfo(jobInfoBuilder); } - Log.i(TAG, "Scheduling a run in " + delay + " ms."); JobScheduler jobScheduler = application.getSystemService(JobScheduler.class); jobScheduler.schedule(jobInfoBuilder.build()); } @@ -64,8 +63,6 @@ public class JobSchedulerScheduler implements Scheduler { @Override public boolean onStartJob(JobParameters params) { - Log.d(TAG, "onStartJob()"); - JobManager jobManager = ApplicationDependencies.getJobManager(); jobManager.addOnEmptyQueueListener(new JobManager.EmptyQueueListener() { @@ -73,7 +70,6 @@ public class JobSchedulerScheduler implements Scheduler { public void onQueueEmpty() { jobManager.removeOnEmptyQueueListener(this); jobFinished(params, false); - Log.d(TAG, "jobFinished()"); } }); @@ -84,7 +80,6 @@ public class JobSchedulerScheduler implements Scheduler { @Override public boolean onStopJob(JobParameters params) { - Log.d(TAG, "onStopJob()"); return false; } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupJob.java index 4de6f95ac..f189ba5f3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/LeaveGroupJob.java @@ -134,7 +134,7 @@ public class LeaveGroupJob extends BaseJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddresses(context, destinations); List memberAddresses = RecipientUtil.toSignalServiceAddresses(context, members); - List> unidentifiedAccess = Stream.of(destinations).map(Recipient::resolved).map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, Stream.of(destinations).map(Recipient::resolved).toList()); SignalServiceGroup serviceGroup = new SignalServiceGroup(SignalServiceGroup.Type.QUIT, groupId.getDecodedId(), name, memberAddresses, null); SignalServiceDataMessage.Builder dataMessage = SignalServiceDataMessage.newBuilder() .withTimestamp(System.currentTimeMillis()) 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 9afd47d53..946007159 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceContactUpdateJob.java @@ -325,7 +325,7 @@ public class MultiDeviceContactUpdateJob extends BaseJob { .withLength(fd.getLength()) .build()); } catch (IOException e) { - Log.i(TAG, "Could not find avatar for URI: " + displayPhotoUri); + // Ignored } Uri photoUri = Uri.withAppendedPath(uri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java index 66fa83e7d..fba1353f4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ProfileKeySendJob.java @@ -125,7 +125,7 @@ public class ProfileKeySendJob extends BaseJob { private List deliver(@NonNull Recipient conversationRecipient, @NonNull List destinations) throws IOException, UntrustedIdentityException { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddressesFromResolved(context, destinations); - List> unidentifiedAccess = Stream.of(destinations).map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, destinations); SignalServiceDataMessage.Builder dataMessage = SignalServiceDataMessage.newBuilder() .asProfileKeyUpdate(true) .withTimestamp(System.currentTimeMillis()) 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 7eee96ab7..d549ba51e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSendJob.java @@ -303,9 +303,7 @@ public final class PushGroupSendJob extends PushSendJob { boolean isRecipientUpdate = Stream.of(DatabaseFactory.getGroupReceiptDatabase(context).getGroupReceiptInfo(messageId)) .anyMatch(info -> info.getStatus() > GroupReceiptDatabase.STATUS_UNDELIVERED); - List> unidentifiedAccess = Stream.of(destinations) - .map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)) - .toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, destinations); if (message.isGroup()) { OutgoingGroupUpdateMessage groupMessage = (OutgoingGroupUpdateMessage) message; 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 111131035..1345ef2d5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushGroupSilentUpdateSendJob.java @@ -165,7 +165,7 @@ public final class PushGroupSilentUpdateSendJob extends BaseJob { { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddressesFromResolved(context, destinations); - List> unidentifiedAccess = Stream.of(destinations).map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, destinations);; SignalServiceGroupV2 group = SignalServiceGroupV2.fromProtobuf(groupContextV2); SignalServiceDataMessage groupDataMessage = SignalServiceDataMessage.newBuilder() 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 54edd286b..805d523b3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ReactionSendJob.java @@ -210,7 +210,7 @@ public class ReactionSendJob extends BaseJob { { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddressesFromResolved(context, destinations); - List> unidentifiedAccess = Stream.of(destinations).map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, destinations);; SignalServiceDataMessage.Builder dataMessage = SignalServiceDataMessage.newBuilder() .withTimestamp(System.currentTimeMillis()) .withReaction(buildReaction(context, reaction, remove, targetAuthor, targetSentTimestamp)); 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 48da0f282..cc33226d8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/RemoteDeleteSendJob.java @@ -166,7 +166,7 @@ public class RemoteDeleteSendJob extends BaseJob { { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddressesFromResolved(context, destinations); - List> unidentifiedAccess = Stream.of(destinations).map(recipient -> UnidentifiedAccessUtil.getAccessFor(context, recipient)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, destinations); SignalServiceDataMessage.Builder dataMessage = SignalServiceDataMessage.newBuilder() .withTimestamp(System.currentTimeMillis()) .withRemoteDelete(new SignalServiceDataMessage.RemoteDelete(targetSentTimestamp)); 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 b36e86aa1..c951e79f6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/TypingSendJob.java @@ -112,7 +112,7 @@ public class TypingSendJob extends BaseJob { SignalServiceMessageSender messageSender = ApplicationDependencies.getSignalServiceMessageSender(); List addresses = RecipientUtil.toSignalServiceAddressesFromResolved(context, recipients); - List> unidentifiedAccess = Stream.of(recipients).map(r -> UnidentifiedAccessUtil.getAccessFor(context, r)).toList(); + List> unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, recipients); SignalServiceTypingMessage typingMessage = new SignalServiceTypingMessage(typing ? Action.STARTED : Action.STOPPED, System.currentTimeMillis(), groupId); if (isCanceled()) { 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 f1e033482..ff167a078 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java +++ b/app/src/main/java/org/thoughtcrime/securesms/messages/IncomingMessageProcessor.java @@ -43,17 +43,10 @@ public class IncomingMessageProcessor { */ public Processor acquire() { lock.lock(); - - Thread current = Thread.currentThread(); - Log.d(TAG, "Lock acquired by thread " + current.getId() + " (" + current.getName() + ")"); - return new Processor(context); } private void release() { - Thread current = Thread.currentThread(); - Log.d(TAG, "Lock about to be released by thread " + current.getId() + " (" + current.getName() + ")"); - lock.unlock(); } @@ -92,7 +85,7 @@ public class IncomingMessageProcessor { } private @Nullable String processMessage(@NonNull SignalServiceEnvelope envelope) { - Log.i(TAG, "Received message. Inserting in PushDatabase."); + Log.i(TAG, "Received message " + envelope.getTimestamp() + ". Inserting in PushDatabase."); long id = pushDatabase.insert(envelope); @@ -109,7 +102,7 @@ public class IncomingMessageProcessor { } private void processReceipt(@NonNull SignalServiceEnvelope envelope) { - Log.i(TAG, String.format(Locale.ENGLISH, "Received receipt: (XXXXX, %d)", envelope.getTimestamp())); + Log.i(TAG, "Received server receipt for " + envelope.getTimestamp()); mmsSmsDatabase.incrementDeliveryReceiptCount(new SyncMessageId(Recipient.externalHighTrustPush(context, envelope.getSourceAddress()).getId(), envelope.getTimestamp()), System.currentTimeMillis()); } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java index 664d8ca7c..b51f35400 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java @@ -413,7 +413,7 @@ public class DefaultMessageNotifier implements MessageNotifier { Notification notification = builder.build(); NotificationManagerCompat.from(context).notify(notificationId, notification); - Log.i(TAG, "Posted notification. " + notification.toString()); + Log.i(TAG, "Posted notification."); } private static void sendMultipleThreadNotification(@NonNull Context context, diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java index df20bfc63..5a20ab010 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/NotificationState.java @@ -112,14 +112,17 @@ public class NotificationState { } public PendingIntent getMarkAsReadIntent(Context context, int notificationId) { - long[] threadArray = new long[threads.size()]; - int index = 0; + long[] threadArray = new long[threads.size()]; + int index = 0; + StringBuilder threadString = new StringBuilder(); for (long thread : threads) { - Log.i(TAG, "Added thread: " + thread); + threadString.append(thread).append(" "); threadArray[index++] = thread; } + Log.i(TAG, "Added threads: " + threadString.toString()); + Intent intent = new Intent(MarkReadReceiver.CLEAR_ACTION); intent.setClass(context, MarkReadReceiver.class); intent.setData((Uri.parse("custom://"+System.currentTimeMillis()))); 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 1dfb2b3ea..f885e993c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/ProfileUtil.java @@ -123,7 +123,7 @@ public final class ProfileUtil { } private static Optional getUnidentifiedAccess(@NonNull Context context, @NonNull Recipient recipient) { - Optional unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, recipient); + Optional unidentifiedAccess = UnidentifiedAccessUtil.getAccessFor(context, recipient, false); if (unidentifiedAccess.isPresent()) { return unidentifiedAccess.get().getTargetUnidentifiedAccess(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/WakeLockUtil.java b/app/src/main/java/org/thoughtcrime/securesms/util/WakeLockUtil.java index dfe57597e..49993a736 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/WakeLockUtil.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/WakeLockUtil.java @@ -39,7 +39,6 @@ public class WakeLockUtil { WakeLock wakeLock = powerManager.newWakeLock(lockType, tag); wakeLock.acquire(timeout); - Log.d(TAG, "Acquired wakelock with tag: " + tag); return wakeLock; } catch (Exception e) { @@ -58,7 +57,6 @@ public class WakeLockUtil { Log.d(TAG, "Wakelock was null. Skipping. Tag: " + tag); } else if (wakeLock.isHeld()) { wakeLock.release(); - Log.d(TAG, "Released wakelock with tag: " + tag); } else { Log.d(TAG, "Wakelock wasn't held at time of release: " + tag); } 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 f4fc61568..73bdddcd9 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 @@ -805,7 +805,7 @@ public class SignalServiceMessageSender { private byte[] createMultiDeviceSentTranscriptContent(SentTranscriptMessage transcript, Optional unidentifiedAccess) throws IOException { SignalServiceAddress address = transcript.getDestination().get(); - SendMessageResult result = SendMessageResult.success(address, unidentifiedAccess.isPresent(), true); + SendMessageResult result = SendMessageResult.success(address, unidentifiedAccess.isPresent(), true, -1); return createMultiDeviceSentTranscriptContent(createMessageContent(transcript.getMessage()), Optional.of(address), @@ -1290,7 +1290,23 @@ public class SignalServiceMessageSender { } } - Log.d(TAG, "Completed send to " + recipients.size() + " recipients in " + (System.currentTimeMillis() - startTime) + " ms"); + double sendsForAverage = 0; + for (SendMessageResult result : results) { + if (result.getSuccess() != null && result.getSuccess().getDuration() != -1) { + sendsForAverage++; + } + } + + double average = 0; + if (sendsForAverage > 0) { + for (SendMessageResult result : results) { + if (result.getSuccess() != null && result.getSuccess().getDuration() != -1) { + average += result.getSuccess().getDuration() / sendsForAverage; + } + } + } + + Log.d(TAG, "Completed send to " + recipients.size() + " recipients in " + (System.currentTimeMillis() - startTime) + " ms, with an average time of " + Math.round(average) + " ms per send."); return results; } @@ -1322,8 +1338,7 @@ public class SignalServiceMessageSender { if (pipe.isPresent() && !unidentifiedAccess.isPresent()) { try { SendMessageResponse response = pipe.get().send(messages, Optional.absent()).get(10, TimeUnit.SECONDS); - Log.d(TAG, "[sendMessage] Completed over pipe in " + (System.currentTimeMillis() - startTime) + " ms and " + (i + 1) + " attempt(s)"); - return SendMessageResult.success(recipient, false, response.getNeedsSync() || isMultiDevice.get()); + return SendMessageResult.success(recipient, false, response.getNeedsSync() || isMultiDevice.get(), System.currentTimeMillis() - startTime); } catch (IOException | ExecutionException | InterruptedException | TimeoutException e) { Log.w(TAG, e); Log.w(TAG, "[sendMessage] Pipe failed, falling back..."); @@ -1331,8 +1346,7 @@ public class SignalServiceMessageSender { } else if (unidentifiedPipe.isPresent() && unidentifiedAccess.isPresent()) { try { SendMessageResponse response = unidentifiedPipe.get().send(messages, unidentifiedAccess).get(10, TimeUnit.SECONDS); - Log.d(TAG, "[sendMessage] Completed over unidentified pipe in " + (System.currentTimeMillis() - startTime) + " ms and " + (i + 1) + " attempt(s)"); - return SendMessageResult.success(recipient, true, response.getNeedsSync() || isMultiDevice.get()); + return SendMessageResult.success(recipient, true, response.getNeedsSync() || isMultiDevice.get(), System.currentTimeMillis() - startTime); } catch (IOException | ExecutionException | InterruptedException | TimeoutException e) { Log.w(TAG, e); Log.w(TAG, "[sendMessage] Unidentified pipe failed, falling back..."); @@ -1345,8 +1359,7 @@ public class SignalServiceMessageSender { SendMessageResponse response = socket.sendMessage(messages, unidentifiedAccess); - Log.d(TAG, "[sendMessage] Completed over REST in " + (System.currentTimeMillis() - startTime) + " ms and " + (i + 1) + " attempt(s)"); - return SendMessageResult.success(recipient, unidentifiedAccess.isPresent(), response.getNeedsSync() || isMultiDevice.get()); + return SendMessageResult.success(recipient, unidentifiedAccess.isPresent(), response.getNeedsSync() || isMultiDevice.get(), System.currentTimeMillis() - startTime); } catch (InvalidKeyException ike) { Log.w(TAG, ike); 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 da567f2a2..779d17531 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 @@ -12,8 +12,8 @@ public class SendMessageResult { private final boolean unregisteredFailure; private final IdentityFailure identityFailure; - public static SendMessageResult success(SignalServiceAddress address, boolean unidentified, boolean needsSync) { - return new SendMessageResult(address, new Success(unidentified, needsSync), false, false, null); + public static SendMessageResult success(SignalServiceAddress address, boolean unidentified, boolean needsSync, long duration) { + return new SendMessageResult(address, new Success(unidentified, needsSync, duration), false, false, null); } public static SendMessageResult networkFailure(SignalServiceAddress address) { @@ -59,10 +59,12 @@ public class SendMessageResult { public static class Success { private final boolean unidentified; private final boolean needsSync; + private final long duration; - private Success(boolean unidentified, boolean needsSync) { + private Success(boolean unidentified, boolean needsSync, long duration) { this.unidentified = unidentified; this.needsSync = needsSync; + this.duration = duration; } public boolean isUnidentified() { @@ -72,6 +74,10 @@ public class SendMessageResult { public boolean isNeedsSync() { return needsSync; } + + public long getDuration() { + return duration; + } } public static class IdentityFailure { 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 11eade9a2..b82487b72 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 @@ -1509,7 +1509,6 @@ public class PushServiceSocket { // Log.d(TAG, "Push service URL: " + connectionHolder.getUrl()); // Log.d(TAG, "Opening URL: " + String.format("%s%s", connectionHolder.getUrl(), urlFragment)); - Log.d(TAG, "Opening URL: "); Request.Builder request = new Request.Builder(); request.url(String.format("%s%s", connectionHolder.getUrl(), urlFragment)); @@ -1638,7 +1637,7 @@ public class PushServiceSocket { .readTimeout(soTimeoutMillis, TimeUnit.MILLISECONDS) .build(); - Log.d(TAG, "Opening URL: "); +// Log.d(TAG, "Opening URL: " + connectionHolder.getUrl()); Request.Builder request = new Request.Builder().url(connectionHolder.getUrl() + path); request.method(method, body); diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java index 02a7be40c..9b446216d 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/internal/websocket/WebSocketConnection.java @@ -241,16 +241,12 @@ public class WebSocketConnection extends WebSocketListener { WebSocketMessage message = WebSocketMessage.parseFrom(payload.toByteArray()); if (message.getType().getNumber() == WebSocketMessage.Type.REQUEST_VALUE) { - Log.d(TAG, "onMessage() -- incoming request"); incomingRequests.add(message.getRequest()); } else if (message.getType().getNumber() == WebSocketMessage.Type.RESPONSE_VALUE) { OutgoingRequest listener = outgoingRequests.get(message.getResponse().getId()); if (listener != null) { listener.getResponseFuture().set(new WebsocketResponse(message.getResponse().getStatus(), new String(message.getResponse().getBody().toByteArray()))); - Log.d(TAG, "onMessage() -- response received in " + (System.currentTimeMillis() - listener.getStartTimestamp()) + " ms"); - } else { - Log.d(TAG, "onMessage() -- response received, but no listener"); } }