Эх сурвалжийг харах

Use model to pass data to dialog

use util to extract common rx requests

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 2 жил өмнө
parent
commit
004f719490

+ 14 - 59
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -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?")
-
-                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!!)
-                            }
-                        }
+                recordingAvailableNotification?.let {
+                    dialogBuilder.setTitle(it.title)
+                    dialogBuilder.setMessage(it.text)
+
+                    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...")

+ 0 - 16
app/src/main/java/com/nextcloud/talk/data/NotificationConfirmDialog.kt

@@ -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

+ 16 - 0
app/src/main/java/com/nextcloud/talk/data/NotificationDialogData.kt

@@ -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

+ 31 - 10
app/src/main/java/com/nextcloud/talk/jobs/NotificationWorker.kt

@@ -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" -> {

+ 60 - 0
app/src/main/java/com/nextcloud/talk/utils/rx/SendCommonRequestUtil.kt

@@ -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
+    }
+}