mirror of
https://github.com/nextcloud/talk-android
synced 2025-06-20 03:59:35 +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.Intent
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.content.res.AssetFileDescriptor
|
import android.content.res.AssetFileDescriptor
|
||||||
import android.content.res.ColorStateList
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Color
|
|
||||||
import android.graphics.drawable.ColorDrawable
|
import android.graphics.drawable.ColorDrawable
|
||||||
import android.media.MediaPlayer
|
import android.media.MediaPlayer
|
||||||
import android.media.MediaRecorder
|
import android.media.MediaRecorder
|
||||||
@ -74,6 +72,7 @@ import android.widget.ImageView
|
|||||||
import android.widget.PopupMenu
|
import android.widget.PopupMenu
|
||||||
import android.widget.RelativeLayout
|
import android.widget.RelativeLayout
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.appcompat.view.ContextThemeWrapper
|
import androidx.appcompat.view.ContextThemeWrapper
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.FileProvider
|
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.datasource.BaseBitmapDataSubscriber
|
||||||
import com.facebook.imagepipeline.image.CloseableImage
|
import com.facebook.imagepipeline.image.CloseableImage
|
||||||
import com.google.android.flexbox.FlexboxLayout
|
import com.google.android.flexbox.FlexboxLayout
|
||||||
|
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||||
import com.nextcloud.talk.BuildConfig
|
import com.nextcloud.talk.BuildConfig
|
||||||
import com.nextcloud.talk.R
|
import com.nextcloud.talk.R
|
||||||
import com.nextcloud.talk.activities.CallActivity
|
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.messages.MessagesListAdapter
|
||||||
import com.stfalcon.chatkit.utils.DateFormatter
|
import com.stfalcon.chatkit.utils.DateFormatter
|
||||||
import com.vanniktech.emoji.EmojiPopup
|
import com.vanniktech.emoji.EmojiPopup
|
||||||
import com.yarolegovich.lovelydialog.LovelyStandardDialog
|
|
||||||
import io.reactivex.Observer
|
import io.reactivex.Observer
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
@ -1410,28 +1409,37 @@ class ChatController(args: Bundle) :
|
|||||||
|
|
||||||
val confirmationQuestion = when (filesToUpload.size) {
|
val confirmationQuestion = when (filesToUpload.size) {
|
||||||
1 -> context?.resources?.getString(R.string.nc_upload_confirm_send_single)?.let {
|
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 {
|
else -> context?.resources?.getString(R.string.nc_upload_confirm_send_multiple)?.let {
|
||||||
String.format(it, title)
|
String.format(it, title.trim())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LovelyStandardDialog(activity)
|
val materialAlertDialogBuilder = MaterialAlertDialogBuilder(binding.messageInputView.context)
|
||||||
.setPositiveButtonColorRes(R.color.nc_darkGreen)
|
|
||||||
.setTitle(confirmationQuestion)
|
.setTitle(confirmationQuestion)
|
||||||
.setMessage(filenamesWithLinebreaks.toString())
|
.setMessage(filenamesWithLinebreaks.toString())
|
||||||
.setPositiveButton(R.string.nc_yes) { v ->
|
.setPositiveButton(R.string.nc_yes) { _, _ ->
|
||||||
if (UploadAndShareFilesWorker.isStoragePermissionGranted(context!!)) {
|
if (UploadAndShareFilesWorker.isStoragePermissionGranted(context)) {
|
||||||
uploadFiles(filesToUpload, false)
|
uploadFiles(filesToUpload, false)
|
||||||
} else {
|
} else {
|
||||||
UploadAndShareFilesWorker.requestStoragePermission(this)
|
UploadAndShareFilesWorker.requestStoragePermission(this)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.setNegativeButton(R.string.nc_no) {
|
.setNegativeButton(R.string.nc_no) { _, _ ->
|
||||||
// unused atm
|
// 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) {
|
} catch (e: IllegalStateException) {
|
||||||
Toast.makeText(context, context?.resources?.getString(R.string.nc_upload_failed), Toast.LENGTH_LONG)
|
Toast.makeText(context, context?.resources?.getString(R.string.nc_upload_failed), Toast.LENGTH_LONG)
|
||||||
.show()
|
.show()
|
||||||
|
@ -33,6 +33,7 @@ import android.os.Build
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
|
import android.widget.Button
|
||||||
import android.widget.CheckBox
|
import android.widget.CheckBox
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import android.widget.ImageButton
|
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.card.MaterialCardView
|
||||||
import com.google.android.material.chip.Chip
|
import com.google.android.material.chip.Chip
|
||||||
import com.google.android.material.chip.ChipDrawable
|
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.floatingactionbutton.FloatingActionButton
|
||||||
import com.google.android.material.progressindicator.LinearProgressIndicator
|
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.tabs.TabLayout
|
||||||
import com.google.android.material.textfield.TextInputLayout
|
import com.google.android.material.textfield.TextInputLayout
|
||||||
import com.google.android.material.textview.MaterialTextView
|
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) {
|
fun colorMaterialButtonPrimaryFilled(button: MaterialButton) {
|
||||||
withScheme(button) { scheme ->
|
withScheme(button) { scheme ->
|
||||||
button.backgroundTintList =
|
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 {
|
companion object {
|
||||||
private val THEMEABLE_PLACEHOLDER_IDS = listOf(
|
private val THEMEABLE_PLACEHOLDER_IDS = listOf(
|
||||||
R.drawable.ic_mimetype_package_x_generic,
|
R.drawable.ic_mimetype_package_x_generic,
|
||||||
|
@ -74,6 +74,8 @@
|
|||||||
<dimen name="standard_eighth_margin">2dp</dimen>
|
<dimen name="standard_eighth_margin">2dp</dimen>
|
||||||
<dimen name="scope_padding">12dp</dimen>
|
<dimen name="scope_padding">12dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="dialogBorderRadius">28dp</dimen>
|
||||||
|
|
||||||
<dimen name="default_checkbox_dialog_start_margin">18dp</dimen>
|
<dimen name="default_checkbox_dialog_start_margin">18dp</dimen>
|
||||||
|
|
||||||
<dimen name="mediatab_file_icon_size">50dp</dimen>
|
<dimen name="mediatab_file_icon_size">50dp</dimen>
|
||||||
|
@ -42,6 +42,7 @@
|
|||||||
<item name="seekBarStyle">@style/Nextcloud.Material.Incoming.SeekBar</item>
|
<item name="seekBarStyle">@style/Nextcloud.Material.Incoming.SeekBar</item>
|
||||||
<item name="bottomSheetDialogTheme">@style/ThemeOverlay.App.BottomSheetDialog</item>
|
<item name="bottomSheetDialogTheme">@style/ThemeOverlay.App.BottomSheetDialog</item>
|
||||||
<item name="popupMenuStyle">@style/ChatSendButtonMenu</item>
|
<item name="popupMenuStyle">@style/ChatSendButtonMenu</item>
|
||||||
|
<item name="dialogCornerRadius">@dimen/dialogBorderRadius</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.Material3.Dark">
|
<style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.Material3.Dark">
|
||||||
|
Loading…
Reference in New Issue
Block a user