Pārlūkot izejas kodu

feat: 隐私协议,Google登录

DoggyZhang 3 mēneši atpakaļ
vecāks
revīzija
cfdc94dc7a
20 mainītis faili ar 430 papildinājumiem un 147 dzēšanām
  1. 7 0
      app/src/debug/google-services.json
  2. 7 24
      app/src/main/java/com/adealink/weparty/url/UrlConfig.kt
  3. 15 1
      app/src/main/java/com/adealink/weparty/util/UIUtil.kt
  4. 1 0
      app/src/main/res/values/colors.xml
  5. 18 11
      app/src/release/google-services.json
  6. 5 7
      module/account/src/main/java/com/adealink/weparty/account/constant/LoginConstants.kt
  7. 6 0
      module/account/src/main/java/com/adealink/weparty/account/login/LoginActivity.kt
  8. 0 31
      module/account/src/main/java/com/adealink/weparty/account/login/LoginDialog.kt
  9. 28 1
      module/account/src/main/java/com/adealink/weparty/account/login/auth/GoogleAuth.kt
  10. 35 3
      module/order/src/main/java/com/adealink/weparty/order/PlaymateOrderListActivity.kt
  11. 2 2
      module/order/src/main/java/com/adealink/weparty/order/adapter/OrderListItemViewBinder.kt
  12. 130 4
      module/order/src/main/java/com/adealink/weparty/order/adapter/PlaymateListItemViewBinder.kt
  13. 1 1
      module/order/src/main/java/com/adealink/weparty/order/util/UIUtil.kt
  14. 41 0
      module/order/src/main/java/com/adealink/weparty/order/viewmodel/PlaymateOrderViewModel.kt
  15. 8 0
      module/order/src/main/res/drawable/playmate_order_userinfo_bg.xml
  16. 2 2
      module/order/src/main/res/layout/activity_playmate_order_list.xml
  17. 116 59
      module/order/src/main/res/layout/layout_playmate_order_list_item.xml
  18. 6 0
      module/order/src/main/res/values/strings.xml
  19. 1 1
      module/setting/src/main/java/com/adealink/weparty/setting/about/AboutActivity.kt
  20. 1 0
      module/setting/src/main/res/layout/activity_about.xml

+ 7 - 0
app/src/debug/google-services.json

@@ -37,6 +37,13 @@
             {
               "client_id": "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com",
               "client_type": 3
+            },
+            {
+              "client_id": "981655295954-bvbt69s45q2c85n6auc06t02lpc9g5d7.apps.googleusercontent.com",
+              "client_type": 2,
+              "ios_info": {
+                "bundle_id": "com.jiehe.gami.debug"
+              }
             }
           ]
         }

+ 7 - 24
app/src/main/java/com/adealink/weparty/url/UrlConfig.kt

@@ -19,36 +19,19 @@ object UrlConfig {
     }
 
     val serviceTerms = when {
-        isProdEnv -> "https://web.yoki.chat/service_terms/0?projectname=yoki-terms"
-        else -> "http://web-test.yoki.chat/service_terms/0?projectname=yoki-terms"
+        isProdEnv -> "https://web.gami.vip/about/termsOfService"
+        else -> "https://web.gami.vip/about/termsOfService"
     }
 
     val privacyPolicy = when {
-        isProdEnv -> "https://web.yoki.chat/privacy_policy/0?projectname=yoki-terms"
-        else -> "http://web-test.yoki.chat/privacy_policy/0?projectname=yoki-terms"
+        isProdEnv -> "https://web.gami.vip/about/privacyPolicy"
+        else -> "https://web.gami.vip/about/privacyPolicy"
     }
 
-    val policies = when {
-        isProdEnv -> "https://web.yoki.chat/policies/0?projectname=yoki-terms"
-        else -> "http://web-test.yoki.chat/policies/0?projectname=yoki-terms"
-    }
-
-    val thirdPartyRecharge =
-        when {
-            isProdEnv -> "https://web.yoki.chat/third-party-recharge?projectname=yoki-payment&hideAppBar=true&vpResizable=true"
-            else -> "http://web-test.yoki.chat/third-party-recharge?projectname=yoki-payment&hideAppBar=true&vpResizable=true"
-        }
-
-    val diamondWithdrawal =
-        when {
-            isProdEnv -> "https://web.yoki.chat/diamond-deal?projectname=yoki-payment&hideAppBar=true&vpResizable=true"
-            else -> "http://web-test.yoki.chat/diamond-deal?projectname=yoki-payment&hideAppBar=true&vpResizable=true"
-        }
-
-    val childSafetyPolicy =
+    val communityPolicy =
         when {
-            AppBase.isProdEnv -> "https://web.yoki.chat/child_policy/0?projectname=yoki-terms"
-            else -> "https://web-test.yoki.chat/child_policy/0?projectname=yoki-terms"
+            AppBase.isProdEnv -> "https://web.gami.vip/about/communityGuideline"
+            else -> "https://web.gami.vip/about/communityGuideline"
         }
 
 }

