瀏覽代碼

feat: ui fix

DoggyZhang 2 月之前
父節點
當前提交
dd3bd7b2d1
共有 41 個文件被更改,包括 305 次插入69 次删除
  1. 6 4
      app/src/main/java/com/adealink/weparty/commonui/Constants.kt
  2. 0 4
      app/src/main/java/com/adealink/weparty/commonui/widget/CommonTabLayout.kt
  3. 3 0
      app/src/main/java/com/adealink/weparty/module/order/data/OrderConstants.kt
  4. 22 0
      app/src/main/java/com/adealink/weparty/module/playmate/widget/PriceView.kt
  5. 二進制
      app/src/main/res/drawable-xhdpi/common_create_order_button_bg.9.png
  6. 二進制
      app/src/main/res/drawable-xhdpi/common_create_order_button_bg.png
  7. 4 0
      app/src/main/res/values/attrs.xml
  8. 2 2
      app/src/main/res/values/colors.xml
  9. 2 0
      module/account/src/main/java/com/adealink/weparty/account/register/fragment/SelectGenderFragment.kt
  10. 二進制
      module/account/src/main/res/drawable-xhdpi/account_female_ic.png
  11. 二進制
      module/account/src/main/res/drawable-xhdpi/account_male_ic.png
  12. 2 0
      module/account/src/main/res/layout/fragment_register_select_gender.xml
  13. 3 0
      module/im/src/main/java/com/adealink/weparty/im/session/adapter/viewbinder/PlaymateOrderMessageViewBinder.kt
  14. 30 12
      module/im/src/main/java/com/adealink/weparty/im/session/comp/fragment/OrderTopBarFragment.kt
  15. 8 0
      module/im/src/main/res/layout/fragment_session_user_order_top_bar.xml
  16. 15 4
      module/im/src/main/res/layout/layout_session_message_playmate_order.xml
  17. 100 1
      module/order/src/main/java/com/adealink/weparty/order/OrderDetailActivity.kt
  18. 1 1
      module/order/src/main/java/com/adealink/weparty/order/util/UIUtil.kt
  19. 二進制
      module/order/src/main/res/drawable-xhdpi/order_status_accept_ic.png
  20. 二進制
      module/order/src/main/res/drawable-xhdpi/order_status_cancel_ic.png
  21. 二進制
      module/order/src/main/res/drawable-xhdpi/order_status_finish_ic.png
  22. 二進制
      module/order/src/main/res/drawable-xhdpi/order_status_in_progress_ic.png
  23. 16 2
      module/order/src/main/res/layout/activity_order_detail.xml
  24. 1 0
      module/order/src/main/res/values-in/strings.xml
  25. 1 0
      module/order/src/main/res/values-zh/strings.xml
  26. 1 0
      module/order/src/main/res/values/strings.xml
  27. 33 9
      module/playmate/src/main/java/com/adealink/weparty/playmate/detail/adapter/PlaymateDetailViewBinder.kt
  28. 23 2
      module/playmate/src/main/java/com/adealink/weparty/playmate/detail/comp/PlaymateDetailHeaderComp.kt
  29. 6 6
      module/playmate/src/main/java/com/adealink/weparty/playmate/detail/viewmodel/PlaymateDetailViewModel.kt
  30. 5 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/list/comp/PlaymateTopCategoryComp.kt
  31. 二進制
      module/playmate/src/main/res/drawable-xhdpi/playmate_follow_ic.png
  32. 2 3
      module/playmate/src/main/res/layout/item_playmate_detail_content.xml
  33. 5 6
      module/playmate/src/main/res/layout/layout_playmate_detail_bottom.xml
  34. 3 3
      module/profile/src/main/java/com/adealink/weparty/profile/relation/RelationShipActivity.kt
  35. 2 1
      module/profile/src/main/res/layout/layout_profile_bottom.xml
  36. 2 6
      module/profile/src/main/res/layout/layout_profile_introduce.xml
  37. 1 0
      module/profile/src/main/res/layout/layout_profile_skill_item.xml
  38. 1 1
      module/profile/src/main/res/layout/layout_user_profile_header.xml
  39. 2 1
      module/share/src/main/res/layout/fragment_common_qr_code.xml
  40. 2 1
      module/share/src/main/res/layout/fragment_special_qr_code_step_2.xml
  41. 1 0
      module/share/src/main/res/layout/layout_qr_code_tab_item.xml

+ 6 - 4
app/src/main/java/com/adealink/weparty/commonui/Constants.kt

