mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-24 18:45:19 +00:00
fix: compile errors to build
This commit is contained in:
parent
74ee433eec
commit
68248db83c
@ -1,51 +0,0 @@
|
|||||||
package org.thoughtcrime.securesms
|
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.appcompat.app.AlertDialog
|
|
||||||
import cn.carbswang.android.numberpickerview.library.NumberPickerView
|
|
||||||
import network.loki.messenger.R
|
|
||||||
import org.session.libsession.utilities.ExpirationUtil
|
|
||||||
|
|
||||||
fun Context.showExpirationDialog(
|
|
||||||
expiration: Int,
|
|
||||||
onExpirationTime: (Int) -> Unit
|
|
||||||
): AlertDialog {
|
|
||||||
val view = LayoutInflater.from(this).inflate(R.layout.expiration_dialog, null)
|
|
||||||
val numberPickerView = view.findViewById<NumberPickerView>(R.id.expiration_number_picker)
|
|
||||||
|
|
||||||
fun updateText(index: Int) {
|
|
||||||
view.findViewById<TextView>(R.id.expiration_details).text = when (index) {
|
|
||||||
0 -> getString(R.string.ExpirationDialog_your_messages_will_not_expire)
|
|
||||||
else -> getString(
|
|
||||||
R.string.ExpirationDialog_your_messages_will_disappear_s_after_they_have_been_seen,
|
|
||||||
numberPickerView.displayedValues[index]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
val expirationTimes = resources.getIntArray(R.array.expiration_times)
|
|
||||||
val expirationDisplayValues = expirationTimes
|
|
||||||
.map { ExpirationUtil.getExpirationDisplayValue(this, it) }
|
|
||||||
.toTypedArray()
|
|
||||||
|
|
||||||
val selectedIndex = expirationTimes.run { indexOfFirst { it >= expiration }.coerceIn(indices) }
|
|
||||||
|
|
||||||
numberPickerView.apply {
|
|
||||||
displayedValues = expirationDisplayValues
|
|
||||||
minValue = 0
|
|
||||||
maxValue = expirationTimes.lastIndex
|
|
||||||
setOnValueChangedListener { _, _, index -> updateText(index) }
|
|
||||||
value = selectedIndex
|
|
||||||
}
|
|
||||||
|
|
||||||
updateText(selectedIndex)
|
|
||||||
|
|
||||||
return showSessionDialog {
|
|
||||||
title(getString(R.string.ExpirationDialog_disappearing_messages))
|
|
||||||
view(view)
|
|
||||||
okButton { onExpirationTime(numberPickerView.let { expirationTimes[it.value] }) }
|
|
||||||
cancelButton()
|
|
||||||
}
|
|
||||||
}
|
|
@ -121,7 +121,7 @@ class ExpirationSettingsViewModel(
|
|||||||
return@launch
|
return@launch
|
||||||
}
|
}
|
||||||
|
|
||||||
val expiryChangeTimestampMs = System.currentTimeMillis() + SnodeAPI.clockOffset
|
val expiryChangeTimestampMs = SnodeAPI.nowWithOffset
|
||||||
storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expirationTimer, expiryType, expiryChangeTimestampMs))
|
storage.setExpirationConfiguration(ExpirationConfiguration(threadId, expirationTimer, expiryType, expiryChangeTimestampMs))
|
||||||
|
|
||||||
val message = ExpirationTimerUpdate(expirationTimer)
|
val message = ExpirationTimerUpdate(expirationTimer)
|
||||||
|
@ -6,11 +6,6 @@ import android.animation.ValueAnimator
|
|||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.ClipData
|
|
||||||
import android.content.ClipboardManager
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
@ -35,13 +30,6 @@ import android.view.MenuItem
|
|||||||
import android.view.MotionEvent
|
import android.view.MotionEvent
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import android.widget.LinearLayout
|
|
||||||
import android.view.ActionMode
|
|
||||||
import android.view.Menu
|
|
||||||
import android.view.MenuItem
|
|
||||||
import android.view.MotionEvent
|
|
||||||
import android.view.View
|
|
||||||
import android.view.WindowManager
|
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
@ -135,11 +123,6 @@ import org.thoughtcrime.securesms.conversation.v2.messages.VisibleMessageViewDel
|
|||||||
import org.thoughtcrime.securesms.conversation.v2.search.SearchBottomBar
|
import org.thoughtcrime.securesms.conversation.v2.search.SearchBottomBar
|
||||||
import org.thoughtcrime.securesms.conversation.v2.search.SearchViewModel
|
import org.thoughtcrime.securesms.conversation.v2.search.SearchViewModel
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager
|
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.BaseDialog
|
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
|
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.ResendMessageUtilities
|
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.AttachmentManager
|
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionManagerUtilities
|
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
|
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
|
||||||
import org.thoughtcrime.securesms.conversation.v2.utilities.ResendMessageUtilities
|
import org.thoughtcrime.securesms.conversation.v2.utilities.ResendMessageUtilities
|
||||||
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
|
||||||
@ -154,18 +137,6 @@ import org.thoughtcrime.securesms.database.SessionContactDatabase
|
|||||||
import org.thoughtcrime.securesms.database.SmsDatabase
|
import org.thoughtcrime.securesms.database.SmsDatabase
|
||||||
import org.thoughtcrime.securesms.database.Storage
|
import org.thoughtcrime.securesms.database.Storage
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase
|
import org.thoughtcrime.securesms.database.ThreadDatabase
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.LokiAPIDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.LokiMessageDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.LokiThreadDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.MmsSmsDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.ReactionDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.RecipientDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.SessionContactDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.SmsDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.Storage
|
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase
|
|
||||||
import org.thoughtcrime.securesms.database.model.MessageId
|
import org.thoughtcrime.securesms.database.model.MessageId
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord
|
import org.thoughtcrime.securesms.database.model.MessageRecord
|
||||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
|
||||||
@ -189,15 +160,6 @@ import org.thoughtcrime.securesms.mms.VideoSlide
|
|||||||
import org.thoughtcrime.securesms.permissions.Permissions
|
import org.thoughtcrime.securesms.permissions.Permissions
|
||||||
import org.thoughtcrime.securesms.reactions.ReactionsDialogFragment
|
import org.thoughtcrime.securesms.reactions.ReactionsDialogFragment
|
||||||
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiDialogFragment
|
import org.thoughtcrime.securesms.reactions.any.ReactWithAnyEmojiDialogFragment
|
||||||
import org.thoughtcrime.securesms.util.ActivityDispatcher
|
|
||||||
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
|
||||||
import org.thoughtcrime.securesms.util.DateUtils
|
|
||||||
import org.thoughtcrime.securesms.util.MediaUtil
|
|
||||||
import org.thoughtcrime.securesms.util.SaveAttachmentTask
|
|
||||||
import org.thoughtcrime.securesms.util.push
|
|
||||||
import org.thoughtcrime.securesms.util.show
|
|
||||||
import org.thoughtcrime.securesms.util.toPx
|
|
||||||
import org.thoughtcrime.securesms.showExpirationDialog
|
|
||||||
import org.thoughtcrime.securesms.showSessionDialog
|
import org.thoughtcrime.securesms.showSessionDialog
|
||||||
import org.thoughtcrime.securesms.util.ActivityDispatcher
|
import org.thoughtcrime.securesms.util.ActivityDispatcher
|
||||||
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
||||||
@ -206,6 +168,7 @@ import org.thoughtcrime.securesms.util.MediaUtil
|
|||||||
import org.thoughtcrime.securesms.util.SaveAttachmentTask
|
import org.thoughtcrime.securesms.util.SaveAttachmentTask
|
||||||
import org.thoughtcrime.securesms.util.isScrolledToBottom
|
import org.thoughtcrime.securesms.util.isScrolledToBottom
|
||||||
import org.thoughtcrime.securesms.util.push
|
import org.thoughtcrime.securesms.util.push
|
||||||
|
import org.thoughtcrime.securesms.util.show
|
||||||
import org.thoughtcrime.securesms.util.toPx
|
import org.thoughtcrime.securesms.util.toPx
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
@ -442,7 +405,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateUnreadCountIndicator()
|
updateUnreadCountIndicator()
|
||||||
updateSubtitle()
|
|
||||||
updatePlaceholder()
|
updatePlaceholder()
|
||||||
setUpBlockedBanner()
|
setUpBlockedBanner()
|
||||||
binding!!.searchBottomBar.setEventListener(this)
|
binding!!.searchBottomBar.setEventListener(this)
|
||||||
@ -511,6 +473,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
true,
|
true,
|
||||||
screenshotObserver
|
screenshotObserver
|
||||||
)
|
)
|
||||||
|
val recipient = viewModel.recipient ?: return
|
||||||
binding?.toolbarContent?.update(recipient, viewModel.openGroup, viewModel.expirationConfiguration)
|
binding?.toolbarContent?.update(recipient, viewModel.openGroup, viewModel.expirationConfiguration)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -829,7 +792,6 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
}
|
}
|
||||||
setUpMessageRequestsBar()
|
setUpMessageRequestsBar()
|
||||||
invalidateOptionsMenu()
|
invalidateOptionsMenu()
|
||||||
updateSubtitle()
|
|
||||||
updateSendAfterApprovalText()
|
updateSendAfterApprovalText()
|
||||||
showOrHideInputIfNeeded()
|
showOrHideInputIfNeeded()
|
||||||
|
|
||||||
@ -1645,7 +1607,7 @@ class ConversationActivityV2 : PassphraseRequiredActionBarActivity(), InputBarDe
|
|||||||
}
|
}
|
||||||
val expiresInMs = (viewModel.expirationConfiguration?.durationSeconds ?: 0) * 1000L
|
val expiresInMs = (viewModel.expirationConfiguration?.durationSeconds ?: 0) * 1000L
|
||||||
val expireStartedAtMs = if (viewModel.expirationConfiguration?.expirationType == ExpirationType.DELETE_AFTER_SEND) {
|
val expireStartedAtMs = if (viewModel.expirationConfiguration?.expirationType == ExpirationType.DELETE_AFTER_SEND) {
|
||||||
sentTimestampMs
|
sentTimestamp
|
||||||
} else 0
|
} else 0
|
||||||
val outgoingTextMessage = OutgoingMediaMessage.from(message, recipient, attachments, localQuote, linkPreview, expiresInMs, expireStartedAtMs)
|
val outgoingTextMessage = OutgoingMediaMessage.from(message, recipient, attachments, localQuote, linkPreview, expiresInMs, expireStartedAtMs)
|
||||||
// Clear the input bar
|
// Clear the input bar
|
||||||
|
@ -20,13 +20,6 @@ import org.session.libsession.messaging.BlindedIdMapping
|
|||||||
import org.session.libsession.messaging.calls.CallMessageType
|
import org.session.libsession.messaging.calls.CallMessageType
|
||||||
import org.session.libsession.messaging.contacts.Contact
|
import org.session.libsession.messaging.contacts.Contact
|
||||||
import org.session.libsession.messaging.jobs.AttachmentUploadJob
|
import org.session.libsession.messaging.jobs.AttachmentUploadJob
|
||||||
import org.session.libsession.messaging.jobs.GroupAvatarDownloadJob
|
|
||||||
import org.session.libsession.messaging.jobs.Job
|
|
||||||
import org.session.libsession.messaging.jobs.JobQueue
|
|
||||||
import org.session.libsession.messaging.jobs.MessageReceiveJob
|
|
||||||
import org.session.libsession.messaging.jobs.MessageSendJob
|
|
||||||
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
|
||||||
import org.session.libsession.messaging.jobs.AttachmentUploadJob
|
|
||||||
import org.session.libsession.messaging.jobs.BackgroundGroupAddJob
|
import org.session.libsession.messaging.jobs.BackgroundGroupAddJob
|
||||||
import org.session.libsession.messaging.jobs.ConfigurationSyncJob
|
import org.session.libsession.messaging.jobs.ConfigurationSyncJob
|
||||||
import org.session.libsession.messaging.jobs.GroupAvatarDownloadJob
|
import org.session.libsession.messaging.jobs.GroupAvatarDownloadJob
|
||||||
@ -36,6 +29,7 @@ import org.session.libsession.messaging.jobs.MessageReceiveJob
|
|||||||
import org.session.libsession.messaging.jobs.MessageSendJob
|
import org.session.libsession.messaging.jobs.MessageSendJob
|
||||||
import org.session.libsession.messaging.jobs.RetrieveProfileAvatarJob
|
import org.session.libsession.messaging.jobs.RetrieveProfileAvatarJob
|
||||||
import org.session.libsession.messaging.messages.Destination
|
import org.session.libsession.messaging.messages.Destination
|
||||||
|
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
||||||
import org.session.libsession.messaging.messages.Message
|
import org.session.libsession.messaging.messages.Message
|
||||||
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
import org.session.libsession.messaging.messages.control.ConfigurationMessage
|
||||||
import org.session.libsession.messaging.messages.control.MessageRequestResponse
|
import org.session.libsession.messaging.messages.control.MessageRequestResponse
|
||||||
@ -1025,7 +1019,10 @@ open class Storage(context: Context, helper: SQLCipherOpenHelper, private val co
|
|||||||
|
|
||||||
override fun setExpirationTimer(address: String, duration: Int) {
|
override fun setExpirationTimer(address: String, duration: Int) {
|
||||||
val recipient = Recipient.from(context, fromSerialized(address), false)
|
val recipient = Recipient.from(context, fromSerialized(address), false)
|
||||||
DatabaseComponent.get(context).recipientDatabase().setExpireMessages(recipient, duration)
|
val threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient)
|
||||||
|
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(
|
||||||
|
ExpirationConfiguration(threadId, duration, ExpirationType.DELETE_AFTER_SEND.number, System.currentTimeMillis())
|
||||||
|
)
|
||||||
if (recipient.isContactRecipient && !recipient.isLocalNumber) {
|
if (recipient.isContactRecipient && !recipient.isLocalNumber) {
|
||||||
configFactory.contacts?.upsertContact(address) {
|
configFactory.contacts?.upsertContact(address) {
|
||||||
this.expiryMode = if (duration != 0) {
|
this.expiryMode = if (duration != 0) {
|
||||||
@ -1038,12 +1035,6 @@ open class Storage(context: Context, helper: SQLCipherOpenHelper, private val co
|
|||||||
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
|
ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
override fun setExpirationTimer(groupID: String, duration: Int) {
|
|
||||||
val recipient = Recipient.from(context, fromSerialized(groupID), false)
|
|
||||||
val threadId = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(recipient)
|
|
||||||
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(
|
|
||||||
ExpirationConfiguration(threadId, duration, ExpirationType.DELETE_AFTER_SEND.number, System.currentTimeMillis())
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setServerCapabilities(server: String, capabilities: List<String>) {
|
override fun setServerCapabilities(server: String, capabilities: List<String>) {
|
||||||
|
@ -89,6 +89,7 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper {
|
|||||||
private static final int lokiV40 = 61;
|
private static final int lokiV40 = 61;
|
||||||
private static final int lokiV41 = 62;
|
private static final int lokiV41 = 62;
|
||||||
private static final int lokiV42 = 63;
|
private static final int lokiV42 = 63;
|
||||||
|
private static final int lokiV43 = 64;
|
||||||
|
|
||||||
// Loki - onUpgrade(...) must be updated to use Loki version numbers if Signal makes any database changes
|
// Loki - onUpgrade(...) must be updated to use Loki version numbers if Signal makes any database changes
|
||||||
private static final int DATABASE_VERSION = lokiV42;
|
private static final int DATABASE_VERSION = lokiV42;
|
||||||
|
@ -7,6 +7,7 @@ import dagger.hilt.components.SingletonComponent
|
|||||||
import org.session.libsession.database.MessageDataProvider
|
import org.session.libsession.database.MessageDataProvider
|
||||||
import org.thoughtcrime.securesms.ApplicationContext
|
import org.thoughtcrime.securesms.ApplicationContext
|
||||||
import org.thoughtcrime.securesms.database.*
|
import org.thoughtcrime.securesms.database.*
|
||||||
|
import org.thoughtcrime.securesms.database.MmsSmsDatabase
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
||||||
|
|
||||||
@EntryPoint
|
@EntryPoint
|
||||||
|
@ -85,7 +85,7 @@ public class AndroidAutoReplyReceiver extends BroadcastReceiver {
|
|||||||
|
|
||||||
VisibleMessage message = new VisibleMessage();
|
VisibleMessage message = new VisibleMessage();
|
||||||
message.setText(responseText.toString());
|
message.setText(responseText.toString());
|
||||||
message.setSentTimestamp(SnodeAPI.getNowWithOffset() + SnodeAPI.INSTANCE.getClockOffset());
|
message.setSentTimestamp(SnodeAPI.getNowWithOffset());
|
||||||
MessageSender.send(message, recipient.getAddress());
|
MessageSender.send(message, recipient.getAddress());
|
||||||
ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId);
|
ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId);
|
||||||
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
||||||
|
@ -79,7 +79,7 @@ public class RemoteReplyReceiver extends BroadcastReceiver {
|
|||||||
ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase();
|
ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase();
|
||||||
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
long threadId = threadDatabase.getOrCreateThreadIdFor(recipient);
|
||||||
VisibleMessage message = new VisibleMessage();
|
VisibleMessage message = new VisibleMessage();
|
||||||
message.setSentTimestamp(System.currentTimeMillis() + SnodeAPI.INSTANCE.getClockOffset());
|
message.setSentTimestamp(SnodeAPI.getNowWithOffset());
|
||||||
message.setText(responseText.toString());
|
message.setText(responseText.toString());
|
||||||
ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId);
|
ExpirationConfiguration config = DatabaseComponent.get(context).expirationConfigurationDatabase().getExpirationConfiguration(threadId);
|
||||||
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
long expiresInMillis = config == null ? 0 : config.getDurationSeconds() * 1000L;
|
||||||
|
@ -20,6 +20,7 @@ import org.session.libsession.snode.SnodeAPI
|
|||||||
import org.session.libsignal.utilities.Log
|
import org.session.libsignal.utilities.Log
|
||||||
import org.thoughtcrime.securesms.ApplicationContext
|
import org.thoughtcrime.securesms.ApplicationContext
|
||||||
import org.thoughtcrime.securesms.createSessionDialog
|
import org.thoughtcrime.securesms.createSessionDialog
|
||||||
|
import org.thoughtcrime.securesms.dependencies.DatabaseComponent
|
||||||
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities
|
||||||
|
|
||||||
class ClearAllDataDialog : DialogFragment() {
|
class ClearAllDataDialog : DialogFragment() {
|
||||||
|
@ -89,7 +89,7 @@ class DefaultConversationRepository @Inject constructor(
|
|||||||
private val storage: Storage,
|
private val storage: Storage,
|
||||||
private val lokiMessageDb: LokiMessageDatabase,
|
private val lokiMessageDb: LokiMessageDatabase,
|
||||||
private val sessionJobDb: SessionJobDatabase,
|
private val sessionJobDb: SessionJobDatabase,
|
||||||
private val configDb: ExpirationConfigurationDatabase
|
private val configDb: ExpirationConfigurationDatabase,
|
||||||
private val configFactory: ConfigFactory
|
private val configFactory: ConfigFactory
|
||||||
) : ConversationRepository {
|
) : ConversationRepository {
|
||||||
|
|
||||||
|
@ -3,9 +3,9 @@ package org.thoughtcrime.securesms.service;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.session.libsession.messaging.messages.ExpirationConfiguration;
|
|
||||||
import org.session.libsession.database.StorageProtocol;
|
import org.session.libsession.database.StorageProtocol;
|
||||||
import org.session.libsession.messaging.MessagingModuleConfiguration;
|
import org.session.libsession.messaging.MessagingModuleConfiguration;
|
||||||
|
import org.session.libsession.messaging.messages.ExpirationConfiguration;
|
||||||
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate;
|
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate;
|
||||||
import org.session.libsession.messaging.messages.signal.IncomingMediaMessage;
|
import org.session.libsession.messaging.messages.signal.IncomingMediaMessage;
|
||||||
import org.session.libsession.messaging.messages.signal.OutgoingExpirationUpdateMessage;
|
import org.session.libsession.messaging.messages.signal.OutgoingExpirationUpdateMessage;
|
||||||
@ -146,14 +146,6 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
|
|||||||
|
|
||||||
Address address;
|
Address address;
|
||||||
|
|
||||||
// DISAPPEARING MESSAGES
|
|
||||||
try {
|
|
||||||
OutgoingExpirationUpdateMessage timerUpdateMessage = new OutgoingExpirationUpdateMessage(recipient, sentTimestamp, duration * 1000L, expireStartedAt, groupId);
|
|
||||||
database.insertSecureDecryptedMessageOutbox(timerUpdateMessage, -1, sentTimestamp, true);
|
|
||||||
} catch (MmsException e) {
|
|
||||||
Log.e("Loki", "Failed to insert expiration update message.");
|
|
||||||
}
|
|
||||||
// SHARED CONFIG
|
|
||||||
try {
|
try {
|
||||||
if (groupId != null) {
|
if (groupId != null) {
|
||||||
address = Address.fromSerialized(GroupUtil.doubleEncodeGroupID(groupId));
|
address = Address.fromSerialized(GroupUtil.doubleEncodeGroupID(groupId));
|
||||||
@ -165,7 +157,7 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
|
|||||||
StorageProtocol storage = MessagingModuleConfiguration.getShared().getStorage();
|
StorageProtocol storage = MessagingModuleConfiguration.getShared().getStorage();
|
||||||
message.setThreadID(storage.getOrCreateThreadIdFor(address));
|
message.setThreadID(storage.getOrCreateThreadIdFor(address));
|
||||||
|
|
||||||
OutgoingExpirationUpdateMessage timerUpdateMessage = new OutgoingExpirationUpdateMessage(recipient, sentTimestamp, duration * 1000L, groupId);
|
OutgoingExpirationUpdateMessage timerUpdateMessage = new OutgoingExpirationUpdateMessage(recipient, sentTimestamp, duration * 1000L, expireStartedAt, groupId);
|
||||||
mmsDatabase.insertSecureDecryptedMessageOutbox(timerUpdateMessage, message.getThreadID(), sentTimestamp, true);
|
mmsDatabase.insertSecureDecryptedMessageOutbox(timerUpdateMessage, message.getThreadID(), sentTimestamp, true);
|
||||||
//set the timer to the conversation
|
//set the timer to the conversation
|
||||||
MessagingModuleConfiguration.getShared().getStorage().setExpirationTimer(recipient.getAddress().serialize(), duration);
|
MessagingModuleConfiguration.getShared().getStorage().setExpirationTimer(recipient.getAddress().serialize(), duration);
|
||||||
|
@ -131,6 +131,7 @@ object MockDataGenerator {
|
|||||||
.joinToString(),
|
.joinToString(),
|
||||||
Optional.absent(),
|
Optional.absent(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
false,
|
false,
|
||||||
-1,
|
-1,
|
||||||
false
|
false
|
||||||
@ -148,6 +149,7 @@ object MockDataGenerator {
|
|||||||
.map { wordContent.random(dmThreadRandomGenerator.asKotlinRandom()) }
|
.map { wordContent.random(dmThreadRandomGenerator.asKotlinRandom()) }
|
||||||
.joinToString(),
|
.joinToString(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
-1,
|
-1,
|
||||||
(timestampNow - (index * 5000))
|
(timestampNow - (index * 5000))
|
||||||
),
|
),
|
||||||
@ -261,6 +263,7 @@ object MockDataGenerator {
|
|||||||
.joinToString(),
|
.joinToString(),
|
||||||
Optional.absent(),
|
Optional.absent(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
false,
|
false,
|
||||||
-1,
|
-1,
|
||||||
false
|
false
|
||||||
@ -278,6 +281,7 @@ object MockDataGenerator {
|
|||||||
.map { wordContent.random(cgThreadRandomGenerator.asKotlinRandom()) }
|
.map { wordContent.random(cgThreadRandomGenerator.asKotlinRandom()) }
|
||||||
.joinToString(),
|
.joinToString(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
-1,
|
-1,
|
||||||
(timestampNow - (index * 5000))
|
(timestampNow - (index * 5000))
|
||||||
),
|
),
|
||||||
@ -386,6 +390,7 @@ object MockDataGenerator {
|
|||||||
.joinToString(),
|
.joinToString(),
|
||||||
Optional.absent(),
|
Optional.absent(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
false,
|
false,
|
||||||
-1,
|
-1,
|
||||||
false
|
false
|
||||||
@ -402,6 +407,7 @@ object MockDataGenerator {
|
|||||||
.map { wordContent.random(ogThreadRandomGenerator.asKotlinRandom()) }
|
.map { wordContent.random(ogThreadRandomGenerator.asKotlinRandom()) }
|
||||||
.joinToString(),
|
.joinToString(),
|
||||||
0,
|
0,
|
||||||
|
0,
|
||||||
-1,
|
-1,
|
||||||
(timestampNow - (index * 5000))
|
(timestampNow - (index * 5000))
|
||||||
),
|
),
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 97084c69f86e67c675095b48efacc86113ccebb0
|
Subproject commit 7eb87028355bfc89950102c52d5b2927a25b2e22
|
@ -274,8 +274,8 @@ fun MessageReceiver.updateExpiryIfNeeded(message: Message, proto: SignalServiceP
|
|||||||
val storage = MessagingModuleConfiguration.shared.storage
|
val storage = MessagingModuleConfiguration.shared.storage
|
||||||
val sentTime = message.sentTimestamp ?: throw MessageReceiver.Error.InvalidMessage
|
val sentTime = message.sentTimestamp ?: throw MessageReceiver.Error.InvalidMessage
|
||||||
if (!proto.hasLastDisappearingMessageChangeTimestamp()) return
|
if (!proto.hasLastDisappearingMessageChangeTimestamp()) return
|
||||||
val threadID = storage.getOrCreateThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID)
|
val threadID = storage.getThreadIdFor(message.sender!!, message.groupPublicKey, openGroupID, false)
|
||||||
if (threadID <= 0) throw MessageReceiver.Error.NoThread
|
if (threadID == null) throw MessageReceiver.Error.NoThread
|
||||||
val recipient = storage.getRecipientForThread(threadID) ?: throw MessageReceiver.Error.NoThread
|
val recipient = storage.getRecipientForThread(threadID) ?: throw MessageReceiver.Error.NoThread
|
||||||
|
|
||||||
val localConfig = storage.getExpirationConfiguration(threadID)
|
val localConfig = storage.getExpirationConfiguration(threadID)
|
||||||
@ -311,7 +311,7 @@ fun MessageReceiver.updateExpiryIfNeeded(message: Message, proto: SignalServiceP
|
|||||||
|
|
||||||
// handle a delete after send expired fetch
|
// handle a delete after send expired fetch
|
||||||
if (type == ExpirationType.DELETE_AFTER_SEND
|
if (type == ExpirationType.DELETE_AFTER_SEND
|
||||||
&& sentTime + configToUse.durationSeconds <= SnodeAPI.nowWithClockOffset) {
|
&& sentTime + configToUse.durationSeconds <= SnodeAPI.nowWithOffset) {
|
||||||
throw MessageReceiver.Error.ExpiredMessage
|
throw MessageReceiver.Error.ExpiredMessage
|
||||||
}
|
}
|
||||||
// handle a delete after read last known config value (test) TODO: actually implement this with shared config library
|
// handle a delete after read last known config value (test) TODO: actually implement this with shared config library
|
||||||
|
@ -9,8 +9,8 @@ import org.session.libsession.messaging.messages.ExpirationConfiguration
|
|||||||
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage
|
import org.session.libsession.messaging.sending_receiving.data_extraction.DataExtractionNotificationInfoMessage
|
||||||
import org.session.libsession.utilities.Address
|
import org.session.libsession.utilities.Address
|
||||||
import org.session.libsession.utilities.ExpirationUtil
|
import org.session.libsession.utilities.ExpirationUtil
|
||||||
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
|
||||||
import org.session.libsession.utilities.truncateIdForDisplay
|
import org.session.libsession.utilities.truncateIdForDisplay
|
||||||
|
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
||||||
|
|
||||||
object UpdateMessageBuilder {
|
object UpdateMessageBuilder {
|
||||||
|
|
||||||
@ -104,7 +104,8 @@ object UpdateMessageBuilder {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val time = ExpirationUtil.getExpirationDisplayValue(context, duration.toInt())
|
val time = ExpirationUtil.getExpirationDisplayValue(context, duration.toInt())
|
||||||
val config = storage.getExpirationConfiguration(storage.getOrCreateThreadIdFor(Address.fromSerialized(sender!!)))
|
val threadId = storage.getThreadId(Address.fromSerialized(senderId!!)) ?: return ""
|
||||||
|
val config = storage.getExpirationConfiguration(threadId)
|
||||||
val state = when (config?.expirationType) {
|
val state = when (config?.expirationType) {
|
||||||
ExpirationType.DELETE_AFTER_SEND -> context.getString(R.string.MessageRecord_state_sent)
|
ExpirationType.DELETE_AFTER_SEND -> context.getString(R.string.MessageRecord_state_sent)
|
||||||
ExpirationType.DELETE_AFTER_READ -> context.getString(R.string.MessageRecord_state_read)
|
ExpirationType.DELETE_AFTER_READ -> context.getString(R.string.MessageRecord_state_read)
|
||||||
|
Loading…
Reference in New Issue
Block a user