mirror of
https://github.com/oxen-io/session-android.git
synced 2025-12-05 10:52:13 +00:00
Fix expiry timer update handling
This commit is contained in:
@@ -20,6 +20,7 @@ import org.session.libsession.messaging.messages.ExpirationConfiguration
|
||||
import org.session.libsession.messaging.open_groups.OpenGroup
|
||||
import org.session.libsession.utilities.ExpirationUtil
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsignal.protos.SignalServiceProtos
|
||||
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionManagerUtilities
|
||||
import org.thoughtcrime.securesms.database.GroupDatabase
|
||||
import org.thoughtcrime.securesms.database.LokiAPIDatabase
|
||||
@@ -104,9 +105,14 @@ class ConversationActionBarView : LinearLayout {
|
||||
fun updateSubtitle(recipient: Recipient, openGroup: OpenGroup? = null, config: ExpirationConfiguration? = null) {
|
||||
val settings = mutableListOf<ConversationSetting>()
|
||||
if (config?.isEnabled == true) {
|
||||
val prefix = if (config.expirationType == SignalServiceProtos.Content.ExpirationType.DELETE_AFTER_READ) {
|
||||
context.getString(R.string.expiration_type_disappear_after_read)
|
||||
} else {
|
||||
context.getString(R.string.expiration_type_disappear_after_send)
|
||||
}
|
||||
settings.add(
|
||||
ConversationSetting(
|
||||
"${context.getString(R.string.expiration_type_disappear_after_read)} - ${ExpirationUtil.getExpirationAbbreviatedDisplayValue(context, config?.durationSeconds ?: 0)}" ,
|
||||
"$prefix - ${ExpirationUtil.getExpirationAbbreviatedDisplayValue(context, config.durationSeconds)}" ,
|
||||
ConversationSettingType.EXPIRATION,
|
||||
R.drawable.ic_timer
|
||||
)
|
||||
|
||||
@@ -15,6 +15,7 @@ import kotlinx.coroutines.launch
|
||||
import org.session.libsession.messaging.messages.ExpirationConfiguration
|
||||
import org.session.libsession.messaging.messages.control.ExpirationTimerUpdate
|
||||
import org.session.libsession.messaging.sending_receiving.MessageSender
|
||||
import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol
|
||||
import org.session.libsession.utilities.recipients.Recipient
|
||||
import org.session.libsignal.protos.SignalServiceProtos.Content.ExpirationType
|
||||
import org.thoughtcrime.securesms.database.Storage
|
||||
@@ -25,6 +26,7 @@ class ExpirationSettingsViewModel(
|
||||
private val threadId: Long,
|
||||
private val afterReadOptions: List<RadioOption>,
|
||||
private val afterSendOptions: List<RadioOption>,
|
||||
private val messageExpirationManager: MessageExpirationManagerProtocol,
|
||||
private val threadDb: ThreadDatabase,
|
||||
private val storage: Storage
|
||||
) : ViewModel() {
|
||||
@@ -54,11 +56,6 @@ class ExpirationSettingsViewModel(
|
||||
_uiState.update {
|
||||
it.copy(showExpirationTypeSelector = !ExpirationConfiguration.isNewConfigEnabled || (recipient?.isContactRecipient == true && !recipient.isLocalNumber))
|
||||
}
|
||||
if (ExpirationConfiguration.isNewConfigEnabled && (recipient?.isLocalNumber == true || recipient?.isClosedGroupRecipient == true)) {
|
||||
_selectedExpirationType.value = ExpirationType.DELETE_AFTER_SEND.number
|
||||
} else {
|
||||
_selectedExpirationType.value = expirationConfig?.expirationTypeValue ?: -1
|
||||
}
|
||||
_selectedExpirationType.value = if (ExpirationConfiguration.isNewConfigEnabled) {
|
||||
if (recipient?.isLocalNumber == true || recipient?.isClosedGroupRecipient == true) {
|
||||
ExpirationType.DELETE_AFTER_SEND.number
|
||||
@@ -108,6 +105,8 @@ class ExpirationSettingsViewModel(
|
||||
val address = recipient.value?.address ?: return@launch
|
||||
message.recipient = address.serialize()
|
||||
message.sentTimestamp = System.currentTimeMillis()
|
||||
messageExpirationManager.setExpirationTimer(message)
|
||||
|
||||
MessageSender.send(message, address)
|
||||
_uiState.update {
|
||||
it.copy(settingsSaved = true)
|
||||
@@ -128,6 +127,7 @@ class ExpirationSettingsViewModel(
|
||||
@Assisted private val threadId: Long,
|
||||
@Assisted("afterRead") private val afterReadOptions: List<RadioOption>,
|
||||
@Assisted("afterSend") private val afterSendOptions: List<RadioOption>,
|
||||
private val messageExpirationManager: MessageExpirationManagerProtocol,
|
||||
private val threadDb: ThreadDatabase,
|
||||
private val storage: Storage
|
||||
) : ViewModelProvider.Factory {
|
||||
@@ -137,6 +137,7 @@ class ExpirationSettingsViewModel(
|
||||
threadId,
|
||||
afterReadOptions,
|
||||
afterSendOptions,
|
||||
messageExpirationManager,
|
||||
threadDb,
|
||||
storage
|
||||
) as T
|
||||
|
||||
@@ -83,6 +83,7 @@ class ExpirationConfigurationDatabase(context: Context, helper: SQLCipherOpenHel
|
||||
|
||||
writableDatabase.insert(TABLE_NAME, null, values)
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
notifyConversationListeners(configuration.threadId)
|
||||
} finally {
|
||||
writableDatabase.endTransaction()
|
||||
}
|
||||
|
||||
@@ -8,12 +8,14 @@ import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import net.sqlcipher.database.SQLiteDatabase
|
||||
import org.session.libsession.database.MessageDataProvider
|
||||
import org.session.libsession.utilities.SSKEnvironment
|
||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachmentProvider
|
||||
import org.thoughtcrime.securesms.crypto.AttachmentSecret
|
||||
import org.thoughtcrime.securesms.crypto.AttachmentSecretProvider
|
||||
import org.thoughtcrime.securesms.crypto.DatabaseSecretProvider
|
||||
import org.thoughtcrime.securesms.database.*
|
||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
|
||||
import org.thoughtcrime.securesms.service.ExpiringMessageManager
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@@ -25,6 +27,10 @@ object DatabaseModule {
|
||||
SQLiteDatabase.loadLibs(context)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideMessageExpirationManagerProtocol(@ApplicationContext context: Context): SSKEnvironment.MessageExpirationManagerProtocol = ExpiringMessageManager(context)
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideAttachmentSecret(@ApplicationContext context: Context) = AttachmentSecretProvider.getInstance(context).orCreateAttachmentSecret
|
||||
|
||||
@@ -69,20 +69,7 @@ public class ExpiringMessageManager implements SSKEnvironment.MessageExpirationM
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setExpirationTimer(@NotNull ExpirationTimerUpdate message, @Nullable Integer expirationType) {
|
||||
try {
|
||||
ThreadDatabase threadDb = DatabaseComponent.get(context).threadDatabase();
|
||||
long threadId = threadDb.getOrCreateThreadIdFor(Recipient.from(context, Address.fromSerialized(message.getSender()), false));
|
||||
if (message.getGroupPublicKey() != null) {
|
||||
Recipient recipient = Recipient.from(context, Address.fromSerialized(GroupUtil.doubleEncodeGroupID(message.getGroupPublicKey())), false);
|
||||
threadId = threadDb.getOrCreateThreadIdFor(recipient);
|
||||
}
|
||||
DatabaseComponent.get(context).expirationConfigurationDatabase().setExpirationConfiguration(
|
||||
new ExpirationConfiguration(threadId, message.getDuration(), expirationType, System.currentTimeMillis())
|
||||
);
|
||||
} catch (Exception e) {
|
||||
Log.e("Loki", "Failed to update expiration configuration.");
|
||||
}
|
||||
public void setExpirationTimer(@NotNull ExpirationTimerUpdate message) {
|
||||
String userPublicKey = TextSecurePreferences.getLocalNumber(context);
|
||||
String senderPublicKey = message.getSender();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user