Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.nextcloud.client.editimage.EditImageActivity
import com.nextcloud.client.jobs.BackgroundJobManager
import com.nextcloud.utils.EditorUtils
import com.nextcloud.utils.ShortcutUtil
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.extensions.handle
import com.owncloud.android.R
import com.owncloud.android.datamodel.OCFile
Expand Down Expand Up @@ -45,7 +46,11 @@ class FileActionHandler @Inject constructor(
@Suppress("CyclomaticComplexMethod")
private fun file(@IdRes itemId: Int, file: OCFile, host: FileActionHost): Boolean {
when (itemId) {
R.id.action_send_share_file -> host.containerActivity.showDetails(file, SHARING_TAB)
R.id.action_send_share_file -> sendShareFile(file, host)

R.id.action_see_details -> host.containerActivity.showDetails(file)

R.id.action_open_file_with -> openFile(file, host)

R.id.action_rename_file -> RenameFileDialogFragment.newInstance(file, host.parentFolder)
.show(host.fragmentManager, FileDetailFragment.FTAG_RENAME_FILE)
Expand Down Expand Up @@ -75,7 +80,7 @@ class FileActionHandler @Inject constructor(
.show(host.fragmentManager, ConfirmationDialogFragment.FTAG_CONFIRMATION)

R.id.action_cancel_sync -> files.forEach {
host.fda?.cancelTransference(it)
host.fda?.cancelTransference(it) ?: host.helper?.cancelTransference(it)
}

R.id.action_favorite -> setFavorite(files, true, host)
Expand All @@ -88,6 +93,20 @@ class FileActionHandler @Inject constructor(
return true
}

private fun sendShareFile(file: OCFile, host: FileActionHost) {
if (file.isSharedWithMe && !file.canReshare()) {
SnackbarUtil.show(host.view, R.string.resharing_is_not_allowed)
return
}

host.helper?.sendShareFile(file)
}

private fun openFile(file: OCFile, host: FileActionHost) {
host.helper?.openFile(file)
host.onFileOpened()
}

private fun setFavorite(files: Collection<OCFile>, isFavorite: Boolean, host: FileActionHost) {
host.helper?.toggleFavoriteFiles(files, isFavorite)
host.onFavoriteChanged(isFavorite)
Expand All @@ -100,7 +119,7 @@ class FileActionHandler @Inject constructor(
TextEditorWebView.startTextEditor(file, context)

EditImageActivity.canBePreviewed(file) ->
host.fda?.startImageEditor(file)
host.fda?.startImageEditor(file) ?: host.previewMediaActivity?.startImageEditor(file)

else -> host.helper?.openFileAsRichDocument(file, context)
}
Expand Down Expand Up @@ -141,7 +160,6 @@ class FileActionHandler @Inject constructor(
}

companion object {
private const val SHARING_TAB = 1
private const val NO_NEUTRAL_BUTTON = -1
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,15 @@ import com.owncloud.android.ui.activity.FileActivity
import com.owncloud.android.ui.activity.FileDisplayActivity
import com.owncloud.android.ui.fragment.FileFragment
import com.owncloud.android.ui.helpers.FileOperationsHelper
import com.owncloud.android.ui.preview.media.PreviewMediaActivity

class FileActionHost @JvmOverloads constructor(
val containerActivity: FileFragment.ContainerActivity,
val fragmentManager: FragmentManager,
val view: View?,
val parentFolder: OCFile?,
val actionMode: ActionMode? = null,
val onFileOpened: () -> Unit = {},
val onFavoriteChanged: (isFavorite: Boolean) -> Unit = {}
) {
val helper: FileOperationsHelper?
Expand All @@ -33,6 +35,9 @@ class FileActionHost @JvmOverloads constructor(
val fda: FileDisplayActivity?
get() = containerActivity as? FileDisplayActivity

val previewMediaActivity: PreviewMediaActivity?
get() = containerActivity as? PreviewMediaActivity

val context: Context?
get() = view?.context
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import com.owncloud.android.ui.helpers.FileOperationsHelper
fun FileOperationsHelper.handle(@IdRes itemId: Int, file: OCFile, view: View?): Boolean {
when (itemId) {
R.id.action_send_file -> sendShareFile(file, true)
R.id.action_open_file_with -> openFile(file)
R.id.action_stream_media -> streamMediaFile(file)
R.id.action_set_as_wallpaper -> setPictureAs(file, view)
R.id.action_encrypted -> toggleEncryption(file, true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
private static final String DIALOG_BOTTOM_SHEET = "DIALOG_BOTTOM_SHEET";

private static final int SINGLE_SELECTION = 1;
private static final int SHARING_TAB_POSITION = 1;
private static final Set<Integer> SELECTION_ENDING_ACTIONS = Set.of(R.id.action_export_file,
R.id.action_favorite,
R.id.action_unset_favorite,
Expand Down Expand Up @@ -1369,7 +1370,10 @@ public boolean onFileActionChosen(@IdRes final int itemId, Set<OCFile> checkedFi
}

private boolean onListActionChosen(@IdRes final int itemId, Set<OCFile> checkedFiles) {
if (itemId == R.id.action_see_details && checkedFiles.size() == SINGLE_SELECTION) {
if (itemId == R.id.action_send_share_file && checkedFiles.size() == SINGLE_SELECTION) {
mContainerActivity.showDetails(checkedFiles.iterator().next(), SHARING_TAB_POSITION);
return true;
} else if (itemId == R.id.action_see_details && checkedFiles.size() == SINGLE_SELECTION) {
if (mActiveActionMode != null) {
mActiveActionMode.finish();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ import com.nextcloud.client.utils.IntentUtil
import com.nextcloud.client.utils.Throttler
import com.nextcloud.repository.ClientRepository
import com.nextcloud.ui.albumItemActions.AlbumItemActionsBottomSheet
import com.nextcloud.ui.fileactions.FileActionHandler
import com.nextcloud.ui.fileactions.FileActionHost
import com.nextcloud.ui.fileactions.FileActionsBottomSheet
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.extensions.getTypedActivity
Expand Down Expand Up @@ -116,6 +118,9 @@ class AlbumItemsFragment :
@Inject
lateinit var viewThemeUtils: ViewThemeUtils

@Inject
lateinit var fileActionHandler: FileActionHandler

@Inject
lateinit var accountManager: UserAccountManager

Expand Down Expand Up @@ -624,24 +629,21 @@ class AlbumItemsFragment :
?.getClientIntegrationEndpoints(Type.CONTEXT_MENU, checkedFiles.first().mimeType)
.orEmpty()

private fun onFileActionChosen(@IdRes itemId: Int, checkedFiles: Set<OCFile>): Boolean {
if (checkedFiles.isEmpty()) {
return false
}

val fileOperationsHelper = containerActivity?.fileOperationsHelper
private fun onFileActionChosen(@IdRes itemId: Int, checkedFiles: Set<OCFile>) {
if (checkedFiles.isEmpty()) return

when (itemId) {
R.id.action_remove_file -> confirmFilesRemoval(checkedFiles)
R.id.action_favorite -> fileOperationsHelper?.toggleFavoriteFiles(checkedFiles, true)
R.id.action_unset_favorite -> fileOperationsHelper?.toggleFavoriteFiles(checkedFiles, false)
R.id.action_open_file_with -> fileOperationsHelper?.openFile(checkedFiles.first())
R.id.action_stream_media -> fileOperationsHelper?.streamMediaFile(checkedFiles.first())

R.id.action_select_all_action_menu -> selectAllFiles(true)

R.id.action_deselect_all_action_menu -> selectAllFiles(false)
}

return true
else -> containerActivity?.let {
val host = FileActionHost(it, parentFragmentManager, view, null)
fileActionHandler.handle(itemId, checkedFiles, host)
}
}
}

@Subscribe(threadMode = ThreadMode.BACKGROUND)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,12 @@ import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.snackbar.Snackbar
import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.di.Injectable
import com.nextcloud.client.jobs.BackgroundJobManager
import com.nextcloud.client.network.ConnectivityService
import com.nextcloud.client.player.model.file.PlaybackCollection
import com.nextcloud.repository.ClientRepository
import com.nextcloud.ui.fileactions.FileAction
import com.nextcloud.ui.fileactions.FileActionHandler
import com.nextcloud.ui.fileactions.FileActionHost
import com.nextcloud.ui.fileactions.FileActionsBottomSheet.Companion.newInstance
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.extensions.clickWithDebounce
Expand All @@ -67,8 +68,6 @@ import com.owncloud.android.datamodel.ThumbnailsCacheManager
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.operations.FetchRemoteFileOperation
import com.owncloud.android.ui.activity.FileActivity
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment
import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment
import com.owncloud.android.ui.fragment.FileFragment
import com.owncloud.android.utils.BitmapUtils
import com.owncloud.android.utils.MimeTypeUtil
Expand Down Expand Up @@ -119,10 +118,10 @@ class PreviewMediaFragment :
lateinit var accountManager: UserAccountManager

@Inject
lateinit var backgroundJobManager: BackgroundJobManager
lateinit var viewThemeUtils: ViewThemeUtils

@Inject
lateinit var viewThemeUtils: ViewThemeUtils
lateinit var fileActionHandler: FileActionHandler

private lateinit var binding: PreviewImageFragmentBinding

Expand Down Expand Up @@ -416,54 +415,12 @@ class PreviewMediaFragment :
.show(fragmentManager, "actions")
}

/**
* {@inheritDoc}
*/
@Suppress("CyclomaticComplexMethod")
private fun onFileActionChosen(itemId: Int) {
if (itemId == R.id.action_send_share_file) {
if (file.isSharedWithMe && !file.canReshare()) {
Snackbar.make(requireView(), R.string.resharing_is_not_allowed, Snackbar.LENGTH_LONG).show()
} else {
containerActivity.fileOperationsHelper.sendShareFile(file)
}
} else if (itemId == R.id.action_send_file) {
containerActivity.fileOperationsHelper.sendShareFile(file, true)
} else if (itemId == R.id.action_open_file_with) {
openFile()
} else if (itemId == R.id.action_remove_file) {
val dialog = RemoveFilesDialogFragment.newInstance(file)
dialog.show(parentFragmentManager, ConfirmationDialogFragment.FTAG_CONFIRMATION)
} else if (itemId == R.id.action_see_details) {
seeDetails()
} else if (itemId == R.id.action_download_file || itemId == R.id.action_sync_file) {
if (containerActivity is FileActivity) {
val activity = containerActivity as FileActivity
activity.showSyncLoadingDialog(file.isFolder)
}
containerActivity.fileOperationsHelper.syncFileOrFolder(file)
} else if (itemId == R.id.action_cancel_sync) {
containerActivity.fileOperationsHelper.cancelTransference(file)
} else if (itemId == R.id.action_set_as_wallpaper) {
containerActivity.fileOperationsHelper.setPictureAs(file, imageView)
} else if (itemId == R.id.action_export_file) {
val list = ArrayList<OCFile>()
list.add(file)
containerActivity.fileOperationsHelper.exportFiles(
list,
context,
view,
backgroundJobManager
)
} else if (itemId == R.id.action_edit) {
(requireActivity() as PreviewMediaActivity).startImageEditor(file)
} else if (itemId == R.id.action_add_to_album) {
containerActivity.fileOperationsHelper.addFileToAlbum(listOf(file))
}
}
val file = file ?: return
val containerActivity = containerActivity ?: return

private fun seeDetails() {
containerActivity.showDetails(file)
val host = FileActionHost(containerActivity, parentFragmentManager, view, null, onFileOpened = ::finish)
fileActionHandler.handle(itemId, listOf(file), host)
}

@SuppressFBWarnings("Dm")
Expand All @@ -475,11 +432,6 @@ class PreviewMediaFragment :
/**
* Opens the previewed image with an external application.
*/
private fun openFile() {
containerActivity.fileOperationsHelper.openFile(file)
finish()
}

@SuppressLint("StaticFieldLeak")
private inner class LoadBitmapTask(imageView: PhotoView, infoView: LinearLayout, progressView: FrameLayout) :
AsyncTask<OCFile?, Void?, LoadImage?>() {
Expand All @@ -500,7 +452,7 @@ class PreviewMediaFragment :
private var mErrorMessageId = 0
private val paramsLength = 1

@Suppress("MagicNumber", "LongMethod", "NestedBlockDepth", "CyclomaticComplexMethod")
@Suppress("TooGenericExceptionCaught", "MagicNumber", "ReturnCount", "LongMethod", "NestedBlockDepth")
@Deprecated("Deprecated in Java")
override fun doInBackground(vararg params: OCFile?): LoadImage? {
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,7 @@ import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import com.google.android.material.snackbar.Snackbar
import com.nextcloud.client.account.UserAccountManager
import com.nextcloud.client.jobs.BackgroundJobManager
import com.nextcloud.client.player.media3.PlaybackModel
import com.nextcloud.client.player.media3.PlaybackQueueLoader
import com.nextcloud.client.player.model.PlayerThumbnailLoader
Expand All @@ -40,6 +38,8 @@ import com.nextcloud.client.player.util.PlayerUtil.isPictureInPictureAllowed
import com.nextcloud.client.player.util.PlayerUtil.ownsPlayback
import com.nextcloud.client.player.util.PlayerUtil.toPlaybackFile
import com.nextcloud.ui.fileactions.FileAction
import com.nextcloud.ui.fileactions.FileActionHandler
import com.nextcloud.ui.fileactions.FileActionHost
import com.nextcloud.ui.fileactions.FileActionsBottomSheet
import com.nextcloud.utils.SnackbarUtil
import com.nextcloud.utils.extensions.addPaddingForNavBar
Expand All @@ -51,8 +51,6 @@ import com.owncloud.android.databinding.PreviewPlaybackFragmentBinding
import com.owncloud.android.datamodel.OCFile
import com.owncloud.android.lib.common.utils.Log_OC
import com.owncloud.android.operations.FetchRemoteFileOperation
import com.owncloud.android.ui.dialog.ConfirmationDialogFragment
import com.owncloud.android.ui.dialog.RemoveFilesDialogFragment
import com.owncloud.android.utils.MimeTypeUtil
import com.owncloud.android.utils.theme.ViewThemeUtils
import dagger.android.support.AndroidSupportInjection
Expand Down Expand Up @@ -96,10 +94,10 @@ class PreviewPlaybackFragment :
lateinit var accountManager: UserAccountManager

@Inject
lateinit var backgroundJobManager: BackgroundJobManager
lateinit var viewThemeUtils: ViewThemeUtils

@Inject
lateinit var viewThemeUtils: ViewThemeUtils
lateinit var fileActionHandler: FileActionHandler

private lateinit var binding: PreviewPlaybackFragmentBinding
private lateinit var file: OCFile
Expand Down Expand Up @@ -220,50 +218,20 @@ class PreviewPlaybackFragment :
}
}

@Suppress("CyclomaticComplexMethod")
private fun onFileActionChosen(itemId: Int) {
val previewActivity = previewActivity ?: return
val fileOperationsHelper = previewActivity.fileOperationsHelper

when (itemId) {
R.id.action_see_details -> previewActivity.showDetails(file)

R.id.action_download_file -> previewActivity.requestForDownload(file)

R.id.action_export_file -> fileOperationsHelper.exportFiles(
arrayListOf(file),
context,
view,
backgroundJobManager
)

R.id.action_send_share_file -> if (file.isSharedWithMe && !file.canReshare()) {
Snackbar.make(requireView(), R.string.resharing_is_not_allowed, Snackbar.LENGTH_LONG).show()
} else {
fileOperationsHelper.sendShareFile(file)
}

R.id.action_send_file -> fileOperationsHelper.sendShareFile(file, true)

R.id.action_open_file_with -> fileOperationsHelper.openFile(file)

R.id.action_stream_media -> {
playbackModel.pause()
fileOperationsHelper.streamMediaFile(file)
}
else -> {
if (itemId == R.id.action_stream_media || itemId == R.id.action_remove_file) {
playbackModel.pause()
}

R.id.action_remove_file -> {
playbackModel.pause()
RemoveFilesDialogFragment.newInstance(
file
).show(parentFragmentManager, ConfirmationDialogFragment.FTAG_CONFIRMATION)
val host = FileActionHost(previewActivity, parentFragmentManager, view, null)
fileActionHandler.handle(itemId, listOf(file), host)
}

R.id.action_add_to_album -> fileOperationsHelper.addFileToAlbum(listOf(file))

R.id.action_lock_file -> fileOperationsHelper.toggleFileLock(file, true)

R.id.action_unlock_file -> fileOperationsHelper.toggleFileLock(file, false)
}
}

Expand Down
Loading
Loading