mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-10 14:24:05 +01:00
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:
parent
ebcab60df5
commit
004f719490
@ -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...")
|
||||
|
@ -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
|
@ -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
|
@ -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" -> {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user