mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-11 14:54:09 +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.callbacks.MentionAutocompleteCallback
|
||||||
import com.nextcloud.talk.controllers.base.BaseController
|
import com.nextcloud.talk.controllers.base.BaseController
|
||||||
import com.nextcloud.talk.controllers.util.viewBinding
|
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.data.user.model.User
|
||||||
import com.nextcloud.talk.databinding.ControllerChatBinding
|
import com.nextcloud.talk.databinding.ControllerChatBinding
|
||||||
import com.nextcloud.talk.events.UserMentionClickEvent
|
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.conversations.RoomsOverall
|
||||||
import com.nextcloud.talk.models.json.generic.GenericOverall
|
import com.nextcloud.talk.models.json.generic.GenericOverall
|
||||||
import com.nextcloud.talk.models.json.mention.Mention
|
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.polls.ui.PollCreateDialogFragment
|
||||||
import com.nextcloud.talk.presenters.MentionAutocompletePresenter
|
import com.nextcloud.talk.presenters.MentionAutocompletePresenter
|
||||||
import com.nextcloud.talk.remotefilebrowser.activities.RemoteFileBrowserActivity
|
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.ConductorRemapping
|
||||||
import com.nextcloud.talk.utils.remapchat.RemapChatModel
|
import com.nextcloud.talk.utils.remapchat.RemapChatModel
|
||||||
import com.nextcloud.talk.utils.rx.DisposableSet
|
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.singletons.ApplicationWideCurrentRoomHolder
|
||||||
import com.nextcloud.talk.utils.text.Spans
|
import com.nextcloud.talk.utils.text.Spans
|
||||||
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper
|
import com.nextcloud.talk.webrtc.WebSocketConnectionHelper
|
||||||
@ -268,7 +269,7 @@ class ChatController(args: Bundle) :
|
|||||||
private var lookingIntoFuture = false
|
private var lookingIntoFuture = false
|
||||||
var newMessagesCount = 0
|
var newMessagesCount = 0
|
||||||
var startCallFromNotification: Boolean? = null
|
var startCallFromNotification: Boolean? = null
|
||||||
private var recordingAvailableNotification: Notification? = null
|
private var recordingAvailableNotification: NotificationDialogData? = null
|
||||||
var startCallFromRoomSwitch: Boolean = false
|
var startCallFromRoomSwitch: Boolean = false
|
||||||
val roomId: String
|
val roomId: String
|
||||||
val voiceOnly: Boolean
|
val voiceOnly: Boolean
|
||||||
@ -936,20 +937,17 @@ class ChatController(args: Bundle) :
|
|||||||
if (recordingAvailableNotification != null) {
|
if (recordingAvailableNotification != null) {
|
||||||
binding?.root?.context?.let { context ->
|
binding?.root?.context?.let { context ->
|
||||||
val dialogBuilder = MaterialAlertDialogBuilder(context)
|
val dialogBuilder = MaterialAlertDialogBuilder(context)
|
||||||
dialogBuilder.setTitle(recordingAvailableNotification?.subject)
|
recordingAvailableNotification?.let {
|
||||||
dialogBuilder.setMessage("Do you want to share the recording to the chat?")
|
dialogBuilder.setTitle(it.title)
|
||||||
|
dialogBuilder.setMessage(it.text)
|
||||||
|
|
||||||
for (action in recordingAvailableNotification?.actions!!) {
|
val requestUtil = SendCommonRequestUtil(ncApi, credentials!!)
|
||||||
if (!action.label.isNullOrEmpty() && !action.link.isNullOrEmpty()) {
|
|
||||||
if (action.primary) {
|
dialogBuilder.setPositiveButton(it.primaryActionDescription) { _, _ ->
|
||||||
dialogBuilder.setPositiveButton(action.label!!) { dialog, which ->
|
requestUtil.sendRequest(it.primaryActionMethod, it.primaryActionUrl)
|
||||||
sendRequest(action.type!!, action.link!!)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
dialogBuilder.setNegativeButton(action.label!!) { dialog, which ->
|
|
||||||
sendRequest(action.type!!, action.link!!)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
dialogBuilder.setNegativeButton(it.secondaryActionDescription) { _, _ ->
|
||||||
|
requestUtil.sendRequest(it.secondaryActionMethod, it.secondaryActionUrl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -965,49 +963,6 @@ class ChatController(args: Bundle) :
|
|||||||
super.onViewBound(view)
|
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) {
|
private fun switchToRoom(token: String) {
|
||||||
if (CallActivity.active) {
|
if (CallActivity.active) {
|
||||||
Log.d(TAG, "CallActivity is running. Ignore to switch chat in ChatController...")
|
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
|
||||||
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
|
import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
|
||||||
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
import com.nextcloud.talk.arbitrarystorage.ArbitraryStorageManager
|
||||||
|
import com.nextcloud.talk.data.NotificationDialogData
|
||||||
import com.nextcloud.talk.models.SignatureVerification
|
import com.nextcloud.talk.models.SignatureVerification
|
||||||
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
|
import com.nextcloud.talk.models.json.chat.ChatUtils.Companion.getParsedMessage
|
||||||
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
import com.nextcloud.talk.models.json.conversations.RoomOverall
|
||||||
@ -320,14 +321,15 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
|
|||||||
|
|
||||||
override fun onNext(notificationOverall: NotificationOverall) {
|
override fun onNext(notificationOverall: NotificationOverall) {
|
||||||
val ncNotification = notificationOverall.ocs!!.notification
|
val ncNotification = notificationOverall.ocs!!.notification
|
||||||
|
if (ncNotification != null) {
|
||||||
enrichPushMessageByNcNotificationData(ncNotification)
|
enrichPushMessageByNcNotificationData(ncNotification)
|
||||||
val newIntent = enrichIntentByNcNotificationData(intent, ncNotification)
|
val newIntent = enrichIntentByNcNotificationData(intent, ncNotification)
|
||||||
showNotification(newIntent)
|
showNotification(newIntent)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onError(e: Throwable) {
|
override fun onError(e: Throwable) {
|
||||||
// unused atm
|
Log.e(TAG, "Failed to get notification", e)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onComplete() {
|
override fun onComplete() {
|
||||||
@ -338,13 +340,30 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
|
|||||||
|
|
||||||
private fun enrichIntentByNcNotificationData(
|
private fun enrichIntentByNcNotificationData(
|
||||||
intent: Intent,
|
intent: Intent,
|
||||||
ncNotification: com.nextcloud.talk.models.json.notifications.Notification?
|
ncNotification: com.nextcloud.talk.models.json.notifications.Notification
|
||||||
): Intent {
|
): Intent {
|
||||||
val newIntent = Intent(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()
|
val bundle = Bundle()
|
||||||
bundle.putParcelable(KEY_NOTIFICATION_RECORDING_NOTIFICATION, ncNotification)
|
bundle.putParcelable(KEY_NOTIFICATION_RECORDING_NOTIFICATION, notificationDialogData)
|
||||||
newIntent.putExtras(bundle)
|
newIntent.putExtras(bundle)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,13 +395,16 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
|
|||||||
if (callHashMap != null && callHashMap.size > 0 && callHashMap.containsKey("name")) {
|
if (callHashMap != null && callHashMap.size > 0 && callHashMap.containsKey("name")) {
|
||||||
if (subjectRichParameters.containsKey("reaction")) {
|
if (subjectRichParameters.containsKey("reaction")) {
|
||||||
pushMessage.subject = ""
|
pushMessage.subject = ""
|
||||||
pushMessage.text = ncNotification.subject
|
|
||||||
} else if (ncNotification.objectType == "chat") {
|
} else if (ncNotification.objectType == "chat") {
|
||||||
pushMessage.subject = callHashMap["name"]!!
|
pushMessage.subject = callHashMap["name"]!!
|
||||||
} else {
|
} else {
|
||||||
pushMessage.subject = ncNotification.subject!!
|
pushMessage.subject = ncNotification.subject!!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (subjectRichParameters.containsKey("reaction")) {
|
||||||
|
pushMessage.text = ncNotification.subject
|
||||||
|
}
|
||||||
|
|
||||||
if (callHashMap.containsKey("call-type")) {
|
if (callHashMap.containsKey("call-type")) {
|
||||||
conversationType = callHashMap["call-type"]
|
conversationType = callHashMap["call-type"]
|
||||||
}
|
}
|
||||||
@ -421,7 +443,6 @@ class NotificationWorker(context: Context, workerParams: WorkerParameters) : Wor
|
|||||||
|
|
||||||
when (conversationType) {
|
when (conversationType) {
|
||||||
"recording" -> {
|
"recording" -> {
|
||||||
pushMessage.subject = "new Recording available"
|
|
||||||
largeIcon = ContextCompat.getDrawable(context!!, R.drawable.ic_baseline_videocam_24)?.toBitmap()!!
|
largeIcon = ContextCompat.getDrawable(context!!, R.drawable.ic_baseline_videocam_24)?.toBitmap()!!
|
||||||
}
|
}
|
||||||
"one2one" -> {
|
"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