From 3f25a71cc1faeb08707eb3b3fe8198d4eb016f81 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 09:26:27 +0200 Subject: [PATCH 01/10] Use M3 for bottom sheet Signed-off-by: alperozturk --- .../ui/fileactions/FileActionsBottomSheet.kt | 2 + .../res/layout/file_actions_bottom_sheet.xml | 83 +++++++++---------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index de58c75a9d78..225b54a04455 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -112,6 +112,8 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { return binding.root } + override fun getTheme() = R.style.ThemeOverlay_Material3_BottomSheetDialog + private fun handleState( state: FileActionsViewModel.UiState ) { diff --git a/app/src/main/res/layout/file_actions_bottom_sheet.xml b/app/src/main/res/layout/file_actions_bottom_sheet.xml index 4a0a2f283e09..df3cf0a22b9b 100644 --- a/app/src/main/res/layout/file_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/file_actions_bottom_sheet.xml @@ -19,14 +19,14 @@ ~ License along with this program. If not, see . ~ --> - - + android:layout_height="wrap_content"> - + android:layout_height="wrap_content"> - + layout="@layout/file_thumbnail" + android:layout_height="wrap_content" + android:layout_width="wrap_content" /> - + - + - - - - - + android:layout_height="wrap_content"> + + + + + + + + \ No newline at end of file From 3fdc85adf2bfb4495ef405825c9e86ce6ec8c674 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 09:36:54 +0200 Subject: [PATCH 02/10] Fix alignment Signed-off-by: alperozturk --- .../res/layout/file_actions_bottom_sheet.xml | 75 +++++++++---------- 1 file changed, 35 insertions(+), 40 deletions(-) diff --git a/app/src/main/res/layout/file_actions_bottom_sheet.xml b/app/src/main/res/layout/file_actions_bottom_sheet.xml index df3cf0a22b9b..1753cc71f532 100644 --- a/app/src/main/res/layout/file_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/file_actions_bottom_sheet.xml @@ -19,14 +19,14 @@ ~ License along with this program. If not, see . ~ --> - - + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layout_marginBottom="@dimen/standard_margin" + android:gravity="center" + android:visibility="visible"> - + - + - + - + - + android:layout_height="wrap_content" + android:orientation="vertical" /> - - - - - + - \ No newline at end of file + \ No newline at end of file From 83590ab9e8fb37583ab24407ecf563c392a84523 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 09:56:43 +0200 Subject: [PATCH 03/10] Customize bottom sheet for specific account Signed-off-by: alperozturk --- .../ui/fileactions/FileActionsBottomSheet.kt | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index 225b54a04455..7d21f32db3cc 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -24,8 +24,10 @@ package com.nextcloud.ui.fileactions import android.content.Context import android.content.res.ColorStateList +import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.Drawable +import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.text.style.StyleSpan import android.view.LayoutInflater @@ -109,10 +111,23 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED bottomSheetDialog.behavior.skipCollapsed = true + applyTintedRoundedBackground() + return binding.root } - override fun getTheme() = R.style.ThemeOverlay_Material3_BottomSheetDialog + private fun applyTintedRoundedBackground() { + val shape = GradientDrawable() + + val cornerRadiusPx = 64f + shape.cornerRadii = floatArrayOf( + cornerRadiusPx, cornerRadiusPx, cornerRadiusPx, cornerRadiusPx, + 0f, 0f, 0f, 0f) + + viewThemeUtils.platform.tintDrawable(requireContext(), shape, ColorRole.SURFACE_VARIANT) + + binding.root.background = shape + } private fun handleState( state: FileActionsViewModel.UiState @@ -127,11 +142,13 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { displayActions(state.actions) displayTitle(state.titleFile) } + is FileActionsViewModel.UiState.LoadedForMultipleFiles -> { setMultipleFilesThumbnail() displayActions(state.actions) displayTitle(state.fileCount) } + FileActionsViewModel.UiState.Loading -> {} FileActionsViewModel.UiState.Error -> { context?.let { From 89f7b10ba9692b4bbf632334c6bc2847fc071bc8 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 10:19:57 +0200 Subject: [PATCH 04/10] Remove unused resources Signed-off-by: alperozturk --- app/src/main/res/values/dims.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/dims.xml b/app/src/main/res/values/dims.xml index 6b3fe89a1e9c..2b389cefa22c 100644 --- a/app/src/main/res/values/dims.xml +++ b/app/src/main/res/values/dims.xml @@ -23,7 +23,6 @@ 40dp 56dp 80dp - 112dp 40dp 128dp 8dp From 19360c33979b8ae84c515be9ca86cfff0d996bf5 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 10:27:53 +0200 Subject: [PATCH 05/10] Use dp instead px Signed-off-by: alperozturk --- .../nextcloud/ui/fileactions/FileActionsBottomSheet.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index 7d21f32db3cc..f6f34bbb0a0a 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -24,7 +24,6 @@ package com.nextcloud.ui.fileactions import android.content.Context import android.content.res.ColorStateList -import android.graphics.Color import android.graphics.Typeface import android.graphics.drawable.Drawable import android.graphics.drawable.GradientDrawable @@ -61,6 +60,7 @@ import com.owncloud.android.lib.resources.files.model.FileLockType import com.owncloud.android.ui.activity.ComponentsGetter import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener +import com.owncloud.android.utils.DisplayUtils.convertDpToPixel import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject @@ -81,13 +81,13 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { @Inject lateinit var syncedFolderProvider: SyncedFolderProvider - lateinit var viewModel: FileActionsViewModel + private lateinit var viewModel: FileActionsViewModel private var _binding: FileActionsBottomSheetBinding? = null private val binding get() = _binding!! - lateinit var componentsGetter: ComponentsGetter + private lateinit var componentsGetter: ComponentsGetter private val thumbnailAsyncTasks = mutableListOf() @@ -119,9 +119,9 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { private fun applyTintedRoundedBackground() { val shape = GradientDrawable() - val cornerRadiusPx = 64f + val cornerRadius = convertDpToPixel(32f, requireContext()).toFloat() shape.cornerRadii = floatArrayOf( - cornerRadiusPx, cornerRadiusPx, cornerRadiusPx, cornerRadiusPx, + cornerRadius, cornerRadius, cornerRadius, cornerRadius, 0f, 0f, 0f, 0f) viewThemeUtils.platform.tintDrawable(requireContext(), shape, ColorRole.SURFACE_VARIANT) From 581fe26ad466582516e686bb36dce581e1b80788 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 11:32:03 +0200 Subject: [PATCH 06/10] Solve code analytics warnings Signed-off-by: alperozturk --- ...gFragmentIT_testFileActionsBottomSheet.png | Bin 19393 -> 21806 bytes .../ui/fileactions/FileActionsBottomSheet.kt | 1 + .../res/layout/file_actions_bottom_sheet.xml | 2 +- 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.dialog.DialogFragmentIT_testFileActionsBottomSheet.png index c6c31f47304ea08ae28a6b50ce13fe7e1235d64e..ab19cd1bc591e897d06b00ada20457ebde49cd3d 100644 GIT binary patch literal 21806 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 Pg{R>M3OLd19ewR@>UB1m literal 19393 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 - \ No newline at end of file + From 199150660ef073bfcbb782b4dfce842742a729b2 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 12:38:36 +0200 Subject: [PATCH 07/10] Remove GradientDrawable to make corner radius Signed-off-by: alperozturk --- .../ui/fileactions/FileActionsBottomSheet.kt | 21 +--- .../res/layout/file_actions_bottom_sheet.xml | 106 ++++++++++-------- 2 files changed, 61 insertions(+), 66 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index 93b75870d86e..44c5e9a293e7 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -45,6 +45,7 @@ import androidx.lifecycle.ViewModelProvider import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.google.android.material.shape.CornerFamily import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable @@ -111,25 +112,11 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED bottomSheetDialog.behavior.skipCollapsed = true - applyTintedRoundedBackground() + viewThemeUtils.platform.colorViewBackground(binding.bottomSheet, ColorRole.SURFACE_VARIANT) return binding.root } - // TODO It will be moved android-common library - private fun applyTintedRoundedBackground() { - val shape = GradientDrawable() - - val cornerRadius = convertDpToPixel(32f, requireContext()).toFloat() - shape.cornerRadii = floatArrayOf( - cornerRadius, cornerRadius, cornerRadius, cornerRadius, - 0f, 0f, 0f, 0f) - - viewThemeUtils.platform.tintDrawable(requireContext(), shape, ColorRole.SURFACE_VARIANT) - - binding.root.background = shape - } - private fun handleState( state: FileActionsViewModel.UiState ) { @@ -215,11 +202,11 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { private fun toggleLoadingOrContent(state: FileActionsViewModel.UiState) { if (state is FileActionsViewModel.UiState.Loading) { binding.bottomSheetLoading.isVisible = true - binding.bottomSheetContent.isVisible = false + binding.bottomSheetHeader.isVisible = false viewThemeUtils.platform.colorCircularProgressBar(binding.bottomSheetLoading, ColorRole.PRIMARY) } else { binding.bottomSheetLoading.isVisible = false - binding.bottomSheetContent.isVisible = true + binding.bottomSheetHeader.isVisible = true } } diff --git a/app/src/main/res/layout/file_actions_bottom_sheet.xml b/app/src/main/res/layout/file_actions_bottom_sheet.xml index 020456d399e6..830100982031 100644 --- a/app/src/main/res/layout/file_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/file_actions_bottom_sheet.xml @@ -19,67 +19,75 @@ ~ License along with this program. If not, see . ~ --> - + android:layout_height="match_parent"> - + android:layout_height="match_parent" + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> - + - + - + - + - + - + - + + + + + - + - + From 9ecfc1a9257034f2307ff4b393e02ba06cc7d7d0 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 12:48:42 +0200 Subject: [PATCH 08/10] Remove Coordinator Layout due to background color conflict Signed-off-by: alperozturk --- .../ui/fileactions/FileActionsBottomSheet.kt | 3 - .../res/layout/file_actions_bottom_sheet.xml | 97 +++++++++---------- 2 files changed, 45 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index 44c5e9a293e7..79787f43edd6 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -26,7 +26,6 @@ import android.content.Context import android.content.res.ColorStateList import android.graphics.Typeface import android.graphics.drawable.Drawable -import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.text.style.StyleSpan import android.view.LayoutInflater @@ -45,7 +44,6 @@ import androidx.lifecycle.ViewModelProvider import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import com.google.android.material.shape.CornerFamily import com.nextcloud.android.common.ui.theme.utils.ColorRole import com.nextcloud.client.account.CurrentAccountProvider import com.nextcloud.client.di.Injectable @@ -61,7 +59,6 @@ import com.owncloud.android.lib.resources.files.model.FileLockType import com.owncloud.android.ui.activity.ComponentsGetter import com.owncloud.android.utils.DisplayUtils import com.owncloud.android.utils.DisplayUtils.AvatarGenerationListener -import com.owncloud.android.utils.DisplayUtils.convertDpToPixel import com.owncloud.android.utils.theme.ViewThemeUtils import javax.inject.Inject diff --git a/app/src/main/res/layout/file_actions_bottom_sheet.xml b/app/src/main/res/layout/file_actions_bottom_sheet.xml index 830100982031..ee263e05f52e 100644 --- a/app/src/main/res/layout/file_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/file_actions_bottom_sheet.xml @@ -19,75 +19,68 @@ ~ License along with this program. If not, see . ~ --> - + android:layout_height="match_parent" + app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> - + android:layout_height="wrap_content" + android:orientation="vertical"> - + + + android:layout_gravity="center" + android:layout_marginBottom="@dimen/standard_margin" + android:indeterminate="true" + tools:visibility="gone" /> - + - - - - - - - - - + android:layout_marginStart="12dp" /> - + android:layout_marginStart="24dp" + android:ellipsize="middle" + android:lines="1" + android:textAppearance="@style/TextAppearance.Material3.HeadlineSmall" + tools:text="Test file name which is very very very very very long.pdf" /> - + + + - + From 803dcfe31eecae1601653af99044ff14edeff27e Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 18 Oct 2023 13:24:15 +0200 Subject: [PATCH 09/10] Remove Coordinator Layout due to background color conflict Signed-off-by: alperozturk --- .../res/layout/file_actions_bottom_sheet.xml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/main/res/layout/file_actions_bottom_sheet.xml b/app/src/main/res/layout/file_actions_bottom_sheet.xml index ee263e05f52e..9275cf5a511c 100644 --- a/app/src/main/res/layout/file_actions_bottom_sheet.xml +++ b/app/src/main/res/layout/file_actions_bottom_sheet.xml @@ -25,7 +25,8 @@ xmlns:tools="http://schemas.android.com/tools" style="@style/Widget.Material3.BottomSheet" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="bottom" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> - + android:layout_height="wrap_content"> + + + + From f165db128307a16c7e7a61b768fc31f1ccf14de3 Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 31 Oct 2023 16:37:31 +0100 Subject: [PATCH 10/10] change background to variant Signed-off-by: Andy Scherzinger --- .../java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt index 79787f43edd6..4ec9447f7ff2 100644 --- a/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt @@ -109,7 +109,7 @@ class FileActionsBottomSheet : BottomSheetDialogFragment(), Injectable { bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED bottomSheetDialog.behavior.skipCollapsed = true - viewThemeUtils.platform.colorViewBackground(binding.bottomSheet, ColorRole.SURFACE_VARIANT) + viewThemeUtils.platform.colorViewBackground(binding.bottomSheet, ColorRole.SURFACE) return binding.root }