Use model to pass data to dialog

use util to extract common rx requests

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
This commit is contained in:
Marcel Hibbe 2023-02-23 18:10:36 +01:00
parent ebcab60df5
commit 004f719490
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
5 changed files with 120 additions and 84 deletions

View File

@ -126,6 +126,7 @@ import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.callbacks.MentionAutocompleteCallback
import com.nextcloud.talk.controllers.base.BaseController
import com.nextcloud.talk.controllers.util.viewBinding
import com.nextcloud.talk.data.NotificationDialogData
import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.databinding.ControllerChatBinding
import com.nextcloud.talk.events.UserMentionClickEvent
@ -146,7 +147,6 @@ import com.nextcloud.talk.models.json.conversations.RoomOverall
import com.nextcloud.talk.models.json.conversations.RoomsOverall
import com.nextcloud.talk.models.json.generic.GenericOverall
import com.nextcloud.talk.models.json.mention.Mention
import com.nextcloud.talk.models.json.notifications.Notification
import com.nextcloud.talk.polls.ui.PollCreateDialogFragment
import com.nextcloud.talk.presenters.MentionAutocompletePresenter
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
@ -185,6 +185,7 @@ import com.nextcloud.talk.utils.permissions.PlatformPermissionUtil
import com.nextcloud.talk.utils.remapchat.ConductorRemapping
import com.nextcloud.talk.utils.remapchat.RemapChatModel
import com.nextcloud.talk.utils.rx.DisposableSet
import com.nextcloud.talk.utils.rx.SendCommonRequestUtil
import com.nextcloud.talk.utils.singletons.ApplicationWideCurrentRoomHolder
import com.nextcloud.talk.utils.text.Spans
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper
@ -268,7 +269,7 @@ class ChatController(args: Bundle) :
private var lookingIntoFuture = false
var newMessagesCount = 0
var startCallFromNotification: Boolean? = null
private var recordingAvailableNotification: Notification? = null
private var recordingAvailableNotification: NotificationDialogData? = null
var startCallFromRoomSwitch: Boolean = false
val roomId: String
val voiceOnly: Boolean
@ -936,20 +937,17 @@ class ChatController(args: Bundle) :
if (recordingAvailableNotification != null) {
binding?.root?.context?.let { context ->
val dialogBuilder = MaterialAlertDialogBuilder(context)
dialogBuilder.setTitle(recordingAvailableNotification?.subject)
dialogBuilder.setMessage("Do you want to share the recording to the chat?")
recordingAvailableNotification?.let {
dialogBuilder.setTitle(it.title)
dialogBuilder.setMessage(it.text)
for (action in recordingAvailableNotification?.actions!!) {
if (!action.label.isNullOrEmpty() && !action.link.isNullOrEmpty()) {
if (action.primary) {
dialogBuilder.setPositiveButton(action.label!!) { dialog, which ->
sendRequest(action.type!!, action.link!!)
}
} else {
dialogBuilder.setNegativeButton(action.label!!) { dialog, which ->
sendRequest(action.type!!, action.link!!)
}
}
val requestUtil = SendCommonRequestUtil(ncApi, credentials!!)
dialogBuilder.setPositiveButton(it.primaryActionDescription) { _, _ ->
requestUtil.sendRequest(it.primaryActionMethod, it.primaryActionUrl)
}
dialogBuilder.setNegativeButton(it.secondaryActionDescription) { _, _ ->
requestUtil.sendRequest(it.secondaryActionMethod, it.secondaryActionUrl)
}
}
@ -965,49 +963,6 @@ class ChatController(args: Bundle) :
super.onViewBound(view)
}
private fun sendRequest(type: String, link: String) {
if (type == "POST") {
ncApi.sendCommonPostRequest(credentials, link)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<GenericOverall> {
override fun onSubscribe(d: Disposable) {
// unused atm
}
override fun onNext(genericOverall: GenericOverall) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
// unused atm
}
})
} else if (type == "DELETE") {
ncApi.sendCommonDeleteRequest(credentials, link)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<GenericOverall> {
override fun onSubscribe(d: Disposable) {
// unused atm
}
override fun onNext(genericOverall: GenericOverall) {
}
override fun onError(e: Throwable) {
}
override fun onComplete() {
// unused atm
}
})
}
Log.d(TAG, "type=" + type + " link=" + link)
}
private fun switchToRoom(token: String) {
if (CallActivity.active) {
Log.d(TAG, "CallActivity is running. Ignore to switch chat in ChatController...")

View File

@ -1,16 +0,0 @@
package com.nextcloud.talk.data
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class NotificationConfirmDialog(
var title: String? = "",
var question: String? = "",
var primaryActionDescription: String? = "",
var primaryActionUrl: String? = "",
var primaryActionMethod: String? = "",
var secondaryActionDescription: String? = "",
var secondaryActionUrl: String? = "",
var secondaryActionMethod: String? = ""
) : Parcelable

View File

@ -0,0 +1,16 @@
package com.nextcloud.talk.data
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
@Parcelize
data class NotificationDialogData(
var title: String = "",
var text: String = "",
var primaryActionDescription: String = "",
var primaryActionUrl: String = "",
var primaryActionMethod: String = "",
var secondaryActionDescription: String = "",
var secondaryActionUrl: String = "",
var secondaryActionMethod: String = ""
) : Parcelable

View File

@ -58,6 +58,7 @@ import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.application.NextcloudTalkApplication
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
import com.nextcloud.talk.data.NotificationDialogData
import com.nextcloud.talk.models.SignatureVerification
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
import com.nextcloud.talk.models.json.conversations.RoomOverall
@ -320,14 +321,15 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
override fun onNext(notificationOverall: NotificationOverall) {
val ncNotification = notificationOverall.ocs!!.notification
enrichPushMessageByNcNotificationData(ncNotification)
val newIntent = enrichIntentByNcNotificationData(intent, ncNotification)
showNotification(newIntent)
if (ncNotification != null) {
enrichPushMessageByNcNotificationData(ncNotification)
val newIntent = enrichIntentByNcNotificationData(intent, ncNotification)
showNotification(newIntent)
}
}
override fun onError(e: Throwable) {
// unused atm
Log.e(TAG, "Failed to get notification", e)
}
override fun onComplete() {
@ -338,13 +340,30 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
private fun enrichIntentByNcNotificationData(
intent: Intent,
ncNotification: com.nextcloud.talk.models.json.notifications.Notification?
ncNotification: com.nextcloud.talk.models.json.notifications.Notification
): Intent {
val newIntent = Intent(intent)
if ("recording" == ncNotification?.objectType) {
if ("recording" == ncNotification.objectType) {
val notificationDialogData = NotificationDialogData()
notificationDialogData.title = context?.getString(R.string.record_file_available).orEmpty()
notificationDialogData.text = ncNotification.subject.orEmpty()
for (action in ncNotification.actions!!) {
if (action.primary) {
notificationDialogData.primaryActionDescription = action.label.orEmpty()
notificationDialogData.primaryActionMethod = action.type.orEmpty()
notificationDialogData.primaryActionUrl = action.link.orEmpty()
} else {
notificationDialogData.secondaryActionDescription = action.label.orEmpty()
notificationDialogData.secondaryActionMethod = action.type.orEmpty()
notificationDialogData.secondaryActionUrl = action.link.orEmpty()
}
}
val bundle = Bundle()
bundle.putParcelable(KEY_NOTIFICATION_RECORDING_NOTIFICATION, ncNotification)
bundle.putParcelable(KEY_NOTIFICATION_RECORDING_NOTIFICATION, notificationDialogData)
newIntent.putExtras(bundle)
}
@ -376,13 +395,16 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
if (callHashMap != null && callHashMap.size > 0 && callHashMap.containsKey("name")) {
if (subjectRichParameters.containsKey("reaction")) {
pushMessage.subject = ""
pushMessage.text = ncNotification.subject
} else if (ncNotification.objectType == "chat") {
pushMessage.subject = callHashMap["name"]!!
} else {
pushMessage.subject = ncNotification.subject!!
}
if (subjectRichParameters.containsKey("reaction")) {
pushMessage.text = ncNotification.subject
}
if (callHashMap.containsKey("call-type")) {
conversationType = callHashMap["call-type"]
}
@ -421,7 +443,6 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
when (conversationType) {
"recording" -> {
pushMessage.subject = "new Recording available"
largeIcon = ContextCompat.getDrawable(context!!, R.drawable.ic_baseline_videocam_24)?.toBitmap()!!
}
"one2one" -> {

View File

@ -0,0 +1,60 @@
package com.nextcloud.talk.utils.rx
import android.util.Log
import com.nextcloud.talk.api.NcApi
import com.nextcloud.talk.models.json.generic.GenericOverall
import io.reactivex.Observer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
import io.reactivex.schedulers.Schedulers
class SendCommonRequestUtil(val ncApi: NcApi, val credentials: String) {
fun sendRequest(type: String, link: String) {
if (type == "POST") {
ncApi.sendCommonPostRequest(credentials, link)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<GenericOverall> {
override fun onSubscribe(d: Disposable) {
// unused atm
}
override fun onNext(genericOverall: GenericOverall) {
}
override fun onError(e: Throwable) {
Log.e(TAG, "Request failed", e)
}
override fun onComplete() {
// unused atm
}
})
} else if (type == "DELETE") {
ncApi.sendCommonDeleteRequest(credentials, link)
?.subscribeOn(Schedulers.io())
?.observeOn(AndroidSchedulers.mainThread())
?.subscribe(object : Observer<GenericOverall> {
override fun onSubscribe(d: Disposable) {
// unused atm
}
override fun onNext(genericOverall: GenericOverall) {
}
override fun onError(e: Throwable) {
Log.e(TAG, "Request failed", e)
}
override fun onComplete() {
// unused atm
}
})
}
}
companion object {
private val TAG = SendCommonRequestUtil::class.java.simpleName
}
}