Skip to content

Commit 5419a99

Browse files
committed
Merge remote-tracking branch 'origin/dev' into release/1.29.2
# Conflicts: # app/build.gradle.kts
2 parents 9680e33 + 2f44b45 commit 5419a99

File tree

319 files changed

+13852
-8086
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

319 files changed

+13852
-8086
lines changed

.github/workflows/build_and_test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,14 @@ jobs:
5454

5555
- name: Upload build reports regardless
5656
if: always()
57-
uses: actions/upload-artifact@v4
57+
uses: actions/upload-artifact@v5
5858
with:
5959
name: build-reports-${{ matrix.variant }}-${{ matrix.build_type }}
6060
path: app/build/reports
6161
if-no-files-found: ignore
6262

6363
- name: Upload artifacts
64-
uses: actions/upload-artifact@v4
64+
uses: actions/upload-artifact@v5
6565
with:
6666
name: session-${{ matrix.variant }}-${{ matrix.build_type }}
6767
path: app/build/outputs/apk/${{ matrix.variant }}/${{ matrix.build_type }}/*-universal*apk

app/build.gradle.kts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ configurations.configureEach {
2626
exclude(module = "commons-logging")
2727
}
2828

29-
val canonicalVersionCode = 431
30-
val canonicalVersionName = "1.29.2"
29+
val canonicalVersionCode = 432
30+
val canonicalVersionName = "1.30.0"
3131

3232
val postFixSize = 10
3333
val abiPostFix = mapOf(
@@ -181,13 +181,12 @@ android {
181181
matchingFallbacks += "release"
182182

183183
signingConfig = signingConfigs.getByName("debug")
184-
applicationIdSuffix = ".$name"
185184

186185
devNetDefaultOn(false)
187186
enablePermissiveNetworkSecurityConfig(true)
188187

189188
setAlternativeAppName("Session QA")
190-
setAuthorityPostfix(".qa")
189+
setAuthorityPostfix("")
191190
}
192191

193192
create("automaticQa") {

app/src/main/AndroidManifest.xml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,6 @@
190190
android:screenOrientation="portrait" />
191191
<activity android:name="org.thoughtcrime.securesms.preferences.appearance.AppearanceSettingsActivity"
192192
android:screenOrientation="portrait"/>
193-
<activity android:name="org.thoughtcrime.securesms.conversation.disappearingmessages.DisappearingMessagesActivity"
194-
android:screenOrientation="portrait"
195-
android:theme="@style/Theme.Session.DayNight.NoActionBar" />
196193
<activity android:name="org.thoughtcrime.securesms.groups.GroupMembersActivity"
197194
android:screenOrientation="portrait"
198195
android:theme="@style/Theme.Session.DayNight.NoActionBar" />

app/src/main/java/org/session/libsession/database/StorageProtocol.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.session.libsession.database
22

3-
import android.content.Context
43
import android.net.Uri
54
import network.loki.messenger.libsession_util.util.ExpiryMode
65
import network.loki.messenger.libsession_util.util.KeyPair
@@ -11,7 +10,6 @@ import org.session.libsession.messaging.jobs.MessageSendJob
1110
import org.session.libsession.messaging.messages.Message
1211
import org.session.libsession.messaging.messages.control.GroupUpdated
1312
import org.session.libsession.messaging.messages.visible.Attachment
14-
import org.session.libsession.messaging.messages.visible.Profile
1513
import org.session.libsession.messaging.messages.visible.Reaction
1614
import org.session.libsession.messaging.messages.visible.VisibleMessage
1715
import org.session.libsession.messaging.sending_receiving.attachments.AttachmentId
@@ -26,7 +24,6 @@ import org.session.libsession.utilities.GroupRecord
2624
import org.session.libsession.utilities.recipients.Recipient
2725
import org.session.libsignal.crypto.ecc.ECKeyPair
2826
import org.session.libsignal.messages.SignalServiceAttachmentPointer
29-
import org.session.libsignal.messages.SignalServiceGroup
3027
import org.session.libsignal.utilities.AccountId
3128
import org.thoughtcrime.securesms.database.model.MessageId
3229
import org.thoughtcrime.securesms.database.model.MessageRecord
@@ -38,12 +35,8 @@ interface StorageProtocol {
3835
// General
3936
fun getUserPublicKey(): String?
4037
fun getUserED25519KeyPair(): KeyPair?
41-
fun getUserX25519KeyPair(): ECKeyPair
38+
fun getUserX25519KeyPair(): KeyPair
4239
fun getUserBlindedAccountId(serverPublicKey: String): AccountId?
43-
fun getUserProfile(): Profile
44-
45-
// Signal
46-
fun getOrGenerateRegistrationID(): Int
4740

4841
// Jobs
4942
fun persistJob(job: Job)
@@ -120,8 +113,6 @@ interface StorageProtocol {
120113
fun addClosedGroupEncryptionKeyPair(encryptionKeyPair: ECKeyPair, groupPublicKey: String, timestamp: Long)
121114
fun removeAllClosedGroupEncryptionKeyPairs(groupPublicKey: String)
122115

123-
fun insertOutgoingInfoMessage(context: Context, groupID: String, type: SignalServiceGroup.Type, name: String,
124-
members: Collection<String>, admins: Collection<String>, threadID: Long, sentTimestamp: Long): Long?
125116
fun isLegacyClosedGroup(publicKey: String): Boolean
126117
fun getClosedGroupEncryptionKeyPairs(groupPublicKey: String): MutableList<ECKeyPair>
127118
fun getLatestClosedGroupEncryptionKeyPair(groupPublicKey: String): ECKeyPair?

app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package org.session.libsession.messaging.file_server
33
import kotlinx.serialization.Serializable
44
import okhttp3.HttpUrl
55
import okhttp3.HttpUrl.Companion.toHttpUrl
6-
import org.session.libsession.utilities.serializable.HttpSerializer
6+
import org.session.libsession.utilities.serializable.HttpUrlSerializer
77

88
@Serializable
99
data class FileServer(
10-
@Serializable(with = HttpSerializer::class)
10+
@Serializable(with = HttpUrlSerializer::class)
1111
val url: HttpUrl,
1212
val ed25519PublicKeyHex: String
1313
) {

app/src/main/java/org/session/libsession/messaging/jobs/AttachmentDownloadJob.kt

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package org.session.libsession.messaging.jobs
22

3-
import android.content.Context
43
import dagger.assisted.Assisted
54
import dagger.assisted.AssistedFactory
65
import dagger.assisted.AssistedInject
7-
import dagger.hilt.android.qualifiers.ApplicationContext
86
import okhttp3.HttpUrl.Companion.toHttpUrl
97
import okhttp3.HttpUrl.Companion.toHttpUrlOrNull
108
import org.session.libsession.database.MessageDataProvider
@@ -16,7 +14,6 @@ import org.session.libsession.messaging.sending_receiving.attachments.Attachment
1614
import org.session.libsession.messaging.sending_receiving.attachments.DatabaseAttachment
1715
import org.session.libsession.messaging.utilities.Data
1816
import org.session.libsession.snode.OnionRequestAPI
19-
import org.session.libsession.snode.utilities.await
2017
import org.session.libsession.utilities.Address
2118
import org.session.libsession.utilities.DecodedAudio
2219
import org.session.libsession.utilities.InputStreamMediaDataSource
@@ -252,21 +249,18 @@ class AttachmentDownloadJob @AssistedInject constructor(
252249
return KEY
253250
}
254251

255-
class DeserializeFactory(private val factory: Factory) : Job.DeserializeFactory<AttachmentDownloadJob> {
252+
@AssistedFactory
253+
abstract class Factory : Job.DeserializeFactory<AttachmentDownloadJob> {
254+
abstract fun create(
255+
@Assisted("attachmentID") attachmentID: Long,
256+
mmsMessageId: Long
257+
): AttachmentDownloadJob
256258

257259
override fun create(data: Data): AttachmentDownloadJob {
258-
return factory.create(
260+
return create(
259261
attachmentID = data.getLong(ATTACHMENT_ID_KEY),
260262
mmsMessageId = data.getLong(TS_INCOMING_MESSAGE_ID_KEY)
261263
)
262264
}
263265
}
264-
265-
@AssistedFactory
266-
interface Factory {
267-
fun create(
268-
@Assisted("attachmentID") attachmentID: Long,
269-
mmsMessageId: Long
270-
): AttachmentDownloadJob
271-
}
272266
}

app/src/main/java/org/session/libsession/messaging/jobs/AttachmentUploadJob.kt

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import org.session.libsession.messaging.messages.Message
1515
import org.session.libsession.messaging.open_groups.OpenGroupApi
1616
import org.session.libsession.messaging.sending_receiving.MessageSender
1717
import org.session.libsession.messaging.utilities.Data
18-
import org.session.libsession.snode.utilities.await
1918
import org.session.libsession.utilities.Address
2019
import org.session.libsession.utilities.DecodedAudio
2120
import org.session.libsession.utilities.InputStreamMediaDataSource
@@ -38,6 +37,7 @@ class AttachmentUploadJob @AssistedInject constructor(
3837
private val attachmentProcessor: AttachmentProcessor,
3938
private val preferences: TextSecurePreferences,
4039
private val fileServerApi: FileServerApi,
40+
private val messageSender: MessageSender,
4141
) : Job {
4242
override var delegate: JobDelegate? = null
4343
override var id: String? = null
@@ -219,7 +219,7 @@ class AttachmentUploadJob @AssistedInject constructor(
219219

220220
private fun failAssociatedMessageSendJob(e: Exception) {
221221
val messageSendJob = storage.getMessageSendJob(messageSendJobID)
222-
MessageSender.handleFailedMessageSend(this.message, e)
222+
messageSender.handleFailedMessageSend(this.message, e)
223223
if (messageSendJob != null) {
224224
storage.markJobAsFailedPermanently(messageSendJobID)
225225
}
@@ -244,7 +244,14 @@ class AttachmentUploadJob @AssistedInject constructor(
244244
return KEY
245245
}
246246

247-
class DeserializeFactory(private val factory: Factory): Job.DeserializeFactory<AttachmentUploadJob> {
247+
@AssistedFactory
248+
abstract class Factory : Job.DeserializeFactory<AttachmentUploadJob> {
249+
abstract fun create(
250+
attachmentID: Long,
251+
@Assisted("threadID") threadID: String,
252+
message: Message,
253+
messageSendJobID: String
254+
): AttachmentUploadJob
248255

249256
override fun create(data: Data): AttachmentUploadJob? {
250257
val serializedMessage = data.getByteArray(MESSAGE_KEY)
@@ -259,22 +266,12 @@ class AttachmentUploadJob @AssistedInject constructor(
259266
return null
260267
}
261268
input.close()
262-
return factory.create(
269+
return create(
263270
attachmentID = data.getLong(ATTACHMENT_ID_KEY),
264271
threadID = data.getString(THREAD_ID_KEY)!!,
265272
message = message,
266273
messageSendJobID = data.getString(MESSAGE_SEND_JOB_ID_KEY)!!
267274
)
268275
}
269276
}
270-
271-
@AssistedFactory
272-
interface Factory {
273-
fun create(
274-
attachmentID: Long,
275-
@Assisted("threadID") threadID: String,
276-
message: Message,
277-
messageSendJobID: String
278-
): AttachmentUploadJob
279-
}
280277
}

app/src/main/java/org/session/libsession/messaging/jobs/BatchMessageReceiveJob.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ data class MessageReceiveParameters(
5151
val closedGroup: Destination.ClosedGroup? = null
5252
)
5353

54+
@Deprecated("BatchMessageReceiveJob is now only here so that existing persisted jobs can be processed.")
5455
class BatchMessageReceiveJob @AssistedInject constructor(
5556
@Assisted private val messages: List<MessageReceiveParameters>,
5657
@Assisted val fromCommunity: Address.Community?, // The community the messages are received in, if any
@@ -62,6 +63,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
6263
private val messageNotifier: MessageNotifier,
6364
private val threadDatabase: ThreadDatabase,
6465
private val recipientRepository: RecipientRepository,
66+
private val messageReceiver: MessageReceiver,
6567
) : Job {
6668

6769
override var delegate: JobDelegate? = null
@@ -105,6 +107,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
105107
fromCommunity = fromCommunity,
106108
threadDatabase = threadDatabase,
107109
recipientRepository = recipientRepository,
110+
messageReceiver = messageReceiver,
108111
)
109112
}
110113

@@ -157,7 +160,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
157160
messages.forEach { messageParameters ->
158161
val (data, serverHash, openGroupMessageServerID) = messageParameters
159162
try {
160-
val (message, proto) = MessageReceiver.parse(
163+
val (message, proto) = messageReceiver.parse(
161164
data,
162165
openGroupMessageServerID,
163166
openGroupPublicKey = serverPublicKey,
@@ -358,7 +361,8 @@ class BatchMessageReceiveJob @AssistedInject constructor(
358361

359362
@AssistedFactory
360363
abstract class Factory : Job.DeserializeFactory<BatchMessageReceiveJob> {
361-
abstract fun create(
364+
@Deprecated("New code should try to handle message directly instead of creating this job")
365+
protected abstract fun create(
362366
messages: List<MessageReceiveParameters>,
363367
fromCommunity: Address.Community?,
364368
): BatchMessageReceiveJob

app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@ package org.session.libsession.messaging.jobs
22

33
import android.widget.Toast
44
import com.google.protobuf.ByteString
5+
import dagger.assisted.Assisted
6+
import dagger.assisted.AssistedFactory
7+
import dagger.assisted.AssistedInject
58
import kotlinx.coroutines.Dispatchers
69
import kotlinx.coroutines.async
710
import kotlinx.coroutines.awaitAll
@@ -16,13 +19,19 @@ import org.session.libsession.messaging.sending_receiving.MessageSender
1619
import org.session.libsession.messaging.utilities.Data
1720
import org.session.libsession.messaging.utilities.MessageAuthentication.buildGroupInviteSignature
1821
import org.session.libsession.snode.SnodeAPI
22+
import org.session.libsession.utilities.ConfigFactoryProtocol
1923
import org.session.libsession.utilities.getGroup
2024
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateInviteMessage
2125
import org.session.libsignal.protos.SignalServiceProtos.DataMessage.GroupUpdateMessage
2226
import org.session.libsignal.utilities.AccountId
2327
import org.session.libsignal.utilities.Log
2428

25-
class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<String>) : Job {
29+
class InviteContactsJob @AssistedInject constructor(
30+
@Assisted val groupSessionId: String,
31+
@Assisted val memberSessionIds: Array<String>,
32+
private val configFactory: ConfigFactoryProtocol,
33+
private val messageSender: MessageSender,
34+
) : Job {
2635

2736
companion object {
2837
const val KEY = "InviteContactJob"
@@ -37,8 +46,7 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
3746
override val maxFailureCount: Int = 1
3847

3948
override suspend fun execute(dispatcherName: String) {
40-
val configs = MessagingModuleConfiguration.shared.configFactory
41-
val group = requireNotNull(configs.getGroup(AccountId(groupSessionId))) {
49+
val group = requireNotNull(configFactory.getGroup(AccountId(groupSessionId))) {
4250
"Group must exist to invite"
4351
}
4452

@@ -54,7 +62,7 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
5462
runCatching {
5563
// Make the request for this member
5664
val memberId = AccountId(memberSessionId)
57-
val (groupName, subAccount) = configs.withMutableGroupConfigs(sessionId) { configs ->
65+
val (groupName, subAccount) = configFactory.withMutableGroupConfigs(sessionId) { configs ->
5866
configs.groupInfo.getName() to configs.groupKeys.makeSubAccount(memberSessionId)
5967
}
6068

@@ -76,14 +84,14 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
7684
sentTimestamp = timestamp
7785
}
7886

79-
MessageSender.sendNonDurably(update, Destination.Contact(memberSessionId), false)
87+
messageSender.sendNonDurably(update, Destination.Contact(memberSessionId), false)
8088
}
8189
}
8290
}
8391

8492
val results = memberSessionIds.zip(requests.awaitAll())
8593

86-
configs.withMutableGroupConfigs(sessionId) { configs ->
94+
configFactory.withMutableGroupConfigs(sessionId) { configs ->
8795
results.forEach { (memberSessionId, result) ->
8896
configs.groupMembers.get(memberSessionId)?.let { member ->
8997
if (result.isFailure) {
@@ -96,8 +104,8 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
96104
}
97105
}
98106

99-
val groupName = configs.withGroupConfigs(sessionId) { it.groupInfo.getName() }
100-
?: configs.getGroup(sessionId)?.name
107+
val groupName = configFactory.withGroupConfigs(sessionId) { it.groupInfo.getName() }
108+
?: configFactory.getGroup(sessionId)?.name
101109

102110
// Gather all the exceptions, while keeping track of the invitee account IDs
103111
val failures = results.mapNotNull { (id, result) ->
@@ -140,4 +148,20 @@ class InviteContactsJob(val groupSessionId: String, val memberSessionIds: Array<
140148

141149
override fun getFactoryKey(): String = KEY
142150

151+
@AssistedFactory
152+
abstract class Factory : Job.DeserializeFactory<InviteContactsJob> {
153+
abstract fun create(
154+
groupSessionId: String,
155+
memberSessionIds: Array<String>,
156+
): InviteContactsJob
157+
158+
override fun create(data: Data): InviteContactsJob? {
159+
val groupSessionId = data.getString(GROUP) ?: return null
160+
val memberSessionIds = data.getStringArray(MEMBER) ?: return null
161+
return create(
162+
groupSessionId = groupSessionId,
163+
memberSessionIds = memberSessionIds,
164+
)
165+
}
166+
}
143167
}

0 commit comments

Comments
 (0)