瀏覽代碼

feat: IM顶部增加"Go Voice"

DoggyZhang 1 月之前
父節點
當前提交
3e32ccb375
共有 19 個文件被更改,包括 111 次插入24 次删除
  1. 4 0
      app/src/main/java/com/adealink/weparty/module/order/data/OrderDetailInfo.kt
  2. 0 0
      app/src/main/res/drawable/common_bottom_gray_mask_bg.xml
  3. 15 6
      module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/OrderTopBarFragment.kt
  4. 5 0
      module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/listener/IGoVoiceCallback.kt
  5. 11 0
      module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/widget/PlaymateOrderTopBarView.kt
  6. 16 1
      module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/widget/UserOrderTopBarView.kt
  7. 4 0
      module/im/src/main/java/com/adealink/weparty/im/session/comp/viewmodel/SessionOrderTopViewModel.kt
  8. 17 1
      module/im/src/main/res/layout/view_session_order_top_bar.xml
  9. 17 1
      module/im/src/main/res/layout/view_session_playmate_order_top_bar.xml
  10. 1 0
      module/im/src/main/res/values-in/strings.xml
  11. 1 0
      module/im/src/main/res/values-zh/strings.xml
  12. 1 0
      module/im/src/main/res/values/strings.xml
  13. 1 1
      module/order/src/main/res/layout/activity_order_detail.xml
  14. 9 0
      module/order/src/main/res/layout/activity_order_playmate_refund.xml
  15. 0 1
      module/playmate/src/main/res/layout/layout_find_partner_option_item.xml
  16. 7 9
      module/playmate/src/main/res/layout/layout_playmate_activity_home_list_top_item.xml
  17. 0 2
      module/profile/src/main/java/com/adealink/weparty/profile/edit/dialog/EditIntroDialog.kt
  18. 1 1
      module/profile/src/main/res/layout/dialog_edit_intro.xml
  19. 1 1
      module/profile/src/main/res/layout/dialog_edit_nickname.xml

+ 4 - 0
app/src/main/java/com/adealink/weparty/module/order/data/OrderDetailInfo.kt

@@ -183,6 +183,10 @@ data class OrderDetailInfo(
                 || status == OrderStatus.USER_CANCEL.status
     }
 
+    fun isInService(): Boolean {
+        return status == OrderStatus.PLAYMATE_IN_SERVICE.status
+    }
+
     fun hasEvaluate(): Boolean {
         return star != 0f
     }

+ 0 - 0
module/order/src/main/res/drawable/order_detail_bottom_mask_bg.xml → app/src/main/res/drawable/common_bottom_gray_mask_bg.xml


+ 15 - 6
module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/OrderTopBarFragment.kt

@@ -1,10 +1,10 @@
 package com.adealink.weparty.im.session.comp.fragment
 
-import android.graphics.Color
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.ViewGroup
 import android.widget.FrameLayout
+import androidx.core.graphics.toColorInt
 import androidx.viewpager.widget.ViewPager
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
@@ -24,9 +24,11 @@ import com.adealink.weparty.im.session.comp.fragment.data.OrderTopItemData
 import com.adealink.weparty.im.session.comp.fragment.data.SkillTopItemData
 import com.adealink.weparty.im.session.comp.fragment.data.TopBarData
 import com.adealink.weparty.im.session.comp.fragment.data.ViewType
-import com.adealink.weparty.im.session.comp.fragment.widget.OrderTopBarView
+import com.adealink.weparty.im.session.comp.fragment.listener.IGoVoiceCallback
 import com.adealink.weparty.im.session.comp.fragment.widget.SkillTopBarView
+import com.adealink.weparty.im.session.comp.fragment.widget.UserOrderTopBarView
 import com.adealink.weparty.im.session.comp.viewmodel.SessionOrderTopViewModel
+import com.adealink.weparty.module.call.CallModule
 import com.adealink.weparty.module.im.IM
 import com.adealink.weparty.module.order.Order
 import com.adealink.weparty.module.order.OrderModule
