Quellcode durchsuchen

添加底部消息未读数量,支持群聊

fancy vor 5 Jahren
Ursprung
Commit
c971d394bd

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

@@ -14,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.O2ChatActivity
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.im.O2IM
 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.im.O2InstantMessageActivity
+import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.main.MainActivity
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.app.o2.organization.ContactPickerActivity
 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.CommonRecycleViewAdapter
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.adapter.CommonRecyclerViewHolder
 import net.zoneland.x.bpm.mobile.v1.zoneXBPM.core.component.adapter.CommonRecyclerViewHolder
@@ -54,6 +55,9 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
                             val name = person.substring(0, person.indexOf("@"))
                             val name = person.substring(0, person.indexOf("@"))
                             holder.setText(R.id.tv_o2_im_con_title, name)
                             holder.setText(R.id.tv_o2_im_con_title, name)
                         }
                         }
+                    }else if(O2IM.conversation_type_group == t.type) {
+                        holder.setText(R.id.tv_o2_im_con_title, t.title )
+                                .setImageViewResource(R.id.image_o2_im_con_avatar, R.mipmap.group_default)
                     }
                     }
                     val unread = holder.getView<TextView>(R.id.tv_o2_im_con_unread_number)
                     val unread = holder.getView<TextView>(R.id.tv_o2_im_con_unread_number)
                     if (t.unreadNumber > 0) {
                     if (t.unreadNumber > 0) {
@@ -127,6 +131,10 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
                 openCreateSingleConversation()
                 openCreateSingleConversation()
                 return true
                 return true
             }
             }
+            R.id.menu_tribe_create -> {
+                openCreateTribeConversation()
+                return true
+            }
         }
         }
         return super.onOptionsItemSelected(item)
         return super.onOptionsItemSelected(item)
     }
     }
@@ -135,16 +143,24 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
         if (list.isEmpty()) {
         if (list.isEmpty()) {
             tv_null_conversation.visible()
             tv_null_conversation.visible()
             ll_o2_im_message_list.gone()
             ll_o2_im_message_list.gone()
+            setUnreadNumber(0)
         } else {
         } else {
             tv_null_conversation.gone()
             tv_null_conversation.gone()
             ll_o2_im_message_list.visible()
             ll_o2_im_message_list.visible()
             cList.clear()
             cList.clear()
             cList.addAll(list)
             cList.addAll(list)
             adapter.notifyDataSetChanged()
             adapter.notifyDataSetChanged()
+            var allnumbers = 0
+            list.forEach { con ->
+                val number = con.unreadNumber ?: 0
+                allnumbers += number
+            }
+            setUnreadNumber(allnumbers)
         }
         }
         mPresenter.getMyInstantMessageList()
         mPresenter.getMyInstantMessageList()
     }
     }
 
 
+
     override fun myInstantMessageList(instantList: List<InstantMessage>) {
     override fun myInstantMessageList(instantList: List<InstantMessage>) {
          if (instantList.isNotEmpty()) {
          if (instantList.isNotEmpty()) {
              this.instantList.clear()
              this.instantList.clear()
@@ -183,6 +199,13 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
         }
         }
     }
     }
 
 
+
+    private fun setUnreadNumber(number: Int) {
+        if (activity is MainActivity) {
+            (activity as MainActivity).refreshUnreadNumber(number)
+        }
+    }
+
     private fun openCreateSingleConversation() {
     private fun openCreateSingleConversation() {
         ActivityResult.of(activity)
         ActivityResult.of(activity)
                 .className(ContactPickerActivity::class.java)
                 .className(ContactPickerActivity::class.java)
@@ -200,4 +223,20 @@ class O2IMConversationFragment : BaseMVPViewPagerFragment<O2IMConversationContra
     private fun createSingleConversation(user: String) {
     private fun createSingleConversation(user: String) {
         mPresenter.createConversation("single", arrayListOf(user))
         mPresenter.createConversation("single", arrayListOf(user))
     }
     }
+
+    private fun openCreateTribeConversation() {
+        ActivityResult.of(activity)
+                .className(ContactPickerActivity::class.java)
+                .params(ContactPickerActivity.startPickerBundle(pickerModes = arrayListOf(ContactPickerActivity.personPicker), multiple = true))
+                .greenChannel().forResult { _, data ->
+                    val result = data?.getParcelableExtra<ContactPickerResult>(ContactPickerActivity.CONTACT_PICKED_RESULT)
+                    if (result != null && result.users.isNotEmpty()) {
+                        val a = arrayListOf<String>()
+                        a.addAll(result.users.map { it.distinguishedName })
+                        mPresenter.createConversation("group",  a)
+                    }else {
+                        XLog.debug("没有选择人员!!!!")
+                    }
+                }
+    }
 }
 }

+ 41 - 8
o2android/app/src/main/java/net/zoneland/x/bpm/mobile/v1/zoneXBPM/app/o2/main/MainActivity.kt