@@ -15,13 +15,15 @@ const val SINGLE_MUST_CHOICE = 2
 
 val DEFAULT_FONT_REGULAR: Typeface
     get() {
-        return getCompatFont(APP_R.font.poppins_regular)
-            ?: Typeface.defaultFromStyle(Typeface.NORMAL)
+        return getCompatFont(APP_R.font.poppins_regular)?.let { font ->
+            Typeface.create(font, Typeface.NORMAL)
+        } ?: Typeface.defaultFromStyle(Typeface.NORMAL)
     }
 val DEFAULT_FONT_BOLD: Typeface
     get() {
-        return getCompatFont(APP_R.font.poppins_semibold)
-            ?: Typeface.defaultFromStyle(Typeface.BOLD)
+        return getCompatFont(APP_R.font.poppins_semibold)?.let { font ->
+            Typeface.create(font, Typeface.BOLD)
+        } ?: Typeface.defaultFromStyle(Typeface.BOLD)
     }
 
 

+ 0 - 4
app/src/main/java/com/adealink/weparty/commonui/widget/CommonTabLayout.kt

@@ -377,7 +377,6 @@ class CommonTabLayout @JvmOverloads constructor(
                         selectedTabTextSize
                     )
                     customViewBinding.tabTitle.setTextColor(selectedTabColor)
-                    customViewBinding.tabTitle.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
                     if (showIndicator) {
                         customViewBinding.vLine.visibility = VISIBLE
                     } else {
@@ -390,7 +389,6 @@ class CommonTabLayout @JvmOverloads constructor(
                         normalTabTextSize
                     )
                     customViewBinding.tabTitle.setTextColor(normalTabColor)
-                    customViewBinding.tabTitle.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
                     customViewBinding.vLine.visibility = GONE
                 }
             }
