diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt b/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt index 44f7541e00..c588a867a4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/AppDependencies.kt @@ -45,7 +45,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver import org.whispersystems.signalservice.api.SignalServiceMessageSender import org.whispersystems.signalservice.api.SignalWebSocket import org.whispersystems.signalservice.api.archive.ArchiveApi +import org.whispersystems.signalservice.api.attachment.AttachmentApi import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations +import org.whispersystems.signalservice.api.keys.KeysApi import org.whispersystems.signalservice.api.services.CallLinksService import org.whispersystems.signalservice.api.services.DonationsService import org.whispersystems.signalservice.api.services.ProfileService @@ -284,6 +286,14 @@ object AppDependencies { val archiveApi: ArchiveApi get() = networkModule.archiveApi + @JvmStatic + val keysApi: KeysApi + get() = networkModule.keysApi + + @JvmStatic + val attachmentApi: AttachmentApi + get() = networkModule.attachmentApi + @JvmStatic val okHttpClient: OkHttpClient get() = networkModule.okHttpClient @@ -344,5 +354,7 @@ object AppDependencies { fun provideLibsignalNetwork(config: SignalServiceConfiguration): Network fun provideBillingApi(): BillingApi fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi + fun provideKeysApi(pushServiceSocket: PushServiceSocket): KeysApi + fun provideAttachmentApi(signalWebSocket: SignalWebSocket, pushServiceSocket: PushServiceSocket): AttachmentApi } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java index 8077bad4ce..2e4dcc68fe 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/ApplicationDependencyProvider.java @@ -83,10 +83,13 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver; import org.whispersystems.signalservice.api.SignalServiceMessageSender; import org.whispersystems.signalservice.api.SignalWebSocket; import org.whispersystems.signalservice.api.archive.ArchiveApi; +import org.whispersystems.signalservice.api.attachment.AttachmentApi; import org.whispersystems.signalservice.api.groupsv2.ClientZkOperations; import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations; +import org.whispersystems.signalservice.api.keys.KeysApi; import org.whispersystems.signalservice.api.push.ServiceId.ACI; import org.whispersystems.signalservice.api.push.ServiceId.PNI; +import org.whispersystems.signalservice.api.registration.RegistrationApi; import org.whispersystems.signalservice.api.services.CallLinksService; import org.whispersystems.signalservice.api.services.DonationsService; import org.whispersystems.signalservice.api.services.ProfileService; @@ -455,6 +458,16 @@ public class ApplicationDependencyProvider implements AppDependencies.Provider { return new ArchiveApi(pushServiceSocket); } + @Override + public @NonNull KeysApi provideKeysApi(@NonNull PushServiceSocket pushServiceSocket) { + return new KeysApi(pushServiceSocket); + } + + @Override + public @NonNull AttachmentApi provideAttachmentApi(@NonNull SignalWebSocket signalWebSocket, @NonNull PushServiceSocket pushServiceSocket) { + return new AttachmentApi(signalWebSocket, pushServiceSocket); + } + @VisibleForTesting static class DynamicCredentialsProvider implements CredentialsProvider { diff --git a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt index a845b80931..834af2ddcb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/dependencies/NetworkDependenciesModule.kt @@ -28,7 +28,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver import org.whispersystems.signalservice.api.SignalServiceMessageSender import org.whispersystems.signalservice.api.SignalWebSocket import org.whispersystems.signalservice.api.archive.ArchiveApi +import org.whispersystems.signalservice.api.attachment.AttachmentApi import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations +import org.whispersystems.signalservice.api.keys.KeysApi import org.whispersystems.signalservice.api.push.TrustStore import org.whispersystems.signalservice.api.services.CallLinksService import org.whispersystems.signalservice.api.services.DonationsService @@ -128,6 +130,14 @@ class NetworkDependenciesModule( provider.provideArchiveApi(pushServiceSocket) } + val keysApi: KeysApi by lazy { + provider.provideKeysApi(pushServiceSocket) + } + + val attachmentApi: AttachmentApi by lazy { + provider.provideAttachmentApi(signalWebSocket, pushServiceSocket) + } + val okHttpClient: OkHttpClient by lazy { OkHttpClient.Builder() .addInterceptor(StandardUserAgentInterceptor()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob.kt index 50aa176445..764e083c4a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/ArchiveAttachmentBackfillJob.kt @@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.protos.ArchiveAttachmentBackfillJobData +import org.thoughtcrime.securesms.net.SignalNetwork import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.archive.ArchiveMediaResponse import org.whispersystems.signalservice.api.archive.ArchiveMediaUploadFormStatusCodes @@ -156,8 +157,7 @@ class ArchiveAttachmentBackfillJob private constructor( } Log.d(TAG, "Beginning upload...") - val attachmentApi = AppDependencies.signalServiceMessageSender.attachmentApi - val uploadResult: AttachmentUploadResult = when (val result = attachmentApi.uploadAttachmentV4(attachmentStream)) { + val uploadResult: AttachmentUploadResult = when (val result = SignalNetwork.attachments.uploadAttachmentV4(attachmentStream)) { is NetworkResult.Success -> result.result is NetworkResult.ApplicationError -> throw result.throwable is NetworkResult.NetworkError -> return Result.retry(defaultBackoff()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.kt index c662e05ac0..d9bd34d68a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/AttachmentUploadJob.kt @@ -28,6 +28,7 @@ import org.thoughtcrime.securesms.jobmanager.persistence.JobSpec import org.thoughtcrime.securesms.jobs.protos.AttachmentUploadJobData import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.net.NotPushRegisteredException +import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.service.AttachmentProgressService import org.thoughtcrime.securesms.util.RemoteConfig @@ -138,7 +139,6 @@ class AttachmentUploadJob private constructor( SignalDatabase.attachments.createKeyIvIfNecessary(attachmentId) val messageSender = AppDependencies.signalServiceMessageSender - val attachmentApi = messageSender.attachmentApi val databaseAttachment = SignalDatabase.attachments.getAttachment(attachmentId) ?: throw InvalidAttachmentException("Cannot find the specified attachment.") val timeSinceUpload = System.currentTimeMillis() - databaseAttachment.uploadTimestamp @@ -156,10 +156,10 @@ class AttachmentUploadJob private constructor( if (uploadSpec == null) { Log.d(TAG, "Need an upload spec. Fetching...") - uploadSpec = attachmentApi + uploadSpec = SignalNetwork.attachments .getAttachmentV4UploadForm() .then { form -> - attachmentApi.getResumableUploadSpec( + SignalNetwork.attachments.getResumableUploadSpec( key = Base64.decode(databaseAttachment.remoteKey!!), iv = databaseAttachment.remoteIv!!, uploadForm = form @@ -175,7 +175,7 @@ class AttachmentUploadJob private constructor( try { getAttachmentNotificationIfNeeded(databaseAttachment).use { notification -> buildAttachmentStream(databaseAttachment, notification, uploadSpec!!).use { localAttachment -> - val uploadResult: AttachmentUploadResult = attachmentApi.uploadAttachmentV4(localAttachment).successOrThrow() + val uploadResult: AttachmentUploadResult = SignalNetwork.attachments.uploadAttachmentV4(localAttachment).successOrThrow() SignalDatabase.attachments.finalizeAttachmentAfterUpload(databaseAttachment.attachmentId, uploadResult) ArchiveThumbnailUploadJob.enqueueIfNecessary(databaseAttachment.attachmentId) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt index 0eac129b8d..83da5dd08d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PreKeysSyncJob.kt @@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.jobmanager.Job import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.protos.PreKeysSyncJobData import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.net.SignalNetwork import org.thoughtcrime.securesms.util.RemoteConfig import org.whispersystems.signalservice.api.NetworkResult import org.whispersystems.signalservice.api.SignalServiceAccountDataStore @@ -261,7 +262,7 @@ class PreKeysSyncJob private constructor( @Throws(IOException::class) private fun checkPreKeyConsistency(serviceIdType: ServiceIdType, protocolStore: SignalServiceAccountDataStore, metadataStore: PreKeyMetadataStore): Boolean { val result: NetworkResult = try { - AppDependencies.signalServiceAccountManager.keysApi.checkRepeatedUseKeys( + SignalNetwork.keys.checkRepeatedUseKeys( serviceIdType = serviceIdType, identityKey = protocolStore.identityKeyPair.publicKey, signedPreKeyId = metadataStore.activeSignedPreKeyId, diff --git a/app/src/main/java/org/thoughtcrime/securesms/net/SignalNetwork.kt b/app/src/main/java/org/thoughtcrime/securesms/net/SignalNetwork.kt index 6638190af7..d996aebe71 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/net/SignalNetwork.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/net/SignalNetwork.kt @@ -7,6 +7,8 @@ package org.thoughtcrime.securesms.net import org.thoughtcrime.securesms.dependencies.AppDependencies import org.whispersystems.signalservice.api.archive.ArchiveApi +import org.whispersystems.signalservice.api.attachment.AttachmentApi +import org.whispersystems.signalservice.api.keys.KeysApi /** * A convenient way to access network operations, similar to [org.thoughtcrime.securesms.database.SignalDatabase] and [org.thoughtcrime.securesms.keyvalue.SignalStore]. @@ -14,4 +16,10 @@ import org.whispersystems.signalservice.api.archive.ArchiveApi object SignalNetwork { val archive: ArchiveApi get() = AppDependencies.archiveApi + + val attachments: AttachmentApi + get() = AppDependencies.attachmentApi + + val keys: KeysApi + get() = AppDependencies.keysApi } diff --git a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt index f91aa05f80..2404ca86ae 100644 --- a/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt +++ b/app/src/test/java/org/thoughtcrime/securesms/dependencies/MockApplicationDependencyProvider.kt @@ -39,7 +39,9 @@ import org.whispersystems.signalservice.api.SignalServiceMessageReceiver import org.whispersystems.signalservice.api.SignalServiceMessageSender import org.whispersystems.signalservice.api.SignalWebSocket import org.whispersystems.signalservice.api.archive.ArchiveApi +import org.whispersystems.signalservice.api.attachment.AttachmentApi import org.whispersystems.signalservice.api.groupsv2.GroupsV2Operations +import org.whispersystems.signalservice.api.keys.KeysApi import org.whispersystems.signalservice.api.services.CallLinksService import org.whispersystems.signalservice.api.services.DonationsService import org.whispersystems.signalservice.api.services.ProfileService @@ -207,4 +209,12 @@ class MockApplicationDependencyProvider : AppDependencies.Provider { override fun provideArchiveApi(pushServiceSocket: PushServiceSocket): ArchiveApi { return mockk() } + + override fun provideKeysApi(pushServiceSocket: PushServiceSocket): KeysApi { + return mockk() + } + + override fun provideAttachmentApi(signalWebSocket: SignalWebSocket, pushServiceSocket: PushServiceSocket): AttachmentApi { + return mockk() + } } diff --git a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java index 5d5b1bad54..7fbefa24a0 100644 --- a/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java +++ b/libsignal-service/src/main/java/org/whispersystems/signalservice/api/SignalServiceAccountManager.java @@ -862,10 +862,6 @@ public class SignalServiceAccountManager { return new GroupsV2Api(pushServiceSocket, groupsV2Operations); } - public KeysApi getKeysApi() { - return KeysApi.create(pushServiceSocket); - } - public RegistrationApi getRegistrationApi() { return new RegistrationApi(pushServiceSocket); } 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 70f59f3295..d45b8f61e7 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 @@ -213,10 +213,6 @@ public class SignalServiceMessageSender { this.scheduler = Schedulers.from(executor, false, false); } - public AttachmentApi getAttachmentApi() { - return AttachmentApi.create(webSocket, socket); - } - /** * Send a read receipt for a received message. *