@@ -415,17 +415,18 @@ class MainActivity : BaseMVPActivity<MainContract.View, MainContract.Presenter>(
                 .setRequiresCharging(true)//充电的时候才执行
                 .setRequiresCharging(true)//充电的时候才执行
                 .setPeriodic(24 * 60 * 60 * 1000)
                 .setPeriodic(24 * 60 * 60 * 1000)
                 .build()
                 .build()
-        val collectLogComponent = ComponentName(this, CollectLogJobService::class.java)
-        val jobCollectLog = JobInfo.Builder(O2.O2_COLLECT_LOG_JOB_ID, collectLogComponent)
-                .setPersisted(true)
-                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
-                .setPeriodic(1000 * 60 * 60 * 12)
-                .build()
+//        val collectLogComponent = ComponentName(this, CollectLogJobService::class.java)
+//        val jobCollectLog = JobInfo.Builder(O2.O2_COLLECT_LOG_JOB_ID, collectLogComponent)
+//                .setPersisted(true)
+//                .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
+//                .setPeriodic(1000 * 60 * 60 * 12)
+//                .build()
 
 
         val jobScheduler = applicationContext.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
         val jobScheduler = applicationContext.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
         val result = jobScheduler.schedule(jobInfo)
         val result = jobScheduler.schedule(jobInfo)
-        val result2 = jobScheduler.schedule(jobCollectLog)
-        XLog.info("jobScheduler result:$result, result2:$result2")
+//        val result2 = jobScheduler.schedule(jobCollectLog)
+//        XLog.info("jobScheduler result:$result, result2:$result2")
+        XLog.info("jobScheduler result:$result")
     }
     }
 
 
 
 
@@ -495,6 +496,37 @@ class MainActivity : BaseMVPActivity<MainContract.View, MainContract.Presenter>(
     /**************im 消息接收器***************/
     /**************im 消息接收器***************/
 
 
     var mReceiver: IMMessageReceiver? = null
     var mReceiver: IMMessageReceiver? = null
+    private var unreadMsgNumber = 0
+
+    fun refreshUnreadNumber(number: Int) {
+        unreadMsgNumber = number
+        when {
+            unreadMsgNumber in 1..99 -> {
+                circle_tv_icon_main_bottom_news.visible()
+                circle_tv_icon_main_bottom_news.setText("$unreadMsgNumber")
+            }
+            unreadMsgNumber >= 100 -> {
+                circle_tv_icon_main_bottom_news.visible()
+                circle_tv_icon_main_bottom_news.setText("99..")
+            }
+            else -> circle_tv_icon_main_bottom_news.gone()
+        }
+    }
+
+    fun addUnreadMsg() {
+        unreadMsgNumber += 1
+        when {
+            unreadMsgNumber in 1..99 -> {
+                circle_tv_icon_main_bottom_news.visible()
+                circle_tv_icon_main_bottom_news.setText("$unreadMsgNumber")
+            }
+            unreadMsgNumber >= 100 -> {
+                circle_tv_icon_main_bottom_news.visible()
+                circle_tv_icon_main_bottom_news.setText("99..")
+            }
+            else -> circle_tv_icon_main_bottom_news.gone()
+        }
+    }
 
 
     private fun registerBroadcast() {
     private fun registerBroadcast() {
         mReceiver = IMMessageReceiver()
         mReceiver = IMMessageReceiver()
@@ -507,6 +539,7 @@ class MainActivity : BaseMVPActivity<MainContract.View, MainContract.Presenter>(
         if (newsFragment is O2IMConversationFragment) {
         if (newsFragment is O2IMConversationFragment) {
             newsFragment.receiveMessageFromWebsocket(message)
             newsFragment.receiveMessageFromWebsocket(message)
         }
         }
+        addUnreadMsg()
     }
     }
 
 
     inner class IMMessageReceiver : BroadcastReceiver() {
     inner class IMMessageReceiver : BroadcastReceiver() {

+ 15 - 0
o2android/app/src/main/res/layout/fragment_main_bottom_bar_image.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_width="match_parent"
     android:layout_height="56dp"
     android:layout_height="56dp"
     android:orientation="vertical"
     android:orientation="vertical"
@@ -39,6 +40,20 @@
                 android:textSize="12sp"
                 android:textSize="12sp"
                 android:textColor="@color/z_color_text_primary"
                 android:textColor="@color/z_color_text_primary"
                 android:text="@string/tab_message"/>
                 android:text="@string/tab_message"/>
+            <net.zoneland.x.bpm.mobile.v1.zoneXBPM.widgets.CircleTextView
+                android:id="@+id/circle_tv_icon_main_bottom_news"
+                android:layout_width="16dp"
+                android:layout_height="16dp"
+                android:layout_marginStart="25dp"
+                app:c_height="16dp"
+                app:c_inColor="@color/z_color_primary"
+                app:c_text="5"
+                android:textAlignment="center"
+                app:c_textColor="@android:color/white"
+                app:c_textSize="@dimen/font_mini"
+                app:c_width="16dp"
+                android:visibility="gone"
+                />
         </RelativeLayout>
         </RelativeLayout>
         <RelativeLayout
         <RelativeLayout
             android:id="@+id/icon_main_bottom_contact"
             android:id="@+id/icon_main_bottom_contact"

BIN
o2android/app/src/main/res/mipmap-xhdpi/group_default.png