+ 15 - 1
app/src/main/java/com/adealink/weparty/util/UIUtil.kt

@@ -1,11 +1,13 @@
 package com.adealink.weparty.util
 
+import com.adealink.weparty.R
+import com.adealink.weparty.module.profile.data.Gender
 import java.util.Calendar
 import java.util.Locale
 
 //格式化数字 --数值加逗号
 fun formatDotNotNull(long: Long?): String? {
-    if(long == null) return long
+    if (long == null) return long
     return "%,d".format(Locale.US, long)
 }
 
@@ -15,11 +17,13 @@ fun formatNumberStrFull(number: Long): String {
         number < 1000 -> {
             number.toString()
         }
+
         number < 1000000 -> {
             val value = number.toDouble() / 1000
             val valueStr = value.toString().trimEnd('0').trimEnd('.') // 去掉多余的0和点
             String.format(Locale.US, "%sK", valueStr)
         }
+
         else -> {
             val value = number.toDouble() / 1000000
             val valueStr = value.toString().trimEnd('0').trimEnd('.') // 去掉多余的0和点
@@ -77,4 +81,14 @@ fun getAgeByBirthday(birthday: Long): Int {
         age -= 1
     }
     return age
+}
+
+
+fun getGenderResource(gender: Int?): Int {
+    gender ?: return 0
+    return when (Gender.map(gender)) {
+        Gender.UNKNOWN -> 0
+        Gender.FEMALE -> R.drawable.common_female_ic
+        Gender.MALE -> R.drawable.common_male_ic
+    }
 }

+ 1 - 0
app/src/main/res/values/colors.xml

@@ -1191,4 +1191,5 @@
     <color name="color_FF1789FF">#FF1789FF</color>
 
     <color name="color_FFFFB836">#FFFFB836</color>
+    <color name="color_FFF23051">#FFF23051</color>
 </resources>

+ 18 - 11
app/src/release/google-services.json

@@ -1,42 +1,49 @@
 {
   "project_info": {
-    "project_number": "981655295954",
-    "project_id": "gami-debug-c4559",
-    "storage_bucket": "gami-debug-c4559.firebasestorage.app"
+    "project_number": "955524882346",
+    "project_id": "gami-74c1a",
+    "storage_bucket": "gami-74c1a.firebasestorage.app"
   },
   "client": [
     {
       "client_info": {
-        "mobilesdk_app_id": "1:981655295954:android:4443266d74fd033674da0b",
+        "mobilesdk_app_id": "1:955524882346:android:c74ebbd8d3229c71dc15d3",
         "android_client_info": {
-          "package_name": "com.jiehe.gami.debug"
+          "package_name": "com.jiehe.gami"
         }
       },
       "oauth_client": [
         {
-          "client_id": "981655295954-1a4a3e5c6fjmf88t59n98fmpgfv7qh5o.apps.googleusercontent.com",
+          "client_id": "955524882346-6g7cieuusopegikppinm91buveg2vsgj.apps.googleusercontent.com",
           "client_type": 1,
           "android_info": {
-            "package_name": "com.jiehe.gami.debug",
-            "certificate_hash": "f8588720e9515dabd8ed0392b6a0ae8f693a9811"
+            "package_name": "com.jiehe.gami",
+            "certificate_hash": "8f3424e77e538bfb296749f9345809117beb9bc2"
           }
         },
         {
-          "client_id": "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com",
+          "client_id": "955524882346-u0p09b8ah09cun11c348fjmoo4p2nphr.apps.googleusercontent.com",
           "client_type": 3
         }
       ],
       "api_key": [
         {
-          "current_key": "AIzaSyBzIauk6te0DDMzwKgElVJP5JHidmhPC5I"
+          "current_key": "AIzaSyB2BAoFMCCVlhGTjs6OoYUCj3n71INd3nM"
         }
       ],
       "services": {
         "appinvite_service": {
           "other_platform_oauth_client": [
             {
-              "client_id": "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com",
+              "client_id": "955524882346-u0p09b8ah09cun11c348fjmoo4p2nphr.apps.googleusercontent.com",
               "client_type": 3
+            },
+            {
+              "client_id": "955524882346-8ma09s04jkalgbdk8s41p25pd37hoijm.apps.googleusercontent.com",
+              "client_type": 2,
+              "ios_info": {
+                "bundle_id": "com.jiehe.gami"
+              }
             }
           ]
         }

+ 5 - 7
module/account/src/main/java/com/adealink/weparty/account/constant/LoginConstants.kt

@@ -1,9 +1,10 @@
 package com.adealink.weparty.account.constant
 
+const val GOOGLE_CLIENT_ID =
+    "955524882346-u0p09b8ah09cun11c348fjmoo4p2nphr.apps.googleusercontent.com"
+const val GOOGLE_CLIENT_ID_DEBUG =
+    "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com"
 
-// TODO: zhangfei 补充正式环境clientId
-const val GOOGLE_CLIENT_ID = "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com"
-const val GOOGLE_CLIENT_ID_DEBUG = "981655295954-maihrajbh4h1mv3j118q4a60r4sjcb7d.apps.googleusercontent.com"
 val fbReadPermissionNeeds = listOf(
     "email", "public_profile"
 )
@@ -11,11 +12,8 @@ val fbReadPermissionNeeds = listOf(
 const val STEP_AUTH = 0
 const val STEP_LOGIN = 0
 
-// TODO: zhangfei 补充正式环境clientId
-const val APPLE_CLIENT_ID = "com.wenext.chat"
-
 const val CODE_COUNT_DOWN_TIME = 60
 const val EMAIL_VERIFY_CODE_LENGTH = 6
 const val EMAIL_LENGTH = 64
 const val GOOGLE_CODE_COUNT_DOWN_TIME = 25
-const val MIN_EMAIL_ACCOUNT=2
+const val MIN_EMAIL_ACCOUNT = 2

+ 6 - 0
module/account/src/main/java/com/adealink/weparty/account/login/LoginActivity.kt

@@ -1,5 +1,6 @@
 package com.adealink.weparty.account.login
 
+import android.content.Intent
 import android.graphics.drawable.ColorDrawable
 import android.view.WindowManager
 import androidx.activity.viewModels
@@ -125,4 +126,9 @@ class LoginActivity : BaseLoginActivity() {
             }
         }
     }
+
+    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+        super.onActivityResult(requestCode, resultCode, data)
+        loginViewModel.handleOnActivityResult(requestCode, resultCode, data)
+    }
 }

+ 0 - 31
module/account/src/main/java/com/adealink/weparty/account/login/LoginDialog.kt

@@ -1,6 +1,5 @@
 package com.adealink.weparty.account.login
 
-import android.content.Intent
 import android.graphics.Color
 import android.graphics.drawable.ColorDrawable
 import android.os.Bundle
@@ -240,41 +239,11 @@ class LoginDialog : BaseDialogFragment(R.layout.dialog_login) {
                     }
                 }
             )
