Skip to content

Commit 3dc0c27

Browse files
Merge pull request #1735 from session-foundation/release/1.30.0
Prepare for release 1.30.0
2 parents 0a00655 + 5aef395 commit 3dc0c27

File tree

337 files changed

+15097
-8354
lines changed

Some content is hidden

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

337 files changed

+15097
-8354
lines changed

.github/workflows/build_and_test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
- variant: 'play'
2626
run_test: true
2727
steps:
28-
- uses: actions/checkout@v5
28+
- uses: actions/checkout@v6
2929
with:
3030
submodules: 'recursive'
3131

@@ -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 & 5 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 = 432
30-
val canonicalVersionName = "1.29.3"
29+
val canonicalVersionCode = 433
30+
val canonicalVersionName = "1.30.0"
3131

3232
val postFixSize = 10
3333
val abiPostFix = mapOf(
@@ -105,7 +105,6 @@ protobuf {
105105

106106
android {
107107
namespace = "network.loki.messenger"
108-
useLibrary("org.apache.http.legacy")
109108

110109
compileOptions {
111110
sourceCompatibility = JavaVersion.VERSION_21
@@ -181,13 +180,12 @@ android {
181180
matchingFallbacks += "release"
182181

183182
signingConfig = signingConfigs.getByName("debug")
184-
applicationIdSuffix = ".$name"
185183

186184
devNetDefaultOn(false)
187185
enablePermissiveNetworkSecurityConfig(true)
188186

189187
setAlternativeAppName("Session QA")
190-
setAuthorityPostfix(".qa")
188+
setAuthorityPostfix("")
191189
}
192190

193191
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: 3 additions & 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?
@@ -155,6 +146,8 @@ interface StorageProtocol {
155146
fun trimThreadBefore(threadID: Long, timestamp: Long)
156147
fun getMessageCount(threadID: Long): Long
157148
fun getTotalPinned(): Int
149+
suspend fun getTotalSentProBadges(): Int
150+
suspend fun getTotalSentLongMessages(): Int
158151
fun setPinned(address: Address, isPinned: Boolean)
159152
fun isRead(threadId: Long) : Boolean
160153
fun setThreadCreationDate(threadId: Long, newDate: Long)

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: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import kotlinx.coroutines.Dispatchers
1010
import kotlinx.coroutines.async
1111
import kotlinx.coroutines.awaitAll
1212
import kotlinx.coroutines.coroutineScope
13-
import network.loki.messenger.libsession_util.ConfigBase
13+
import network.loki.messenger.libsession_util.PRIORITY_HIDDEN
1414
import org.session.libsession.database.StorageProtocol
1515
import org.session.libsession.messaging.messages.Destination
1616
import org.session.libsession.messaging.messages.Message
@@ -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

@@ -141,7 +144,7 @@ class BatchMessageReceiveJob @AssistedInject constructor(
141144
message.groupPublicKey == null && // not a group
142145
message.openGroupServerMessageID == null && // not a community
143146
// not marked as hidden
144-
configs.contacts.get(message.senderOrSync)?.priority == ConfigBase.PRIORITY_HIDDEN &&
147+
configs.contacts.get(message.senderOrSync)?.priority == PRIORITY_HIDDEN &&
145148
// the message's sentTimestamp is earlier than the sentTimestamp of the last config
146149
message.sentTimestamp!! < contactConfigTimestamp
147150
}
@@ -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

0 commit comments

Comments
 (0)