From b6bb5865093cf2bd68145f2d3a05185902bc68c2 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Fri, 13 Oct 2023 14:32:04 +1100 Subject: [PATCH 1/3] feat: add foreground types to key caching service and call service --- app/src/main/AndroidManifest.xml | 8 +++++++- .../thoughtcrime/securesms/service/KeyCachingService.java | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a820caeaa..f2a4642b7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -34,6 +34,8 @@ + + @@ -307,11 +309,15 @@ android:value="org.thoughtcrime.securesms.home.HomeActivity" /> + android:exported="false" android:foregroundServiceType="specialUse"> + + + = 34) { + startForeground(SERVICE_RUNNING_ID, builder.build(), ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE); + } else { + startForeground(SERVICE_RUNNING_ID, builder.build()); + } } private PendingIntent buildLockIntent() { From 9d02eb33c7f9e13a12b93ecb63c6d7e7abc96d03 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Fri, 13 Oct 2023 16:48:47 +1100 Subject: [PATCH 2/3] build: update version code --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index d6954c27e..bfb73f9fc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -31,8 +31,8 @@ configurations.all { exclude module: "commons-logging" } -def canonicalVersionCode = 358 -def canonicalVersionName = "1.17.3" +def canonicalVersionCode = 359 +def canonicalVersionName = "1.17.4" def postFixSize = 10 def abiPostFix = ['armeabi-v7a' : 1, From acb1181db0d9c04d04f9a59b4a783f512efdf2d8 Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Mon, 16 Oct 2023 10:48:06 +1100 Subject: [PATCH 3/3] feat: add more testing functionality for the expected current / updated expiry configuration upon merging libsession updates --- .../network/loki/messenger/LibSessionTests.kt | 60 ++++++++++++++++--- 1 file changed, 52 insertions(+), 8 deletions(-) diff --git a/app/src/androidTest/java/network/loki/messenger/LibSessionTests.kt b/app/src/androidTest/java/network/loki/messenger/LibSessionTests.kt index fd776fd51..157085135 100644 --- a/app/src/androidTest/java/network/loki/messenger/LibSessionTests.kt +++ b/app/src/androidTest/java/network/loki/messenger/LibSessionTests.kt @@ -11,16 +11,19 @@ import network.loki.messenger.libsession_util.ConversationVolatileConfig import network.loki.messenger.libsession_util.util.Contact import network.loki.messenger.libsession_util.util.Conversation import network.loki.messenger.libsession_util.util.ExpiryMode +import org.hamcrest.CoreMatchers.equalTo +import org.hamcrest.CoreMatchers.instanceOf +import org.hamcrest.MatcherAssert.assertThat import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.kotlin.any import org.mockito.kotlin.argThat import org.mockito.kotlin.argWhere import org.mockito.kotlin.eq import org.mockito.kotlin.spy import org.mockito.kotlin.verify import org.session.libsession.messaging.MessagingModuleConfiguration -import org.session.libsession.messaging.messages.ExpirationConfiguration import org.session.libsession.snode.SnodeAPI import org.session.libsession.utilities.Address import org.session.libsession.utilities.TextSecurePreferences @@ -110,7 +113,7 @@ class LibSessionTests { fakePollNewConfig(contacts, newContactMerge) verify(storageSpy).addLibSessionContacts(argThat { first().let { it.id == newContactId && it.approved } && size == 1 - }, 0) + }, any()) verify(storageSpy).setRecipientApproved(argThat { address.serialize() == newContactId }, eq(true)) } @@ -135,17 +138,58 @@ class LibSessionTests { val contacts = MessagingModuleConfiguration.shared.configFactory.contacts!! val newContactMerge = buildContactMessage(listOf(newContact)) val newVolatileMerge = buildVolatileMessage(listOf(newConvo)) - val expConfig = ExpirationConfiguration() - val recipientAddress = Address.fromSerialized(randomRecipient) fakePollNewConfig(contacts, newContactMerge) fakePollNewConfig(volatiles, newVolatileMerge) - val threadId = storageSpy.getThreadId(recipientAddress)!! -// whenever(storageSpy.getExpirationConfiguration(eq(threadId))).thenReturn(expConfig) -// doNothing().whenever(storageSpy).setExpirationConfiguration(any()) -// verify(storageSpy).getExpirationConfiguration(eq(threadId)) verify(storageSpy).setExpirationConfiguration(argWhere { config -> config.expiryMode is ExpiryMode.AfterSend + && config.expiryMode.expirySeconds == 1000L }) + val threadId = storageSpy.getThreadId(Address.fromSerialized(randomRecipient))!! + val newExpiry = storageSpy.getExpirationConfiguration(threadId)!! + assertThat(newExpiry.expiryMode, instanceOf(ExpiryMode.AfterSend::class.java)) + assertThat(newExpiry.expiryMode.expirySeconds, equalTo(1000)) + assertThat(newExpiry.expiryMode.expiryMillis, equalTo(1000000)) + } + + @Test + fun test_overwrite_config() { + val app = InstrumentationRegistry.getInstrumentation().targetContext.applicationContext as ApplicationContext + val storageSpy = spy(app.storage) + app.storage = storageSpy + + // Initial state + val randomRecipient = randomSessionId() + val currentContact = Contact( + id = randomRecipient, + approved = true, + expiryMode = ExpiryMode.NONE + ) + val newConvo = Conversation.OneToOne( + randomRecipient, + SnodeAPI.nowWithOffset, + false + ) + val volatiles = MessagingModuleConfiguration.shared.configFactory.convoVolatile!! + val contacts = MessagingModuleConfiguration.shared.configFactory.contacts!! + val newContactMerge = buildContactMessage(listOf(currentContact)) + val newVolatileMerge = buildVolatileMessage(listOf(newConvo)) + fakePollNewConfig(contacts, newContactMerge) + fakePollNewConfig(volatiles, newVolatileMerge) + verify(storageSpy).setExpirationConfiguration(argWhere { config -> + config.expiryMode == ExpiryMode.NONE + }) + val threadId = storageSpy.getThreadId(Address.fromSerialized(randomRecipient))!! + val currentExpiryConfig = storageSpy.getExpirationConfiguration(threadId)!! + assertThat(currentExpiryConfig.expiryMode, equalTo(ExpiryMode.NONE)) + assertThat(currentExpiryConfig.expiryMode.expirySeconds, equalTo(0)) + assertThat(currentExpiryConfig.expiryMode.expiryMillis, equalTo(0)) + // Set new state and overwrite + val updatedContact = currentContact.copy(expiryMode = ExpiryMode.AfterSend(1000)) + val updateContactMerge = buildContactMessage(listOf(updatedContact)) + fakePollNewConfig(contacts, updateContactMerge) + val updatedExpiryConfig = storageSpy.getExpirationConfiguration(threadId)!! + assertThat(updatedExpiryConfig.expiryMode, instanceOf(ExpiryMode.AfterSend::class.java)) + assertThat(updatedExpiryConfig.expiryMode.expirySeconds, equalTo(1000)) } } \ No newline at end of file