-            append(getCompatString(R.string.account_separator))
-            append(
-                buildSpannedString {
-                    append(childPolicy).apply {
-                        safeSetSpan(
-                            object : ColorClickSpan(APP_R.color.color_FF55CCFF) {
-                                override fun onClick(widget: View) {
-                                    super.onClick(widget)
-                                    activity?.let { act ->
-                                        Router.build(act, Web.FullScreen.PATH)
-                                            .putExtra(
-                                                Web.Common.EXTRA_URL,
-                                                UrlConfig.childSafetyPolicy
-                                            )
-                                            .start()
-                                    }
-                                }
-                            },
-                            0,
-                            childPolicy.length,
-                            Spanned.SPAN_INCLUSIVE_EXCLUSIVE
-                        )
-                    }
-                }
-            )
         }
 
         binding.userAgreementTv.text = agreementBuilder
     }
 
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        super.onActivityResult(requestCode, resultCode, data)
-        loginViewModel.handleOnActivityResult(requestCode, resultCode, data)
-    }
-
     private fun copyDeviceId() {
         copyDeviceIdToClipBoard()
         showToast(R.string.account_copy_device_id_success)

+ 28 - 1
module/account/src/main/java/com/adealink/weparty/account/login/auth/GoogleAuth.kt

@@ -106,11 +106,25 @@ class GoogleAuth(
                 } catch (e: IntentSender.SendIntentException) {
                     Log.e(
                         TAG_GOOGLE_AUTH,
-                        "oneTapSignInA, SendIntentException, e:${e.localizedMessage}"
+                        "oneTapSignIn, SendIntentException, e:${e.localizedMessage}"
                     )
                     sendIntentFailed()
                 }
             }
