Select currently persisted time when user toggles back to currently persisted type

pull/1313/head
andrew 2 years ago
parent 349247e7f3
commit 5ce100a4ec

@ -1,16 +1,13 @@
package org.thoughtcrime.securesms.conversation.expiration package org.thoughtcrime.securesms.conversation.expiration
import android.app.Application import android.app.Application
import android.content.Context
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.runtime.collectAsState
import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import dagger.assisted.Assisted import dagger.assisted.Assisted
import dagger.assisted.AssistedInject import dagger.assisted.AssistedInject
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.SharingStarted
@ -31,7 +28,6 @@ import org.session.libsession.utilities.Address
import org.session.libsession.utilities.ExpirationUtil import org.session.libsession.utilities.ExpirationUtil
import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol import org.session.libsession.utilities.SSKEnvironment.MessageExpirationManagerProtocol
import org.session.libsession.utilities.TextSecurePreferences import org.session.libsession.utilities.TextSecurePreferences
import org.thoughtcrime.securesms.conversation.expiration.ExpiryType
import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.GroupDatabase
import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.database.Storage
import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.database.ThreadDatabase
@ -54,7 +50,8 @@ data class State(
val isNoteToSelf: Boolean = false, val isNoteToSelf: Boolean = false,
val expiryMode: ExpiryMode? = ExpiryMode.NONE, val expiryMode: ExpiryMode? = ExpiryMode.NONE,
val isNewConfigEnabled: Boolean = true, val isNewConfigEnabled: Boolean = true,
val callbacks: Callbacks = NoOpCallbacks val callbacks: Callbacks = NoOpCallbacks,
val persistedMode: ExpiryMode? = null
) { ) {
val subtitle get() = when { val subtitle get() = when {
isGroup || isNoteToSelf -> GetString(R.string.activity_expiration_settings_subtitle_sent) isGroup || isNoteToSelf -> GetString(R.string.activity_expiration_settings_subtitle_sent)
@ -115,7 +112,8 @@ class ExpirationSettingsViewModel(
isGroup = groupInfo != null, isGroup = groupInfo != null,
isNoteToSelf = recipient?.address?.serialize() == textSecurePreferences.getLocalNumber(), isNoteToSelf = recipient?.address?.serialize() == textSecurePreferences.getLocalNumber(),
isSelfAdmin = groupInfo == null || groupInfo.admins.any{ it.serialize() == textSecurePreferences.getLocalNumber() }, isSelfAdmin = groupInfo == null || groupInfo.admins.any{ it.serialize() == textSecurePreferences.getLocalNumber() },
expiryMode = expiryMode expiryMode = expiryMode,
persistedMode = expiryMode
) )
} }
} }
@ -128,10 +126,12 @@ class ExpirationSettingsViewModel(
* Legacy: `1 Day` * Legacy: `1 Day`
* */ * */
override fun setType(type: ExpiryType) { override fun setType(type: ExpiryType) {
if (state.value.expiryType == type) return val state = state.value
if (state.expiryType == type) return
_state.update { _state.update {
it.copy(expiryMode = type.defaultMode()) it.copy(expiryMode = type.defaultMode(state.persistedMode))
} }
} }
@ -205,6 +205,12 @@ class ExpirationSettingsViewModel(
ExpirationConfiguration.isNewConfigEnabled ExpirationConfiguration.isNewConfigEnabled
) as T ) as T
} }
private fun ExpiryType.defaultMode(persistedMode: ExpiryMode?) = when(this) {
persistedMode?.type -> persistedMode
ExpiryType.AFTER_READ -> mode(12.hours)
else -> mode(1.days)
}
} }
data class UiState( data class UiState(
@ -345,11 +351,7 @@ enum class ExpiryType(private val createMode: (Long) -> ExpiryMode) {
AFTER_READ(ExpiryMode::AfterRead); AFTER_READ(ExpiryMode::AfterRead);
fun mode(seconds: Long) = if (seconds != 0L) createMode(seconds) else ExpiryMode.NONE fun mode(seconds: Long) = if (seconds != 0L) createMode(seconds) else ExpiryMode.NONE
fun mode(duration: Duration) = mode(duration.inWholeSeconds)
fun defaultMode() = when(this) {
AFTER_READ -> 12.hours
else -> 1.days
}.inWholeSeconds.let(::mode)
} }
val ExpiryMode.type: ExpiryType get() = when(this) { val ExpiryMode.type: ExpiryType get() = when(this) {

Loading…
Cancel
Save