Merge pull request #2316 from nextcloud/chore/noid/lovelyDialogs2

Replace lovelyDialogs with Material 3
This commit is contained in:
Álvaro Brey 2022-08-19 15:38:30 +02:00 committed by GitHub
commit 8c76e29900
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 65 deletions

View File

@ -258,7 +258,6 @@ dependencies {
implementation 'eu.davidea:flexible-adapter:5.1.0' implementation 'eu.davidea:flexible-adapter:5.1.0'
implementation 'eu.davidea:flexible-adapter-ui:1.0.0' implementation 'eu.davidea:flexible-adapter-ui:1.0.0'
implementation fileTree(downloadWebRtc.libFile.path) implementation fileTree(downloadWebRtc.libFile.path)
implementation 'com.yarolegovich:lovely-dialog:1.1.1'
implementation 'com.yarolegovich:mp:1.1.6' implementation 'com.yarolegovich:mp:1.1.6'
implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0' implementation 'me.zhanghai.android.effortlesspermissions:library:1.1.0'
implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-lang3:3.12.0'

View File

@ -38,6 +38,7 @@ import android.util.Log
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.SwitchCompat import androidx.appcompat.widget.SwitchCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.work.Data import androidx.work.Data
@ -51,6 +52,7 @@ import com.afollestad.materialdialogs.datetime.dateTimePicker
import com.bluelinelabs.conductor.RouterTransaction import com.bluelinelabs.conductor.RouterTransaction
import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler import com.bluelinelabs.conductor.changehandler.HorizontalChangeHandler
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.nextcloud.talk.R import com.nextcloud.talk.R
import com.nextcloud.talk.adapters.items.ParticipantItem import com.nextcloud.talk.adapters.items.ParticipantItem
import com.nextcloud.talk.api.NcApi import com.nextcloud.talk.api.NcApi
@ -81,8 +83,6 @@ import com.nextcloud.talk.utils.DisplayUtils
import com.nextcloud.talk.utils.bundle.BundleKeys import com.nextcloud.talk.utils.bundle.BundleKeys
import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew import com.nextcloud.talk.utils.database.user.CapabilitiesUtilNew
import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule import com.nextcloud.talk.utils.preferences.preferencestorage.DatabaseStorageModule
import com.yarolegovich.lovelydialog.LovelySaveStateHandler
import com.yarolegovich.lovelydialog.LovelyStandardDialog
import eu.davidea.flexibleadapter.FlexibleAdapter import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import io.reactivex.Observer import io.reactivex.Observer
@ -126,8 +126,6 @@ class ConversationInfoController(args: Bundle) :
private var adapter: FlexibleAdapter<ParticipantItem>? = null private var adapter: FlexibleAdapter<ParticipantItem>? = null
private var userItems: MutableList<ParticipantItem> = ArrayList() private var userItems: MutableList<ParticipantItem> = ArrayList()
private var saveStateHandler: LovelySaveStateHandler? = null
private val workerData: Data? private val workerData: Data?
get() { get() {
if (!TextUtils.isEmpty(conversationToken) && conversationUser != null) { if (!TextUtils.isEmpty(conversationToken) && conversationUser != null) {
@ -170,9 +168,9 @@ class ConversationInfoController(args: Bundle) :
binding.notificationSettingsView.notificationSettings.setStorageModule(databaseStorageModule) binding.notificationSettingsView.notificationSettings.setStorageModule(databaseStorageModule)
binding.webinarInfoView.webinarSettings.setStorageModule(databaseStorageModule) binding.webinarInfoView.webinarSettings.setStorageModule(databaseStorageModule)
binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog(null) } binding.deleteConversationAction.setOnClickListener { showDeleteConversationDialog() }
binding.leaveConversationAction.setOnClickListener { leaveConversation() } binding.leaveConversationAction.setOnClickListener { leaveConversation() }
binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog(null) } binding.clearConversationHistory.setOnClickListener { showClearHistoryDialog() }
binding.addParticipantsAction.setOnClickListener { addParticipants() } binding.addParticipantsAction.setOnClickListener { addParticipants() }
if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "rich-object-list-media")) { if (CapabilitiesUtilNew.hasSpreedFeatureCapability(conversationUser, "rich-object-list-media")) {
@ -226,10 +224,6 @@ class ConversationInfoController(args: Bundle) :
override fun onViewBound(view: View) { override fun onViewBound(view: View) {
super.onViewBound(view) super.onViewBound(view)
if (saveStateHandler == null) {
saveStateHandler = LovelySaveStateHandler()
}
binding.addParticipantsAction.visibility = View.GONE binding.addParticipantsAction.visibility = View.GONE
viewThemeUtils.colorCircularProgressBar(binding.progressBar) viewThemeUtils.colorCircularProgressBar(binding.progressBar)
@ -357,16 +351,6 @@ class ConversationInfoController(args: Bundle) :
}) })
} }
private fun showLovelyDialog(dialogId: Int, savedInstanceState: Bundle) {
when (dialogId) {
ID_DELETE_CONVERSATION_DIALOG -> showDeleteConversationDialog(savedInstanceState)
ID_CLEAR_CHAT_DIALOG -> showClearHistoryDialog(savedInstanceState)
else -> {
// unused atm
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
fun onMessageEvent(eventStatus: EventStatus) { fun onMessageEvent(eventStatus: EventStatus) {
getListOfParticipants() getListOfParticipants()
@ -377,38 +361,24 @@ class ConversationInfoController(args: Bundle) :
eventBus.unregister(this) eventBus.unregister(this)
} }
private fun showDeleteConversationDialog(savedInstanceState: Bundle?) { private fun showDeleteConversationDialog() {
if (activity != null) { if (activity != null) {
LovelyStandardDialog(activity, LovelyStandardDialog.ButtonLayout.HORIZONTAL) val dialogBuilder = MaterialAlertDialogBuilder(binding.conversationInfoName.context)
.setTopColorRes(R.color.nc_darkRed) .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp))
.setIcon(
DisplayUtils.getTintedDrawable(
context.resources,
R.drawable.ic_delete_black_24dp, R.color.bg_default
)
)
.setPositiveButtonColor(context.resources.getColor(R.color.nc_darkRed))
.setTitle(R.string.nc_delete_call) .setTitle(R.string.nc_delete_call)
.setMessage(R.string.nc_delete_conversation_more) .setMessage(R.string.nc_delete_conversation_more)
.setPositiveButton(R.string.nc_delete) { deleteConversation() } .setPositiveButton(R.string.nc_delete) { _, _ ->
.setNegativeButton(R.string.nc_cancel, null) deleteConversation()
.setInstanceStateHandler(ID_DELETE_CONVERSATION_DIALOG, saveStateHandler!!) }
.setSavedInstanceState(savedInstanceState) .setNegativeButton(R.string.nc_cancel) { _, _ ->
.show() // unused atm
} }
} viewThemeUtils.colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder)
val dialog = dialogBuilder.show()
override fun onSaveViewState(view: View, outState: Bundle) { viewThemeUtils.colorTextButtons(
saveStateHandler!!.saveInstanceState(outState) dialog.getButton(AlertDialog.BUTTON_POSITIVE),
super.onSaveViewState(view, outState) dialog.getButton(AlertDialog.BUTTON_NEGATIVE)
} )
override fun onRestoreViewState(view: View, savedViewState: Bundle) {
super.onRestoreViewState(view, savedViewState)
if (LovelySaveStateHandler.wasDialogOnScreen(savedViewState)) {
// Dialog won't be restarted automatically, so we need to call this method.
// Each dialog knows how to restore its state
showLovelyDialog(LovelySaveStateHandler.getSavedDialogId(savedViewState), savedViewState)
} }
} }
@ -562,24 +532,24 @@ class ConversationInfoController(args: Bundle) :
} }
} }
private fun showClearHistoryDialog(savedInstanceState: Bundle?) { private fun showClearHistoryDialog() {
if (activity != null) { if (activity != null) {
LovelyStandardDialog(activity, LovelyStandardDialog.ButtonLayout.HORIZONTAL) val dialogBuilder = MaterialAlertDialogBuilder(binding.conversationInfoName.context)
.setTopColorRes(R.color.nc_darkRed) .setIcon(viewThemeUtils.colorMaterialAlertDialogIcon(context, R.drawable.ic_delete_black_24dp))
.setIcon(
DisplayUtils.getTintedDrawable(
context.resources,
R.drawable.ic_delete_black_24dp, R.color.bg_default
)
)
.setPositiveButtonColor(context.resources.getColor(R.color.nc_darkRed))
.setTitle(R.string.nc_clear_history) .setTitle(R.string.nc_clear_history)
.setMessage(R.string.nc_clear_history_warning) .setMessage(R.string.nc_clear_history_warning)
.setPositiveButton(R.string.nc_delete_all) { clearHistory() } .setPositiveButton(R.string.nc_delete_all) { _, _ ->
.setNegativeButton(R.string.nc_cancel, null) clearHistory()
.setInstanceStateHandler(ID_CLEAR_CHAT_DIALOG, saveStateHandler!!) }
.setSavedInstanceState(savedInstanceState) .setNegativeButton(R.string.nc_cancel) { _, _ ->
.show() // unused atm
}
viewThemeUtils.colorMaterialAlertDialogBackground(binding.conversationInfoName.context, dialogBuilder)
val dialog = dialogBuilder.show()
viewThemeUtils.colorTextButtons(
dialog.getButton(AlertDialog.BUTTON_POSITIVE),
dialog.getButton(AlertDialog.BUTTON_NEGATIVE)
)
} }
} }