+            .addOnCanceledListener {
+                Log.i(
+                    TAG_GOOGLE_AUTH,
+                    "oneTapSignIn, start one tap ui cancel"
+                )
+                signInFailed()
+            }
+            .addOnCompleteListener {
+                Log.i(
+                    TAG_GOOGLE_AUTH,
+                    "oneTapSignIn, start one tap ui complete, isSuccessful: ${it.isSuccessful}"
+                )
+
+            }
             .addOnFailureListener { e ->
                 Log.e(
                     TAG_GOOGLE_AUTH,
@@ -149,6 +163,19 @@ class GoogleAuth(
                     failed()
                 }
             }
+            .addOnCanceledListener {
+                Log.e(
+                    TAG_GOOGLE_AUTH,
+                    "oneTapSignUp, start one tap ui cancel"
+                )
+                failed()
+            }
+            .addOnCompleteListener {
+                Log.i(
+                    TAG_GOOGLE_AUTH,
+                    "oneTapSignUp, start one tap ui complete, isSuccessful:${it.isSuccessful}"
+                )
+            }
             .addOnFailureListener {
                 Log.e(
                     TAG_GOOGLE_AUTH,

+ 35 - 3
module/order/src/main/java/com/adealink/weparty/order/PlaymateOrderListActivity.kt

@@ -19,6 +19,7 @@ import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceIte
 import com.adealink.weparty.commonui.toast.util.showFailedToast
 import com.adealink.weparty.module.order.Order
 import com.adealink.weparty.order.adapter.PlaymateListItemViewBinder
+import com.adealink.weparty.order.data.PlaymateOrderData
 import com.adealink.weparty.order.data.PlaymateOrderListItemData
 import com.adealink.weparty.order.databinding.ActivityPlaymateOrderListBinding
 import com.adealink.weparty.order.viewmodel.OrderViewModelFactory
@@ -27,8 +28,9 @@ import com.scwang.smart.refresh.layout.api.RefreshLayout
 import com.scwang.smart.refresh.layout.listener.OnRefreshLoadMoreListener
 import com.adealink.weparty.R as APP_R
 
-@RouterUri(path = [Order.PlaymateList.PATH], desc = "陪玩列表")
-class PlaymateOrderListActivity : BaseActivity() {
+@RouterUri(path = [Order.PlaymateList.PATH], desc = "陪玩接单列表")
+class PlaymateOrderListActivity : BaseActivity(),
+    PlaymateListItemViewBinder.OnPlaymateOrderListener {
 
     companion object {
         private const val TAG = "PlaymateOrderListActivity"
@@ -66,7 +68,7 @@ class PlaymateOrderListActivity : BaseActivity() {
             }
         })
 
-        listAdapter.register(PlaymateListItemViewBinder())
+        listAdapter.register(PlaymateListItemViewBinder(this))
         binding.rvOrder.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
         binding.rvOrder.adapter = listAdapter
         binding.rvOrder.addItemDecoration(
@@ -104,4 +106,34 @@ class PlaymateOrderListActivity : BaseActivity() {
         }
     }
 
+    override fun accept(data: PlaymateOrderData) {
+        viewModel.accept(data).observe(this) {
+            showFailedToast(it)
+        }
+    }
+
+    override fun refuse(data: PlaymateOrderData) {
+        viewModel.refuse(data).observe(this) {
+            showFailedToast(it)
+        }
+    }
+
+    override fun startService(data: PlaymateOrderData) {
+        viewModel.startService(data).observe(this) {
+            showFailedToast(it)
+        }
+    }
+
+    override fun complete(data: PlaymateOrderData) {
+        viewModel.complete(data).observe(this) {
+            showFailedToast(it)
+        }
+    }
+
+    override fun submitEvidence(data: PlaymateOrderData) {
+        viewModel.submitEvidence(data).observe(this) {
+            showFailedToast(it)
+        }
+    }
+
 }

+ 2 - 2
module/order/src/main/java/com/adealink/weparty/order/adapter/OrderListItemViewBinder.kt

@@ -34,8 +34,6 @@ class OrderListItemViewBinder(
         }
 
         holder.binding.tvTime.text = item.data.createTime.formatTimeStr()
-        val status = OrderStatus.map(item.data.status)
-        setUserOrderStatusText(holder.binding.tvOrderStatus, status, item.data.refundApply)
 
         holder.binding.ivAvatar.setImageUrl(item.data.avatar)
         holder.binding.tvName.text = item.data.nickname
@@ -44,6 +42,8 @@ class OrderListItemViewBinder(
         holder.binding.tvCount.text = "${item.data.unit} x${item.data.purchaseQty}"
         holder.binding.tvOrderAllCost.text = getOrderAllCost(item.data.price, item.data.purchaseQty)
 
+        val status = OrderStatus.map(item.data.status)
+        setUserOrderStatusText(holder.binding.tvOrderStatus, status, item.data.refundApply)
         when {
             item.data.refundApply -> {
                 holder.binding.btnComplete.gone()

+ 130 - 4
module/order/src/main/java/com/adealink/weparty/order/adapter/PlaymateListItemViewBinder.kt

@@ -1,26 +1,152 @@
 package com.adealink.weparty.order.adapter
 
+import android.annotation.SuppressLint
 import android.view.LayoutInflater
 import android.view.ViewGroup
+import com.adealink.frame.aab.util.getCompatString
+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.recycleview.adapter.BindingViewHolder
 import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
-import com.adealink.weparty.order.data.UserOrderListItemData
+import com.adealink.weparty.module.order.data.OrderStatus
+import com.adealink.weparty.order.R
+import com.adealink.weparty.order.data.PlaymateOrderData
+import com.adealink.weparty.order.data.PlaymateOrderListItemData
 import com.adealink.weparty.order.databinding.LayoutPlaymateOrderListItemBinding
+import com.adealink.weparty.order.util.setUserOrderStatusText
+import com.adealink.weparty.util.formatTimeStr
+import com.adealink.weparty.util.getGenderResource
 
 class PlaymateListItemViewBinder(
-) : ItemViewBinder<UserOrderListItemData, BindingViewHolder<LayoutPlaymateOrderListItemBinding>>() {
+    val listener: OnPlaymateOrderListener
+) : ItemViewBinder<PlaymateOrderListItemData, BindingViewHolder<LayoutPlaymateOrderListItemBinding>>() {
 
+    @SuppressLint("SetTextI18n")
     override fun onBindViewHolder(
         holder: BindingViewHolder<LayoutPlaymateOrderListItemBinding>,
-        item: UserOrderListItemData,
+        item: PlaymateOrderListItemData,
     ) {
+        holder.binding.tvTime.text = item.data.createTime.formatTimeStr()
+
+        holder.binding.ivCategory.setImageUrl(item.data.categoryIcon)
+        holder.binding.tvCategory.text = item.data.bizCategoryName
+
+        holder.binding.tvPrice.text = item.data.price.toString()
+        holder.binding.tvCount.text = "${item.data.unit} x${item.data.purchaseQty}"
+
+        holder.binding.ivAvatar.setImageUrl(item.data.avatar)
+        holder.binding.tvName.text = item.data.nickname
+        holder.binding.ivGender.setImageResource(getGenderResource(item.data.gender))
+
+        holder.binding.tvRequestContent.text = item.data.customerRemark
+
+        val status = OrderStatus.map(item.data.status)
+        setUserOrderStatusText(holder.binding.tvOrderStatus, status, item.data.refundApply)
+        when {
+            item.data.refundApply -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.show()
+                holder.binding.btnSubmitEvidence.onClick {
+                    listener.submitEvidence(item.data)
+                }
+            }
+
+            status == OrderStatus.CREATE_ORDER
+                    || status == OrderStatus.WAIT_FOR_ACCEPT -> {
+                holder.binding.btnFinish.show()
+                holder.binding.btnFinish.text = getCompatString(R.string.playmate_order_accept)
+                holder.binding.btnFinish.onClick {
+                    listener.accept(item.data)
+                }
+                holder.binding.btnRefuse.show()
+                holder.binding.btnRefuse.onClick {
+                    listener.refuse(item.data)
+                }
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+
+            status == OrderStatus.PLAYMATE_ACCEPT -> {
+                holder.binding.btnFinish.show()
+                holder.binding.btnFinish.text = getCompatString(R.string.playmate_order_start_service)
+                holder.binding.btnFinish.onClick {
+                    listener.startService(item.data)
+                }
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+
+            status == OrderStatus.USER_CANCEL -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+            status == OrderStatus.PLAYMATE_IN_SERVICE -> {
+                holder.binding.btnFinish.show()
+                holder.binding.btnFinish.text = getCompatString(R.string.playmate_order_complete)
+                holder.binding.btnFinish.onClick {
+                    listener.complete(item.data)
+                }
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+            status == OrderStatus.PLAYMATE_REFUSE -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+            status == OrderStatus.USER_REFUND -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.show()
+                holder.binding.btnSubmitEvidence.onClick {
+                    listener.submitEvidence(item.data)
+                }
+            }
+
+            status == OrderStatus.PLAYMATE_END_SERVICE -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+
+            status == OrderStatus.COMPLETE -> {
+                holder.binding.btnFinish.gone()
+                holder.binding.btnRefuse.gone()
+                holder.binding.btnSubmitEvidence.gone()
+            }
+        }
     }
 
     override fun onCreateViewHolder(
         inflater: LayoutInflater,
         parent: ViewGroup,
     ): BindingViewHolder<LayoutPlaymateOrderListItemBinding> {
-        return BindingViewHolder(LayoutPlaymateOrderListItemBinding.inflate(inflater, parent, false))
+        return BindingViewHolder(
+            LayoutPlaymateOrderListItemBinding.inflate(
+                inflater,
+                parent,
+                false
+            )
+        )
+    }
+
+    interface OnPlaymateOrderListener {
+        fun accept(data: PlaymateOrderData)
+
+        fun refuse(data: PlaymateOrderData)
+
+        fun startService(data: PlaymateOrderData)
+
+        fun complete(data: PlaymateOrderData)
+
+        fun submitEvidence(data: PlaymateOrderData)
     }
 
 }

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

@@ -25,7 +25,7 @@ fun setUserOrderStatusText(
     if (isRefundApply == true) {
         textView.text =
             getCompatString(R.string.user_order_status_refund_under_review_desc)
-        textView.setTextColor(getCompatColor(APP_R.color.color_FFFFB836))
+        textView.setTextColor(getCompatColor(APP_R.color.color_FFF23051))
         return
     }
     when (status) {

+ 41 - 0
module/order/src/main/java/com/adealink/weparty/order/viewmodel/PlaymateOrderViewModel.kt

@@ -1,11 +1,14 @@
 package com.adealink.weparty.order.viewmodel
 
+import androidx.lifecycle.LiveData
 import androidx.lifecycle.MutableLiveData
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.livedata.ExtMutableLiveData
+import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
 import com.adealink.frame.network.data.PageReq
 import com.adealink.weparty.App
+import com.adealink.weparty.order.data.PlaymateOrderData
 import com.adealink.weparty.order.data.PlaymateOrderListItemData
 import com.adealink.weparty.order.data.PlaymateOrderListReq
 import com.adealink.weparty.order.datasource.remote.OrderHttpService
@@ -56,4 +59,42 @@ class PlaymateOrderViewModel : BaseViewModel() {
         }
     }
 
+
+    fun accept(data: PlaymateOrderData): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+
+        }
+        return liveData
+    }
+
+    fun refuse(data: PlaymateOrderData): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+
+        }
+        return liveData
+    }
+
+    fun startService(data: PlaymateOrderData): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+
+        }
+        return liveData
+    }
+
+    fun complete(data: PlaymateOrderData): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        viewModelScope.launch {
+
+        }
+        return liveData
+    }
+
+    fun submitEvidence(data: PlaymateOrderData): LiveData<Rlt<Any>> {
+        val liveData = OnceMutableLiveData<Rlt<Any>>()
+        return liveData
+    }
+
 }

