diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java
index 86b21f332872..7954884a1340 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java
@@ -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;
@@ -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();
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt
index 4691e383a2f2..4600176b9608 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListBottomSheetDialog.kt
@@ -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
@@ -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
@@ -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")
@@ -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)
}
}
}
diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/ProfileBottomSheetDialog.kt b/app/src/main/java/com/owncloud/android/ui/fragment/ProfileBottomSheetDialog.kt
index 4d0a9e427cdc..746ec89cded1 100644
--- a/app/src/main/java/com/owncloud/android/ui/fragment/ProfileBottomSheetDialog.kt
+++ b/app/src/main/java/com/owncloud/android/ui/fragment/ProfileBottomSheetDialog.kt
@@ -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
*/
@@ -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? ->
@@ -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)
@@ -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
+ )
}
diff --git a/app/src/main/res/layout/file_details_sharing_menu_bottom_sheet_fragment.xml b/app/src/main/res/layout/file_details_sharing_menu_bottom_sheet_fragment.xml
index f0f1543e0fc8..183c28741d70 100644
--- a/app/src/main/res/layout/file_details_sharing_menu_bottom_sheet_fragment.xml
+++ b/app/src/main/res/layout/file_details_sharing_menu_bottom_sheet_fragment.xml
@@ -13,138 +13,85 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingTop="@dimen/dialog_padding"
+ android:paddingTop="@dimen/standard_padding"
android:background="@color/bg_default">
-
+
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
+ android:contentDescription="@string/delete_link"
+ android:gravity="start|center_vertical"
+ android:paddingStart="@dimen/standard_padding"
+ android:paddingEnd="@dimen/standard_padding"
+ android:text="@string/delete_link"
+ android:textColor="@color/text_color"
+ android:textSize="@dimen/bottom_sheet_text_size"
+ app:icon="@drawable/ic_delete"
+ app:iconGravity="start"
+ app:iconPadding="@dimen/standard_padding"
+ app:iconSize="@dimen/iconized_single_line_item_icon_size"
+ app:iconTint="@color/primary" />
diff --git a/app/src/main/res/layout/file_list_actions_bottom_sheet_creator.xml b/app/src/main/res/layout/file_list_actions_bottom_sheet_creator.xml
deleted file mode 100644
index ccb1fa4d2d7e..000000000000
--- a/app/src/main/res/layout/file_list_actions_bottom_sheet_creator.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml b/app/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml
index 5fb7cfc03894..2ef322443115 100644
--- a/app/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml
+++ b/app/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml
@@ -1,5 +1,4 @@
-
-
-
-
-
-
-
-
diff --git a/app/src/main/res/layout/profile_bottom_sheet_fragment.xml b/app/src/main/res/layout/profile_bottom_sheet_fragment.xml
index 06c8927b8621..c674cf8713d9 100644
--- a/app/src/main/res/layout/profile_bottom_sheet_fragment.xml
+++ b/app/src/main/res/layout/profile_bottom_sheet_fragment.xml
@@ -8,39 +8,42 @@
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingTop="@dimen/standard_padding">
+
+
+ tools:text="@string/placeholder_first_name_last_name" />
+
+
64dp
40dp
56dp
- 80dp
+ 56dp
40dp
100dp
128dp
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3912bf80aca3..743ec03fa0fe 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -546,7 +546,6 @@
ƒ/1.8 • 1/374 s • 28 mm • ISO 200
Mitte, Berlin, Germany
© OpenStreetMap contributors
- Compose email
passphrase
Show 3 hidden folders
Template
@@ -1178,7 +1177,6 @@
Edit
Failed to start editor
Add folder description
- Adds folder description
We couldnt locate the file on server. Another user may have deleted the file
File not found. Are you sure that this file exists or has a previous conflict not been resolved?
File upload conflict
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 17cdbaabca4a..d3531bc920cc 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -426,6 +426,18 @@
- 0dp
+
+
+
+