@@ -34,9 +36,9 @@ import com.adealink.weparty.module.order.data.OrderDetailInfo
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserPlaymateSkill
 import com.adealink.weparty.viewmodel.parentFragmentViewModels
-import androidx.core.graphics.toColorInt
 
-class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_top_bar) {
+class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_top_bar),
+    IGoVoiceCallback {
 
     private val binding by viewBinding(FragmentSessionUserOrderTopBarBinding::bind)
 
@@ -78,6 +80,7 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
             setNormalColor("#9FCD9B".toColorInt())
             setSelectedColor("#3FBFBD".toColorInt())
         }
+        binding.vPendingOrder.setGoVoiceCallback(this@OrderTopBarFragment)
     }
 
 
@@ -228,8 +231,9 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
                 }
 
                 ViewType.USER_ORDER -> {
-                    val view = OrderTopBarView(context)
+                    val view = UserOrderTopBarView(context)
                     view.id = R.id.id_session_order_top_bar_user_order
+                    view.setGoVoiceCallback(this@OrderTopBarFragment)
                     parent.addView(
                         view, FrameLayout.LayoutParams(
                             FrameLayout.LayoutParams.MATCH_PARENT,
@@ -254,7 +258,7 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
                 }
 
                 ViewType.USER_ORDER -> {
-                    holder.itemView.findViewById<OrderTopBarView>(R.id.id_session_order_top_bar_user_order)
+                    holder.itemView.findViewById<UserOrderTopBarView>(R.id.id_session_order_top_bar_user_order)
                         .apply {
                             setOrder((data as OrderTopItemData).data)
                             onClick {
@@ -289,4 +293,9 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
         Router.build(activity, Order.List.PATH)
             .start()
     }
+
+    override fun goVoice() {
+        val chatInfo = orderTopViewModel.getChatInfo() ?: return
+        CallModule.call(chatInfo.id)
+    }
 }

+ 5 - 0
module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/listener/IGoVoiceCallback.kt

@@ -0,0 +1,5 @@
+package com.adealink.weparty.im.session.comp.fragment.listener
+
+interface IGoVoiceCallback {
+    fun goVoice()
+}

+ 11 - 0
module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/widget/PlaymateOrderTopBarView.kt

@@ -11,6 +11,7 @@ import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.im.R
 import com.adealink.weparty.im.databinding.ViewSessionPlaymateOrderTopBarBinding
+import com.adealink.weparty.im.session.comp.fragment.listener.IGoVoiceCallback
 import com.adealink.weparty.module.order.data.OrderDetailInfo
 import com.adealink.weparty.module.order.data.OrderStatus
 import okhttp3.internal.format
@@ -28,8 +29,17 @@ class PlaymateOrderTopBarView @JvmOverloads constructor(
 
     private var countDownSecond: Long = 0
 
+    private var goVoiceCallback: IGoVoiceCallback? = null
+
+    fun setGoVoiceCallback(callback: IGoVoiceCallback?) {
+        this.goVoiceCallback = callback
+    }
+
     init {
         binding.root.setBackgroundResource(APP_R.drawable.common_white_radius_16_bg)
+        binding.btnGoVoice.onClick {
+            goVoiceCallback?.goVoice()
+        }
     }
 
     private val countDownRunnable = Runnable {
@@ -81,6 +91,7 @@ class PlaymateOrderTopBarView @JvmOverloads constructor(
             this.countDownSecond = 0
             stopReplyCountDown()
         }
+        binding.btnGoVoice.show(data.isInService())
     }
 
     private fun getOrderStatusText(

+ 16 - 1
module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/widget/OrderTopBarView.kt → module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/widget/UserOrderTopBarView.kt

@@ -6,16 +6,18 @@ import android.util.AttributeSet
 import android.view.LayoutInflater
 import androidx.constraintlayout.widget.ConstraintLayout
 import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.util.onClick
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.im.databinding.ViewSessionOrderTopBarBinding
+import com.adealink.weparty.im.session.comp.fragment.listener.IGoVoiceCallback
 import com.adealink.weparty.module.order.data.OrderDetailInfo
 import com.adealink.weparty.module.order.data.OrderStatus
 import okhttp3.internal.format
 import kotlin.math.max
 
-class OrderTopBarView @JvmOverloads constructor(
+class UserOrderTopBarView @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
 ) : ConstraintLayout(context, attrs, defStyleAttr) {
 
@@ -26,6 +28,12 @@ class OrderTopBarView @JvmOverloads constructor(
 
     private var countDownSecond: Long = 0
 
+    private var goVoiceCallback: IGoVoiceCallback? = null
+
+    fun setGoVoiceCallback(callback: IGoVoiceCallback?) {
+        this.goVoiceCallback = callback
+    }
+
     private val countDownRunnable = Runnable {
         if (isAttachedToWindow) {
             updateCountDownText()
@@ -34,6 +42,12 @@ class OrderTopBarView @JvmOverloads constructor(
         }
     }
 
+    init {
+        binding.btnGoVoice.onClick {
+            goVoiceCallback?.goVoice()
+        }
+    }
+
     @SuppressLint("SetTextI18n")
     fun setOrder(data: OrderDetailInfo) {
         this.data = data
@@ -50,6 +64,7 @@ class OrderTopBarView @JvmOverloads constructor(
             this.countDownSecond = 0
             stopReplyCountDown()
         }
+        binding.btnGoVoice.show(data.isInService())
     }
 
     fun getUserOrderStatusText(

+ 4 - 0
module/im/src/main/java/com/adealink/weparty/im/session/comp/viewmodel/SessionOrderTopViewModel.kt

@@ -30,6 +30,10 @@ class SessionOrderTopViewModel : BaseViewModel() {
         this.chatInfo = chatInfo
     }
 
+    fun getChatInfo(): ChatInfo? {
+        return chatInfo
+    }
+
     fun loadTopInfo() {
         viewModelScope.launch {
             val uid = chatInfo?.id

+ 17 - 1
module/im/src/main/res/layout/view_session_order_top_bar.xml

@@ -84,7 +84,23 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             app:barrierDirection="start"
-            app:constraint_referenced_ids="cl_count_down" />
+            app:constraint_referenced_ids="cl_count_down, btn_go_voice" />
+
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_go_voice"
+            android:layout_width="wrap_content"
+            android:layout_height="24dp"
+            android:layout_marginEnd="16dp"
+            android:minWidth="85dp"
+            android:paddingHorizontal="8dp"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:text="@string/im_order_go_voice"
+            app:textColor="@color/white"
+            app:textSize="12sp"
+            tools:visibility="visible" />
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_count_down"

+ 17 - 1
module/im/src/main/res/layout/view_session_playmate_order_top_bar.xml

@@ -70,7 +70,23 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             app:barrierDirection="start"
-            app:constraint_referenced_ids="cl_count_down" />
+            app:constraint_referenced_ids="cl_count_down, btn_go_voice" />
+
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_go_voice"
+            android:layout_width="wrap_content"
+            android:layout_height="24dp"
+            android:layout_marginEnd="16dp"
+            android:minWidth="85dp"
+            android:paddingHorizontal="8dp"
+            android:visibility="gone"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:text="@string/im_order_go_voice"
+            app:textColor="@color/white"
+            app:textSize="12sp"
+            tools:visibility="visible" />
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_count_down"

+ 1 - 0
module/im/src/main/res/values-in/strings.xml

@@ -43,4 +43,5 @@
     <string name="im_unsupported_message_tips">Jenis pesan tidak didukung. Harap perbarui aplikasi.</string>
     <string name="im_edit_note">Catatan</string>
     <string name="im_edit_subtitle">Isi nama catatan</string>
+    <string name="im_order_go_voice">Suara Go</string>
 </resources>

+ 1 - 0
module/im/src/main/res/values-zh/strings.xml

@@ -43,4 +43,5 @@
     <string name="im_unsupported_message_tips">不支持的消息类型,请升级APP</string>
     <string name="im_edit_note">备注</string>
     <string name="im_edit_subtitle">请输入备注名字</string>
+    <string name="im_order_go_voice">Go voice</string>
 </resources>

+ 1 - 0
module/im/src/main/res/values/strings.xml

@@ -43,4 +43,5 @@
     <string name="im_unsupported_message_tips">Unsupported message type. Please update the app.</string>
     <string name="im_edit_note">Note</string>
     <string name="im_edit_subtitle">Fill in the note name</string>
+    <string name="im_order_go_voice">Go voice</string>
 </resources>

+ 1 - 1
module/order/src/main/res/layout/activity_order_detail.xml

@@ -595,7 +595,7 @@
     <View
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:background="@drawable/order_detail_bottom_mask_bg"
+        android:background="@drawable/common_bottom_gray_mask_bg"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"

+ 9 - 0
module/order/src/main/res/layout/activity_order_playmate_refund.xml

@@ -73,6 +73,15 @@
 
     </androidx.core.widget.NestedScrollView>
 
+    <View
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:background="@drawable/common_bottom_gray_mask_bg"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="@id/cl_order_refund" />
+
     <!-- 订单退款 -->
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/cl_order_refund"

+ 0 - 1
module/playmate/src/main/res/layout/layout_find_partner_option_item.xml

@@ -9,7 +9,6 @@
     android:gravity="center"
     android:includeFontPadding="false"
     android:paddingVertical="4dp"
-    android:minWidth="72dp"
     android:paddingHorizontal="5dp"
     android:textColor="@color/color_FF4E5969"
     android:textSize="12sp"

+ 7 - 9
module/playmate/src/main/res/layout/layout_playmate_activity_home_list_top_item.xml

@@ -4,14 +4,14 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    tools:layout_height="67dp"
-    tools:layout_width="127dp">
+    tools:layout_height="58dp"
+    tools:layout_width="122dp">
 
     <View
         android:id="@+id/v_bg"
         android:layout_width="0dp"
         android:layout_height="0dp"
-        android:layout_marginEnd="22dp"
+        android:layout_marginEnd="17dp"
         android:background="@drawable/playmate_activity_home_list_top_item_bg"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
@@ -22,24 +22,22 @@
         android:id="@+id/tv_item"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginStart="10dp"
-        android:layout_marginEnd="54dp"
+        android:layout_marginStart="9dp"
         android:ellipsize="end"
         android:gravity="start|center_vertical"
         android:singleLine="true"
         android:textColor="@color/color_FF1B1919"
         android:textSize="12sp"
         app:layout_constraintBottom_toBottomOf="@id/v_bg"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintEnd_toStartOf="@id/iv_item"
         app:layout_constraintStart_toStartOf="@id/v_bg"
         app:layout_constraintTop_toTopOf="@id/v_bg"
         tools:text="Mobile Game GameMobile Game GameMobile Game Game" />
 
     <com.adealink.frame.image.view.NetworkImageView
         android:id="@+id/iv_item"
-        android:layout_width="67dp"
-        android:layout_height="67dp"
+        android:layout_width="58dp"
+        android:layout_height="58dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="parent" />

+ 0 - 2
module/profile/src/main/java/com/adealink/weparty/profile/edit/dialog/EditIntroDialog.kt

@@ -5,8 +5,6 @@ import android.text.Editable
 import android.text.TextWatcher
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.util.onClick
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.text.setMaxLength
 import com.adealink.weparty.commonui.widget.KeyboardBottomDialogFragment
 import com.adealink.weparty.constant.PROFILE_INTRODUCTION_MAX_LENGTH

+ 1 - 1
module/profile/src/main/res/layout/dialog_edit_intro.xml

@@ -69,7 +69,7 @@
         android:layout_width="0dp"
         android:layout_height="@dimen/common_button_height"
         android:layout_marginHorizontal="20dp"
-        android:layout_marginTop="68dp"
+        android:layout_marginTop="24dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/cl_input"

+ 1 - 1
module/profile/src/main/res/layout/dialog_edit_nickname.xml

@@ -58,7 +58,7 @@
         android:layout_width="0dp"
         android:layout_height="@dimen/common_button_height"
         android:layout_marginHorizontal="20dp"
-        android:layout_marginTop="72dp"
+        android:layout_marginTop="24dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/tv_tips"