mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 02:39:55 +01:00
Support selecting multiple threads to add to chat folder.
Resolves #13973
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user