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 a820caeaab..f2a4642b7a 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 d6954c27e6..bfb73f9fcc 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 fd776fd514..157085135e 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