Skip to content

Commit

Permalink
Added onClick listeners to menu options in bottom sheet
Browse files Browse the repository at this point in the history
  • Loading branch information
JuancaG05 committed Jul 6, 2023
1 parent 85fda20 commit bf96981
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import com.owncloud.android.domain.appregistry.model.AppRegistryMimeType
import com.owncloud.android.domain.exceptions.InstanceNotConfiguredException
import com.owncloud.android.domain.exceptions.TooEarlyException
import com.owncloud.android.domain.files.model.FileListOption
import com.owncloud.android.domain.files.model.FileMenuOption
import com.owncloud.android.domain.files.model.OCFile
import com.owncloud.android.domain.files.model.OCFile.Companion.ROOT_PATH
import com.owncloud.android.domain.files.model.OCFileSyncInfo
Expand Down Expand Up @@ -343,70 +344,132 @@ class MainFileListFragment : Fragment(),

// Observe the menu filtered options for a single file
collectLatestLifecycleFlow(mainFileListViewModel.menuOptionsSingleFile) { menuOptions ->
fileSingleFile?.let {
fileSingleFile?.let { file ->
val fileOptionsBottomSheetSingleFile = layoutInflater.inflate(R.layout.file_options_bottom_sheet_fragment, null)
val dialog = BottomSheetDialog(requireContext())
dialog.setContentView(fileOptionsBottomSheetSingleFile)

val fileOptionsBottomSheetSingleFileBehavior: BottomSheetBehavior<*> = BottomSheetBehavior.from(fileOptionsBottomSheetSingleFile.parent as View)
val closeBottomSheetButton = fileOptionsBottomSheetSingleFile.findViewById<ImageView>(R.id.close_bottom_sheet)
closeBottomSheetButton.setOnClickListener {
fileOptionsBottomSheetSingleFileBehavior.state = BottomSheetBehavior.STATE_HIDDEN
dialog.hide()
}

val thumbnailBottomSheet = fileOptionsBottomSheetSingleFile.findViewById<ImageView>(R.id.thumbnail_bottom_sheet)
if (it.isFolder) {
if (file.isFolder) {
// Folder
thumbnailBottomSheet.setImageResource(R.drawable.ic_menu_archive)
} else {
// Set file icon depending on its mimetype. Ask for thumbnail later.
thumbnailBottomSheet.setImageResource(MimetypeIconUtil.getFileTypeIconId(it.mimeType, it.fileName))
if (it.remoteId != null) {
val thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(it.remoteId)
thumbnailBottomSheet.setImageResource(MimetypeIconUtil.getFileTypeIconId(file.mimeType, file.fileName))
if (file.remoteId != null) {
val thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.remoteId)
if (thumbnail != null) {
thumbnailBottomSheet.setImageBitmap(thumbnail)
}
if (it.needsToUpdateThumbnail) {
if (file.needsToUpdateThumbnail) {
// generate new Thumbnail
if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(it, thumbnailBottomSheet)) {
if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(file, thumbnailBottomSheet)) {
val task = ThumbnailsCacheManager.ThumbnailGenerationTask(thumbnailBottomSheet, AccountUtils.getCurrentOwnCloudAccount(requireContext()))
val asyncDrawable = ThumbnailsCacheManager.AsyncThumbnailDrawable(resources, thumbnail, task)

// If drawable is not visible, do not update it.
if (asyncDrawable.minimumHeight > 0 && asyncDrawable.minimumWidth > 0) {
thumbnailBottomSheet.setImageDrawable(asyncDrawable)
}
task.execute(it)
task.execute(file)
}
}

if (it.mimeType == "image/png") {
if (file.mimeType == "image/png") {
thumbnailBottomSheet.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.background_color))
}
}
}

val fileNameBottomSheet = fileOptionsBottomSheetSingleFile.findViewById<TextView>(R.id.file_name_bottom_sheet)
fileNameBottomSheet.text = it.fileName
fileNameBottomSheet.text = file.fileName

val fileSizeBottomSheet = fileOptionsBottomSheetSingleFile.findViewById<TextView>(R.id.file_size_bottom_sheet)
fileSizeBottomSheet.text = DisplayUtils.bytesToHumanReadable(it.length, requireContext())
fileSizeBottomSheet.text = DisplayUtils.bytesToHumanReadable(file.length, requireContext())

val fileLastModBottomSheet = fileOptionsBottomSheetSingleFile.findViewById<TextView>(R.id.file_last_mod_bottom_sheet)
fileLastModBottomSheet.text = DisplayUtils.getRelativeTimestamp(requireContext(), it.modificationTimestamp)
fileLastModBottomSheet.text = DisplayUtils.getRelativeTimestamp(requireContext(), file.modificationTimestamp)

fileOptionsBottomSheetSingleFileLayout = fileOptionsBottomSheetSingleFile.findViewById(R.id.file_options_bottom_sheet_layout)
menuOptions.forEach { menuOption ->
val fileOptionItemView = BottomSheetFragmentItemView(requireContext())
fileOptionItemView.apply {
title = if (menuOption.toResId() == R.id.action_open_file_with && !it.hasWritePermission) {
title = if (menuOption.toResId() == R.id.action_open_file_with && !file.hasWritePermission) {
getString(R.string.actionbar_open_with_read_only)
} else {
getString(menuOption.toStringResId())
}
itemIcon = ResourcesCompat.getDrawable(resources, menuOption.toDrawableResId(), null)
setOnClickListener {

when (menuOption) {
FileMenuOption.SELECT_ALL -> {
// Not applicable here
}
FileMenuOption.SELECT_INVERSE -> {
// Not applicable here
}
FileMenuOption.DOWNLOAD, FileMenuOption.SYNC -> {
syncFiles(listOf(file))
}
FileMenuOption.RENAME -> {
val dialogRename = RenameFileDialogFragment.newInstance(file)
dialogRename.show(requireActivity().supportFragmentManager, FRAGMENT_TAG_RENAME_FILE)
}
FileMenuOption.MOVE -> {
val action = Intent(activity, FolderPickerActivity::class.java)
action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, arrayListOf(file))
action.putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.MOVE)
requireActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__MOVE_FILES)
}
FileMenuOption.COPY -> {
val action = Intent(activity, FolderPickerActivity::class.java)
action.putParcelableArrayListExtra(FolderPickerActivity.EXTRA_FILES, arrayListOf(file))
action.putExtra(FolderPickerActivity.EXTRA_PICKER_MODE, FolderPickerActivity.PickerMode.COPY)
requireActivity().startActivityForResult(action, FileDisplayActivity.REQUEST_CODE__COPY_FILES)
}
FileMenuOption.REMOVE -> {
val dialogRemove = RemoveFilesDialogFragment.newInstance(file)
dialogRemove.show(requireActivity().supportFragmentManager, ConfirmationDialogFragment.FTAG_CONFIRMATION)
}
FileMenuOption.OPEN_WITH -> {
fileActions?.openFile(file)
}
FileMenuOption.CANCEL_SYNC -> {
fileActions?.cancelFileTransference(arrayListOf(file))
}
FileMenuOption.SHARE -> {
fileActions?.onShareFileClicked(file)
}
FileMenuOption.DETAILS -> {
fileActions?.showDetails(file)
}
FileMenuOption.SEND -> {
if (!file.isAvailableLocally) { // Download the file
Timber.d("${file.remotePath} : File must be downloaded")
fileActions?.initDownloadForSending(file)
} else {
fileActions?.sendDownloadedFile(file)
}
}
FileMenuOption.SET_AV_OFFLINE -> {
fileOperationsViewModel.performOperation(FileOperation.SetFilesAsAvailableOffline(listOf(file)))
if (file.isFolder) {
fileOperationsViewModel.performOperation(FileOperation.SynchronizeFolderOperation(file, file.owner))
} else {
fileOperationsViewModel.performOperation(FileOperation.SynchronizeFileOperation(file, file.owner))
}
}
FileMenuOption.UNSET_AV_OFFLINE -> {
fileOperationsViewModel.performOperation(FileOperation.UnsetFilesAsAvailableOffline(listOf(file)))
}
}
dialog.hide()
}
}
fileOptionsBottomSheetSingleFileLayout!!.addView(fileOptionItemView)
Expand All @@ -423,7 +486,7 @@ class MainFileListFragment : Fragment(),
})
dialog.setOnShowListener { fileOptionsBottomSheetSingleFileBehavior.peekHeight = fileOptionsBottomSheetSingleFile.measuredHeight }
dialog.show()
mainFileListViewModel.getAppRegistryForMimeType(it.mimeType, isMultiselection = false)
mainFileListViewModel.getAppRegistryForMimeType(file.mimeType, isMultiselection = false)
}
}

