Skip to content
Merged
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 @@ -13,6 +13,8 @@
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import androidx.core.content.ContextCompat;
import com.owncloud.android.R;

import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
Expand Down Expand Up @@ -59,10 +61,15 @@ protected void onCreate(Bundle savedInstanceState) {

viewThemeUtils.platform.themeDialog(binding.getRoot());

viewThemeUtils.platform.colorImageView(binding.menuIconAdvancedPermissions, ColorRole.PRIMARY);
viewThemeUtils.platform.colorImageView(binding.menuIconSendLink, ColorRole.PRIMARY);
viewThemeUtils.platform.colorImageView(binding.menuIconUnshare, ColorRole.PRIMARY);
viewThemeUtils.platform.colorImageView(binding.menuIconSendNewEmail, ColorRole.PRIMARY);
int textColor = ContextCompat.getColor(getContext(), R.color.text_color);
viewThemeUtils.material.colorMaterialButtonContent(binding.menuShareAdvancedPermissions, ColorRole.PRIMARY);
viewThemeUtils.material.colorMaterialButtonContent(binding.menuShareSendNewEmail, ColorRole.PRIMARY);
viewThemeUtils.material.colorMaterialButtonContent(binding.menuShareSendLink, ColorRole.PRIMARY);
viewThemeUtils.material.colorMaterialButtonContent(binding.menuShareUnshare, ColorRole.PRIMARY);
binding.menuShareAdvancedPermissions.setTextColor(textColor);
binding.menuShareSendNewEmail.setTextColor(textColor);
binding.menuShareSendLink.setTextColor(textColor);
binding.menuShareUnshare.setTextColor(textColor);

updateUI();

Expand Down
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,76 @@ 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)

for (creator in directEditing.creators.values) {
val creatorViewBinding =
FileListActionsBottomSheetCreatorBinding.inflate(layoutInflater)
val creatorButton = MaterialButton(
ContextThemeWrapper(
context,
R.style.ThemeOverlay_App_Button_BottomSheetItem
),
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(standardPadding, 0, standardPadding, 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
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,33 @@ package com.owncloud.android.ui.fragment
import android.content.ActivityNotFoundException
import android.content.DialogInterface
import android.content.Intent
import android.content.res.ColorStateList
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.view.ContextThemeWrapper
import android.view.Gravity
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.LinearLayout
import androidx.compose.ui.graphics.toArgb
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.net.toUri
import androidx.fragment.app.FragmentActivity
import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.button.MaterialButton
import com.nextcloud.android.lib.resources.profile.Action
import com.nextcloud.android.lib.resources.profile.HoverCard
import com.nextcloud.client.account.User
import com.owncloud.android.R
import com.owncloud.android.databinding.ProfileBottomSheetActionBinding
import com.owncloud.android.databinding.ProfileBottomSheetFragmentBinding
import com.owncloud.android.utils.DisplayUtils
import com.owncloud.android.utils.theme.ViewThemeUtils

private const val TEXT_SIZE = 16f

/**
* Show actions of an user
*/
Expand Down Expand Up @@ -67,39 +75,34 @@ class ProfileBottomSheetDialog(

binding.displayName.text = hoverCard.displayName

for (action in hoverCard.actions) {
val actionBinding = ProfileBottomSheetActionBinding.inflate(
layoutInflater
)
val creatorView: View = actionBinding.root
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 primaryColor = viewThemeUtils.getColorScheme(context).primary.toArgb()
val textColor = ContextCompat.getColor(context, R.color.text_color)

for (action in hoverCard.actions) {
if (action.appId == "email") {
action.hyperlink = action.title
action.title = context.resources.getString(R.string.write_email)
}

actionBinding.name.text = action.title

val icon = when (action.appId) {
val iconRes = when (action.appId) {
"profile" -> R.drawable.ic_user_outline
"email" -> R.drawable.ic_email
"spreed" -> R.drawable.ic_talk
else -> R.drawable.ic_edit
}
actionBinding.icon.setImageDrawable(
ResourcesCompat.getDrawable(
context.resources,
icon,
null
)
)
viewThemeUtils.platform.tintPrimaryDrawable(context, actionBinding.icon.drawable)

creatorView.setOnClickListener { v: View? ->
send(hoverCard.userId, action)
dismiss()
}
binding.creators.addView(creatorView)
val config = ProfileButtonConfig(
itemHeight = itemHeight,
standardPadding = standardPadding,
textColor = textColor,
iconRes = iconRes,
iconSize = iconSize,
primaryColor = primaryColor
)
binding.creators.addView(createProfileButton(config, action))
}

setOnShowListener { d: DialogInterface? ->
Expand All @@ -108,6 +111,32 @@ class ProfileBottomSheetDialog(
}
}

private fun createProfileButton(config: ProfileButtonConfig, action: Action): MaterialButton = MaterialButton(
ContextThemeWrapper(context, R.style.ThemeOverlay_App_Button_BottomSheetItem),
null,
com.google.android.material.R.attr.materialButtonStyle
).apply {
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
config.itemHeight
)
gravity = Gravity.START or Gravity.CENTER_VERTICAL
setPaddingRelative(config.standardPadding, 0, config.standardPadding, 0)
text = action.title
setTextColor(config.textColor)
textSize = TEXT_SIZE
isAllCaps = false
icon = ResourcesCompat.getDrawable(context.resources, config.iconRes, null)
this.iconSize = config.iconSize
this.iconPadding = config.standardPadding
iconGravity = MaterialButton.ICON_GRAVITY_START
iconTint = ColorStateList.valueOf(config.primaryColor)
setOnClickListener {
send(hoverCard.userId, action)
dismiss()
}
}

private fun send(userId: String, action: Action) {
when (action.appId) {
"profile" -> openWebsite(action.hyperlink)
Expand Down Expand Up @@ -162,4 +191,13 @@ class ProfileBottomSheetDialog(
}
return false
}

private data class ProfileButtonConfig(
val itemHeight: Int,
val standardPadding: Int,
val textColor: Int,
val iconRes: Int,
val iconSize: Int,
val primaryColor: Int
)
}
Loading
Loading