Skip to content

Commit

Permalink
Merge pull request #8753 from marcRDZ/task-7758_messages-result-api
Browse files Browse the repository at this point in the history
Switch Messages choose folder and create doc to Activity Result API
  • Loading branch information
cketti authored Jan 24, 2025
2 parents 237f4b1 + df7a7a8 commit 3b17697
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 112 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,11 +44,11 @@ class SettingsImportFragment : Fragment() {
}
}

private val pickDocumentResultLauncher = registerForActivityResult(
private val pickDocumentLauncher = registerForActivityResult(
ActivityResultContracts.GetContent(),
pickDocumentCallback,
)
private val qrCodeScannerResultContract = registerForActivityResult(
private val qrCodeScannerLauncher = registerForActivityResult(
migrationManager.getQrCodeActivityResultContract(),
pickDocumentCallback,
)
Expand Down Expand Up @@ -226,11 +226,11 @@ class SettingsImportFragment : Fragment() {
}

private fun pickDocument() {
pickDocumentResultLauncher.launch("*/*")
pickDocumentLauncher.launch("*/*")
}

private fun scanQrCode() {
qrCodeScannerResultContract.launch(Unit)
qrCodeScannerLauncher.launch(Unit)
}

private fun pickApp() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,11 @@ class UnreadWidgetConfigurationFragment : PreferenceFragmentCompat() {
private val repository: UnreadWidgetRepository by inject()
private val unreadWidgetUpdater: UnreadWidgetUpdater by inject()

private val chooseAccountResultLauncher: ActivityResultLauncher<Unit> =
private val chooseAccountLauncher: ActivityResultLauncher<Unit> =
registerForActivityResult(UnreadWidgetChooseAccountResultContract()) { accountUuid ->
handleChooseAccount(accountUuid)
}
private val chooseFolderResultLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> =
private val chooseFolderLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> =
registerForActivityResult(ChooseFolderResultContract(action = ChooseFolderActivity.Action.CHOOSE)) { result ->
if (result != null) {
handleChooseFolder(
Expand All @@ -56,7 +56,7 @@ class UnreadWidgetConfigurationFragment : PreferenceFragmentCompat() {

unreadAccount = findPreference(PREFERENCE_UNREAD_ACCOUNT)!!
unreadAccount.onPreferenceClickListener = Preference.OnPreferenceClickListener {
chooseAccountResultLauncher.launch(Unit)
chooseAccountLauncher.launch(Unit)
false
}

Expand All @@ -70,7 +70,7 @@ class UnreadWidgetConfigurationFragment : PreferenceFragmentCompat() {

unreadFolder = findPreference(PREFERENCE_UNREAD_FOLDER)!!
unreadFolder.onPreferenceClickListener = Preference.OnPreferenceClickListener {
chooseFolderResultLauncher.launch(
chooseFolderLauncher.launch(
input = ChooseFolderResultContract.Input(
accountUuid = selectedAccountUuid!!,
),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.fsck.k9.ui.messagelist

import android.app.Activity
import android.app.SearchManager
import android.content.Context
import android.content.Intent
Expand All @@ -12,6 +11,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.annotation.StringRes
import androidx.appcompat.view.ActionMode
import androidx.core.os.BundleCompat
Expand Down Expand Up @@ -51,6 +51,7 @@ import com.fsck.k9.ui.R
import com.fsck.k9.ui.changelog.RecentChangesActivity
import com.fsck.k9.ui.changelog.RecentChangesViewModel
import com.fsck.k9.ui.choosefolder.ChooseFolderActivity
import com.fsck.k9.ui.choosefolder.ChooseFolderResultContract
import com.fsck.k9.ui.helper.RelativeDateTimeFormatter
import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS
import com.google.android.material.floatingactionbutton.FloatingActionButton
Expand Down Expand Up @@ -87,6 +88,19 @@ class MessageListFragment :
private val activityListener = MessageListActivityListener()
private val actionModeCallback = ActionModeCallback()

private val chooseFolderForMoveLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> =
registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.MOVE)) { result ->
handleChooseFolderResult(result) { folderId, messages ->
move(messages, folderId)
}
}
private val chooseFolderForCopyLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> =
registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.COPY)) { result ->
handleChooseFolderResult(result) { folderId, messages ->
copy(messages, folderId)
}
}

private lateinit var fragmentListener: MessageListFragmentListener

private lateinit var recentChangesSnackbar: Snackbar
Expand Down Expand Up @@ -705,33 +719,6 @@ class MessageListFragment :
}
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
if (resultCode != Activity.RESULT_OK) return

when (requestCode) {
ACTIVITY_CHOOSE_FOLDER_MOVE,
ACTIVITY_CHOOSE_FOLDER_COPY,
-> {
if (data == null) return

val destinationFolderId = data.getLongExtra(ChooseFolderActivity.RESULT_SELECTED_FOLDER_ID, -1L)
val messages = activeMessages!!
if (destinationFolderId != -1L) {
activeMessages = null

if (messages.isNotEmpty()) {
MlfUtils.setLastSelectedFolder(accountManager, messages, destinationFolderId)
}

when (requestCode) {
ACTIVITY_CHOOSE_FOLDER_MOVE -> move(messages, destinationFolderId)
ACTIVITY_CHOOSE_FOLDER_COPY -> copy(messages, destinationFolderId)
}
}
}
}
}

private fun onExpunge() {
currentFolder?.let { folderInfoHolder ->
messagingController.expunge(account, folderInfoHolder.databaseId)
Expand Down Expand Up @@ -1073,7 +1060,6 @@ class MessageListFragment :

displayFolderChoice(
operation = FolderOperation.MOVE,
requestCode = ACTIVITY_CHOOSE_FOLDER_MOVE,
sourceFolderId = folderId,
accountUuid = messages.first().accountUuid,
lastSelectedFolderId = null,
Expand All @@ -1096,7 +1082,6 @@ class MessageListFragment :

displayFolderChoice(
operation = FolderOperation.COPY,
requestCode = ACTIVITY_CHOOSE_FOLDER_COPY,
sourceFolderId = folderId,
accountUuid = messages.first().accountUuid,
lastSelectedFolderId = null,
Expand All @@ -1106,29 +1091,43 @@ class MessageListFragment :

private fun displayFolderChoice(
operation: FolderOperation,
requestCode: Int,
sourceFolderId: Long?,
accountUuid: String,
lastSelectedFolderId: Long?,
messages: List<MessageReference>,
) {
val action = when (operation) {
FolderOperation.COPY -> ChooseFolderActivity.Action.COPY
FolderOperation.MOVE -> ChooseFolderActivity.Action.MOVE
}
val intent = ChooseFolderActivity.buildLaunchIntent(
context = requireContext(),
action = action,
// Remember the selected messages so they are available in the registerForActivityResult() callbacks
activeMessages = messages

val input = ChooseFolderResultContract.Input(
accountUuid = accountUuid,
currentFolderId = sourceFolderId,
scrollToFolderId = lastSelectedFolderId,
messageReference = null,
)
when (operation) {
FolderOperation.COPY -> chooseFolderForCopyLauncher.launch(input)
FolderOperation.MOVE -> chooseFolderForMoveLauncher.launch(input)
}
}

// remember the selected messages for #onActivityResult
activeMessages = messages
private fun handleChooseFolderResult(
result: ChooseFolderResultContract.Result?,
action: (Long, List<MessageReference>) -> Unit,
) {
if (result == null) return

val destinationFolderId = result.folderId
val messages = activeMessages!!

if (destinationFolderId != -1L) {
activeMessages = null

startActivityForResult(intent, requestCode)
if (messages.isNotEmpty()) {
MlfUtils.setLastSelectedFolder(accountManager, messages, destinationFolderId)
}

action(destinationFolderId, messages)
}
}

private fun onArchive(message: MessageReference) {
Expand Down Expand Up @@ -2100,8 +2099,6 @@ class MessageListFragment :
}

companion object {
private const val ACTIVITY_CHOOSE_FOLDER_MOVE = 1
private const val ACTIVITY_CHOOSE_FOLDER_COPY = 2

private const val ARG_SEARCH = "searchObject"
private const val ARG_THREADED_LIST = "showingThreadedList"
Expand Down
Loading

0 comments on commit 3b17697

Please sign in to comment.