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

This commit is contained in:
andrew 2023-09-14 19:34:34 +09:30
parent 349247e7f3
commit 5ce100a4ec

View file

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