+ 8 - 0
module/order/src/main/res/drawable/playmate_order_userinfo_bg.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners android:radius="12dp" />
+    <solid android:color="@color/color_FFF9FAFB" />
+
+</shape>

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

@@ -12,7 +12,7 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:top_bar_title="@string/order_list_title" />
+        app:top_bar_title="@string/playmate_order_title" />
 
     <com.scwang.smart.refresh.layout.SmartRefreshLayout
         android:id="@+id/v_refresh"
@@ -30,7 +30,7 @@
             android:layout_height="match_parent"
             android:layout_marginHorizontal="16dp"
             tools:itemCount="3"
-            tools:listitem="@layout/layout_user_order_list_item" />
+            tools:listitem="@layout/layout_playmate_order_list_item" />
 
     </com.scwang.smart.refresh.layout.SmartRefreshLayout>
 

+ 116 - 59
module/order/src/main/res/layout/layout_playmate_order_list_item.xml

@@ -60,7 +60,7 @@
         app:layout_constraintTop_toBottomOf="@id/cl_top">
 
         <com.adealink.weparty.commonui.imageview.AvatarView
-            android:id="@+id/iv_avatar"
+            android:id="@+id/iv_category"
             android:layout_width="36dp"
             android:layout_height="36dp"
             android:layout_marginTop="10dp"
