fancy hace 5 años
padre
commit
7572ad31f2

+ 3 - 0
o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/fm/O2IMConversationContract.kt

@@ -9,10 +9,13 @@ object O2IMConversationContract {
     interface View: BaseView {
         fun myConversationList(list: List<IMConversationInfo>)
         fun myInstantMessageList(instantList: List<InstantMessage>)
+        fun createConvSuccess(conv: IMConversationInfo)
+        fun createConvFail(message: String)
     }
 
     interface Presenter: BasePresenter<View> {
         fun getMyConversationList()
         fun getMyInstantMessageList()
+        fun createConversation(type: String, users: ArrayList<String>)
     }
 }

+ 46 - 1
o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/fm/O2IMConversationFragment.kt

@@ -3,8 +3,10 @@ package net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.fm
 import android.support.v7.widget.LinearLayoutManager
 import android.view.Menu
 import android.view.MenuInflater
+import android.view.MenuItem
 import android.widget.ImageView
 import android.widget.TextView
+import com.wugang.activityresult.library.ActivityResult
 import kotlinx.android.synthetic.main.fragment_o2_im_conversation.*
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.O2SDKManager
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.R
@@ -12,6 +14,7 @@ import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.base.BaseMVPViewPagerFragment
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.O2ChatActivity
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.O2IM
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.O2InstantMessageActivity
+import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.organization.ContactPickerActivity
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.adapter.CommonRecycleViewAdapter
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.adapter.CommonRecyclerViewHolder
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.api.APIAddressHelper
@@ -19,8 +22,10 @@ import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.InstantMessage
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.im.IMConversationInfo
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.im.IMMessage
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.im.IMMessageBody
+import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.vo.ContactPickerResult
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.DateHelper
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XLog
+import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XToast
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.gone
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.visible
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.imageloader.O2ImageLoaderManager
@@ -96,7 +101,7 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
         rv_o2_im_conversation.layoutManager = LinearLayoutManager(activity, LinearLayoutManager.VERTICAL, false)
         rv_o2_im_conversation.adapter = adapter
         adapter.setOnItemClickListener { _, position ->
-            O2ChatActivity.startChat(activity, cList[position].id)
+            O2ChatActivity.startChat(activity, cList[position].id!!)
         }
         ll_o2_instant_message.setOnClickListener {
             if (instantList.isNotEmpty()) {
@@ -116,6 +121,16 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
         super.onCreateOptionsMenu(menu, inflater)
     }
 
+    override fun onOptionsItemSelected(item: MenuItem?): Boolean {
+        when(item?.itemId) {
+            R.id.menu_single_create -> {
+                openCreateSingleConversation()
+                return true
+            }
+        }
+        return super.onOptionsItemSelected(item)
+    }
+
     override fun myConversationList(list: List<IMConversationInfo>) {
         if (list.isEmpty()) {
             tv_null_conversation.visible()
@@ -144,6 +159,18 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
          }
     }
 
+    override fun createConvSuccess(conv: IMConversationInfo) {
+        if (!cList.any { it.id == conv.id }) {
+            cList.add(conv)
+            adapter.notifyDataSetChanged()
+        }
+        O2ChatActivity.startChat(activity, conv.id!!)
+    }
+
+    override fun createConvFail(message: String) {
+        XToast.toastShort(activity, message)
+    }
+
     fun receiveMessageFromWebsocket(message: IMMessage) {
         for ((index, imConversationInfo) in cList.withIndex()) {
             if (imConversationInfo.id == message.conversationId) {
@@ -155,4 +182,22 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
             }
         }
     }
+
+    private fun openCreateSingleConversation() {
+        ActivityResult.of(activity)
+                .className(ContactPickerActivity::class.java)
+                .params(ContactPickerActivity.startPickerBundle(pickerModes = arrayListOf(ContactPickerActivity.personPicker), multiple = false))
+                .greenChannel().forResult { _, data ->
+                    val result = data?.getParcelableExtra<ContactPickerResult>(ContactPickerActivity.CONTACT_PICKED_RESULT)
+                    if (result != null && result.users.isNotEmpty()) {
+                        createSingleConversation(result.users[0].distinguishedName)
+                    }else {
+                        XLog.debug("没有选择人员!!!!")
+                    }
+                }
+    }
+
+    private fun createSingleConversation(user: String) {
+        mPresenter.createConversation("single", arrayListOf(user))
+    }
 }

+ 25 - 0
o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/im/fm/O2IMConversationPresenter.kt

@@ -1,6 +1,7 @@
 package net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.fm
 
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.base.BasePresenterImpl
+import net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.im.IMConversationInfo
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.XLog
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.utils.extension.o2Subscribe
 import rx.Observable
@@ -10,6 +11,30 @@ import rx.schedulers.Schedulers
 class O2IMConversationPresenter : BasePresenterImpl<O2IMConversationContract.View>(), O2IMConversationContract.Presenter {
 
 
+    override fun createConversation(type: String, users: ArrayList<String>) {
+        val service = getMessageCommunicateService(mView?.getContext())
+        if (service != null) {
+            val info = IMConversationInfo()
+            info.type = type
+            info.personList = users
+            service.createConversation(info)
+                    .subscribeOn(Schedulers.io())
+                    .observeOn(AndroidSchedulers.mainThread())
+                    .o2Subscribe {
+                        onNext {
+                            if (it.data!= null) {
+                                mView?.createConvSuccess(it.data)
+                            }else{
+                                mView?.createConvFail("创建会话失败!")
+                            }
+                        }
+                        onError { e, _ ->
+                            XLog.error("", e)
+                            mView?.createConvFail("创建会话失败!${e?.message}")
+                        }
+                    }
+        }
+    }
 
     override fun getMyInstantMessageList() {
         val service = getMessageCommunicateService(mView?.getContext())

+ 3 - 3
o2android/o2_auth_sdk/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/model/bo/api/im/IMConversationInfo.kt

@@ -2,12 +2,12 @@ package net.zoneland.x.bpm.mobile.v1.zoneXBPM.model.bo.api.im
 
 
 data class IMConversationInfo(
-        var id: String = "",
+        var id: String? = null,
         var type: String = "",
         var personList: ArrayList<String> = ArrayList(),
         var title: String = "",
-        var adminPerson: String = "",
-        var note: String = "",
+        var adminPerson: String? = null,
+        var note: String? = null,
         var unreadNumber: Int = 0,
         var isTop: Boolean = false,
         var createTime : String? = null,