mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 12:09:45 +01:00
Make upload confirmation dialog a material one
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
ff2f58419e
commit
e57eb4442f
@ -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()
|
||||
|
@ -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,
|
||||
|
@ -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>
|
||||
|
@ -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">
|
||||
|
Loading…
Reference in New Issue
Block a user