Browse Source

Make upload confirmation dialog a material one

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 2 years ago
parent
commit
e57eb4442f

+ 19 - 11
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -35,11 +35,9 @@ import android.content.Context
 import android.content.Intent
 import android.content.pm.PackageManager
 import android.content.res.AssetFileDescriptor
-import android.content.res.ColorStateList
 import android.content.res.Resources
 import android.database.Cursor
 import android.graphics.Bitmap
-import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
 import android.media.MediaPlayer
 import android.media.MediaRecorder
@@ -74,6 +72,7 @@ import android.widget.ImageView
 import android.widget.PopupMenu
 import android.widget.RelativeLayout
 import android.widget.Toast
+import androidx.appcompat.app.AlertDialog
 import androidx.appcompat.view.ContextThemeWrapper
 import androidx.core.content.ContextCompat
 import androidx.core.content.FileProvider
@@ -100,6 +99,7 @@ import com.facebook.drawee.backends.pipeline.Fresco
 import com.facebook.imagepipeline.datasource.BaseBitmapDataSubscriber
 import com.facebook.imagepipeline.image.CloseableImage
 import com.google.android.flexbox.FlexboxLayout
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.nextcloud.talk.BuildConfig
 import com.nextcloud.talk.R
 import com.nextcloud.talk.activities.CallActivity
@@ -189,7 +189,6 @@ import com.stfalcon.chatkit.messages.MessageHolders.ContentChecker
 import com.stfalcon.chatkit.messages.MessagesListAdapter
 import com.stfalcon.chatkit.utils.DateFormatter
 import com.vanniktech.emoji.EmojiPopup
-import com.yarolegovich.lovelydialog.LovelyStandardDialog
 import io.reactivex.Observer
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
@@ -1410,28 +1409,37 @@ class ChatController(args: Bundle) :
 
                     val confirmationQuestion = when (filesToUpload.size) {
                         1 -> context?.resources?.getString(R.string.nc_upload_confirm_send_single)?.let {
-                            String.format(it, title)
+                            String.format(it, title.trim())
                         }
                         else -> context?.resources?.getString(R.string.nc_upload_confirm_send_multiple)?.let {
-                            String.format(it, title)
+                            String.format(it, title.trim())
                         }
                     }
 
-                    LovelyStandardDialog(activity)
-                        .setPositiveButtonColorRes(R.color.nc_darkGreen)
+                    val materialAlertDialogBuilder = MaterialAlertDialogBuilder(binding.messageInputView.context)
                         .setTitle(confirmationQuestion)
                         .setMessage(filenamesWithLinebreaks.toString())
-                        .setPositiveButton(R.string.nc_yes) { v ->
-                            if (UploadAndShareFilesWorker.isStoragePermissionGranted(context!!)) {
+                        .setPositiveButton(R.string.nc_yes) { _, _ ->
+                            if (UploadAndShareFilesWorker.isStoragePermissionGranted(context)) {
                                 uploadFiles(filesToUpload, false)
                             } else {
                                 UploadAndShareFilesWorker.requestStoragePermission(this)
                             }
                         }
-                        .setNegativeButton(R.string.nc_no) {
+                        .setNegativeButton(R.string.nc_no) { _, _ ->
                             // unused atm
                         }
-                        .show()
+
+                    viewThemeUtils.colorMaterialAlertDialogBackground(
+                        binding.messageInputView.context,
+                        materialAlertDialogBuilder
+                    )
+
+                    val dialog = materialAlertDialogBuilder.show()
+
+                    val primary = viewThemeUtils.getScheme(binding.messageInputView.context).primary
+                    dialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(primary)
+                    dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(primary)
                 } catch (e: IllegalStateException) {
                     Toast.makeText(context, context?.resources?.getString(R.string.nc_upload_failed), Toast.LENGTH_LONG)
                         .show()

+ 38 - 0
app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt

@@ -33,6 +33,7 @@ import android.os.Build
 import android.view.MenuItem
 import android.view.View
 import android.view.ViewGroup
+import android.widget.Button
 import android.widget.CheckBox
 import android.widget.EditText
 import android.widget.ImageButton
@@ -60,8 +61,10 @@ import com.google.android.material.button.MaterialButton
 import com.google.android.material.card.MaterialCardView
 import com.google.android.material.chip.Chip
 import com.google.android.material.chip.ChipDrawable
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.floatingactionbutton.FloatingActionButton
 import com.google.android.material.progressindicator.LinearProgressIndicator
+import com.google.android.material.shape.MaterialShapeDrawable
 import com.google.android.material.tabs.TabLayout
 import com.google.android.material.textfield.TextInputLayout
 import com.google.android.material.textview.MaterialTextView
@@ -300,6 +303,20 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private
         }
     }
 
+    fun colorButtonText(button: Button) {
+        withScheme(button) { scheme ->
+            val disabledColor = ContextCompat.getColor(button.context, R.color.disabled_text)
+            val colorStateList = ColorStateList(
+                arrayOf(
+                    intArrayOf(android.R.attr.state_enabled),
+                    intArrayOf(-android.R.attr.state_enabled)
+                ),
+                intArrayOf(scheme.primary, disabledColor)
+            )
+            button.setTextColor(colorStateList)
+        }
+    }
+
     fun colorMaterialButtonPrimaryFilled(button: MaterialButton) {
         withScheme(button) { scheme ->
             button.backgroundTintList =
@@ -709,6 +726,27 @@ class ViewThemeUtils @Inject constructor(private val theme: ServerTheme, private
         }
     }
 
+    fun colorMaterialAlertDialogBackground(context: Context, dialogBuilder: MaterialAlertDialogBuilder) {
+        withScheme(dialogBuilder.context) { scheme ->
+            val materialShapeDrawable = MaterialShapeDrawable(
+                context,
+                null,
+                com.google.android.material.R.attr.alertDialogStyle,
+                com.google.android.material.R.style.MaterialAlertDialog_MaterialComponents
+            )
+            materialShapeDrawable.initializeElevationOverlay(context)
+            materialShapeDrawable.fillColor = ColorStateList.valueOf(scheme.surface)
+
+            // dialogCornerRadius first appeared in Android Pie
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                val radius = context.resources.getDimension(R.dimen.dialogBorderRadius)
+                materialShapeDrawable.setCornerSize(radius)
+            }
+
+            dialogBuilder.background = materialShapeDrawable
+        }
+    }
+
     companion object {
         private val THEMEABLE_PLACEHOLDER_IDS = listOf(
             R.drawable.ic_mimetype_package_x_generic,

+ 2 - 0
app/src/main/res/values/dimens.xml

@@ -74,6 +74,8 @@
     <dimen name="standard_eighth_margin">2dp</dimen>
     <dimen name="scope_padding">12dp</dimen>
 
+    <dimen name="dialogBorderRadius">28dp</dimen>
+
     <dimen name="default_checkbox_dialog_start_margin">18dp</dimen>
 
     <dimen name="mediatab_file_icon_size">50dp</dimen>

+ 1 - 0
app/src/main/res/values/styles.xml

@@ -42,6 +42,7 @@
         <item name="seekBarStyle">@style/Nextcloud.Material.Incoming.SeekBar</item>
         <item name="bottomSheetDialogTheme">@style/ThemeOverlay.App.BottomSheetDialog</item>
         <item name="popupMenuStyle">@style/ChatSendButtonMenu</item>
+        <item name="dialogCornerRadius">@dimen/dialogBorderRadius</item>
     </style>
 
     <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.Material3.Dark">