From 24a020b99f03d37c55596c055ea6e06cf658f241 Mon Sep 17 00:00:00 2001 From: charles Date: Fri, 18 Nov 2022 17:45:40 +1100 Subject: [PATCH] Group migration refactor --- .../expiration/ExpirationSettingsActivity.kt | 6 +++--- .../expiration/ExpirationSettingsViewModel.kt | 14 +++++++++----- .../securesms/database/RecipientDatabase.java | 2 +- .../securesms/database/ThreadDatabase.java | 9 ++++++--- 4 files changed, 19 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsActivity.kt index 5b0925f921..a6bc80d5b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/expiration/ExpirationSettingsActivity.kt @@ -48,7 +48,7 @@ class ExpirationSettingsActivity: PassphraseRequiredActionBarActivity() { private fun mayAddTestExpiryOption(expiryOptions: List): List { return if (BuildConfig.DEBUG) { val options = expiryOptions.toMutableList() - options.add(1, RadioOption("60", "1 Minute")) + options.add(1, RadioOption("60", "1 Minute (for testing purposes)")) options } else expiryOptions } @@ -123,8 +123,8 @@ class ExpirationSettingsActivity: PassphraseRequiredActionBarActivity() { } } launch { - viewModel.selectedExpirationTimer.collect { expirationTimer -> - val position = deleteTypeOptions.indexOfFirst { it.value.toIntOrNull() == expirationTimer } + viewModel.selectedExpirationTimer.collect { option -> + val position = viewModel.expirationTimerOptions.value.indexOfFirst { it.value == option?.value } timerOptionAdapter.setSelectedPosition(max(0, position)) } } 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 3f39931b9d..9f14c3b6a8 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 @@ -37,8 +37,8 @@ class ExpirationSettingsViewModel( private val _selectedExpirationType = MutableStateFlow(null) val selectedExpirationType: StateFlow = _selectedExpirationType - private val _selectedExpirationTimer = MutableStateFlow(0) - val selectedExpirationTimer: StateFlow = _selectedExpirationTimer + private val _selectedExpirationTimer = MutableStateFlow(afterSendOptions.firstOrNull()) + val selectedExpirationTimer: StateFlow = _selectedExpirationTimer private val _expirationTimerOptions = MutableStateFlow>(emptyList()) val expirationTimerOptions: StateFlow> = _expirationTimerOptions @@ -52,7 +52,11 @@ class ExpirationSettingsViewModel( if (recipient?.isLocalNumber == true || recipient?.isClosedGroupRecipient == true) { _selectedExpirationType.value = ExpirationType.DELETE_AFTER_SEND } - _selectedExpirationTimer.value = expirationConfig?.durationSeconds ?: 0 + _selectedExpirationTimer.value = when(expirationConfig?.expirationType) { + ExpirationType.DELETE_AFTER_SEND -> afterSendOptions.find { it.value.toIntOrNull() == expirationConfig?.durationSeconds } + ExpirationType.DELETE_AFTER_READ -> afterReadOptions.find { it.value.toIntOrNull() == expirationConfig?.durationSeconds } + else -> afterSendOptions.firstOrNull() + } } selectedExpirationType.mapLatest { when (it) { @@ -70,11 +74,11 @@ class ExpirationSettingsViewModel( } fun onExpirationTimerSelected(option: RadioOption) { - _selectedExpirationTimer.value = option.value.toIntOrNull() ?: 0 + _selectedExpirationTimer.value = option } fun onSetClick() = viewModelScope.launch { - val expiresIn = _selectedExpirationTimer.value + val expiresIn = _selectedExpirationTimer.value?.value?.toIntOrNull() ?: 0 val expiryType = _selectedExpirationType.value?.number ?: 0 val expiryChangeTimestamp = System.currentTimeMillis() threadDb.updateExpiryConfig(threadId, expiresIn, expiryType, expiryChangeTimestamp) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java index 58693172ed..3ffceee958 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/RecipientDatabase.java @@ -46,7 +46,7 @@ public class RecipientDatabase extends Database { private static final String COLOR = "color"; private static final String SEEN_INVITE_REMINDER = "seen_invite_reminder"; private static final String DEFAULT_SUBSCRIPTION_ID = "default_subscription_id"; - private static final String EXPIRE_MESSAGES = "expire_messages"; + static final String EXPIRE_MESSAGES = "expire_messages"; private static final String REGISTERED = "registered"; private static final String PROFILE_KEY = "profile_key"; private static final String SYSTEM_DISPLAY_NAME = "system_display_name"; diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java index f9f92d18c7..dfc8e4059e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java +++ b/app/src/main/java/org/thoughtcrime/securesms/database/ThreadDatabase.java @@ -150,9 +150,12 @@ public class ThreadDatabase extends Database { } public static String getUpdateGroupConversationExpiryTypeCommand() { - return "UPDATE " + TABLE_NAME + " SET " + EXPIRY_TYPE + " = 1 " + - "WHERE " + ADDRESS + " LIKE '" + CLOSED_GROUP_PREFIX + "%'" + - "AND " + EXPIRES_IN + " > 0"; + return "UPDATE " + TABLE_NAME + " SET " + EXPIRY_TYPE + " = 1, " + + EXPIRES_IN + " = (SELECT " + RecipientDatabase.EXPIRE_MESSAGES + " FROM " + RecipientDatabase.TABLE_NAME + + " WHERE " + TABLE_NAME + "." + ADDRESS + " = " + RecipientDatabase.TABLE_NAME + "." + RecipientDatabase.ADDRESS + " AND " + RecipientDatabase.EXPIRE_MESSAGES + " > 0 )" + + "WHERE " + TABLE_NAME + "." + ADDRESS + " LIKE '" + CLOSED_GROUP_PREFIX + "%' " + + "AND EXISTS (SELECT " + RecipientDatabase.EXPIRE_MESSAGES + " FROM " + RecipientDatabase.TABLE_NAME + + " WHERE " + TABLE_NAME + "." + ADDRESS + " = " + RecipientDatabase.TABLE_NAME + "." + RecipientDatabase.ADDRESS + " AND " + RecipientDatabase.EXPIRE_MESSAGES + " > 0 )"; } public static String getUpdateOneToOneConversationExpiryTypeCommand() {