Expand All @@ -435,12 +498,12 @@ class MainFileListFragment : Fragment(),
val appProviderItemView = BottomSheetFragmentItemView(requireContext())
appProviderItemView.apply {
title = getString(R.string.ic_action_open_with_web, appRegistryProvider.name)
itemIcon = ResourcesCompat.getDrawable(resources, R.drawable.ic_spaces, null)
itemIcon = ResourcesCompat.getDrawable(resources, R.drawable.ic_open_in_web, null)
setOnClickListener {
mainFileListViewModel.openInWeb(file.remoteId!!, appRegistryProvider.name)
}
}
fileOptionsBottomSheetSingleFileLayout!!.addView(appProviderItemView)
fileOptionsBottomSheetSingleFileLayout!!.addView(appProviderItemView, 1)
}
}
fileSingleFile = null
Expand Down
9 changes: 9 additions & 0 deletions owncloudApp/src/main/res/drawable/ic_open_in_web.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="#FF000000"
android:pathData="M394,809q-26,-40 -43,-82.5T323,630L172,630q35,70 91,115t131,64ZM152,570h160q-3,-24 -4,-43.5t-1,-44.5q0,-21 0.5,-42.5T311,391L152,391q-7,24 -9.5,44.5T140,482q0,26 2.5,45t9.5,43ZM172,331h150q12,-55 30,-99t43,-82q-85,29 -135,69.5T172,331ZM384,331h193q-15,-64 -38.5,-110.5T480,138q-35,37 -58.5,85T384,331ZM639,331h149q-35,-65 -92.5,-111T566,151q25,38 42.5,82t30.5,98ZM480,880q-84,0 -157,-30.5T196,765q-54,-54 -85,-126.5T80,482q0,-84 31,-157.5T196,197q54,-54 127,-85.5T480,80q84,0 157,31.5T764,197q54,54 85,127.5T880,482q0,17 -1,34t-4,34h-62q4,-17 5.5,-32.5T820,482q0,-26 -2.5,-46.5T808,391L648,391q3,30 4.5,49.5T654,482q0,14 -0.5,28.5T651,550h-61q2,-21 3,-36t1,-32q0,-21 -1,-40.5t-5,-50.5L373,391q-4,31 -5,50.5t-1,40.5q0,20 1,38.5t5,49.5h177v60L384,630q20,75 42,119t54,71q21,-22 38.5,-49t31.5,-56v159q-17,3 -34.5,4.5T480,880ZM798,841L670,713v103h-60v-206h206v60L712,670l128,128 -42,43Z"/>
</vector>

0 comments on commit bf96981

Please sign in to comment.