From 6089dc83efe10de3fa2addbeb20dc1d2f8d5ab9b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Sat, 6 Sep 2025 18:25:05 +0200 Subject: [PATCH] feat(dialog): Add themed minimal alert dialog Signed-off-by: Andy Scherzinger --- .../android/common/sample/MainActivity.kt | 40 +++++++++++++++++-- sample/src/main/res/layout/activity_main.xml | 13 +++++- sample/src/main/res/values/strings.xml | 6 +++ 3 files changed, 55 insertions(+), 4 deletions(-) diff --git a/sample/src/main/java/com/nextcloud/android/common/sample/MainActivity.kt b/sample/src/main/java/com/nextcloud/android/common/sample/MainActivity.kt index 0e141d53..d9e9c503 100644 --- a/sample/src/main/java/com/nextcloud/android/common/sample/MainActivity.kt +++ b/sample/src/main/java/com/nextcloud/android/common/sample/MainActivity.kt @@ -8,16 +8,20 @@ */ package com.nextcloud.android.common.sample -import android.graphics.Color import android.os.Bundle import android.widget.Toast +import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity +import androidx.core.graphics.toColorInt import androidx.lifecycle.ViewModelProvider +import com.google.android.material.button.MaterialButton +import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.nextcloud.android.common.sample.databinding.ActivityMainBinding import com.nextcloud.android.common.ui.color.ColorUtil import com.nextcloud.android.common.ui.theme.MaterialSchemes import com.nextcloud.android.common.ui.theme.utils.AndroidViewThemeUtils import com.nextcloud.android.common.ui.theme.utils.ColorRole +import com.nextcloud.android.common.ui.theme.utils.DialogViewThemeUtils import com.nextcloud.android.common.ui.theme.utils.MaterialViewThemeUtils class MainActivity : AppCompatActivity() { @@ -34,7 +38,7 @@ class MainActivity : AppCompatActivity() { // Color should be fetched from the server capabilities or another proper source binding.btn.setOnClickListener { _ -> try { - mainViewModel.color.value = Color.parseColor("#${binding.color.text}") + mainViewModel.color.value = "#${binding.color.text}".toColorInt() } catch (_: java.lang.IllegalArgumentException) { Toast .makeText( @@ -45,10 +49,39 @@ class MainActivity : AppCompatActivity() { } } + binding.dialogBtn.setOnClickListener { _ -> + // launch MaterialDialog + val builder = + MaterialAlertDialogBuilder(this) + .setPositiveButton(R.string.ok) { dialog, _ -> dialog.dismiss() } + .setNeutralButton(R.string.dismiss) { dialog, _ -> dialog.dismiss() } + .setNegativeButton(R.string.cancel) { dialog, _ -> dialog.dismiss() } + .setTitle(R.string.dialog_title) + .setMessage(getString(R.string.dialog_message)) + val schemes = MaterialSchemes.Companion.fromColor("#${binding.color.text}".toColorInt()) + val colorUtil = ColorUtil(this) + val dialogViewThemeUtils = DialogViewThemeUtils(schemes) + val material = MaterialViewThemeUtils(schemes, colorUtil) + + dialogViewThemeUtils.colorMaterialAlertDialogBackground(this, builder) + + val dialog = builder.create() + dialog.show() + + val positiveButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE) as MaterialButton + material.colorMaterialButtonPrimaryTonal(positiveButton) + + val neutralButton = dialog.getButton(AlertDialog.BUTTON_NEUTRAL) as MaterialButton + material.colorMaterialButtonPrimaryOutlined(neutralButton) + + val negativeButton = dialog.getButton(AlertDialog.BUTTON_NEGATIVE) as MaterialButton + material.colorMaterialButtonPrimaryBorderless(negativeButton) + } + setSupportActionBar(binding.toolbar) supportActionBar?.setDisplayHomeAsUpEnabled(true) mainViewModel.color.observe(this) { applyTheme(it) } - applyTheme(Color.parseColor("#${binding.color.text}")) + applyTheme("#${binding.color.text}".toColorInt()) } private fun applyTheme(color: Int) { @@ -76,5 +109,6 @@ class MainActivity : AppCompatActivity() { material.themeChipInput(binding.inputChip) material.themeChipSuggestion(binding.suggestionChip) material.themeChipFilter(binding.filterChip) + material.colorMaterialButtonPrimaryFilled(binding.dialogBtn) } } diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index aec5cf13..a438df46 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -99,7 +99,7 @@ android:id="@+id/color" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inputType="number" + android:inputType="text" android:maxLength="6" android:text="0082C9" tools:ignore="HardcodedText" /> @@ -117,6 +117,7 @@ app:layout_constraintStart_toEndOf="@+id/colorTil" /> + + diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 0f7ec4c5..1b957aa2 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -8,6 +8,12 @@ Sample UI Apply Theme + Open Dialog + Ok + Dismiss + Cancel + Example title + This is an example message Assist Chip Input Chip Suggestion Chip