@@ -68,28 +68,27 @@
             app:layout_constraintTop_toTopOf="parent" />
 
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_name"
+            android:id="@+id/tv_category"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="8dp"
             android:layout_marginEnd="40dp"
             android:ellipsize="end"
-            android:fontFamily="@font/poppins_semibold"
             android:includeFontPadding="false"
             android:singleLine="true"
             android:textColor="@color/color_FF1D2129"
             android:textSize="14sp"
             app:layout_constrainedWidth="true"
-            app:layout_constraintEnd_toStartOf="@id/cl_right"
+            app:layout_constraintEnd_toStartOf="@id/cl_order_right"
             app:layout_constraintHorizontal_bias="0"
             app:layout_constraintHorizontal_chainStyle="packed"
-            app:layout_constraintStart_toEndOf="@id/iv_avatar"
-            app:layout_constraintTop_toTopOf="@id/iv_avatar"
+            app:layout_constraintStart_toEndOf="@id/iv_category"
+            app:layout_constraintTop_toTopOf="@id/iv_category"
             app:layout_constraintVertical_chainStyle="packed"
             tools:text="Super Beautiful Girl Super Beautiful Girl Super Beautiful Girl" />
 
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_desc"
+            android:id="@+id/tv_order_id"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginEnd="40dp"
@@ -97,22 +96,22 @@
             android:includeFontPadding="false"
             android:singleLine="true"
             android:textColor="@color/color_FF1D2129"
