kopia lustrzana https://github.com/ryukoposting/Signal-Android
61 wiersze
2.1 KiB
Kotlin
61 wiersze
2.1 KiB
Kotlin
package org.thoughtcrime.securesms.components.settings.conversation.sounds
|
|
|
|
import androidx.lifecycle.LiveData
|
|
import androidx.lifecycle.ViewModel
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import org.thoughtcrime.securesms.database.RecipientDatabase
|
|
import org.thoughtcrime.securesms.notifications.NotificationChannels
|
|
import org.thoughtcrime.securesms.recipients.Recipient
|
|
import org.thoughtcrime.securesms.recipients.RecipientId
|
|
import org.thoughtcrime.securesms.util.livedata.Store
|
|
|
|
class SoundsAndNotificationsSettingsViewModel(
|
|
private val recipientId: RecipientId,
|
|
private val repository: SoundsAndNotificationsSettingsRepository
|
|
) : ViewModel() {
|
|
|
|
private val store = Store(SoundsAndNotificationsSettingsState())
|
|
|
|
val state: LiveData<SoundsAndNotificationsSettingsState> = store.stateLiveData
|
|
|
|
init {
|
|
store.update(Recipient.live(recipientId).liveData) { recipient, state ->
|
|
state.copy(
|
|
recipientId = recipientId,
|
|
muteUntil = if (recipient.isMuted) recipient.muteUntil else 0L,
|
|
mentionSetting = recipient.mentionSetting,
|
|
hasMentionsSupport = recipient.isPushV2Group,
|
|
hasCustomNotificationSettings = recipient.notificationChannel != null || !NotificationChannels.supported()
|
|
)
|
|
}
|
|
}
|
|
|
|
fun setMuteUntil(muteUntil: Long) {
|
|
repository.setMuteUntil(recipientId, muteUntil)
|
|
}
|
|
|
|
fun unmute() {
|
|
repository.setMuteUntil(recipientId, 0L)
|
|
}
|
|
|
|
fun setMentionSetting(mentionSetting: RecipientDatabase.MentionSetting) {
|
|
repository.setMentionSetting(recipientId, mentionSetting)
|
|
}
|
|
|
|
fun channelConsistencyCheck() {
|
|
store.update { s -> s.copy(channelConsistencyCheckComplete = false) }
|
|
repository.ensureCustomChannelConsistency {
|
|
store.update { s -> s.copy(channelConsistencyCheckComplete = true) }
|
|
}
|
|
}
|
|
|
|
class Factory(
|
|
private val recipientId: RecipientId,
|
|
private val repository: SoundsAndNotificationsSettingsRepository
|
|
) : ViewModelProvider.Factory {
|
|
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
|
return requireNotNull(modelClass.cast(SoundsAndNotificationsSettingsViewModel(recipientId, repository)))
|
|
}
|
|
}
|
|
}
|