diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 319ce23788fd5d12f919dafa9ef1149783fe1c72..700289be5ac166624029470000e242d1db8e4140 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -35,8 +35,8 @@ android { defaultConfig { applicationId = "io.xxlabs.messenger" - versionCode = 630 - versionName = "2.93" + versionCode = 637 + versionName = "2.95" minSdk = 26 targetSdk = 31 testInstrumentationRunner = "io.xxlabs.messenger.CustomTestRunner" diff --git a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBase.kt b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBase.kt index dd66106676f803bdc0f595c540eec2434ba1bc33..d1e4e8e977cf221148d4be71d729a84d62a2cc57 100644 --- a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBase.kt +++ b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBase.kt @@ -52,6 +52,9 @@ interface ClientWrapperBase { ): Long fun confirmAuthenticatedChannel(marshalledContact: ByteArray): Long + + fun deleteRequest(marshalledContact: ByteArray) + fun waitForRoundCompletion( roundId: Long, timeoutMillis: Long, diff --git a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBindings.kt b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBindings.kt index 284c573ea873f82731a11456448ab8436e6619e0..3898d5afecb631d254823fac866cfb7d242c6f2e 100644 --- a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBindings.kt +++ b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperBindings.kt @@ -139,6 +139,10 @@ class ClientWrapperBindings( return client.confirmAuthenticatedChannel(marshalledContact) } + override fun deleteRequest(marshalledContact: ByteArray) { + client.deleteRequest(marshalledContact) + } + override fun waitForRoundCompletion( roundId: Long, timeoutMillis: Long, diff --git a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperMock.kt b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperMock.kt index 098e7b751fe91b040ddeae22f131653c0d8ac6cb..bd0139e68f3f239590d8e3ae250ef38c533ce0e6 100644 --- a/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperMock.kt +++ b/app/src/main/java/io/xxlabs/messenger/bindings/wrapper/client/ClientWrapperMock.kt @@ -88,6 +88,8 @@ class ClientWrapperMock(val contact: ContactData) : ClientWrapperBase { return Random.nextLong() } + override fun deleteRequest(marshalledContact: ByteArray) {} + override fun waitForRoundCompletion( roundId: Long, timeoutMillis: Long, diff --git a/app/src/main/java/io/xxlabs/messenger/notifications/MessagingService.kt b/app/src/main/java/io/xxlabs/messenger/notifications/MessagingService.kt index 8cbd1f143de2593be126e3a6c2574ad5c1697fc9..967ef11d4b2cd52f6e50c67846a68dcc0058b2b1 100644 --- a/app/src/main/java/io/xxlabs/messenger/notifications/MessagingService.kt +++ b/app/src/main/java/io/xxlabs/messenger/notifications/MessagingService.kt @@ -291,18 +291,18 @@ class MessagingService : FirebaseMessagingService(), HasAndroidInjector { private fun NotificationForMeReport.notificationText(): String = when { isGroupRequest() -> getString(R.string.notification_group_request_text) - isRequest() -> getString(R.string.notification_request_text) + isRequest() || isReset() -> getString(R.string.notification_request_text) isConfirm() -> getString(R.string.notification_confirm_text) isE2E() -> getString(R.string.notification_e2e_text) isGroup() -> getString(R.string.notification_group_text) isEndFT() -> getString(R.string.notification_endft_text) - isReset() -> getString(R.string.notification_reset_text) +// isReset() -> getString(R.string.notification_reset_text) else -> "New activity" // Other types should not be displayed in the first place. } private fun NotificationForMeReport.channelId(): String = when { - isRequest() || isGroupRequest() -> getString(R.string.request_notification_channel_id) + isRequest() || isGroupRequest() || isReset() -> getString(R.string.request_notification_channel_id) isConfirm() -> getString(R.string.confirm_notification_channel_id) isE2E() || isEndFT() -> getString(R.string.e2e_notification_channel_id) isGroup() -> getString(R.string.group_notification_channel_id) @@ -311,7 +311,7 @@ class MessagingService : FirebaseMessagingService(), HasAndroidInjector { private fun NotificationForMeReport.channelName(): String = when { - isRequest() || isGroupRequest() -> getString(R.string.notification_request_channel_label) + isRequest() || isGroupRequest() || isReset() -> getString(R.string.notification_request_channel_label) isConfirm() -> getString(R.string.notification_confirm_channel_label) isE2E() || isEndFT() -> getString(R.string.notification_e2e_channel_label) isGroup() -> getString(R.string.notification_group_channel_label) diff --git a/app/src/main/java/io/xxlabs/messenger/requests/bindings/BindingsRequestMediator.kt b/app/src/main/java/io/xxlabs/messenger/requests/bindings/BindingsRequestMediator.kt index 69514a6287e641956d1f69e0323e39dca6c058e7..09ecfa31c43a3eac97c32dc1331132e2a4c98c55 100644 --- a/app/src/main/java/io/xxlabs/messenger/requests/bindings/BindingsRequestMediator.kt +++ b/app/src/main/java/io/xxlabs/messenger/requests/bindings/BindingsRequestMediator.kt @@ -1,5 +1,6 @@ package io.xxlabs.messenger.requests.bindings +import com.dropbox.core.android.AuthActivity.result import io.xxlabs.messenger.bindings.wrapper.contact.ContactWrapperBase import io.xxlabs.messenger.data.room.model.Contact import io.xxlabs.messenger.repository.base.BaseRepository @@ -64,15 +65,34 @@ class BindingsRequestMediator @Inject constructor( override suspend fun verifyContactRequest(request: ContactRequest): VerificationResult = requestVerifier.verifyRequest(request) - override fun resetSession(contact: Contact): Boolean { + override suspend fun deleteContactRequest(request: ContactRequest): Boolean { + return deleteContactRequest(request.model) + } + + private fun deleteContactRequest(contact: Contact): Boolean { var result = false try { - val roundId = ClientRepository.clientWrapper.client.resetSession( - contact.marshaled, - repo.getMashalledUser(), - "" + ClientRepository.clientWrapper.client.deleteRequest(contact.userId) + result = true + } catch (e: Exception) { + Timber.d( + "Exception occurred when deleting request for ${contact.displayName}: ${e.message}." ) - result = roundId > 0 + } + return result + } + + override fun resetSession(contact: Contact): Boolean { + var result = false + try { + if (deleteContactRequest(contact)) { + val roundId = ClientRepository.clientWrapper.client.resetSession( + contact.marshaled, + repo.getMashalledUser(), + "" + ) + result = roundId > 0 + } } catch (e: Exception) { Timber.d( "Exception occurred when resetting ${contact.displayName}: ${e.message}." diff --git a/app/src/main/java/io/xxlabs/messenger/requests/bindings/ContactRequestsService.kt b/app/src/main/java/io/xxlabs/messenger/requests/bindings/ContactRequestsService.kt index 3572e21d4a92917d297abfbf7aaa28ee4bac71eb..8096db4114ac6452636eedc2780acae0d244f5c4 100644 --- a/app/src/main/java/io/xxlabs/messenger/requests/bindings/ContactRequestsService.kt +++ b/app/src/main/java/io/xxlabs/messenger/requests/bindings/ContactRequestsService.kt @@ -7,5 +7,6 @@ interface ContactRequestsService { suspend fun acceptContactRequest(request: ContactRequest): Boolean suspend fun sendContactRequest(request: ContactRequest): Boolean suspend fun verifyContactRequest(request: ContactRequest): VerificationResult + suspend fun deleteContactRequest(request: ContactRequest): Boolean fun resetSession(contact: Contact): Boolean } \ No newline at end of file diff --git a/app/src/main/java/io/xxlabs/messenger/requests/data/contact/ContactRequestRepository.kt b/app/src/main/java/io/xxlabs/messenger/requests/data/contact/ContactRequestRepository.kt index caf0d00d4d8efd7c95dba7730585bc47abc860a1..76eed4ac948c874cf995982ea5e9abb3052958bd 100644 --- a/app/src/main/java/io/xxlabs/messenger/requests/data/contact/ContactRequestRepository.kt +++ b/app/src/main/java/io/xxlabs/messenger/requests/data/contact/ContactRequestRepository.kt @@ -70,6 +70,7 @@ class ContactRequestsRepository @Inject constructor( override fun delete(request: ContactRequest) { scope.launch { + requestsService.deleteContactRequest(request) localDataSource.getRequest(request.requestId)?.apply { localDataSource.deleteRequest(this) } @@ -94,8 +95,8 @@ class ContactRequestsRepository @Inject constructor( scope.launch { when (request.requestStatus) { VERIFICATION_FAIL -> verify(request) - RESET_FAIL, RESET_SENT -> resetSession(request) - SEND_FAIL, SENT -> resendRequest(request) + SEND_FAIL, SENT, RESET_FAIL, RESET_SENT -> resetSession(request) +// SEND_FAIL, SENT -> resendRequest(request) CONFIRM_FAIL -> accept(request) SENDING -> sendRequest(request) else -> Timber.d("Unknown request status: ${request.requestStatus.value}") @@ -149,7 +150,7 @@ class ContactRequestsRepository @Inject constructor( } private fun resetSession(request: ContactRequest) { - if (requestsService.resetSession(request.model)) update(request, RESET_SENT) + if (requestsService.resetSession(request.model)) update(request, RESENT) else update(request, RESET_FAIL) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 4c2720486cecdba22f476dc2463328ccfdc0f285..85e334b8709de91352934793fad2f4165d9df9e2 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1 +1,2 @@ +rootProject.name = "xx Messenger Legacy" include(":app", ":xx_bindings", ":linkpreview", ":proto")