From 9faa400a5bddad8a6def6636377468bc769e22cd Mon Sep 17 00:00:00 2001 From: 0x330a <92654767+0x330a@users.noreply.github.com> Date: Thu, 10 Aug 2023 17:16:46 +1000 Subject: [PATCH] refactor: use generic option adapters, fix compile issues --- .../expiration/ExpirationSettingsViewModel.kt | 23 +++++++++++-------- .../preferences/ClearAllDataDialog.kt | 6 ++--- .../preferences/RadioOptionAdapter.kt | 9 +++++++- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt index 9c6ae84f4..b00e177a2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsViewModel.kt @@ -24,12 +24,13 @@ import org.thoughtcrime.securesms.database.GroupDatabase import org.thoughtcrime.securesms.database.Storage import org.thoughtcrime.securesms.database.ThreadDatabase import org.thoughtcrime.securesms.preferences.ExpirationRadioOption +import org.thoughtcrime.securesms.preferences.RadioOption import kotlin.reflect.KClass class ExpirationSettingsViewModel( private val threadId: Long, - private val afterReadOptions: List, - private val afterSendOptions: List, + private val afterReadOptions: List>, + private val afterSendOptions: List>, private val textSecurePreferences: TextSecurePreferences, private val messageExpirationManager: MessageExpirationManagerProtocol, private val threadDb: ThreadDatabase, @@ -49,10 +50,10 @@ class ExpirationSettingsViewModel( val selectedExpirationType: StateFlow = _selectedExpirationType private val _selectedExpirationTimer = MutableStateFlow(afterSendOptions.firstOrNull()) - val selectedExpirationTimer: StateFlow = _selectedExpirationTimer + val selectedExpirationTimer: StateFlow?> = _selectedExpirationTimer - private val _expirationTimerOptions = MutableStateFlow>(emptyList()) - val expirationTimerOptions: StateFlow> = _expirationTimerOptions + private val _expirationTimerOptions = MutableStateFlow>>(emptyList()) + val expirationTimerOptions: StateFlow>> = _expirationTimerOptions init { // SETUP @@ -92,19 +93,23 @@ class ExpirationSettingsViewModel( }.onEach { options -> val enabled = _uiState.value.isSelfAdmin || recipient.value?.isClosedGroupRecipient == true _expirationTimerOptions.value = if (ExpirationConfiguration.isNewConfigEnabled && (recipient.value?.isLocalNumber == true || recipient.value?.isClosedGroupRecipient == true)) { - options.map { it.copy(enabled = enabled) } + options.filterIsInstance().map { + it.copy(enabled = enabled) + } } else { - options.slice(1 until options.size).map { it.copy(enabled = enabled) } + options.slice(1 until options.size).filterIsInstance().map { + it.copy(enabled = enabled) + } } }.launchIn(viewModelScope) } - fun onExpirationTypeSelected(option: ExpirationRadioOption) { + fun onExpirationTypeSelected(option: RadioOption) { _selectedExpirationType.value = option.value _selectedExpirationTimer.value = _expirationTimerOptions.value.firstOrNull() } - fun onExpirationTimerSelected(option: ExpirationRadioOption) { + fun onExpirationTimerSelected(option: RadioOption) { _selectedExpirationTimer.value = option } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt index f5147d43c..f747d3eb9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/ClearAllDataDialog.kt @@ -46,9 +46,9 @@ class ClearAllDataDialog : DialogFragment() { private fun createView(): View { binding = DialogClearAllDataBinding.inflate(LayoutInflater.from(requireContext())) - val device = RadioOption("deviceOnly", requireContext().getString(R.string.dialog_clear_all_data_clear_device_only)) - val network = RadioOption("deviceAndNetwork", requireContext().getString(R.string.dialog_clear_all_data_clear_device_and_network)) - var selectedOption = device + val device = StringRadioOption("deviceOnly", requireContext().getString(R.string.dialog_clear_all_data_clear_device_only)) + val network = StringRadioOption("deviceAndNetwork", requireContext().getString(R.string.dialog_clear_all_data_clear_device_and_network)) + var selectedOption: RadioOption = device val optionAdapter = RadioOptionAdapter { selectedOption = it } binding.recyclerView.apply { itemAnimator = null diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/RadioOptionAdapter.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/RadioOptionAdapter.kt index 64ddd3a04..cb98876fb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/RadioOptionAdapter.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/RadioOptionAdapter.kt @@ -100,4 +100,11 @@ class ExpirationRadioOption( subtitle, enabled, contentDescription -) +) { + fun copy(value: ExpiryMode = this.value, + title: String = this.title, + subtitle: String? = this.subtitle, + enabled: Boolean = this.enabled, + contentDescription: String = this.contentDescription) = + ExpirationRadioOption(value, title, subtitle, enabled, contentDescription) +}