From a44c18d13f0ebb3ad206aee13cec1532b6f6028e Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 13 Nov 2024 09:30:40 -0500 Subject: [PATCH] Convert MultiDeviceKeysUpdateJob to kotlin. --- .../jobs/MultiDeviceKeysUpdateJob.java | 94 ------------------- .../jobs/MultiDeviceKeysUpdateJob.kt | 78 +++++++++++++++ 2 files changed, 78 insertions(+), 94 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java create mode 100644 app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.kt diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java deleted file mode 100644 index ffc49e2719..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.thoughtcrime.securesms.jobs; - - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.signal.core.util.logging.Log; -import org.thoughtcrime.securesms.dependencies.AppDependencies; -import org.thoughtcrime.securesms.jobmanager.Job; -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint; -import org.thoughtcrime.securesms.keyvalue.SignalStore; -import org.thoughtcrime.securesms.net.NotPushRegisteredException; -import org.thoughtcrime.securesms.recipients.Recipient; -import org.whispersystems.signalservice.api.SignalServiceMessageSender; -import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException; -import org.whispersystems.signalservice.api.messages.multidevice.KeysMessage; -import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage; -import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException; -import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException; -import org.whispersystems.signalservice.api.storage.StorageKey; - -import java.io.IOException; -import java.util.Optional; - -public class MultiDeviceKeysUpdateJob extends BaseJob { - - public static final String KEY = "MultiDeviceKeysUpdateJob"; - - private static final String TAG = Log.tag(MultiDeviceKeysUpdateJob.class); - - public MultiDeviceKeysUpdateJob() { - this(new Parameters.Builder() - .setQueue("MultiDeviceKeysUpdateJob") - .setMaxInstancesForFactory(2) - .addConstraint(NetworkConstraint.KEY) - .setMaxAttempts(10) - .build()); - - } - - private MultiDeviceKeysUpdateJob(@NonNull Parameters parameters) { - super(parameters); - } - - @Override - public @Nullable byte[] serialize() { - return null; - } - - @Override - public @NonNull String getFactoryKey() { - return KEY; - } - - @Override - public void onRun() throws IOException, UntrustedIdentityException { - if (!Recipient.self().isRegistered()) { - throw new NotPushRegisteredException(); - } - - if (!SignalStore.account().hasLinkedDevices()) { - Log.i(TAG, "Not multi device, aborting..."); - return; - } - - if (SignalStore.account().isLinkedDevice()) { - Log.i(TAG, "Not primary device, aborting..."); - return; - } - - SignalServiceMessageSender messageSender = AppDependencies.getSignalServiceMessageSender(); - StorageKey storageServiceKey = SignalStore.storageService().getOrCreateStorageKey(); - - messageSender.sendSyncMessage(SignalServiceSyncMessage.forKeys(new KeysMessage(Optional.ofNullable(storageServiceKey), Optional.of(SignalStore.svr().getMasterKey()))) - ); - } - - @Override - public boolean onShouldRetry(@NonNull Exception e) { - if (e instanceof ServerRejectedException) return false; - return e instanceof PushNetworkException; - } - - @Override - public void onFailure() { - } - - public static final class Factory implements Job.Factory { - @Override - public @NonNull MultiDeviceKeysUpdateJob create(@NonNull Parameters parameters, @Nullable byte[] serializedData) { - return new MultiDeviceKeysUpdateJob(parameters); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.kt new file mode 100644 index 0000000000..cadfb24923 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/MultiDeviceKeysUpdateJob.kt @@ -0,0 +1,78 @@ +package org.thoughtcrime.securesms.jobs + +import org.signal.core.util.logging.Log +import org.thoughtcrime.securesms.dependencies.AppDependencies +import org.thoughtcrime.securesms.jobmanager.Job +import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint +import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.net.NotPushRegisteredException +import org.thoughtcrime.securesms.recipients.Recipient +import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException +import org.whispersystems.signalservice.api.messages.multidevice.KeysMessage +import org.whispersystems.signalservice.api.messages.multidevice.SignalServiceSyncMessage +import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException +import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException +import java.io.IOException +import java.util.Optional + +class MultiDeviceKeysUpdateJob private constructor(parameters: Parameters) : BaseJob(parameters) { + + companion object { + const val KEY: String = "MultiDeviceKeysUpdateJob" + + private val TAG = Log.tag(MultiDeviceKeysUpdateJob::class.java) + } + + constructor() : this( + Parameters.Builder() + .setQueue("MultiDeviceKeysUpdateJob") + .setMaxInstancesForFactory(2) + .addConstraint(NetworkConstraint.KEY) + .setMaxAttempts(10) + .build() + ) + + override fun serialize(): ByteArray? = null + + override fun getFactoryKey(): String = KEY + + @Throws(IOException::class, UntrustedIdentityException::class) + public override fun onRun() { + if (!Recipient.self().isRegistered) { + throw NotPushRegisteredException() + } + + if (!SignalStore.account.hasLinkedDevices) { + Log.i(TAG, "Not multi device, aborting...") + return + } + + if (SignalStore.account.isLinkedDevice) { + Log.i(TAG, "Not primary device, aborting...") + return + } + + val syncMessage = SignalServiceSyncMessage.forKeys( + KeysMessage( + Optional.of(SignalStore.storageService.getOrCreateStorageKey()), + Optional.of(SignalStore.svr.masterKey) + ) + ) + + AppDependencies.signalServiceMessageSender.sendSyncMessage(syncMessage) + } + + public override fun onShouldRetry(e: Exception): Boolean { + if (e is ServerRejectedException) return false + return e is PushNetworkException + } + + override fun onFailure() { + } + + class Factory : Job.Factory { + override fun create(parameters: Parameters, serializedData: ByteArray?): MultiDeviceKeysUpdateJob { + return MultiDeviceKeysUpdateJob(parameters) + } + } +}