From c10a0a7c6561963d1bf4ac69c2b0a38b24766b9a Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 30 Jul 2022 01:03:47 +0200 Subject: [PATCH] make filled buttons Material 3 Signed-off-by: Andy Scherzinger --- .../talk/activities/TakePhotoActivity.java | 2 +- .../talk/polls/ui/PollCreateDialogFragment.kt | 2 +- .../talk/polls/ui/PollResultsFragment.kt | 2 +- .../talk/polls/ui/PollVoteFragment.kt | 2 +- .../talk/ui/dialog/SetStatusDialogFragment.kt | 2 +- .../nextcloud/talk/ui/theme/ViewThemeUtils.kt | 51 +++++++++++++++---- 6 files changed, 47 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java index 08b972545..27d9487bb 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/TakePhotoActivity.java @@ -106,7 +106,7 @@ public class TakePhotoActivity extends AppCompatActivity { setContentView(binding.getRoot()); viewThemeUtils.themeFAB(binding.takePhoto); - viewThemeUtils.colorMaterialButtonBackground(binding.send); + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.send); cameraProviderFuture = ProcessCameraProvider.getInstance(this); cameraProviderFuture.addListener(() -> { diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt index 1167ad128..b71219994 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollCreateDialogFragment.kt @@ -108,7 +108,7 @@ class PollCreateDialogFragment : DialogFragment(), PollCreateOptionsItemListener viewThemeUtils.colorMaterialButtonText(binding.pollAddOptionsItem) // TODO button also needs a disabled state handling for colors viewThemeUtils.colorMaterialButtonText(binding.pollDismiss) - viewThemeUtils.colorMaterialButtonBackground(binding.pollCreateButton) + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.pollCreateButton) viewThemeUtils.themeCheckbox(binding.pollPrivatePollCheckbox) viewThemeUtils.themeCheckbox(binding.pollMultipleAnswersCheckbox) diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt index 0a9c3db12..dad178bb8 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollResultsFragment.kt @@ -98,7 +98,7 @@ class PollResultsFragment : Fragment(), PollResultItemClickListener { } private fun themeDialog() { - viewThemeUtils.colorMaterialButtonBackground(binding.editVoteButton) + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.editVoteButton) viewThemeUtils.colorMaterialButtonText(binding.pollResultsEndPollButton) } diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt index 5972334db..f48b464fe 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt @@ -126,7 +126,7 @@ class PollVoteFragment : Fragment() { } private fun themeDialog() { - viewThemeUtils.colorMaterialButtonBackground(binding.pollVoteSubmitButton) + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.pollVoteSubmitButton) viewThemeUtils.colorMaterialButtonText(binding.pollVoteEndPollButton) viewThemeUtils.colorMaterialButtonText(binding.pollVoteEditDismiss) } diff --git a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt index 6c6dfb9d6..7cee60d0b 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/dialog/SetStatusDialogFragment.kt @@ -242,7 +242,7 @@ class SetStatusDialogFragment : } viewThemeUtils.colorMaterialButtonText(binding.clearStatus) - viewThemeUtils.colorMaterialButtonBackground(binding.setStatus) + viewThemeUtils.colorMaterialButtonPrimaryFilled(binding.setStatus) binding.customStatusInput.highlightColor = resources.getColor(R.color.colorPrimary) diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt index e7e1dab5b..e58748cdb 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt @@ -63,6 +63,7 @@ import com.yarolegovich.mp.MaterialPreferenceCategory import com.yarolegovich.mp.MaterialSwitchPreference import scheme.Scheme import javax.inject.Inject +import kotlin.math.roundToInt @Suppress("TooManyFunctions") class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private val colorUtil: ColorUtil) { @@ -229,21 +230,42 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } - fun colorMaterialButtonBackground(button: MaterialButton) { - withElementColor(button) { color -> - button.setBackgroundColor(color) + fun colorMaterialButtonPrimaryFilled(button: MaterialButton) { + withScheme(button) { scheme -> + button.backgroundTintList = + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.primary, + calculateDisabledColor(scheme.primary, SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) - val disabledColor = ContextCompat.getColor(button.context, R.color.disabled_text) - val colorStateList = ColorStateList( + button.setTextColor( + ColorStateList( + arrayOf( + intArrayOf(android.R.attr.state_enabled), + intArrayOf(-android.R.attr.state_enabled) + ), + intArrayOf( + scheme.onPrimary, + calculateDisabledColor(scheme.onPrimary, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) + ) + ) + button.iconTint = ColorStateList( arrayOf( intArrayOf(android.R.attr.state_enabled), intArrayOf(-android.R.attr.state_enabled) ), - intArrayOf(theme.colorText, disabledColor) + intArrayOf( + scheme.onPrimary, + calculateDisabledColor(scheme.onPrimary, ON_SURFACE_OPACITY_BUTTON_DISABLED) + ) ) - - button.setTextColor(colorStateList) - button.iconTint = colorStateList } } @@ -435,6 +457,15 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private } } + private fun calculateDisabledColor(color: Int, opacity: Float): Int { + return Color.argb( + (Color.alpha(color) * opacity).roundToInt(), + Color.red(color), + Color.green(color), + Color.blue(color) + ) + } + companion object { private val THEMEABLE_PLACEHOLDER_IDS = listOf( R.drawable.ic_mimetype_package_x_generic, @@ -443,5 +474,7 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private private const val SWITCHCOMPAT_TRACK_ALPHA: Int = 77 private const val PROGRESS_LIGHTNESS_LIGHT_THEME: Float = 0.76f private const val PROGRESS_LIGHTNESS_DARK_THEME: Float = 0.28f + private const val SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.12f + private const val ON_SURFACE_OPACITY_BUTTON_DISABLED: Float = 0.38f } }