@@ -438,7 +436,6 @@ class CommonTabLayout @JvmOverloads constructor(
                 if (isSelected) {
                     customViewBinding.tabTitle.background = selectedTabBg
                     customViewBinding.tabTitle.setTextColor(selectedTabColor)
-                    customViewBinding.tabTitle.typeface = Typeface.defaultFromStyle(Typeface.BOLD)
                     customViewBinding.tabTitle.setTextSize(
                         TypedValue.COMPLEX_UNIT_PX,
                         selectedTabTextSize
@@ -451,7 +448,6 @@ class CommonTabLayout @JvmOverloads constructor(
                 } else {
                     customViewBinding.tabTitle.background = normalTabBg
                     customViewBinding.tabTitle.setTextColor(normalTabColor)
-                    customViewBinding.tabTitle.typeface = Typeface.defaultFromStyle(Typeface.NORMAL)
                     customViewBinding.vLine.visibility = GONE
                     customViewBinding.tabTitle.setTextSize(
                         TypedValue.COMPLEX_UNIT_PX,

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

@@ -0,0 +1,3 @@
+package com.adealink.weparty.module.order.data
+
+const val ORDER_EXPIRED_TS = 3_600_000 //订单过期时间

+ 22 - 0
app/src/main/java/com/adealink/weparty/module/playmate/widget/PriceView.kt

@@ -19,12 +19,18 @@ class PriceView @JvmOverloads constructor(
     context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
 ) : ConstraintLayout(context, attrs, defStyleAttr) {
 
+    companion object {
+        private const val TEXT_GRAVITY_CENTER = 0
+        private const val TEXT_GRAVITY_BOTTOM = 1
+    }
+
     private val binding = LayoutPriceViewBinding.inflate(LayoutInflater.from(context), this)
 
     private var iconSize = 12
     private var priceTextSize = 12
     private var priceTextBold = true
     private var unitTextSize = 12
+    private var priceTextGravity = TEXT_GRAVITY_CENTER
 
     init {
         if (isInEditMode) {
@@ -56,6 +62,22 @@ class PriceView @JvmOverloads constructor(
                 R.styleable.PriceView_unit_text_size,
                 12
             )
+            priceTextGravity = getInt(
+                R.styleable.PriceView_price_text_gravity,
+                TEXT_GRAVITY_CENTER
+            )
+        }
+
+        if (priceTextGravity == TEXT_GRAVITY_BOTTOM) {
+            binding.tvUnit.updateLayoutParams<LayoutParams> {
+                baselineToBaseline = R.id.tv_price
+                bottomToBottom = LayoutParams.PARENT_ID
+            }
+        } else {
+            binding.tvUnit.updateLayoutParams<LayoutParams> {
+                baselineToBaseline = LayoutParams.PARENT_ID
+                bottomToBottom = LayoutParams.PARENT_ID
+            }
         }
 
         binding.ivPrice.updateLayoutParams<LayoutParams> {

二進制
app/src/main/res/drawable-xhdpi/common_create_order_button_bg.9.png


二進制
app/src/main/res/drawable-xhdpi/common_create_order_button_bg.png


+ 4 - 0
app/src/main/res/values/attrs.xml

@@ -610,6 +610,10 @@
         <attr name="price_text_size" format="dimension" />
         <attr name="price_text_bold" format="boolean" />
         <attr name="unit_text_size" format="dimension" />
+        <attr name="price_text_gravity">
+            <enum name="center" value="0" />
+            <enum name="bottom" value="1" />
+        </attr>
     </declare-styleable>
 
     <declare-styleable name="SoundView">

+ 2 - 2
app/src/main/res/values/colors.xml

@@ -17,8 +17,8 @@
     <color name="transparent">#00000000</color>
 
     <color name="color_tab_normal">#2F3033</color>
-    <color name="color_tab_normal_match_parent">#777777</color>
-    <color name="color_tab_selected">#222222</color>
+    <color name="color_tab_normal_match_parent">@color/color_FF86909C</color>
+    <color name="color_tab_selected">@color/color_FF1D2129</color>
     <color name="color_FF8A8F99">#FF8A8F99</color>
 
     <color name="wheel_text_color">#AAAAAA</color>

+ 2 - 0
module/account/src/main/java/com/adealink/weparty/account/register/fragment/SelectGenderFragment.kt

@@ -89,6 +89,7 @@ class SelectGenderFragment : BaseFragment(R.layout.fragment_register_select_gend
 
                 binding.tvFemale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
                 binding.tvFemale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivFemale.show()
                 binding.ivFemaleAnim.gone()
 
                 binding.btnNext.isEnabled = true
@@ -97,6 +98,7 @@ class SelectGenderFragment : BaseFragment(R.layout.fragment_register_select_gend
             Gender.FEMALE -> {
                 binding.tvMale.setTextColor(getCompatColor(APP_R.color.color_FF1D2129))
                 binding.tvMale.setBackgroundResource(R.drawable.account_register_gender_bg)
+                binding.ivMale.show()
                 binding.ivMaleAnim.gone()
 
                 binding.tvFemale.setTextColor(getCompatColor(APP_R.color.white))

二進制
module/account/src/main/res/drawable-xhdpi/account_female_ic.png


二進制
module/account/src/main/res/drawable-xhdpi/account_male_ic.png


+ 2 - 0
module/account/src/main/res/layout/fragment_register_select_gender.xml

@@ -123,6 +123,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:loopCount="1"
+            app:quick_recycle="false"
             app:source="account_male_selected_anim.svga" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>
@@ -173,6 +174,7 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:loopCount="1"
+            app:quick_recycle="false"
             app:source="account_female_selected_anim.svga" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 0
module/im/src/main/java/com/adealink/weparty/im/session/adapter/viewbinder/PlaymateOrderMessageViewBinder.kt

@@ -5,6 +5,8 @@ import android.view.ViewGroup
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.commonSelectedDrawable
+import com.adealink.weparty.commonui.ext.dpf
 import com.adealink.weparty.commonui.ext.getActivity
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
@@ -44,6 +46,7 @@ class PlaymateOrderMessageViewHolder(
         binding: LayoutSessionMessagePlaymateOrderBinding,
         msg: PlaymateOrderMessageBean
     ) {
+        binding.ivCategoryFrame.background = commonSelectedDrawable(100.dpf(), 1.dpf())
         if (msg.data?.buyerUserNo == ProfileModule.getMyUid()) {
             //我是下单买家客户
             updateBuyerOrder(binding, msg)

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

@@ -57,12 +57,15 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
                 positionOffset: Float,
                 positionOffsetPixels: Int
             ) {
+                binding.vpIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels)
             }
 
             override fun onPageSelected(position: Int) {
+                binding.vpIndicator.onPageSelected(position)
             }
 
             override fun onPageScrollStateChanged(state: Int) {
+                binding.vpIndicator.onPageScrollStateChanged(state)
             }
         })
     }
@@ -84,7 +87,10 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
                     binding.vPendingOrder.gone()
                     val itemList = mutableListOf<TopBarData>()
                     itemList.add(OrderTopItemData(sessionTopData.pendingOrder))
-                    viewAdapter.setItemList(itemList)
+                    viewAdapter.setItemList(itemList, commited = { size ->
+                        binding.vpIndicator.onPageChanged(size, 0)
+                        binding.vpIndicator.show(size > 1)
+                    })
                 } else {
                     binding.vp.gone()
                     binding.vPendingOrder.show()
@@ -109,17 +115,24 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
                 itemList.addAll(sessionTopData.skillList.map {
                     SkillTopItemData(it)
                 })
-                viewAdapter.setItemList(itemList) {
-                    val categoryCode =
-                        activity?.intent?.getStringExtra(IM.Session.EXTRA_CHAT_PLAYMATE_ID)
-                            ?: return@setItemList
-                    val index = itemList.indexOfFirst {
-                        it is SkillTopItemData && it.data.id == categoryCode
-                    }
-                    if (index >= 0) {
-                        binding.vp.setCurrentItem(index)
+                viewAdapter.setItemList(
+                    itemList,
+                    firstCommit = {
+                        val categoryCode =
+                            activity?.intent?.getStringExtra(IM.Session.EXTRA_CHAT_PLAYMATE_ID)
+                                ?: return@setItemList
+                        val index = itemList.indexOfFirst {
+                            it is SkillTopItemData && it.data.id == categoryCode
+                        }
+                        if (index >= 0) {
+                            binding.vp.setCurrentItem(index)
+                        }
+                    },
+                    commited = { size ->
+                        binding.vpIndicator.onPageChanged(size, 0)
+                        binding.vpIndicator.show(size > 1)
                     }
-                }
+                )
                 return@observe
             }
             //无内容,不展示顶部订单
@@ -151,7 +164,11 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
 
         private val itemList = mutableListOf<TopBarData>()
 
-        fun setItemList(list: List<TopBarData>, firstCommit: (() -> Unit)? = null) {
+        fun setItemList(
+            list: List<TopBarData>,
+            firstCommit: (() -> Unit)? = null,
+            commited: ((itemSize: Int) -> Unit)? = null
+        ) {
             val isFirstCommit = itemList.isEmpty()
             itemList.clear()
             itemList.addAll(list)
@@ -159,6 +176,7 @@ class OrderTopBarFragment : BaseFragment(R.layout.fragment_session_user_order_to
             if (isFirstCommit) {
                 firstCommit?.invoke()
             }
+            commited?.invoke(list.size)
         }
 
         override fun getItemViewType(position: Int): Int {

+ 8 - 0
module/im/src/main/res/layout/fragment_session_user_order_top_bar.xml

@@ -16,6 +16,14 @@
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
+    <com.adealink.weparty.commonui.widget.banner.indicator.CircleIndicator
+        android:id="@+id/vp_indicator"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="@id/vp"
+        app:layout_constraintEnd_toEndOf="@id/vp"
+        app:layout_constraintStart_toStartOf="@id/vp" />
+
     <com.adealink.weparty.im.session.comp.fragment.widget.PlaymateOrderTopBarView
         android:id="@+id/v_pending_order"
         android:layout_width="0dp"

+ 15 - 4
module/im/src/main/res/layout/layout_session_message_playmate_order.xml

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<com.adealink.weparty.commonui.widget.constrainlayout.RoundCornerConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
@@ -69,7 +69,17 @@
         android:layout_height="20dp"
         android:layout_marginTop="12dp"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/tv_desc" />
+        app:layout_constraintTop_toBottomOf="@id/tv_desc"
+        app:roundAsCircle="true" />
+
+    <View
+        android:id="@+id/iv_category_frame"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_category"
+        app:layout_constraintEnd_toEndOf="@id/iv_category"
+        app:layout_constraintStart_toStartOf="@id/iv_category"
+        app:layout_constraintTop_toTopOf="@id/iv_category" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_category"
@@ -92,12 +102,13 @@
     <com.adealink.weparty.commonui.widget.CommonButton
         android:id="@+id/btn_complete"
         android:layout_width="0dp"
-        android:layout_height="@dimen/common_button_height"
+        android:layout_height="40dp"
         android:layout_marginTop="12dp"
         android:visibility="gone"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/iv_category"
+        app:textSize="16sp"
         tools:visibility="visible" />
 
-</com.adealink.weparty.commonui.widget.constrainlayout.RoundCornerConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 100 - 1
module/order/src/main/java/com/adealink/weparty/order/OrderDetailActivity.kt

@@ -15,6 +15,7 @@ import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.formatTime
 import com.adealink.frame.util.onClick
+import com.adealink.frame.util.removeUiCallbacks
 import com.adealink.frame.util.statusBarHeight
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.commonui.ext.dp
@@ -26,10 +27,10 @@ import com.adealink.weparty.commonui.toast.util.showFailedToast
 import com.adealink.weparty.commonui.widget.CommonDialog
 import com.adealink.weparty.module.image.data.PhotoData
 import com.adealink.weparty.module.order.Order
+import com.adealink.weparty.module.order.data.ORDER_EXPIRED_TS
 import com.adealink.weparty.module.order.data.OrderDetailData
 import com.adealink.weparty.module.order.data.OrderDetailInfo
 import com.adealink.weparty.module.order.data.OrderStatus
-import com.adealink.weparty.module.order.util.getUserOrderStatusIcon
 import com.adealink.weparty.module.order.util.getUserOrderStatusText
 import com.adealink.weparty.order.databinding.ActivityOrderDetailBinding
 import com.adealink.weparty.order.dialog.EvaluateOrderDialog
@@ -43,6 +44,8 @@ import com.adealink.weparty.order.viewmodel.OrderViewModelFactory
 import com.adealink.weparty.order.viewmodel.UserOrderViewModel
 import com.adealink.weparty.util.TIME_FORMAT_DMY_HMS
 import com.adealink.weparty.util.goImagePreviewActivity
+import okhttp3.internal.format
+import kotlin.math.max
 import com.adealink.weparty.R as APP_R
 
 @RouterUri(path = [Order.Detail.PATH], desc = "订单详情")
@@ -255,6 +258,102 @@ class OrderDetailActivity : BaseActivity() {
         } else {
             binding.clUserRefund.gone()
         }
+
+        if (data?.order?.isPendingAccept() == true) {
+            val endTs = data.order.createTime + ORDER_EXPIRED_TS
+            this.countDownSecond = max(endTs - System.currentTimeMillis(), 0) / 1000
+            startReplyCountDown(0)
+        } else {
+            this.countDownSecond = 0
+            stopReplyCountDown()
+        }
+    }
+
+
+    private fun getUserOrderStatusIcon(
+        status: OrderStatus?,
+        isRefundApply: Boolean? //是否处于申请退款中
+    ): Int {
+        if (isRefundApply == true) {
+            return R.drawable.order_status_in_progress_ic
+        }
+        return when (status) {
+            OrderStatus.CREATE_ORDER -> {
+                R.drawable.order_status_in_progress_ic
+            }
+
+            OrderStatus.WAIT_FOR_ACCEPT -> {
+                R.drawable.order_status_in_progress_ic
+            }
+
+            OrderStatus.PLAYMATE_ACCEPT -> {
+                R.drawable.order_status_accept_ic
+            }
+
+            OrderStatus.PLAYMATE_IN_SERVICE -> {
+                R.drawable.order_status_in_progress_ic
+            }
+
+            OrderStatus.PLAYMATE_END_SERVICE -> {
+                R.drawable.order_status_in_progress_ic
+            }
+
+            OrderStatus.PLAYMATE_REFUSE -> {
+                R.drawable.order_status_cancel_ic
+            }
+
+            OrderStatus.COMPLETE -> {
+                R.drawable.order_status_finish_ic
+            }
+
+            OrderStatus.USER_REFUND -> {
+                R.drawable.order_status_finish_ic
+            }
+
+            OrderStatus.USER_CANCEL -> {
+                R.drawable.order_status_cancel_ic
+            }
+
+            null -> {
+                R.drawable.order_status_in_progress_ic
+            }
+        }
+    }
+
+    private var countDownSecond: Long = 0
+
+    private val countDownRunnable = Runnable {
+        updateCountDownText()
+        countDownSecond = max(0, countDownSecond - 1)
+        startReplyCountDown(1000)
+    }
+
+    private fun startReplyCountDown(delay: Long = 1000) {
+        if (orderDetail?.order?.isPendingAccept() == false) {
+            binding.tvAcceptCountDown.gone()
+            return
+        }
+        binding.tvAcceptCountDown.show()
+        updateCountDownText()
+        if (countDownSecond >= 0) {
+            removeUiCallbacks(countDownRunnable)
+            com.adealink.frame.util.runOnUiThread(countDownRunnable, delay)
+        }
+    }
+
+    private fun stopReplyCountDown() {
+        binding.tvAcceptCountDown.gone()
+        removeUiCallbacks(countDownRunnable)
+    }
+
+    @SuppressLint("SetTextI18n")
+    private fun updateCountDownText() {
+        val minute = countDownSecond / 60
+        val second = countDownSecond % 60
+        binding.tvAcceptCountDown.text = getCompatString(
+            R.string.order_auto_cancel_title,
+            "${format("%02d", minute)}:${format("%02d", second)}"
+        )
     }
 
     private fun clickCancel() {

+ 1 - 1
module/order/src/main/java/com/adealink/weparty/order/util/UIUtil.kt

@@ -29,7 +29,7 @@ fun getOrderAllCost(price: Float, count: Int): SpannableStringBuilder {
         )
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
             findAndSetSpan(
-                TypefaceSpan(Typeface.create(DEFAULT_FONT_BOLD, Typeface.BOLD)),
+                TypefaceSpan(DEFAULT_FONT_BOLD),
                 cost
             )
         }

二進制
module/order/src/main/res/drawable-xhdpi/order_status_accept_ic.png


二進制
module/order/src/main/res/drawable-xhdpi/order_status_cancel_ic.png


二進制
module/order/src/main/res/drawable-xhdpi/order_status_finish_ic.png


二進制
module/order/src/main/res/drawable-xhdpi/order_status_in_progress_ic.png


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

@@ -95,18 +95,32 @@
                     tools:text="@string/order_status_finish" />
             </androidx.constraintlayout.widget.ConstraintLayout>
 
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_accept_count_down"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginHorizontal="16dp"
+                android:layout_marginTop="6dp"
+                android:gravity="center"
+                android:includeFontPadding="false"
+                android:textSize="12sp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/cl_order_status"
+                tools:text="Automatic cancellation after 14: 34" />
+
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:id="@+id/cl_order"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="16dp"
-                android:layout_marginTop="30dp"
+                android:layout_marginTop="28dp"
                 android:background="@drawable/order_detail_bg"
                 android:paddingHorizontal="12dp"
                 android:paddingVertical="8dp"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/cl_order_status">
+                app:layout_constraintTop_toBottomOf="@id/tv_accept_count_down">
 
                 <!-- 陪玩信息 -->
                 <androidx.constraintlayout.widget.ConstraintLayout

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

@@ -31,4 +31,5 @@
     <string name="order_evaluate_star_is_null">Mohon beri peringkat layanan ini.</string>
     <string name="order_evaluation_hint">Silakan isi ulasannya.</string>
     <string name="order_user_request">Meminta</string>
+    <string name="order_auto_cancel_title">Pembatalan otomatis setelah %s</string>
 </resources>

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

@@ -33,4 +33,5 @@
     <string name="order_evaluate_star_is_null">请对此次服务打分</string>
     <string name="order_evaluation_hint">展开说说对Ta的看法吧</string>
     <string name="order_user_request">要求</string>
+    <string name="order_auto_cancel_title">在%s后自动取消</string>
 </resources>

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

@@ -39,4 +39,5 @@
     <string name="order_evaluate_star_is_null">Please rate this service.</string>
     <string name="order_evaluation_hint">Please fill in the review.</string>
     <string name="order_user_request">Request</string>
+    <string name="order_auto_cancel_title">Automatically cancel after %s</string>
 </resources>

+ 33 - 9
module/playmate/src/main/java/com/adealink/weparty/playmate/detail/adapter/PlaymateDetailViewBinder.kt

@@ -2,6 +2,8 @@ package com.adealink.weparty.playmate.detail.adapter
 
 import android.view.LayoutInflater
 import android.view.ViewGroup
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
 import androidx.lifecycle.LifecycleOwner
 import androidx.viewpager.widget.ViewPager
 import com.adealink.frame.base.fastLazy
@@ -105,16 +107,38 @@ class PlaymateDetailViewBinder(
             binding.tvTitle.text = item.data.categoryName
             binding.tvSummary.text = item.data.summary
 
-            labelAdapter.submitList(
-                item.data.labels.map {
-                    PlaymateDetailLabel(it)
-                }
-            )
-            viewAdapter.setItemList(
-                item.data.images.map {
-                    PlaymateDetailImg(it)
+            val labelItems = item.data.labels.map {
+                PlaymateDetailLabel(it)
+            }
+            if (labelItems.isNullOrEmpty()) {
+                binding.rvLabel.gone()
+            } else {
+                binding.rvLabel.show()
+                labelAdapter.submitList(labelItems)
+            }
+
+            val imageItems = item.data.images.map {
+                PlaymateDetailImg(it)
+            }
+            if (imageItems.isNullOrEmpty()) {
+                binding.bannerImg.gone()
+            } else {
+                binding.bannerImg.show()
+                if(imageItems.size == 1){
+                    binding.bannerImg.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                        dimensionRatio = null
+                        marginStart = 16.dp()
+                        marginEnd = 16.dp()
+                    }
+                }else{
+                    binding.bannerImg.updateLayoutParams<ConstraintLayout.LayoutParams> {
+                        dimensionRatio = "320:192"
+                        marginStart = 16.dp()
+                        marginEnd = 0
+                    }
                 }
-            )
+                viewAdapter.setItemList(imageItems)
+            }
             if (item.data.voice.isEmpty()) {
                 binding.vSound.gone()
             } else {

+ 23 - 2
module/playmate/src/main/java/com/adealink/weparty/playmate/detail/comp/PlaymateDetailHeaderComp.kt

@@ -1,12 +1,20 @@
 package com.adealink.weparty.playmate.detail.comp
 
 import android.annotation.SuppressLint
+import android.graphics.Typeface
+import android.os.Build
+import android.text.SpannableStringBuilder
+import android.text.style.AbsoluteSizeSpan
+import android.text.style.TypefaceSpan
 import androidx.lifecycle.LifecycleOwner
 import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.ext.findAndSetSpan
 import com.adealink.frame.mvvm.view.ViewComponent
 import com.adealink.frame.mvvm.viewmodel.activityViewModels
 import com.adealink.frame.util.copyToClipBoard
 import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.DEFAULT_FONT_BOLD
+import com.adealink.weparty.commonui.ext.sp
 import com.adealink.weparty.commonui.toast.util.showToast
 import com.adealink.weparty.module.playmate.data.PlaymateDetailData
 import com.adealink.weparty.playmate.R
@@ -60,8 +68,21 @@ class PlaymateDetailHeaderComp(
         binding.tvLocation.text = formatDistanceStr(data?.distance ?: 0f)
         binding.tvLanguage.text = data?.languageNames?.joinToString(separator = "/")
         binding.tvEvaluate.text = formatStar(data?.star)
-        binding.tvOrderCount.text =
-            getCompatString(R.string.playamte_order_count, data?.orderCount ?: "")
+
+        val orderCountStr = data?.orderCount?.toString() ?: "0"
+        val text = getCompatString(R.string.playamte_order_count, orderCountStr)
+        binding.tvOrderCount.text = SpannableStringBuilder(text).apply {
+            findAndSetSpan(
+                AbsoluteSizeSpan(12.sp()),
+                orderCountStr
+            )
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
+                findAndSetSpan(
+                    TypefaceSpan(DEFAULT_FONT_BOLD),
+                    orderCountStr
+                )
+            }
+        }
     }
 
     private fun goBgPreview() {

+ 6 - 6
module/playmate/src/main/java/com/adealink/weparty/playmate/detail/viewmodel/PlaymateDetailViewModel.kt

@@ -110,12 +110,12 @@ class PlaymateDetailViewModel : BaseViewModel(), IPlaymateDetailViewModel {
         itemList.add(PlaymateDetailItemData(data))
 
         //评价标题
-        itemList.add(
-            PlaymateDetailCommentTitleItemData(
-                data.star,
-                data.commentCount,
-            )
-        )
+//        itemList.add(
+//            PlaymateDetailCommentTitleItemData(
+//                data.star,
+//                data.commentCount,
+//            )
+//        )
         //评价标签
 //        itemList.add(
 //            PlaymateDetailCommentLabelItemData(

+ 5 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/list/comp/PlaymateTopCategoryComp.kt

@@ -4,6 +4,8 @@ import androidx.lifecycle.LifecycleOwner
 import com.adealink.frame.mvvm.view.ViewComponent
 import com.adealink.frame.router.Router
 import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.DEFAULT_FONT_BOLD
+import com.adealink.weparty.commonui.DEFAULT_FONT_REGULAR
 import com.adealink.weparty.commonui.commonSelectedDrawable
 import com.adealink.weparty.commonui.ext.dpf
 import com.adealink.weparty.commonui.ext.gone
@@ -53,6 +55,7 @@ class PlaymateTopCategoryComp(
             for (itemBinding in categoryViewMap.values) {
                 itemBinding.vSelected.hide()
                 itemBinding.ivItemFrame.gone()
+                itemBinding.tvItem.typeface = DEFAULT_FONT_REGULAR
             }
             return
         }
@@ -60,9 +63,11 @@ class PlaymateTopCategoryComp(
             if (entry.key == category) {
                 entry.value.vSelected.show()
                 entry.value.ivItemFrame.show()
+                entry.value.tvItem.typeface = DEFAULT_FONT_BOLD
             } else {
                 entry.value.vSelected.hide()
                 entry.value.ivItemFrame.gone()
+                entry.value.tvItem.typeface = DEFAULT_FONT_REGULAR
             }
         }
     }

二進制
module/playmate/src/main/res/drawable-xhdpi/playmate_follow_ic.png


+ 2 - 3
module/playmate/src/main/res/layout/item_playmate_detail_content.xml

@@ -66,16 +66,15 @@
     <androidx.viewpager.widget.ViewPager
         android:id="@+id/banner_img"
         android:layout_width="0dp"
-        android:layout_height="0dp"
+        android:layout_height="192dp"
         android:layout_marginStart="16dp"
         android:layout_marginTop="12dp"
         android:clipChildren="false"
-        app:layout_constraintDimensionRatio="320:192"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toBottomOf="@id/cl_content_top"
-        app:layout_constraintWidth_percent="0.85" />
+        tools:layout_constraintDimensionRatio="320:192" />
 
     <com.adealink.weparty.module.playmate.widget.SoundView
         android:id="@+id/v_sound"

+ 5 - 6
module/playmate/src/main/res/layout/layout_playmate_detail_bottom.xml

@@ -21,12 +21,14 @@
 
         <androidx.constraintlayout.widget.ConstraintLayout
             android:id="@+id/cl_price"
-            android:layout_width="wrap_content"
+            android:layout_width="0dp"
             android:layout_height="0dp"
+            android:layout_marginEnd="66dp"
             android:background="@drawable/common_create_order_price_bg"
             android:paddingStart="20dp"
-            android:paddingEnd="40dp"
+            android:paddingEnd="28dp"
             app:layout_constraintBottom_toBottomOf="@id/btn_order"
+            app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintHorizontal_chainStyle="packed"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="@id/btn_order">
@@ -48,9 +50,8 @@
 
         <androidx.appcompat.widget.AppCompatTextView
             android:id="@+id/btn_order"
-            android:layout_width="0dp"
+            android:layout_width="93dp"
             android:layout_height="48dp"
-            android:layout_marginStart="-36dp"
             android:background="@drawable/common_create_order_button_bg"
             android:fontFamily="@font/poppins_semibold"
             android:gravity="center"
@@ -58,10 +59,8 @@
             android:text="@string/common_create_order"
             android:textColor="@color/white"
             android:textSize="16sp"
-            app:layout_constrainedHeight="true"
             app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toEndOf="@id/cl_price"
             app:layout_constraintTop_toTopOf="parent" />
 
     </androidx.constraintlayout.widget.ConstraintLayout>

+ 3 - 3
module/profile/src/main/java/com/adealink/weparty/profile/relation/RelationShipActivity.kt

@@ -107,12 +107,12 @@ class RelationShipActivity : BaseActivity() {
     ) {
         if (isSelected) {
             binding.ivTabBg.show()
+            binding.tvCount.setTextColor(getCompatColor(com.adealink.weparty.R.color.color_FF1D2129))
             binding.tvTab.setTextColor(getCompatColor(com.adealink.weparty.R.color.color_FF1D2129))
-            binding.tvTab.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22f)
         } else {
             binding.ivTabBg.gone()
-            binding.tvTab.setTextColor(getCompatColor(com.adealink.weparty.R.color.color_FF4E5969))
-            binding.tvTab.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f)
+            binding.tvCount.setTextColor(getCompatColor(com.adealink.weparty.R.color.color_FFC9CDD4))
+            binding.tvTab.setTextColor(getCompatColor(com.adealink.weparty.R.color.color_FFC9CDD4))
         }
     }
 

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

@@ -34,7 +34,8 @@
         android:layout_marginStart="10dp"
         android:layout_marginEnd="16dp"
         app:button_left_drawable="@drawable/profile_chat_ic"
-        app:button_left_drawable_width="16dp"
+        app:button_left_drawable_margin="4dp"
+        app:button_left_drawable_width="24dp"
         app:common_button_type="normal2"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@id/btn_follow"

+ 2 - 6
module/profile/src/main/res/layout/layout_profile_introduce.xml

@@ -28,7 +28,6 @@
             android:id="@+id/iv_language"
             android:layout_width="16dp"
             android:layout_height="16dp"
-            android:layout_marginTop="2dp"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:srcCompat="@drawable/common_language_ic" />
@@ -42,7 +41,6 @@
             android:includeFontPadding="false"
             android:textColor="@color/color_FF4E5969"
             android:textSize="14sp"
-            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toEndOf="@id/iv_language"
             app:layout_constraintTop_toTopOf="parent"
@@ -55,14 +53,13 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginTop="12dp"
-        app:layout_goneMarginTop="8dp"
-        app:layout_constraintTop_toBottomOf="@id/cl_language">
+        app:layout_constraintTop_toBottomOf="@id/cl_language"
+        app:layout_goneMarginTop="8dp">
 
         <androidx.appcompat.widget.AppCompatImageView
             android:id="@+id/iv_introduce"
             android:layout_width="16dp"
             android:layout_height="16dp"
-            android:layout_marginTop="2dp"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
             app:srcCompat="@drawable/common_introduce_ic" />
@@ -76,7 +73,6 @@
             android:includeFontPadding="false"
             android:textColor="@color/color_FF4E5969"
             android:textSize="14sp"
-            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toEndOf="@id/iv_introduce"
             app:layout_constraintTop_toTopOf="parent"

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

@@ -65,6 +65,7 @@
         android:singleLine="true"
         android:textColor="@color/white"
         android:textSize="12sp"
+        android:textStyle="bold"
         app:layout_constrainedWidth="true"
         app:layout_constraintBottom_toBottomOf="@id/iv_coin"
         app:layout_constraintEnd_toStartOf="@id/right_barrier"

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

@@ -36,7 +36,7 @@
         app:layout_constraintBottom_toTopOf="@id/cl_user_info"
         app:layout_constraintStart_toStartOf="parent"
         app:sound_show_play_button="true"
-        app:sound_show_wave="true" />
+        app:sound_show_wave="false" />
 
     <!--基础信息 -->
     <androidx.constraintlayout.widget.ConstraintLayout

+ 2 - 1
module/share/src/main/res/layout/fragment_common_qr_code.xml

@@ -33,7 +33,8 @@
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@id/iv_qr_code"
-            app:price_icon_size="17dp"
+            app:price_icon_size="19dp"
+            app:price_text_gravity="bottom"
             app:price_text_size="24sp"
             app:unit_text_size="14sp" />
 

+ 2 - 1
module/share/src/main/res/layout/fragment_special_qr_code_step_2.xml

@@ -37,7 +37,8 @@
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/iv_qr_code"
-                app:price_icon_size="17dp"
+                app:price_icon_size="19dp"
+                app:price_text_gravity="bottom"
                 app:price_text_size="24sp"
                 app:unit_text_size="14sp" />
 

+ 1 - 0
module/share/src/main/res/layout/layout_qr_code_tab_item.xml

@@ -10,6 +10,7 @@
         android:id="@+id/tv_tab"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:fontFamily="@font/poppins_semibold"
         android:gravity="center"
         android:includeFontPadding="false"
         android:textColor="@color/color_FF1D2129"