-            android:textSize="12sp"
+            android:textSize="11sp"
             app:layout_constrainedWidth="true"
-            app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
-            app:layout_constraintEnd_toStartOf="@id/cl_right"
+            app:layout_constraintBottom_toBottomOf="@id/iv_category"
+            app:layout_constraintEnd_toStartOf="@id/cl_order_right"
             app:layout_constraintHorizontal_bias="0"
-            app:layout_constraintStart_toStartOf="@id/tv_name"
-            app:layout_constraintTop_toBottomOf="@id/tv_name"
+            app:layout_constraintStart_toStartOf="@id/tv_category"
+            app:layout_constraintTop_toBottomOf="@id/tv_category"
             tools:text="LOL Mobile" />
 
         <androidx.constraintlayout.widget.ConstraintLayout
-            android:id="@+id/cl_right"
+            android:id="@+id/cl_order_right"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
+            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintTop_toTopOf="@id/iv_avatar">
+            app:layout_constraintTop_toTopOf="parent">
 
             <androidx.appcompat.widget.AppCompatImageView
                 android:layout_width="14dp"
@@ -151,6 +150,95 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_user_info"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:background="@drawable/playmate_order_userinfo_bg"
+        android:padding="8dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/cl_order_info">
+
+        <com.adealink.weparty.commonui.imageview.AvatarView
+            android:id="@+id/iv_avatar"
+            android:layout_width="23dp"
+            android:layout_height="23dp"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
+            app:layout_constraintEnd_toStartOf="@id/iv_gender"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintStart_toEndOf="@id/iv_avatar"
+            app:layout_constraintTop_toTopOf="@id/iv_avatar"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:text="Super Beautiful " />
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_gender"
+            android:layout_width="14dp"
+            android:layout_height="14dp"
+            android:layout_marginStart="3dp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_name"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/tv_name"
+            app:layout_constraintTop_toTopOf="@id/tv_name"
+            app:srcCompat="@drawable/common_female_ic" />
+
+        <View
+            android:layout_width="0dp"
+            android:layout_height="1dp"
+            android:layout_marginTop="4dp"
+            android:background="@color/color_FFE5E6EB"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/iv_avatar" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_request"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/iv_avatar"
+            tools:text="Super Beautiful" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_request_content"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="11sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_request"
+            tools:text="Super Beautiful" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
     <androidx.constraintlayout.widget.ConstraintLayout
         android:id="@+id/cl_bottom"
         android:layout_width="0dp"
