Support selecting multiple threads to add to chat folder.

Resolves #13973
This commit is contained in:
Sagar
2025-02-06 22:55:19 +05:30
committed by Greyson Parrelli
parent de4b653554
commit d938906d3e
10 changed files with 172 additions and 72 deletions

View File

@@ -72,7 +72,7 @@ class AppSettingsActivity : DSLSettingsActivity(), InAppPaymentComponent {
StartLocation.CHAT_FOLDERS -> AppSettingsFragmentDirections.actionDirectToChatFoldersFragment()
StartLocation.CREATE_CHAT_FOLDER -> AppSettingsFragmentDirections.actionDirectToCreateFoldersFragment(
CreateFoldersFragmentArgs.fromBundle(intent.getBundleExtra(START_ARGUMENTS)!!).folderId,
CreateFoldersFragmentArgs.fromBundle(intent.getBundleExtra(START_ARGUMENTS)!!).threadId
CreateFoldersFragmentArgs.fromBundle(intent.getBundleExtra(START_ARGUMENTS)!!).threadIds
)
StartLocation.BACKUPS_SETTINGS -> AppSettingsFragmentDirections.actionDirectToBackupsSettingsFragment()
}
@@ -209,8 +209,8 @@ class AppSettingsActivity : DSLSettingsActivity(), InAppPaymentComponent {
fun chatFolders(context: Context): Intent = getIntentForStartLocation(context, StartLocation.CHAT_FOLDERS)
@JvmStatic
fun createChatFolder(context: Context, id: Long = -1, threadId: Long?): Intent {
val arguments = CreateFoldersFragmentArgs.Builder(id, threadId ?: -1)
fun createChatFolder(context: Context, id: Long = -1, threadIds: LongArray?): Intent {
val arguments = CreateFoldersFragmentArgs.Builder(id, threadIds ?: longArrayOf())
.build()
.toBundle()

View File

@@ -84,7 +84,7 @@ class ChatFoldersFragment : ComposeFragment() {
navController = navController,
modifier = Modifier.padding(contentPadding),
onFolderClicked = {
navController.safeNavigate(ChatFoldersFragmentDirections.actionChatFoldersFragmentToCreateFoldersFragment(it.id, -1))
navController.safeNavigate(ChatFoldersFragmentDirections.actionChatFoldersFragmentToCreateFoldersFragment(it.id, null))
},
onAdd = { folder ->
Toast.makeText(requireContext(), getString(R.string.ChatFoldersFragment__folder_added, folder.name), Toast.LENGTH_SHORT).show()

View File

@@ -225,22 +225,27 @@ class ChatFoldersViewModel : ViewModel() {
}
}
fun addThreadToIncludedChat(threadId: Long?) {
if (threadId == null || threadId == -1L) {
fun addThreadsToFolder(threadIds: LongArray?) {
if (threadIds == null || threadIds.isEmpty()) {
return
}
viewModelScope.launch {
val updatedFolder = internalState.value.currentFolder
val recipient = SignalDatabase.threads.getRecipientForThreadId(threadId)
if (recipient != null) {
internalState.update {
it.copy(
currentFolder = updatedFolder.copy(
includedRecipients = setOf(recipient)
)
)
val includedRecipients = mutableSetOf<Recipient>()
threadIds.forEach { threadId ->
val recipient = SignalDatabase.threads.getRecipientForThreadId(threadId)
if (recipient != null) {
includedRecipients.add(recipient)
}
}
internalState.update {
it.copy(
currentFolder = updatedFolder.copy(
includedRecipients = includedRecipients
)
)
}
}
}

View File

@@ -99,7 +99,7 @@ class CreateFoldersFragment : ComposeFragment() {
LaunchedEffect(Unit) {
if (state.originalFolder == state.currentFolder) {
viewModel.setCurrentFolderId(arguments?.getLong(KEY_FOLDER_ID) ?: -1)
viewModel.addThreadToIncludedChat(arguments?.getLong(KEY_THREAD_ID))
viewModel.addThreadsToFolder(arguments?.getLongArray(KEY_THREAD_IDS))
}
}
@@ -170,7 +170,7 @@ class CreateFoldersFragment : ComposeFragment() {
companion object {
private val KEY_FOLDER_ID = "folder_id"
private val KEY_THREAD_ID = "thread_id"
private val KEY_THREAD_IDS = "thread_ids"
}
}