Loading legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt +41 −44 Original line number Original line Diff line number Diff line package com.fsck.k9.ui.messagelist package com.fsck.k9.ui.messagelist import android.app.Activity import android.app.SearchManager import android.app.SearchManager import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent Loading @@ -12,6 +11,7 @@ import android.view.MenuItem import android.view.View import android.view.View import android.view.ViewGroup import android.view.ViewGroup import android.widget.Toast import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.annotation.StringRes import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode import androidx.core.os.BundleCompat import androidx.core.os.BundleCompat Loading Loading @@ -51,6 +51,7 @@ import com.fsck.k9.ui.R import com.fsck.k9.ui.changelog.RecentChangesActivity import com.fsck.k9.ui.changelog.RecentChangesActivity import com.fsck.k9.ui.changelog.RecentChangesViewModel import com.fsck.k9.ui.changelog.RecentChangesViewModel import com.fsck.k9.ui.choosefolder.ChooseFolderActivity 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.helper.RelativeDateTimeFormatter import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton Loading Loading @@ -87,6 +88,19 @@ class MessageListFragment : private val activityListener = MessageListActivityListener() private val activityListener = MessageListActivityListener() private val actionModeCallback = ActionModeCallback() 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 fragmentListener: MessageListFragmentListener private lateinit var recentChangesSnackbar: Snackbar private lateinit var recentChangesSnackbar: Snackbar Loading Loading @@ -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() { private fun onExpunge() { currentFolder?.let { folderInfoHolder -> currentFolder?.let { folderInfoHolder -> messagingController.expunge(account, folderInfoHolder.databaseId) messagingController.expunge(account, folderInfoHolder.databaseId) Loading Loading @@ -1050,7 +1037,6 @@ class MessageListFragment : displayFolderChoice( displayFolderChoice( operation = FolderOperation.MOVE, operation = FolderOperation.MOVE, requestCode = ACTIVITY_CHOOSE_FOLDER_MOVE, sourceFolderId = folderId, sourceFolderId = folderId, accountUuid = messages.first().accountUuid, accountUuid = messages.first().accountUuid, lastSelectedFolderId = null, lastSelectedFolderId = null, Loading @@ -1073,7 +1059,6 @@ class MessageListFragment : displayFolderChoice( displayFolderChoice( operation = FolderOperation.COPY, operation = FolderOperation.COPY, requestCode = ACTIVITY_CHOOSE_FOLDER_COPY, sourceFolderId = folderId, sourceFolderId = folderId, accountUuid = messages.first().accountUuid, accountUuid = messages.first().accountUuid, lastSelectedFolderId = null, lastSelectedFolderId = null, Loading @@ -1083,29 +1068,43 @@ class MessageListFragment : private fun displayFolderChoice( private fun displayFolderChoice( operation: FolderOperation, operation: FolderOperation, requestCode: Int, sourceFolderId: Long?, sourceFolderId: Long?, accountUuid: String, accountUuid: String, lastSelectedFolderId: Long?, lastSelectedFolderId: Long?, messages: List<MessageReference>, messages: List<MessageReference>, ) { ) { val action = when (operation) { // Remember the selected messages so they are available in the registerForActivityResult() callbacks FolderOperation.COPY -> ChooseFolderActivity.Action.COPY activeMessages = messages FolderOperation.MOVE -> ChooseFolderActivity.Action.MOVE } val input = ChooseFolderResultContract.Input( val intent = ChooseFolderActivity.buildLaunchIntent( context = requireContext(), action = action, accountUuid = accountUuid, accountUuid = accountUuid, currentFolderId = sourceFolderId, currentFolderId = sourceFolderId, scrollToFolderId = lastSelectedFolderId, scrollToFolderId = lastSelectedFolderId, messageReference = null, ) ) when (operation) { FolderOperation.COPY -> chooseFolderForCopyLauncher.launch(input) FolderOperation.MOVE -> chooseFolderForMoveLauncher.launch(input) } } // remember the selected messages for #onActivityResult private fun handleChooseFolderResult( activeMessages = messages result: ChooseFolderResultContract.Result?, action: (Long, List<MessageReference>) -> Unit, ) { if (result == null) return startActivityForResult(intent, requestCode) val destinationFolderId = result.folderId val messages = activeMessages!! if (destinationFolderId != -1L) { activeMessages = null if (messages.isNotEmpty()) { MlfUtils.setLastSelectedFolder(accountManager, messages, destinationFolderId) } action(destinationFolderId, messages) } } } private fun onArchive(message: MessageReference) { private fun onArchive(message: MessageReference) { Loading Loading @@ -2073,8 +2072,6 @@ class MessageListFragment : } } companion object { 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_SEARCH = "searchObject" private const val ARG_THREADED_LIST = "showingThreadedList" private const val ARG_THREADED_LIST = "showingThreadedList" Loading legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt +39 −39 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ import android.content.Context import android.content.Intent import android.content.Intent import android.content.IntentSender import android.content.IntentSender import android.content.IntentSender.SendIntentException import android.content.IntentSender.SendIntentException import android.net.Uri import android.os.Bundle import android.os.Bundle import android.os.Parcelable import android.os.Parcelable import android.os.SystemClock import android.os.SystemClock Loading @@ -18,11 +19,13 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager import android.widget.Toast import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.setFragmentResultListener import app.k9mail.core.android.common.activity.CreateDocumentResultContract import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons import app.k9mail.core.ui.theme.api.Theme import app.k9mail.core.ui.theme.api.Theme import app.k9mail.legacy.account.Account import app.k9mail.legacy.account.Account Loading @@ -49,6 +52,7 @@ import com.fsck.k9.mailstore.MessageViewInfo import com.fsck.k9.ui.R import com.fsck.k9.ui.R import com.fsck.k9.ui.base.extensions.withArguments import com.fsck.k9.ui.base.extensions.withArguments import com.fsck.k9.ui.choosefolder.ChooseFolderActivity import com.fsck.k9.ui.choosefolder.ChooseFolderActivity import com.fsck.k9.ui.choosefolder.ChooseFolderResultContract import com.fsck.k9.ui.messagedetails.MessageDetailsFragment import com.fsck.k9.ui.messagedetails.MessageDetailsFragment import com.fsck.k9.ui.messagesource.MessageSourceActivity import com.fsck.k9.ui.messagesource.MessageSourceActivity import com.fsck.k9.ui.messageview.MessageCryptoPresenter.MessageCryptoMvpView import com.fsck.k9.ui.messageview.MessageCryptoPresenter.MessageCryptoMvpView Loading @@ -59,6 +63,7 @@ import org.koin.android.ext.android.inject import org.openintents.openpgp.util.OpenPgpIntentStarter import org.openintents.openpgp.util.OpenPgpIntentStarter import timber.log.Timber import timber.log.Timber @Suppress("LargeClass") class MessageViewFragment : class MessageViewFragment : Fragment(), Fragment(), ConfirmationDialogFragmentListener, ConfirmationDialogFragmentListener, Loading @@ -71,6 +76,15 @@ class MessageViewFragment : private val shareIntentBuilder: ShareIntentBuilder by inject() private val shareIntentBuilder: ShareIntentBuilder by inject() private val generalSettingsManager: GeneralSettingsManager by inject() private val generalSettingsManager: GeneralSettingsManager by inject() private val chooseFolderForCopyLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> = registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.COPY)) { result -> onChooseFolderCopyResult(result) } private val chooseFolderForMoveLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> = registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.MOVE)) { result -> onChooseFolderMoveResult(result) } private lateinit var messageTopView: MessageTopView private lateinit var messageTopView: MessageTopView private var message: LocalMessage? = null private var message: LocalMessage? = null Loading Loading @@ -512,7 +526,14 @@ class MessageViewFragment : return return } } startRefileActivity(FolderOperation.MOVE, ACTIVITY_CHOOSE_FOLDER_MOVE) chooseFolderForMoveLauncher.launch( input = ChooseFolderResultContract.Input( accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ), ) } } fun onCopy() { fun onCopy() { Loading @@ -524,7 +545,14 @@ class MessageViewFragment : return return } } startRefileActivity(FolderOperation.COPY, ACTIVITY_CHOOSE_FOLDER_COPY) chooseFolderForCopyLauncher.launch( input = ChooseFolderResultContract.Input( accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ), ) } } private fun onMoveToDrafts() { private fun onMoveToDrafts() { Loading Loading @@ -552,25 +580,6 @@ class MessageViewFragment : onRefile(account.spamFolderId) onRefile(account.spamFolderId) } } private fun startRefileActivity(operation: FolderOperation, requestCode: Int) { val action = if (operation == FolderOperation.MOVE) { ChooseFolderActivity.Action.MOVE } else { ChooseFolderActivity.Action.COPY } val intent = ChooseFolderActivity.buildLaunchIntent( context = requireActivity(), action = action, accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ) startActivityForResult(intent, requestCode) } @Deprecated("Switch to Activity Result API") @Deprecated("Switch to Activity Result API") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode and REQUEST_MASK_LOADER_HELPER == REQUEST_MASK_LOADER_HELPER) { if (requestCode and REQUEST_MASK_LOADER_HELPER == REQUEST_MASK_LOADER_HELPER) { Loading @@ -585,8 +594,6 @@ class MessageViewFragment : when (requestCode) { when (requestCode) { REQUEST_CODE_CREATE_DOCUMENT -> onCreateDocumentResult(data) REQUEST_CODE_CREATE_DOCUMENT -> onCreateDocumentResult(data) ACTIVITY_CHOOSE_FOLDER_MOVE -> onChooseFolderMoveResult(data) ACTIVITY_CHOOSE_FOLDER_COPY -> onChooseFolderCopyResult(data) } } } } Loading @@ -613,11 +620,11 @@ class MessageViewFragment : createAttachmentController(currentAttachmentViewInfo).saveAttachmentTo(documentUri) createAttachmentController(currentAttachmentViewInfo).saveAttachmentTo(documentUri) } } private fun onChooseFolderMoveResult(data: Intent?) { private fun onChooseFolderMoveResult(result: ChooseFolderResultContract.Result?) { if (data == null) return if (result == null) return val destinationFolderId = data.getLongExtra(ChooseFolderActivity.RESULT_SELECTED_FOLDER_ID, -1L) val destinationFolderId = result.folderId val messageReferenceString = data.getStringExtra(ChooseFolderActivity.RESULT_MESSAGE_REFERENCE) val messageReferenceString = result.messageReference val messageReference = MessageReference.parse(messageReferenceString) val messageReference = MessageReference.parse(messageReferenceString) if (this.messageReference != messageReference) return if (this.messageReference != messageReference) return Loading @@ -628,11 +635,11 @@ class MessageViewFragment : moveMessage(messageReference, destinationFolderId) moveMessage(messageReference, destinationFolderId) } } private fun onChooseFolderCopyResult(data: Intent?) { private fun onChooseFolderCopyResult(result: ChooseFolderResultContract.Result?) { if (data == null) return if (result == null) return val destinationFolderId = data.getLongExtra(ChooseFolderActivity.RESULT_SELECTED_FOLDER_ID, -1L) val destinationFolderId = result.folderId val messageReferenceString = data.getStringExtra(ChooseFolderActivity.RESULT_MESSAGE_REFERENCE) val messageReferenceString = result.messageReference val messageReference = MessageReference.parse(messageReferenceString) val messageReference = MessageReference.parse(messageReferenceString) if (this.messageReference != messageReference) return if (this.messageReference != messageReference) return Loading Loading @@ -971,11 +978,6 @@ class MessageViewFragment : activity?.invalidateMenu() activity?.invalidateMenu() } } private enum class FolderOperation { COPY, MOVE, } companion object { companion object { const val REQUEST_MASK_LOADER_HELPER = 1 shl 8 const val REQUEST_MASK_LOADER_HELPER = 1 shl 8 const val REQUEST_MASK_CRYPTO_PRESENTER = 1 shl 9 const val REQUEST_MASK_CRYPTO_PRESENTER = 1 shl 9 Loading @@ -987,9 +989,7 @@ class MessageViewFragment : private const val STATE_WAS_MESSAGE_MARKED_AS_OPENED = "wasMessageMarkedAsOpened" private const val STATE_WAS_MESSAGE_MARKED_AS_OPENED = "wasMessageMarkedAsOpened" private const val STATE_IS_ACTIVE = "isActive" private const val STATE_IS_ACTIVE = "isActive" private const val ACTIVITY_CHOOSE_FOLDER_MOVE = 1 private const val REQUEST_CODE_CREATE_DOCUMENT = 1 private const val ACTIVITY_CHOOSE_FOLDER_COPY = 2 private const val REQUEST_CODE_CREATE_DOCUMENT = 3 fun newInstance(reference: MessageReference, showAccountChip: Boolean): MessageViewFragment { fun newInstance(reference: MessageReference, showAccountChip: Boolean): MessageViewFragment { return MessageViewFragment().withArguments( return MessageViewFragment().withArguments( Loading Loading
legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messagelist/MessageListFragment.kt +41 −44 Original line number Original line Diff line number Diff line package com.fsck.k9.ui.messagelist package com.fsck.k9.ui.messagelist import android.app.Activity import android.app.SearchManager import android.app.SearchManager import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent Loading @@ -12,6 +11,7 @@ import android.view.MenuItem import android.view.View import android.view.View import android.view.ViewGroup import android.view.ViewGroup import android.widget.Toast import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.annotation.StringRes import androidx.appcompat.view.ActionMode import androidx.appcompat.view.ActionMode import androidx.core.os.BundleCompat import androidx.core.os.BundleCompat Loading Loading @@ -51,6 +51,7 @@ import com.fsck.k9.ui.R import com.fsck.k9.ui.changelog.RecentChangesActivity import com.fsck.k9.ui.changelog.RecentChangesActivity import com.fsck.k9.ui.changelog.RecentChangesViewModel import com.fsck.k9.ui.changelog.RecentChangesViewModel import com.fsck.k9.ui.choosefolder.ChooseFolderActivity 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.helper.RelativeDateTimeFormatter import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS import com.fsck.k9.ui.messagelist.MessageListFragment.MessageListFragmentListener.Companion.MAX_PROGRESS import com.google.android.material.floatingactionbutton.FloatingActionButton import com.google.android.material.floatingactionbutton.FloatingActionButton Loading Loading @@ -87,6 +88,19 @@ class MessageListFragment : private val activityListener = MessageListActivityListener() private val activityListener = MessageListActivityListener() private val actionModeCallback = ActionModeCallback() 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 fragmentListener: MessageListFragmentListener private lateinit var recentChangesSnackbar: Snackbar private lateinit var recentChangesSnackbar: Snackbar Loading Loading @@ -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() { private fun onExpunge() { currentFolder?.let { folderInfoHolder -> currentFolder?.let { folderInfoHolder -> messagingController.expunge(account, folderInfoHolder.databaseId) messagingController.expunge(account, folderInfoHolder.databaseId) Loading Loading @@ -1050,7 +1037,6 @@ class MessageListFragment : displayFolderChoice( displayFolderChoice( operation = FolderOperation.MOVE, operation = FolderOperation.MOVE, requestCode = ACTIVITY_CHOOSE_FOLDER_MOVE, sourceFolderId = folderId, sourceFolderId = folderId, accountUuid = messages.first().accountUuid, accountUuid = messages.first().accountUuid, lastSelectedFolderId = null, lastSelectedFolderId = null, Loading @@ -1073,7 +1059,6 @@ class MessageListFragment : displayFolderChoice( displayFolderChoice( operation = FolderOperation.COPY, operation = FolderOperation.COPY, requestCode = ACTIVITY_CHOOSE_FOLDER_COPY, sourceFolderId = folderId, sourceFolderId = folderId, accountUuid = messages.first().accountUuid, accountUuid = messages.first().accountUuid, lastSelectedFolderId = null, lastSelectedFolderId = null, Loading @@ -1083,29 +1068,43 @@ class MessageListFragment : private fun displayFolderChoice( private fun displayFolderChoice( operation: FolderOperation, operation: FolderOperation, requestCode: Int, sourceFolderId: Long?, sourceFolderId: Long?, accountUuid: String, accountUuid: String, lastSelectedFolderId: Long?, lastSelectedFolderId: Long?, messages: List<MessageReference>, messages: List<MessageReference>, ) { ) { val action = when (operation) { // Remember the selected messages so they are available in the registerForActivityResult() callbacks FolderOperation.COPY -> ChooseFolderActivity.Action.COPY activeMessages = messages FolderOperation.MOVE -> ChooseFolderActivity.Action.MOVE } val input = ChooseFolderResultContract.Input( val intent = ChooseFolderActivity.buildLaunchIntent( context = requireContext(), action = action, accountUuid = accountUuid, accountUuid = accountUuid, currentFolderId = sourceFolderId, currentFolderId = sourceFolderId, scrollToFolderId = lastSelectedFolderId, scrollToFolderId = lastSelectedFolderId, messageReference = null, ) ) when (operation) { FolderOperation.COPY -> chooseFolderForCopyLauncher.launch(input) FolderOperation.MOVE -> chooseFolderForMoveLauncher.launch(input) } } // remember the selected messages for #onActivityResult private fun handleChooseFolderResult( activeMessages = messages result: ChooseFolderResultContract.Result?, action: (Long, List<MessageReference>) -> Unit, ) { if (result == null) return startActivityForResult(intent, requestCode) val destinationFolderId = result.folderId val messages = activeMessages!! if (destinationFolderId != -1L) { activeMessages = null if (messages.isNotEmpty()) { MlfUtils.setLastSelectedFolder(accountManager, messages, destinationFolderId) } action(destinationFolderId, messages) } } } private fun onArchive(message: MessageReference) { private fun onArchive(message: MessageReference) { Loading Loading @@ -2073,8 +2072,6 @@ class MessageListFragment : } } companion object { 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_SEARCH = "searchObject" private const val ARG_THREADED_LIST = "showingThreadedList" private const val ARG_THREADED_LIST = "showingThreadedList" Loading
legacy/ui/legacy/src/main/java/com/fsck/k9/ui/messageview/MessageViewFragment.kt +39 −39 Original line number Original line Diff line number Diff line Loading @@ -7,6 +7,7 @@ import android.content.Context import android.content.Intent import android.content.Intent import android.content.IntentSender import android.content.IntentSender import android.content.IntentSender.SendIntentException import android.content.IntentSender.SendIntentException import android.net.Uri import android.os.Bundle import android.os.Bundle import android.os.Parcelable import android.os.Parcelable import android.os.SystemClock import android.os.SystemClock Loading @@ -18,11 +19,13 @@ import android.view.View import android.view.ViewGroup import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager import android.widget.Toast import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment import androidx.fragment.app.setFragmentResultListener import androidx.fragment.app.setFragmentResultListener import app.k9mail.core.android.common.activity.CreateDocumentResultContract import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons import app.k9mail.core.ui.legacy.designsystem.atom.icon.Icons import app.k9mail.core.ui.theme.api.Theme import app.k9mail.core.ui.theme.api.Theme import app.k9mail.legacy.account.Account import app.k9mail.legacy.account.Account Loading @@ -49,6 +52,7 @@ import com.fsck.k9.mailstore.MessageViewInfo import com.fsck.k9.ui.R import com.fsck.k9.ui.R import com.fsck.k9.ui.base.extensions.withArguments import com.fsck.k9.ui.base.extensions.withArguments import com.fsck.k9.ui.choosefolder.ChooseFolderActivity import com.fsck.k9.ui.choosefolder.ChooseFolderActivity import com.fsck.k9.ui.choosefolder.ChooseFolderResultContract import com.fsck.k9.ui.messagedetails.MessageDetailsFragment import com.fsck.k9.ui.messagedetails.MessageDetailsFragment import com.fsck.k9.ui.messagesource.MessageSourceActivity import com.fsck.k9.ui.messagesource.MessageSourceActivity import com.fsck.k9.ui.messageview.MessageCryptoPresenter.MessageCryptoMvpView import com.fsck.k9.ui.messageview.MessageCryptoPresenter.MessageCryptoMvpView Loading @@ -59,6 +63,7 @@ import org.koin.android.ext.android.inject import org.openintents.openpgp.util.OpenPgpIntentStarter import org.openintents.openpgp.util.OpenPgpIntentStarter import timber.log.Timber import timber.log.Timber @Suppress("LargeClass") class MessageViewFragment : class MessageViewFragment : Fragment(), Fragment(), ConfirmationDialogFragmentListener, ConfirmationDialogFragmentListener, Loading @@ -71,6 +76,15 @@ class MessageViewFragment : private val shareIntentBuilder: ShareIntentBuilder by inject() private val shareIntentBuilder: ShareIntentBuilder by inject() private val generalSettingsManager: GeneralSettingsManager by inject() private val generalSettingsManager: GeneralSettingsManager by inject() private val chooseFolderForCopyLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> = registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.COPY)) { result -> onChooseFolderCopyResult(result) } private val chooseFolderForMoveLauncher: ActivityResultLauncher<ChooseFolderResultContract.Input> = registerForActivityResult(ChooseFolderResultContract(ChooseFolderActivity.Action.MOVE)) { result -> onChooseFolderMoveResult(result) } private lateinit var messageTopView: MessageTopView private lateinit var messageTopView: MessageTopView private var message: LocalMessage? = null private var message: LocalMessage? = null Loading Loading @@ -512,7 +526,14 @@ class MessageViewFragment : return return } } startRefileActivity(FolderOperation.MOVE, ACTIVITY_CHOOSE_FOLDER_MOVE) chooseFolderForMoveLauncher.launch( input = ChooseFolderResultContract.Input( accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ), ) } } fun onCopy() { fun onCopy() { Loading @@ -524,7 +545,14 @@ class MessageViewFragment : return return } } startRefileActivity(FolderOperation.COPY, ACTIVITY_CHOOSE_FOLDER_COPY) chooseFolderForCopyLauncher.launch( input = ChooseFolderResultContract.Input( accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ), ) } } private fun onMoveToDrafts() { private fun onMoveToDrafts() { Loading Loading @@ -552,25 +580,6 @@ class MessageViewFragment : onRefile(account.spamFolderId) onRefile(account.spamFolderId) } } private fun startRefileActivity(operation: FolderOperation, requestCode: Int) { val action = if (operation == FolderOperation.MOVE) { ChooseFolderActivity.Action.MOVE } else { ChooseFolderActivity.Action.COPY } val intent = ChooseFolderActivity.buildLaunchIntent( context = requireActivity(), action = action, accountUuid = account.uuid, currentFolderId = messageReference.folderId, scrollToFolderId = account.lastSelectedFolderId, messageReference = messageReference, ) startActivityForResult(intent, requestCode) } @Deprecated("Switch to Activity Result API") @Deprecated("Switch to Activity Result API") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode and REQUEST_MASK_LOADER_HELPER == REQUEST_MASK_LOADER_HELPER) { if (requestCode and REQUEST_MASK_LOADER_HELPER == REQUEST_MASK_LOADER_HELPER) { Loading @@ -585,8 +594,6 @@ class MessageViewFragment : when (requestCode) { when (requestCode) { REQUEST_CODE_CREATE_DOCUMENT -> onCreateDocumentResult(data) REQUEST_CODE_CREATE_DOCUMENT -> onCreateDocumentResult(data) ACTIVITY_CHOOSE_FOLDER_MOVE -> onChooseFolderMoveResult(data) ACTIVITY_CHOOSE_FOLDER_COPY -> onChooseFolderCopyResult(data) } } } } Loading @@ -613,11 +620,11 @@ class MessageViewFragment : createAttachmentController(currentAttachmentViewInfo).saveAttachmentTo(documentUri) createAttachmentController(currentAttachmentViewInfo).saveAttachmentTo(documentUri) } } private fun onChooseFolderMoveResult(data: Intent?) { private fun onChooseFolderMoveResult(result: ChooseFolderResultContract.Result?) { if (data == null) return if (result == null) return val destinationFolderId = data.getLongExtra(ChooseFolderActivity.RESULT_SELECTED_FOLDER_ID, -1L) val destinationFolderId = result.folderId val messageReferenceString = data.getStringExtra(ChooseFolderActivity.RESULT_MESSAGE_REFERENCE) val messageReferenceString = result.messageReference val messageReference = MessageReference.parse(messageReferenceString) val messageReference = MessageReference.parse(messageReferenceString) if (this.messageReference != messageReference) return if (this.messageReference != messageReference) return Loading @@ -628,11 +635,11 @@ class MessageViewFragment : moveMessage(messageReference, destinationFolderId) moveMessage(messageReference, destinationFolderId) } } private fun onChooseFolderCopyResult(data: Intent?) { private fun onChooseFolderCopyResult(result: ChooseFolderResultContract.Result?) { if (data == null) return if (result == null) return val destinationFolderId = data.getLongExtra(ChooseFolderActivity.RESULT_SELECTED_FOLDER_ID, -1L) val destinationFolderId = result.folderId val messageReferenceString = data.getStringExtra(ChooseFolderActivity.RESULT_MESSAGE_REFERENCE) val messageReferenceString = result.messageReference val messageReference = MessageReference.parse(messageReferenceString) val messageReference = MessageReference.parse(messageReferenceString) if (this.messageReference != messageReference) return if (this.messageReference != messageReference) return Loading Loading @@ -971,11 +978,6 @@ class MessageViewFragment : activity?.invalidateMenu() activity?.invalidateMenu() } } private enum class FolderOperation { COPY, MOVE, } companion object { companion object { const val REQUEST_MASK_LOADER_HELPER = 1 shl 8 const val REQUEST_MASK_LOADER_HELPER = 1 shl 8 const val REQUEST_MASK_CRYPTO_PRESENTER = 1 shl 9 const val REQUEST_MASK_CRYPTO_PRESENTER = 1 shl 9 Loading @@ -987,9 +989,7 @@ class MessageViewFragment : private const val STATE_WAS_MESSAGE_MARKED_AS_OPENED = "wasMessageMarkedAsOpened" private const val STATE_WAS_MESSAGE_MARKED_AS_OPENED = "wasMessageMarkedAsOpened" private const val STATE_IS_ACTIVE = "isActive" private const val STATE_IS_ACTIVE = "isActive" private const val ACTIVITY_CHOOSE_FOLDER_MOVE = 1 private const val REQUEST_CODE_CREATE_DOCUMENT = 1 private const val ACTIVITY_CHOOSE_FOLDER_COPY = 2 private const val REQUEST_CODE_CREATE_DOCUMENT = 3 fun newInstance(reference: MessageReference, showAccountChip: Boolean): MessageViewFragment { fun newInstance(reference: MessageReference, showAccountChip: Boolean): MessageViewFragment { return MessageViewFragment().withArguments( return MessageViewFragment().withArguments( Loading