mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-20 13:21:36 +00:00
Select currently persisted time when user toggles back to currently persisted type
This commit is contained in:
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…
x
Reference in New Issue
Block a user