@@ -159,7 +247,7 @@
         android:minHeight="40dp"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/cl_order_info">
+        app:layout_constraintTop_toBottomOf="@id/cl_user_info">
 
         <!-- 完成订单 -->
         <com.adealink.weparty.commonui.widget.CommonButton
@@ -170,17 +258,16 @@
             android:includeFontPadding="false"
             android:minWidth="80dp"
             android:paddingHorizontal="6dp"
-            app:layout_constraintBottom_toTopOf="@id/btn_cancel"
-            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintTop_toTopOf="parent"
-            app:layout_constraintVertical_chainStyle="packed"
             app:text="@string/order_btn_finish"
             app:textColor="@color/white"
             app:textSize="12sp" />
 
-        <!-- 取消订单 -->
+        <!-- 拒绝订单 -->
         <com.adealink.weparty.commonui.widget.CommonButton
-            android:id="@+id/btn_cancel"
+            android:id="@+id/btn_refuse"
             android:layout_width="wrap_content"
             android:layout_height="30dp"
             android:gravity="center"
@@ -188,16 +275,16 @@
             android:minWidth="80dp"
             android:paddingHorizontal="6dp"
             app:common_button_type="cancel"
-            app:layout_constraintBottom_toTopOf="@id/btn_evaluate"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/btn_finish"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/btn_finish"
+            app:layout_constraintTop_toTopOf="parent"
             app:text="@string/commonui_cancel"
             app:textColor="@color/white"
             app:textSize="12sp" />
 
-        <!-- 去评价 -->
+        <!-- 提交凭证 -->
         <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/btn_evaluate"
+            android:id="@+id/btn_submit_evidence"
             android:layout_width="wrap_content"
             android:layout_height="30dp"
             android:background="@drawable/order_button_evaluate_bg"
@@ -207,42 +294,12 @@
             android:minWidth="80dp"
             android:paddingHorizontal="6dp"
             android:paddingVertical="3dp"
-            android:text="@string/order_btn_evaluate"
+            android:text="@string/playmate_order_submit_evidence"
             android:textColor="@color/color_FF3FBFBD"
             android:textSize="12sp"
-            app:layout_constraintBottom_toTopOf="@id/tv_refunded"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/btn_cancel" />
-
-        <!-- 退款 -->
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_refunded"
-            android:layout_width="wrap_content"
-            android:layout_height="30dp"
-            android:gravity="start|center_vertical"
-            android:includeFontPadding="false"
-            android:minWidth="80dp"
-            android:paddingHorizontal="6dp"
-            android:paddingVertical="3dp"
-            android:text="@string/order_refunded_success"
-            android:textColor="@color/color_FF86909C"
-            android:textSize="11sp"
             app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toBottomOf="@id/btn_evaluate" />
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_order_all_cost"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:includeFontPadding="false"
-            android:textColor="@color/color_FF1D2129"
-            android:textSize="12sp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintTop_toTopOf="parent"
-            tools:text="共计: 16000" />
-
+            app:layout_constraintEnd_toStartOf="@id/btn_refuse"
+            app:layout_constraintTop_toTopOf="parent" />
     </androidx.constraintlayout.widget.ConstraintLayout>
 
 </androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -26,4 +26,10 @@
     <string name="order_evaluate_title">您对陪玩师满意吗?</string>
     <string name="order_evaluate_left_title">Overall</string>
     <string name="order_evaluate_right_title">Rate</string>
+
+    <string name="playmate_order_title">接单记录</string>
+    <string name="playmate_order_submit_evidence">提交凭证</string>
+    <string name="playmate_order_accept">接受</string>
+    <string name="playmate_order_start_service">开始服务</string>
+    <string name="playmate_order_complete">完成</string>
 </resources>

+ 1 - 1
module/setting/src/main/java/com/adealink/weparty/setting/about/AboutActivity.kt

@@ -81,7 +81,7 @@ class AboutActivity : BaseActivity() {
         Router.build(this, Web.FullScreen.PATH)
             .putExtra(
                 Web.Common.EXTRA_URL,
-                UrlConfig.childSafetyPolicy
+                UrlConfig.communityPolicy
             )
             .start()
     }

+ 1 - 0
module/setting/src/main/res/layout/activity_about.xml

@@ -123,6 +123,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:paddingVertical="12dp"
+                    android:visibility="gone"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@id/v_terms_service">