Skip to content
Draft
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 @@ -9,8 +9,13 @@ package com.owncloud.android.ui.fragment

import android.os.Build
import android.os.Bundle
import android.view.ContextThemeWrapper
import android.view.Gravity
import android.view.View
import android.widget.LinearLayout
import androidx.core.content.ContextCompat
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton
import com.google.gson.Gson
import com.nextcloud.android.common.ui.theme.utils.ColorRole
import com.nextcloud.client.account.User
Expand All @@ -21,7 +26,6 @@ import com.nextcloud.utils.BuildHelper.isFlavourGPlay
import com.nextcloud.utils.EditorUtils
import com.owncloud.android.MainApp
import com.owncloud.android.R
import com.owncloud.android.databinding.FileListActionsBottomSheetCreatorBinding
import com.owncloud.android.databinding.FileListActionsBottomSheetFragmentBinding
import com.owncloud.android.datamodel.ArbitraryDataProvider
import com.owncloud.android.datamodel.ArbitraryDataProviderImpl
Expand Down Expand Up @@ -81,24 +85,35 @@ class OCFileListBottomSheetDialog(

if (!hasPermission) {
binding.menuUploadFiles.visibility = View.GONE
binding.uploadContentFromOtherApps.text = context.getString(R.string.upload_files)
binding.menuUploadFromApp.text = context.getString(R.string.upload_files)
}
}
}

private fun applyBranding() {
viewThemeUtils.platform.run {
viewThemeUtils.material.run {
binding.run {
colorImageView(menuIconUploadFiles, ColorRole.PRIMARY)
colorImageView(menuIconUploadFromApp, ColorRole.PRIMARY)
colorImageView(menuIconDirectCameraUpload, ColorRole.PRIMARY)
colorImageView(menuIconScanDocUpload, ColorRole.PRIMARY)
colorImageView(menuIconMkdir, ColorRole.PRIMARY)
colorImageView(menuIconAddFolderInfo, ColorRole.PRIMARY)

colorViewBackground(binding.bottomSheet, ColorRole.SURFACE)
colorMaterialButtonContent(menuUploadFiles, ColorRole.PRIMARY)
colorMaterialButtonContent(menuUploadFromApp, ColorRole.PRIMARY)
colorMaterialButtonContent(menuDirectCameraUpload, ColorRole.PRIMARY)
colorMaterialButtonContent(menuScanDocUpload, ColorRole.PRIMARY)
colorMaterialButtonContent(menuMkdir, ColorRole.PRIMARY)
colorMaterialButtonContent(menuCreateRichWorkspace, ColorRole.PRIMARY)
}
}

viewThemeUtils.platform.colorViewBackground(binding.bottomSheet, ColorRole.SURFACE)

val textColor = ContextCompat.getColor(context, R.color.text_color)

binding.run {
menuUploadFiles.setTextColor(textColor)
menuUploadFromApp.setTextColor(textColor)
menuDirectCameraUpload.setTextColor(textColor)
menuScanDocUpload.setTextColor(textColor)
menuMkdir.setTextColor(textColor)
menuCreateRichWorkspace.setTextColor(textColor)
}
}

@Suppress("ComplexCondition")
Expand All @@ -110,50 +125,79 @@ class OCFileListBottomSheetDialog(
capability.richDocumentsTemplatesAvailable.isTrue &&
!file.isEncrypted
) {
binding.templates.visibility = View.VISIBLE
binding.menuNewDocument.visibility = View.VISIBLE
binding.menuNewSpreadsheet.visibility = View.VISIBLE
binding.menuNewPresentation.visibility = View.VISIBLE
}
}

@Suppress("DEPRECATION")
@Suppress("DEPRECATION", "LongMethod", "MagicNumber")
private fun initCreatorContainer() {
val json = ArbitraryDataProviderImpl(context)
.getValue(user, ArbitraryDataProvider.DIRECT_EDITING)

if (!json.isEmpty() && !file.isEncrypted) {
if (json.isNotEmpty() && !file.isEncrypted) {
val directEditing = Gson().fromJson(json, DirectEditing::class.java)
if (directEditing.creators.isEmpty()) {
return
}

binding.creatorsContainer.visibility = View.VISIBLE
binding.creators.removeAllViews()

val itemHeight = context.resources.getDimensionPixelSize(R.dimen.bottom_sheet_item_height)
val standardPadding = context.resources.getDimensionPixelSize(R.dimen.standard_padding)
val iconSize = context.resources.getDimensionPixelSize(R.dimen.iconized_single_line_item_icon_size)
val startPadding = context.resources.getDimensionPixelSize(R.dimen.creator_container_start_padding)

for (creator in directEditing.creators.values) {
val creatorViewBinding =
FileListActionsBottomSheetCreatorBinding.inflate(layoutInflater)
val creatorButton = MaterialButton(
Copy link
Collaborator Author

@alperozturk96 alperozturk96 Feb 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How can I test all possible creator buttons? @tobiasKaminsky

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say it the fab on root level of production can be considered "good enough"

ContextThemeWrapper(
context,
com.google.android.material.R.style.Widget_Material3_Button_IconButton
),
null,
com.google.android.material.R.attr.materialButtonStyle
).apply {
id = View.generateViewId()
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
itemHeight
)

val creatorView: View = creatorViewBinding.getRoot()
gravity = Gravity.START or Gravity.CENTER_VERTICAL
setPaddingRelative(startPadding, 0, standardPadding, 0)
insetTop = 0
insetBottom = 0

creatorViewBinding.creatorName.text = String.format(
fileActivity.getString(R.string.editor_placeholder),
fileActivity.getString(R.string.create_new),
creator.name
)
val buttonText = String.format(
fileActivity.getString(R.string.editor_placeholder),
fileActivity.getString(R.string.create_new),
creator.name
)
text = buttonText
setTextColor(ContextCompat.getColor(context, R.color.text_color))
textSize = 16f
isAllCaps = false

creatorViewBinding.creatorThumbnail.setImageDrawable(
MimeTypeUtil.getFileTypeIcon(
icon = MimeTypeUtil.getFileTypeIcon(
creator.mimetype,
creator.extension,
creatorViewBinding.creatorThumbnail.context,
context,
viewThemeUtils
)
)

creatorView.setOnClickListener {
actions.showTemplate(creator, creatorViewBinding.creatorName.text.toString())
dismiss()
this.iconSize = iconSize
this.iconPadding = standardPadding
iconGravity = MaterialButton.ICON_GRAVITY_START
iconTint = null

setOnClickListener {
actions.showTemplate(creator, buttonText)
dismiss()
}
}

binding.creators.addView(creatorView)
binding.creators.addView(creatorButton)
}
}
}
Expand Down
39 changes: 0 additions & 39 deletions app/src/main/res/layout/file_list_actions_bottom_sheet_creator.xml

This file was deleted.

Loading
Loading