Browse Source

feat: 完成陪玩页面

DoggyZhang 4 months ago
parent
commit
1c4ee8410b
91 changed files with 1835 additions and 624 deletions
  1. 4 2
      app/build.gradle
  2. 1 1
      app/src/main/java/com/adealink/weparty/commonui/drag/DragViewContainer.kt
  3. 53 11
      app/src/main/java/com/adealink/weparty/commonui/widget/EvaluateView.kt
  4. 60 0
      app/src/main/java/com/adealink/weparty/commonui/widget/NumberIncreaseView.kt
  5. 0 9
      app/src/main/java/com/adealink/weparty/commonui/widget/progress/IPKProgressBar.kt
  6. 0 215
      app/src/main/java/com/adealink/weparty/commonui/widget/progress/PKProgressBar.kt
  7. 7 0
      app/src/main/java/com/adealink/weparty/module/order/IOrderService.kt
  8. 23 0
      app/src/main/java/com/adealink/weparty/module/order/OrderModule.kt
  9. 15 0
      app/src/main/java/com/adealink/weparty/module/order/Router.kt
  10. 4 0
      app/src/main/java/com/adealink/weparty/module/order/listener/IOrderListener.kt
  11. 4 0
      app/src/main/java/com/adealink/weparty/module/order/viewmodel/IOrderViewModel.kt
  12. 6 0
      app/src/main/java/com/adealink/weparty/module/playmate/Router.kt
  13. 13 0
      app/src/main/java/com/adealink/weparty/module/profile/Router.kt
  14. 1 17
      app/src/main/java/com/adealink/weparty/module/profile/data/ProfileConstants.kt
  15. 3 0
      app/src/main/java/com/adealink/weparty/module/profile/data/ProfileData2.kt
  16. 4 1
      app/src/main/java/com/adealink/weparty/ui/home/HomeFragment.kt
  17. 0 3
      app/src/main/java/com/adealink/weparty/ui/home/tab/HomeTab.kt
  18. 0 0
      app/src/main/res/drawable-xhdpi/common_evaluate_star_normal_ic.png
  19. 0 0
      app/src/main/res/drawable-xhdpi/common_evaluate_star_selected_ic.png
  20. BIN
      app/src/main/res/drawable-xhdpi/common_introduce_ic.png
  21. BIN
      app/src/main/res/drawable-xhdpi/common_location_ic.png
  22. BIN
      app/src/main/res/drawable-xhdpi/common_number_minus_diable_ic.png
  23. BIN
      app/src/main/res/drawable-xhdpi/common_number_minus_ic.png
  24. BIN
      app/src/main/res/drawable-xhdpi/common_umber_add_ic.png
  25. 44 0
      app/src/main/res/layout/layout_number_increase_view.xml
  26. 9 143
      app/src/main/res/values/attrs.xml
  27. 1 0
      app/src/main/res/values/colors.xml
  28. 3 0
      app/src/main/res/values/strings.xml
  29. 1 0
      app/src/main/resources/META-INF/services/com.adealink.frame.router.IRouterInit
  30. 0 15
      module/activity/src/main/java/com/adealink/weparty/activity/list/ActivityHomeListFragment.kt
  31. 0 34
      module/activity/src/main/res/layout/fragment_activity_home_list.xml
  32. 0 103
      module/activity/src/main/res/layout/layout_activity_home_list_filter.xml
  33. 0 47
      module/activity/src/main/res/layout/layout_activity_home_list_top.xml
  34. 1 0
      module/order/.gitignore
  35. 56 0
      module/order/build.gradle
  36. 0 0
      module/order/consumer-rules.pro
  37. 21 0
      module/order/proguard-rules.pro
  38. 19 0
      module/order/src/main/AndroidManifest.xml
  39. 15 0
      module/order/src/main/java/com/adealink/weparty/order/OrderServiceImpl.kt
  40. 17 0
      module/order/src/main/java/com/adealink/weparty/order/datasource/local/OrderLocalService.kt
  41. 5 0
      module/order/src/main/java/com/adealink/weparty/order/datasource/remote/OrderHttpService.kt
  42. 8 0
      module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModel.kt
  43. 21 0
      module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModelFactory.kt
  44. 3 0
      module/order/src/main/res/values-in/strings.xml
  45. 3 0
      module/order/src/main/res/values-zh/strings.xml
  46. 3 0
      module/order/src/main/res/values/attrs.xml
  47. 3 0
      module/order/src/main/res/values/dimens.xml
  48. 4 0
      module/order/src/main/res/values/ids.xml
  49. 3 0
      module/order/src/main/res/values/strings.xml
  50. 1 0
      module/order/src/main/resources/META-INF/services/com.adealink.weparty.module.order.OrderService
  51. 6 1
      module/playmate/src/main/AndroidManifest.xml
  52. 20 0
      module/playmate/src/main/java/com/adealink/weparty/playmate/detail/PlaymateDetailActivity.kt
  53. 7 0
      module/playmate/src/main/res/layout/activity_playmate_detail.xml
  54. 6 1
      module/profile/src/main/AndroidManifest.xml
  55. 54 0
      module/profile/src/main/java/com/adealink/weparty/profile/ProfileTab.kt
  56. 104 0
      module/profile/src/main/java/com/adealink/weparty/profile/UserProfileActivity.kt
  57. 40 0
      module/profile/src/main/java/com/adealink/weparty/profile/comp/BaseProfileViewComp.kt
  58. 31 0
      module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileBottomComp.kt
  59. 39 0
      module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileHeaderComp.kt
  60. 129 0
      module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileToolBarViewComp.kt
  61. 44 0
      module/profile/src/main/java/com/adealink/weparty/profile/dialog/CreateOrderDialog.kt
  62. 18 0
      module/profile/src/main/java/com/adealink/weparty/profile/dialog/EvaluateDialog.kt
  63. 27 0
      module/profile/src/main/java/com/adealink/weparty/profile/dialog/adapter/OrderGoodItemViewBinder.kt
  64. 10 0
      module/profile/src/main/java/com/adealink/weparty/profile/dialog/data/CreateOrderData.kt
  65. 16 0
      module/profile/src/main/java/com/adealink/weparty/profile/ui/about/ProfileFragment.kt
  66. 48 0
      module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/PhotoWallFragment.kt
  67. 26 0
      module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/adapter/PhotoItemViewBinder.kt
  68. 10 0
      module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/data/ProfilePhotoData.kt
  69. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_create_order_button_bg.9.png
  70. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_skill_bg.png
  71. 12 0
      module/profile/src/main/res/drawable/profile_bottom_layout_bg.xml
  72. 10 0
      module/profile/src/main/res/drawable/profile_create_order_price_bg.xml
  73. 8 0
      module/profile/src/main/res/drawable/profile_order_good_bg.xml
  74. 11 0
      module/profile/src/main/res/drawable/profile_order_good_selected_bg.xml
  75. 11 0
      module/profile/src/main/res/drawable/profile_tab_bg.xml
  76. 3 3
      module/profile/src/main/res/drawable/profile_tab_collapse_bg.xml
  77. 91 0
      module/profile/src/main/res/layout/activity_user_profile.xml
  78. 115 0
      module/profile/src/main/res/layout/dialog_create_order.xml
  79. 73 0
      module/profile/src/main/res/layout/dialog_evaluate.xml
  80. 12 0
      module/profile/src/main/res/layout/fragment_photo_wall.xml
  81. 60 0
      module/profile/src/main/res/layout/fragment_profile.xml
  82. 49 0
      module/profile/src/main/res/layout/layout_order_good_item.xml
  83. 6 0
      module/profile/src/main/res/layout/layout_photo_wall_item.xml
  84. 28 0
      module/profile/src/main/res/layout/layout_profile_bottom.xml
  85. 86 0
      module/profile/src/main/res/layout/layout_profile_introduce.xml
  86. 17 18
      module/profile/src/main/res/layout/layout_profile_skill.xml
  87. 62 0
      module/profile/src/main/res/layout/layout_profile_skill_item.xml
  88. 98 0
      module/profile/src/main/res/layout/layout_user_profile_header.xml
  89. 1 0
      module/profile/src/main/res/values/dimens.xml
  90. 7 0
      module/profile/src/main/res/values/strings.xml
  91. 1 0
      settings.gradle

+ 4 - 2
app/build.gradle

@@ -90,9 +90,10 @@ android {
         versionCode vc
         versionName vn
 
+        //TODO: 替换fbAppId
         manifestPlaceholders = [
-                fbAppId         : "623244786994791",
-                fbClientToken   : "d4f871dc66d01eb357146318d6b63a09",
+                fbAppId         : "",
+                fbClientToken   : "",
                 deepLinkScheme  : "partyki",
                 deepLinkHost    : "yoki",
                 httpDeepLinkHost: "yoki.chat"
@@ -215,6 +216,7 @@ android {
             ':module:playmate',
             ':module:activity',
             ':module:setting',
+            ':module:order',
     ]
     buildFeatures {
         viewBinding true

+ 1 - 1
app/src/main/java/com/adealink/weparty/commonui/drag/DragViewContainer.kt

@@ -38,7 +38,7 @@ open class DragViewContainer @JvmOverloads constructor(context: Context, attrs:
         }
         context.theme.obtainStyledAttributes(
             attrs,
-            R.styleable.GameButton,
+            R.styleable.FloatViewContainer,
             0, 0
         ).apply {
             val top = getDimensionPixelSize(R.styleable.FloatViewContainer_float_rect_top, 0)

+ 53 - 11
app/src/main/java/com/adealink/weparty/commonui/widget/EvaluateView.kt

@@ -4,7 +4,7 @@ import android.content.Context
 import android.util.AttributeSet
 import androidx.appcompat.widget.AppCompatImageView
 import androidx.appcompat.widget.LinearLayoutCompat
-import com.adealink.frame.aab.util.getCompatDrawable
+import androidx.core.content.withStyledAttributes
 import com.adealink.weparty.R
 import kotlin.math.min
 
@@ -15,12 +15,43 @@ class EvaluateView @JvmOverloads constructor(
     private var maxScore = 5 //最高评分
     private var curScore = 5 //当前评分
     private var itemViewSize = 10
-    private var itemDivider = 4
+    private var itemDivide = 4
+
+    private var normalResourceId: Int = R.drawable.common_evaluate_star_normal_ic
+    private var selectedResourceId: Int = R.drawable.common_evaluate_star_selected_ic
 
     init {
+        context.withStyledAttributes(
+            attrs,
+            R.styleable.EvaluateView
+        ) {
+            maxScore = getInt(
+                R.styleable.EvaluateView_evaluate_max,
+                maxScore
+            )
+            curScore = getInt(
+                R.styleable.EvaluateView_evaluate_current,
+                curScore
+            )
+            itemViewSize = getDimensionPixelSize(
+                R.styleable.EvaluateView_evaluate_width,
+                itemViewSize
+            )
+            itemDivide = getDimensionPixelSize(
+                R.styleable.EvaluateView_evaluate_divide,
+                itemDivide
+            )
+            normalResourceId = getResourceId(
+                R.styleable.EvaluateView_evaluate_normal_src,
+                R.drawable.common_evaluate_star_normal_ic
+            )
+            selectedResourceId = getResourceId(
+                R.styleable.EvaluateView_evaluate_selected_src,
+                R.drawable.common_evaluate_star_selected_ic
+            )
+        }
+
         inflateEvaluateView()
-        setShowDividers(SHOW_DIVIDER_MIDDLE)
-        setDividerDrawable(getCompatDrawable(R.drawable.common_evaluate_view_divider))
     }
 
     fun setMaxScore(score: Int) {
@@ -36,14 +67,13 @@ class EvaluateView @JvmOverloads constructor(
         if (curScore == score) {
             return
         }
-        curScore = score
-        val ii = min(curScore, childCount)
+        curScore = min(score, childCount)
         for (i in 0 until childCount) {
             val itemView = getChildAt(i) as? AppCompatImageView ?: return
             if (i < score) {
-                itemView.setImageResource(R.drawable.common_evaluate_star_ic)
+                itemView.setImageResource(selectedResourceId)
             } else {
-                itemView.setImageResource(R.drawable.common_evaluate_star_disable_ic)
+                itemView.setImageResource(normalResourceId)
             }
         }
     }
@@ -52,11 +82,23 @@ class EvaluateView @JvmOverloads constructor(
         removeAllViews()
         for (i in 0 until maxScore) {
             val itemView = AppCompatImageView(context)
-            addView(itemView, LayoutParams(itemViewSize, itemViewSize))
+            itemView.tag = (i + 1)
+            itemView.setOnClickListener {
+                setCurScore((itemView.tag as? Int) ?: 0)
+            }
+            //添加控件
+            if (i > 0) {
+                addView(itemView, LayoutParams(itemViewSize, itemViewSize).apply {
+                    marginStart = itemDivide
+                })
+            } else {
+                addView(itemView, LayoutParams(itemViewSize, itemViewSize))
+            }
+
             if (i < curScore) {
-                itemView.setImageResource(R.drawable.common_evaluate_star_ic)
+                itemView.setImageResource(selectedResourceId)
             } else {
-                itemView.setImageResource(R.drawable.common_evaluate_star_disable_ic)
+                itemView.setImageResource(normalResourceId)
             }
         }
     }

+ 60 - 0
app/src/main/java/com/adealink/weparty/commonui/widget/NumberIncreaseView.kt

@@ -0,0 +1,60 @@
+package com.adealink.weparty.commonui.widget
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import com.adealink.weparty.R
+import com.adealink.weparty.databinding.LayoutNumberIncreaseViewBinding
+import kotlin.math.max
+import kotlin.math.min
+
+class NumberIncreaseView @JvmOverloads constructor(
+    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
+) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    companion object {
+        private const val MIN_NUMBER = 0
+        private const val MAX_NUMBER = 99
+    }
+
+    private val binding =
+        LayoutNumberIncreaseViewBinding.inflate(LayoutInflater.from(context), this)
+
+    private var number = 0
+
+    init {
+        context.withStyledAttributes(
+            attrs,
+            R.styleable.NumberIncreaseView
+        ) {
+            number = getInt(
+                R.styleable.NumberIncreaseView_default_number,
+                0
+            ).coerceIn(MIN_NUMBER, MAX_NUMBER)
+        }
+
+        binding.ivMinus.setOnClickListener {
+            clickMinus()
+        }
+        binding.ivAdd.setOnClickListener {
+            clickAdd()
+        }
+    }
+
+    private fun clickMinus() {
+        number = max(MIN_NUMBER, number - 1)
+        binding.tvNumber.text = number.toString()
+    }
+
+    private fun clickAdd() {
+        number = min(MAX_NUMBER, number + 1)
+        binding.tvNumber.text = number.toString()
+    }
+
+    fun getNumber(): Int {
+        return number
+    }
+
+}

+ 0 - 9
app/src/main/java/com/adealink/weparty/commonui/widget/progress/IPKProgressBar.kt

@@ -1,9 +0,0 @@
-package com.adealink.weparty.commonui.widget.progress
-
-interface IPKProgressBar {
-    fun updateScore(startScore: Int, endScore: Int)
-    fun updateStartScore(score: Int)
-    fun updateEndScore(score: Int)
-    fun getStartProgressLength(): Int
-    fun getEndProgressLength(): Int
-}

+ 0 - 215
app/src/main/java/com/adealink/weparty/commonui/widget/progress/PKProgressBar.kt

@@ -1,215 +0,0 @@
-package com.adealink.weparty.commonui.widget.progress
-
-import android.annotation.SuppressLint
-import android.content.Context
-import android.content.res.TypedArray
-import android.graphics.Canvas
-import android.graphics.Color
-import android.graphics.LinearGradient
-import android.graphics.Paint
-import android.graphics.Path
-import android.graphics.RectF
-import android.graphics.Shader
-import android.util.AttributeSet
-import android.view.View
-import com.adealink.frame.util.DisplayUtil
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.widget.progress.data.ProgressColor
-
-class PKProgressBar @JvmOverloads constructor(
-    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
-) : View(context, attrs, defStyleAttr), IPKProgressBar {
-    private var startScore: Int = 0
-    private var endScore: Int = 0
-    private var minProgressWidth = DisplayUtil.dp2px(20f)
-    private var paint: Paint = Paint()
-    private var startProgressColor = START_PROGRESS_COLOR
-    private var endProgressColor = END_PROGRESS_COLOR
-    private val path = Path()
-    private val startProgressRadiusArray: FloatArray =
-        floatArrayOf(50f, 50f, 0f, 0f, 0f, 0f, 50f, 50f)
-    private val endProgressRadiusArray: FloatArray =
-        floatArrayOf(0f, 0f, 50f, 50f, 50f, 50f, 0f, 0f)
-    private var showScore = true
-
-    init {
-        val typedArray: TypedArray = context.obtainStyledAttributes(
-            attrs,
-            R.styleable.PKProgressBar
-        )
-        showScore = typedArray.getBoolean(R.styleable.PKProgressBar_showScore, true)
-        typedArray.recycle()
-    }
-
-    private fun getLeftProgressColor(): ProgressColor {
-        return if (DisplayUtil.isRtlLayout()) {
-            endProgressColor
-        } else {
-            startProgressColor
-        }
-    }
-
-    private fun getRightProgressColor(): ProgressColor {
-        return if (DisplayUtil.isRtlLayout()) {
-            startProgressColor
-        } else {
-            endProgressColor
-        }
-    }
-
-    @SuppressLint("DrawAllocation")
-    override fun onDraw(canvas: Canvas) {
-        super.onDraw(canvas)
-        //计算左右进度宽度
-        val progressWidthPair = getProgressWidth()
-        val leftProgressWidth = if (DisplayUtil.isRtlLayout()) {
-            progressWidthPair.second
-        } else {
-            progressWidthPair.first
-        }
-        val rightProgressWidth = if (DisplayUtil.isRtlLayout()) {
-            progressWidthPair.first
-        } else {
-            progressWidthPair.second
-        }
-        //画左右进度
-        paint.shader = LinearGradient(
-            0f,
-            0f,
-            leftProgressWidth.toFloat(),
-            0f,
-            getLeftProgressColor().colors.toIntArray(),
-            getLeftProgressColor().positions.toFloatArray(),
-            Shader.TileMode.CLAMP
-        )
-        paint.isAntiAlias = true
-        drawRoundRect(
-            canvas,
-            RectF(0f, 0f, leftProgressWidth.toFloat(), height.toFloat()),
-            startProgressRadiusArray,
-            paint
-        )
-        paint.shader = LinearGradient(
-            rightProgressWidth.toFloat(),
-            0f,
-            width.toFloat(),
-            0f,
-            getRightProgressColor().colors.reversed().toIntArray(),
-            getRightProgressColor().positions.toFloatArray(),
-            Shader.TileMode.CLAMP
-        )
-        paint.isAntiAlias = true
-        drawRoundRect(
-            canvas,
-            RectF(
-                leftProgressWidth.toFloat(),
-                0f,
-                width.toFloat(),
-                height.toFloat()
-            ),
-            endProgressRadiusArray,
-            paint
-        )
-        if (!showScore) {
-            return
-        }
-        //画左右分数
-        paint.reset()
-        paint.color = Color.WHITE
-        paint.style = Paint.Style.FILL
-        paint.textSize = DisplayUtil.sp2px(12f).toFloat()
-        paint.isAntiAlias = true
-        val fontMetrics: Paint.FontMetrics = paint.fontMetrics
-        val distance = (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.bottom
-        val baseline: Float = height.toFloat() / 2 + distance
-        val leftScoreStr = "$startScore"
-        val leftScoreStrWidth = paint.measureText(leftScoreStr)
-        canvas.drawText("$startScore", if (DisplayUtil.isRtlLayout()) {
-            width.toFloat() - leftScoreStrWidth - DisplayUtil.dp2px(8f)
-        } else {
-            DisplayUtil.dp2px(8f).toFloat()
-        }, baseline, paint)
-        val rightScoreStr = "$endScore"
-        val rightScoreStrWidth = paint.measureText(rightScoreStr)
-        canvas.drawText(
-            rightScoreStr,
-            if (DisplayUtil.isRtlLayout()) {
-                DisplayUtil.dp2px(8f).toFloat()
-            } else {
-                width.toFloat() - rightScoreStrWidth - DisplayUtil.dp2px(8f)
-            },
-            baseline,
-            paint
-        )
-    }
-
-    private fun drawRoundRect(canvas: Canvas?, rect: RectF, radiusArray: FloatArray, paint: Paint) {
-        path.reset()
-        path.addRoundRect(rect, radiusArray, Path.Direction.CW)
-        canvas?.drawPath(path, paint)
-    }
-
-    /**
-     * first:start Length; second: end Length
-     */
-    private fun getProgressWidth(): Pair<Int, Int> {
-        val totalScore = startScore + endScore
-        var leftWidth: Int
-        var rightWidth: Int
-        if (totalScore == 0) {
-            leftWidth = width / 2
-            rightWidth = width / 2
-            return Pair(leftWidth, rightWidth)
-        }
-        leftWidth = (startScore.toFloat() / totalScore * width).toInt()
-        rightWidth = (endScore.toFloat() / totalScore * width).toInt()
-        if (leftWidth < minProgressWidth) {
-            leftWidth = minProgressWidth
-            rightWidth = width - minProgressWidth
-        }
-        if (rightWidth < minProgressWidth) {
-            rightWidth = minProgressWidth
-            leftWidth = width - minProgressWidth
-        }
-        return Pair(leftWidth, rightWidth)
-    }
-
-    override fun updateScore(startScore: Int, endScore: Int) {
-        this.startScore = startScore
-        this.endScore = endScore
-        invalidate()
-    }
-
-    override fun updateStartScore(score: Int) {
-        this.startScore = score
-        invalidate()
-    }
-
-    override fun updateEndScore(score: Int) {
-        this.endScore = score
-        invalidate()
-    }
-
-    override fun getStartProgressLength(): Int {
-        return getProgressWidth().first
-    }
-
-    override fun getEndProgressLength(): Int {
-        return getProgressWidth().second
-    }
-
-    companion object {
-        val START_PROGRESS_COLOR = ProgressColor(
-            colors = listOf(
-                Color.parseColor("#FFFF4646"),
-                Color.parseColor("#FFFF67BC")
-            ), positions = listOf(0f, 1f)
-        )
-        val END_PROGRESS_COLOR = ProgressColor(
-            colors = listOf(
-                Color.parseColor("#FF6F70FF"),
-                Color.parseColor("#FF3AA5FF")
-            ), positions = listOf(0f, 1f)
-        )
-    }
-}

+ 7 - 0
app/src/main/java/com/adealink/weparty/module/order/IOrderService.kt

@@ -0,0 +1,7 @@
+package com.adealink.weparty.module.order
+
+import com.adealink.frame.aab.IService
+
+interface IOrderService : IService<IOrderService> {
+
+}

+ 23 - 0
app/src/main/java/com/adealink/weparty/module/order/OrderModule.kt

@@ -0,0 +1,23 @@
+package com.adealink.weparty.module.order
+
+import com.adealink.frame.aab.BaseDynamicModule
+import com.adealink.weparty.R
+
+object OrderModule : BaseDynamicModule<IOrderService>(IOrderService::class),
+    IOrderService {
+
+    override val featureName: String
+        get() = "order"
+
+    override val moduleNameResId: Int
+        get() = R.string.module_order
+
+    override fun emptyService(): IOrderService {
+        return object : IOrderService {
+
+            override fun getService(): IOrderService? {
+                return null
+            }
+        }
+    }
+}

+ 15 - 0
app/src/main/java/com/adealink/weparty/module/order/Router.kt

@@ -0,0 +1,15 @@
+package com.adealink.weparty.module.order
+
+
+interface Order {
+
+    interface Common {
+
+        companion object {
+            const val PATH = "/order"
+        }
+
+    }
+
+
+}

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

@@ -0,0 +1,4 @@
+package com.adealink.weparty.module.order.listener
+
+interface IOrderListener {
+}

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

@@ -0,0 +1,4 @@
+package com.adealink.weparty.module.order.viewmodel
+
+interface IOrderViewModel {
+}

+ 6 - 0
app/src/main/java/com/adealink/weparty/module/playmate/Router.kt

@@ -29,4 +29,10 @@ interface Playmate {
         }
     }
 
+    interface Detail {
+        companion object {
+            const val PATH = "${Common.PATH}/detail"
+        }
+    }
+
 }

+ 13 - 0
app/src/main/java/com/adealink/weparty/module/profile/Router.kt

@@ -6,6 +6,7 @@ interface Profile {
     interface Common {
 
         companion object {
+            const val PATH = "/profile"
             const val EXTRA_UID = "extra_uid"
             const val EXTRA_ROOM_ID = "extra_room_id"
             const val EXTRA_USER_INFO = "user_info"
@@ -16,4 +17,16 @@ interface Profile {
 
     }
 
+    interface UserProfile {
+        companion object {
+            const val PATH = Common.PATH
+        }
+    }
+
+    interface Evaluate {
+        companion object {
+            const val PATH = "${Common.PATH}/evaluate"
+        }
+    }
+
 }

+ 1 - 17
app/src/main/java/com/adealink/weparty/module/profile/data/ProfileConstants.kt

@@ -6,22 +6,6 @@ import com.adealink.frame.oss.ossService
 val DEFAULT_AVATAR_URL by fastLazy { ossService.getUrlByPath("/audit/avatar_default.png") }
 
 const val TAB_INDEX_PERSONAL = 0
-const val TAB_INDEX_HONOR = 1
-const val TAB_INDEX_MOMENT = 2
-const val TAB_INDEX_RELATION = 3
 
 
-const val TAB_NAME_CP = "cp"
-
-const val QUERY_NOTE_PAGE_SIZE = 3000
-
-//真人认证结果
-const val NOT_AUTH = 0L
-const val AUTH_SUCCESS = 1L
-const val AUTH_FAILED = 2L
-
-//币商身份
-const val NORMAL_USER = 0 //普通用户
-const val RECHARGE_MERCHANT = 1 //充值币商
-const val DIAMOND_AGENT = 2 //提现币商
-const val RECHARGE_WITHDRAW_MERCHANT = 3 //充值&提现币商
+const val QUERY_NOTE_PAGE_SIZE = 3000

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

@@ -68,6 +68,9 @@ data class UserInfo(
     @GsonNullable
     @SerializedName("gender") var gender: Int? = null,
 
+    @GsonNullable
+    @SerializedName("star") var star: Float? = null,
+
     ) : Parcelable {
 
 

+ 4 - 1
app/src/main/java/com/adealink/weparty/ui/home/HomeFragment.kt

@@ -25,6 +25,7 @@ import com.adealink.weparty.constant.logTime
 import com.adealink.weparty.databinding.FragmentHomeBinding
 import com.adealink.weparty.databinding.LayoutMainTabBinding
 import com.adealink.weparty.debug.Debug
+import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.setting.SettingModule
 import com.adealink.weparty.ui.home.tab.ACTIVITY
 import com.adealink.weparty.ui.home.tab.HOME_TABS
@@ -155,7 +156,9 @@ class HomeFragment : BaseFragment(R.layout.fragment_home), ITabManager by TabMan
 
     private fun goProfile() {
         activity?.let { act ->
-            Router.build(act, Debug.Debug.PATH).start()
+            Router.build(act, Profile.UserProfile.PATH)
+                .putExtra(Profile.Common.EXTRA_UID, "")
+                .start()
         }
     }
 

+ 0 - 3
app/src/main/java/com/adealink/weparty/ui/home/tab/HomeTab.kt

@@ -8,9 +8,6 @@ import com.adealink.weparty.commonui.widget.EmptyFragment
 import com.adealink.weparty.module.activity.Activity
 import com.adealink.weparty.module.playmate.Playmate
 
-/**
- * @param tab tab的唯一标识,可以用于deeplink跳转到指定tab
- */
 enum class HomeTab(val tab: String, val number: Int) {
     /**
      * 在线陪玩

+ 0 - 0
app/src/main/res/drawable-xhdpi/common_evaluate_star_disable_ic.png → app/src/main/res/drawable-xhdpi/common_evaluate_star_normal_ic.png


+ 0 - 0
app/src/main/res/drawable-xhdpi/common_evaluate_star_ic.png → app/src/main/res/drawable-xhdpi/common_evaluate_star_selected_ic.png


BIN
app/src/main/res/drawable-xhdpi/common_introduce_ic.png


BIN
app/src/main/res/drawable-xhdpi/common_location_ic.png


BIN
app/src/main/res/drawable-xhdpi/common_number_minus_diable_ic.png


BIN
app/src/main/res/drawable-xhdpi/common_number_minus_ic.png


BIN
app/src/main/res/drawable-xhdpi/common_umber_add_ic.png


+ 44 - 0
app/src/main/res/layout/layout_number_increase_view.xml

@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge 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="wrap_content"
+    android:layout_height="wrap_content"
+    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_minus"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/tv_number"
+        app:layout_constraintHorizontal_chainStyle="packed"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/common_number_minus_ic" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="6dp"
+        android:includeFontPadding="false"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/iv_add"
+        app:layout_constraintStart_toEndOf="@id/iv_minus"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Online Play" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_add"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/tv_number"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/common_number_minus_ic" />
+
+</merge>

+ 9 - 143
app/src/main/res/values/attrs.xml

@@ -262,16 +262,6 @@
         <attr name="circleColor" format="color" />
     </declare-styleable>
 
-    <declare-styleable name="TagsLayout">
-        <attr name="item_height" />
-        <attr name="item_h_interval" />
-        <attr name="item_v_interval" />
-        <attr name="item_background" />
-        <attr name="item_text_color" />
-        <attr name="choice_type" />
-        <attr name="item_min_width" />
-    </declare-styleable>
-
     <declare-styleable name="UploadFileAddView">
         <attr name="maxCount" format="integer" />
     </declare-styleable>
@@ -284,13 +274,6 @@
         <attr name="colon_width" format="dimension" />
     </declare-styleable>
 
-    <declare-styleable name="PKProgressBar">
-        <attr name="showScore" format="boolean" />
-        <attr name="scoreMarginStart" format="dimension" />
-        <attr name="scoreMarginEnd" format="dimension" />
-        <attr name="minProgressWidth" format="dimension" />
-    </declare-styleable>
-
     <!--可展开布局自定义属性-->
     <declare-styleable name="ExpandLayout">
         <!--文本最大缩略行数,对应于TextView的maxLines-->
@@ -360,30 +343,6 @@
     </attr>
 
     <attr name="stroke_width" format="dimension" />
-
-    <declare-styleable name="GameButton" tools:ignore="ResourceName">
-        <attr name="button_type" />
-        <attr name="left_drawable" />
-        <attr name="left_drawable_margin" format="dimension" />
-        <attr name="right_drawable" />
-        <attr name="right_drawable_margin" format="dimension" />
-        <attr name="stroke_width" />
-        <attr name="text" format="string" />
-        <attr name="text_size" />
-        <attr name="font_family" format="reference" />
-        <!-- 背景大小 根据设置不同大小的背景,实现不同的圆角适配-->
-        <attr name="bg_size" format="enum">
-            <enum name="bs_small" value="0" />
-            <enum name="bs_medium" value="1" />
-            <enum name="bs_large" value="2" />
-        </attr>
-        <attr name="text_style" format="enum">
-            <enum name="normal" value="0" />
-            <enum name="bold" value="1" />
-            <enum name="italic" value="2" />
-        </attr>
-    </declare-styleable>
-
     <attr name="font_weight" format="enum">
         <enum name="regular" value="400"/>
         <enum name="medium" value="500"/>
@@ -410,29 +369,6 @@
     <attr name="diagonalColor" format="color" />
     <attr name="diagonalWidth" format="dimension" />
 
-    <declare-styleable name="GameTextView" tools:ignore="ResourceName">
-
-        <attr name="font_weight"/>
-
-        <attr name="strokeColor" />
-        <attr name="strokeWidth" />
-        <attr name="strokeColors" />
-        <attr name="strokePosition" />
-        <attr name="strokeOrientation" />
-
-        <attr name="gradientColors" />
-        <attr name="gradientPosition" />
-        <attr name="gradientOrientation" />
-
-        <attr name="diagonalColor" />
-        <attr name="diagonalWidth" />
-
-        <attr name="shadowDx" />
-        <attr name="shadowDy" />
-        <attr name="shadowRadius" />
-        <attr name="shadowColor" />
-    </declare-styleable>
-
     <declare-styleable name="FastFlowLayout" tools:ignore="ResourceName">
         <attr name="fastFlowLayout_flow" format="boolean" />
         <attr name="fastFlowLayout_childSpacing" format="enum|dimension">
@@ -550,53 +486,12 @@
         <attr name="ClipBorderColor" format="color" />
     </declare-styleable>
 
-    <declare-styleable name="UserLevelView" tools:ignore="ResourceName">
-        <attr name="size">
-            <!--用于资料卡,资料页,房间成员等-->
-            <enum name="small" value="0" />
-            <!--用于等级详情-->
-            <enum name="big" value="1" />
-        </attr>
-    </declare-styleable>
-
-    <declare-styleable name="MedalProfileView" tools:ignore="ResourceName">
-        <!--勋章大小-->
-        <attr name="medal_size" format="dimension"/>
-        <!--勋章之间的间距-->
-        <attr name="medal_spacing" format="dimension"/>
-    </declare-styleable>
-
-    <declare-styleable name="RechargeDailyTaskListView" tools:ignore="ResourceName">
-        <!--Item的间距-->
-        <attr name="item_spacing" format="dimension" />
-    </declare-styleable>
-
-    <declare-styleable name="RoomTaskRewardListView">
-        <attr name="icon_width" format="dimension" />
-        <attr name="text_size" format="dimension" />
-        <attr name="v_space" format="dimension" />
-    </declare-styleable>
-
     <declare-styleable name="StrokeTextView">
         <attr name="strokeColor" />
         <attr name="strokeWidth" />
         <attr name="strokeColorList" />
     </declare-styleable>
 
-    <declare-styleable name="MarkProfileView">
-        <attr name="mark_spacing" format="dimension"/>
-        <attr name="mark_height" format="dimension"/>
-        <attr name="mark_width" format="dimension"/>
-        <attr name="android:gravity"/>
-    </declare-styleable>
-
-    <declare-styleable name="LikeButton">
-        <attr name="like_background" format="reference" />
-        <attr name="like_image" format="reference" />
-        <attr name="liked_image" format="reference" />
-        <attr name="liked_anim" format="string" />
-    </declare-styleable>
-
     <declare-styleable name="WeAnimView">
         <attr name="autoPlay" format="boolean" />
     </declare-styleable>
@@ -607,16 +502,6 @@
         <attr name="dividerSize" format="dimension" />
     </declare-styleable>
 
-    <declare-styleable name="UserIdView">
-        <attr name="show_copy_btn" format="boolean" />
-        <attr name="copy_btn_res_id" format="reference" />
-        <attr name="copy_btn_size" format="dimension" />
-        <attr name="copy_btn_margin_start" format="dimension" />
-        <attr name="id_text_color" format="color" />
-        <attr name="id_text_size" format="dimension" />
-    </declare-styleable>
-
-
     <declare-styleable name="GiftFallingLayout">
         <attr name="giftWidth" format="dimension" />
         <attr name="giftHeight" format="dimension" />
@@ -683,41 +568,22 @@
         <attr name="progressWidth" format="dimension" />
     </declare-styleable>
 
-    <declare-styleable name="UserVoiceView">
-        <!--自定义背景-->
-        <attr name="voiceBackground" format="reference" />
-        <!--自定义播放图标-->
-        <attr name="voicePlayIcon" format="reference" />
-        <!--自定义暂停图标-->
-        <attr name="voicePauseIcon" format="reference" />
-        <!--自定义波浪svga-->
-        <attr name="waveSvga" format="string" />
-        <attr name="countDownTextColor" format="color" />
-    </declare-styleable>
-
-    <declare-styleable name="UserSexView">
-        <!--女性Icon-->
-        <attr name="femaleIcon" format="reference" />
-        <!--男性Icon-->
-        <attr name="maleIcon" format="reference" />
-        <attr name="femaleBackground" format="reference" />
-        <attr name="maleBackground" format="reference" />
-
-
-    </declare-styleable>
-
     <declare-styleable name="RoundShadowLayout">
         <attr name="shadow_color" />
         <attr name="shadow_radius"/>
         <attr name="round_radius" format="dimension" />
     </declare-styleable>
 
-    <declare-styleable name="UserCertificationView">
-        <attr name="only_show_icon" format="boolean" />
+    <declare-styleable name="EvaluateView">
+        <attr name="evaluate_max" format="integer" />
+        <attr name="evaluate_current" format="integer" />
+        <attr name="evaluate_width" format="dimension" />
+        <attr name="evaluate_divide" format="dimension" />
+        <attr name="evaluate_normal_src" format="reference" />
+        <attr name="evaluate_selected_src" format="reference" />
     </declare-styleable>
 
-    <declare-styleable name="VipUnLockButtonView">
-        <attr name="vipUnlocked" format="boolean" />
-        <attr name="vipText" format="string" />
+    <declare-styleable name="NumberIncreaseView">
+        <attr name="default_number" format="integer" />
     </declare-styleable>
 </resources>

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

@@ -1172,4 +1172,5 @@
     <color name="color_FF50FFD8">#FF50FFD8</color>
     <color name="color_FFE6FFFA">#FFE6FFFA</color>
     <color name="color_FFF9FAFB">#FFF9FAFB</color>
+    <color name="color_FFC9CDD4">#FFC9CDD4</color>
 </resources>

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -7,6 +7,7 @@
     <string name="module_playmate" translatable="false">playmate</string>
     <string name="module_activity" translatable="false">activity</string>
     <string name="module_setting" translatable="false">setting</string>
+    <string name="module_order" translatable="false">order</string>
     <string name="common_create">Create</string>
     <string name="common_send">Send</string>
     <string name="common_sending">Sending</string>
@@ -241,4 +242,6 @@
     <string name="common_activity">Activity</string>
     <string name="common_all_category">全部分类</string>
     <string name="common_gender">性别</string>
+    <string name="common_count_str">数量</string>
+    <string name="common_submit">Submit</string>
 </resources>

+ 1 - 0
app/src/main/resources/META-INF/services/com.adealink.frame.router.IRouterInit

@@ -5,3 +5,4 @@ com.adealink.frame.router.RouterInit_module_im
 com.adealink.frame.router.RouterInit_module_playmate
 com.adealink.frame.router.RouterInit_module_activity
 com.adealink.frame.router.RouterInit_module_setting
+com.adealink.frame.router.RouterInit_module_order

+ 0 - 15
module/activity/src/main/java/com/adealink/weparty/activity/list/ActivityHomeListFragment.kt

@@ -1,15 +0,0 @@
-package com.adealink.weparty.activity.list
-
-import com.adealink.frame.router.annotation.RouterUri
-import com.adealink.weparty.activity.R
-import com.adealink.weparty.commonui.BaseFragment
-import com.adealink.weparty.module.activity.Activity
-
-@RouterUri(path = [Activity.ActivityList.PATH], desc = "首页活动列表")
-class ActivityHomeListFragment : BaseFragment(R.layout.fragment_activity_home_list) {
-
-    override fun initViews() {
-        super.initViews()
-    }
-
-}

+ 0 - 34
module/activity/src/main/res/layout/fragment_activity_home_list.xml

@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-
-    <include
-        android:id="@+id/v_list_top"
-        layout="@layout/layout_activity_home_list_top"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <include
-        android:id="@+id/v_list_filter"
-        layout="@layout/layout_activity_home_list_filter"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/v_list_top" />
-
-    <androidx.recyclerview.widget.RecyclerView
-        android:id="@+id/v_list"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/v_list_filter" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 103
module/activity/src/main/res/layout/layout_activity_home_list_filter.xml

@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <!-- 评分 -->
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/cl_rank_filter"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_score_rank"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:includeFontPadding="false"
-            android:text="@string/common_score_rank_filter_to_low"
-            android:textColor="@color/color_FF4E5969"
-            android:textSize="11sp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <androidx.appcompat.widget.AppCompatImageView
-            android:layout_width="22dp"
-            android:layout_height="22dp"
-            app:layout_constraintBottom_toBottomOf="@id/tv_score_rank"
-            app:layout_constraintStart_toEndOf="@id/tv_score_rank"
-            app:layout_constraintTop_toTopOf="@id/tv_score_rank"
-            app:srcCompat="@drawable/common_filter_ic" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-    <!-- 价格 -->
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/cl_price_filter"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="6dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintStart_toEndOf="@id/cl_rank_filter"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_price_rank"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:includeFontPadding="false"
-            android:text="@string/common_score_rank_filter_to_low"
-            android:textColor="@color/color_FF4E5969"
-            android:textSize="11sp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <androidx.appcompat.widget.AppCompatImageView
-            android:layout_width="22dp"
-            android:layout_height="22dp"
-            app:layout_constraintBottom_toBottomOf="@id/tv_price_rank"
-            app:layout_constraintStart_toEndOf="@id/tv_price_rank"
-            app:layout_constraintTop_toTopOf="@id/tv_price_rank"
-            app:srcCompat="@drawable/common_filter_ic" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-    <!-- Find your partner -->
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:id="@+id/cl_find_partner"
-        android:layout_width="wrap_content"
-        android:layout_height="36dp"
-        android:background="@drawable/common_find_partner_bg"
-        android:paddingHorizontal="12dp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="parent">
-
-        <androidx.appcompat.widget.AppCompatTextView
-            android:id="@+id/tv_find_partner"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:includeFontPadding="false"
-            android:text="@string/common_find_your_partner"
-            android:textColor="@color/color_FF4E5969"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-        <androidx.appcompat.widget.AppCompatImageView
-            android:layout_width="14dp"
-            android:layout_height="14dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintStart_toEndOf="@id/tv_find_partner"
-            app:layout_constraintTop_toTopOf="parent"
-            app:srcCompat="@drawable/common_find_your_partner_ic" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 47
module/activity/src/main/res/layout/layout_activity_home_list_top.xml

@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content">
-
-    <include
-        android:id="@+id/v_item1"
-        layout="@layout/layout_activity_home_list_top_item"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@id/v_item2"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <include
-        android:id="@+id/v_item2"
-        layout="@layout/layout_activity_home_list_top_item"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@id/v_item3"
-        app:layout_constraintStart_toEndOf="@id/v_item1"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <include
-        android:id="@+id/v_item3"
-        layout="@layout/layout_activity_home_list_top_item"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@id/v_item4"
-        app:layout_constraintStart_toEndOf="@id/v_item2"
-        app:layout_constraintTop_toTopOf="parent" />
-
-    <include
-        android:id="@+id/v_item4"
-        layout="@layout/layout_activity_home_list_top_item"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toEndOf="@id/v_item3"
-        app:layout_constraintTop_toTopOf="parent" />
-
-</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
module/order/.gitignore

@@ -0,0 +1 @@
+/build

+ 56 - 0
module/order/build.gradle

@@ -0,0 +1,56 @@
+plugins {
+    id 'com.android.dynamic-feature'
+    id 'org.jetbrains.kotlin.android'
+    id 'org.jetbrains.kotlin.kapt'
+    id 'kotlin-parcelize'
+}
+
+android {
+    namespace 'com.adealink.weparty.order'
+    compileSdk libs.versions.compileSdk.get().toInteger()
+
+    defaultConfig {
+        minSdk libs.versions.minSdk.get().toInteger()
+
+        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+        consumerProguardFiles "consumer-rules.pro"
+        javaCompileOptions {
+            annotationProcessorOptions {
+                arguments += [
+                        "room.schemaLocation"  : "$projectDir/schemas".toString(),
+                        "room.incremental"     : "true",
+                        "room.expandProjection": "true"]
+            }
+        }
+    }
+
+
+
+    buildTypes {
+        release {
+            debuggable false
+        }
+    }
+    viewBinding {
+        enabled = true
+    }
+    compileOptions {
+        sourceCompatibility JavaVersion.VERSION_17
+        targetCompatibility JavaVersion.VERSION_17
+    }
+
+    kotlinOptions {
+        jvmTarget = JavaVersion.VERSION_17.majorVersion
+    }
+}
+
+dependencies {
+    implementation project(":app")
+    //frame
+    kapt libs.frame.router.compiler
+
+    //test
+    testImplementation libs.junit
+    androidTestImplementation libs.androidx.junit
+    androidTestImplementation libs.androidx.espresso.core
+}

+ 0 - 0
module/order/consumer-rules.pro


+ 21 - 0
module/order/proguard-rules.pro

@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile

+ 19 - 0
module/order/src/main/AndroidManifest.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:dist="http://schemas.android.com/apk/distribution"
+    xmlns:tools="http://schemas.android.com/tools"
+    tools:ignore="LockedOrientationActivity">
+
+    <dist:module
+        dist:instant="false"
+        dist:title="@string/module_order">
+        <dist:fusing dist:include="true" />
+        <dist:delivery>
+            <dist:install-time>
+                <dist:removable dist:value="true" />
+            </dist:install-time>
+        </dist:delivery>
+    </dist:module>
+
+    <application>
+    </application>
+</manifest>

+ 15 - 0
module/order/src/main/java/com/adealink/weparty/order/OrderServiceImpl.kt

@@ -0,0 +1,15 @@
+package com.adealink.weparty.order
+
+import com.adealink.frame.spi.RegisterService
+import com.adealink.weparty.App
+import com.adealink.weparty.module.activity.IActivityService
+
+@RegisterService(IActivityService::class)
+class OrderServiceImpl : IActivityService {
+
+
+    override fun getService(): IActivityService {
+        return this
+    }
+
+}

+ 17 - 0
module/order/src/main/java/com/adealink/weparty/order/datasource/local/OrderLocalService.kt

@@ -0,0 +1,17 @@
+package com.adealink.weparty.order.datasource.local
+
+import android.content.Context
+import com.adealink.frame.storage.sp.TypeDelegationPrefs
+import com.adealink.frame.util.AppUtil
+import com.adealink.weparty.module.profile.ProfileModule
+
+object OrderLocalService : TypeDelegationPrefs(
+    prefs = {
+        AppUtil.appContext.getSharedPreferences("pref_order", Context.MODE_PRIVATE)
+    },
+    userId = {
+        ProfileModule.getMyUid()
+    }
+) {
+
+}

+ 5 - 0
module/order/src/main/java/com/adealink/weparty/order/datasource/remote/OrderHttpService.kt

@@ -0,0 +1,5 @@
+package com.adealink.weparty.order.datasource.remote
+
+interface OrderHttpService {
+
+}

+ 8 - 0
module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModel.kt

@@ -0,0 +1,8 @@
+package com.adealink.weparty.order.viewmodel
+
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.module.activity.viewmodel.IActivityViewModel
+
+class OrderViewModel : BaseViewModel(), IActivityViewModel {
+
+}

+ 21 - 0
module/order/src/main/java/com/adealink/weparty/order/viewmodel/OrderViewModelFactory.kt

@@ -0,0 +1,21 @@
+package com.adealink.weparty.order.viewmodel
+
+import androidx.lifecycle.ViewModel
+import androidx.lifecycle.ViewModelProvider
+
+@Suppress("UNCHECKED_CAST")
+class OrderViewModelFactory : ViewModelProvider.NewInstanceFactory() {
+
+    override fun <T : ViewModel> create(modelClass: Class<T>): T {
+        return with(modelClass) {
+            when {
+                isAssignableFrom(OrderViewModel::class.java) ->
+                    OrderViewModel()
+
+                else ->
+                    throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
+            } as T
+        }
+    }
+
+}

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

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>

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

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>

+ 3 - 0
module/order/src/main/res/values/attrs.xml

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>

+ 3 - 0
module/order/src/main/res/values/dimens.xml

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>

+ 4 - 0
module/order/src/main/res/values/ids.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+</resources>

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

@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+</resources>

+ 1 - 0
module/order/src/main/resources/META-INF/services/com.adealink.weparty.module.order.OrderService

@@ -0,0 +1 @@
+com.adealink.weparty.order.OrderServiceImpl

+ 6 - 1
module/playmate/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:dist="http://schemas.android.com/apk/distribution"
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
     xmlns:tools="http://schemas.android.com/tools"
     tools:ignore="LockedOrientationActivity">
 
@@ -15,5 +16,9 @@
     </dist:module>
 
     <application>
+        <activity
+            android:name=".detail.PlaymateDetailActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
     </application>
 </manifest>

+ 20 - 0
module/playmate/src/main/java/com/adealink/weparty/playmate/detail/PlaymateDetailActivity.kt

@@ -0,0 +1,20 @@
+package com.adealink.weparty.playmate.detail
+
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.module.playmate.Playmate
+import com.adealink.weparty.playmate.databinding.ActivityPlaymateDetailBinding
+
+@RouterUri(
+    path = [Playmate.Detail.PATH],
+    desc = "陪玩详情"
+)
+class PlaymateDetailActivity : BaseActivity() {
+
+    private val binding by viewBinding(ActivityPlaymateDetailBinding::inflate)
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+    }
+}

+ 7 - 0
module/playmate/src/main/res/layout/activity_playmate_detail.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 1
module/profile/src/main/AndroidManifest.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:dist="http://schemas.android.com/apk/distribution"
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:dist="http://schemas.android.com/apk/distribution"
     xmlns:tools="http://schemas.android.com/tools"
     tools:ignore="LockedOrientationActivity">
 
@@ -15,5 +16,9 @@
     </dist:module>
 
     <application>
+        <activity
+            android:name=".UserProfileActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
     </application>
 </manifest>

+ 54 - 0
module/profile/src/main/java/com/adealink/weparty/profile/ProfileTab.kt

@@ -0,0 +1,54 @@
+package com.adealink.weparty.profile
+
+import com.adealink.frame.aab.util.getCompatString
+import com.adealink.frame.router.Router
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.widget.EmptyFragment
+import com.adealink.weparty.module.activity.Activity
+import com.adealink.weparty.module.playmate.Playmate
+import com.adealink.weparty.profile.ui.about.ProfileFragment
+import com.adealink.weparty.profile.ui.photowall.PhotoWallFragment
+import com.adealink.weparty.ui.home.tab.Tab
+
+enum class ProfileTab(val tab: String) {
+    /**
+     * 关于我
+     */
+    PROFILE("profile"),
+
+    /**
+     * 照片墙
+     */
+    PHOTO_WALL("photo_wall");
+}
+
+data class Tab(
+    val type: ProfileTab,
+    val name: (() -> String),
+    val fragmentBuilder: () -> BaseFragment
+)
+
+val PROFILE_TAB = Tab(
+    type = ProfileTab.PROFILE,
+    name = {
+        getCompatString(R.string.profile_tab_profile)
+    },
+    fragmentBuilder = {
+        ProfileFragment()
+    }
+)
+
+val PHOTO_WALL_TAB = Tab(
+    type = ProfileTab.PHOTO_WALL,
+    name = {
+        getCompatString(R.string.profile_tab_photo_wall)
+    },
+    fragmentBuilder = {
+        PhotoWallFragment()
+    }
+)
+
+
+val PROFILE_TABS = listOf(
+    PROFILE_TAB, PHOTO_WALL_TAB
+)

+ 104 - 0
module/profile/src/main/java/com/adealink/weparty/profile/UserProfileActivity.kt

@@ -0,0 +1,104 @@
+package com.adealink.weparty.profile
+
+import android.os.Bundle
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.Fragment
+import com.adealink.frame.aab.util.getCompatDimension
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.Router
+import com.adealink.frame.router.annotation.BindExtra
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.recycleview.adapter.BaseActivityTabFragmentStateAdapter
+import com.adealink.weparty.commonui.widget.EmptyFragment
+import com.adealink.weparty.module.profile.Profile
+import com.adealink.weparty.module.profile.data.TAB_INDEX_PERSONAL
+import com.adealink.weparty.profile.comp.ProfileHeaderComp
+import com.adealink.weparty.profile.comp.ProfileBottomComp
+import com.adealink.weparty.profile.comp.ProfileToolBarViewComp
+import com.adealink.weparty.profile.databinding.ActivityUserProfileBinding
+import com.qmuiteam.qmui.widget.util.QMUIStatusBarHelper
+
+@RouterUri(
+    path = [Profile.UserProfile.PATH],
+    desc = "用户个人页"
+)
+class UserProfileActivity : BaseActivity() {
+
+    @BindExtra(name = Profile.Common.EXTRA_UID)
+    var userUid: String = ""
+
+    private val binding by viewBinding(ActivityUserProfileBinding::inflate)
+
+    private lateinit var profilePageAdapter: ProfilePageAdapter
+
+    override fun onBeforeCreate() {
+        super.onBeforeCreate()
+        Router.bind(this)
+    }
+
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+        binding.profileHeaderLayout.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            height =
+                getCompatDimension(R.dimen.profile_header_height).toInt() + QMUIStatusBarHelper.getStatusbarHeight(
+                    this@UserProfileActivity
+                )
+        }
+
+        profilePageAdapter = ProfilePageAdapter()
+        binding.profileVp.adapter = profilePageAdapter
+        binding.tabLayout.createMediatorAndAttach(
+            binding.profileVp,
+            profilePageAdapter,
+            TAB_INDEX_PERSONAL
+        )
+    }
+
+    override fun initComponents() {
+        super.initComponents()
+        ProfileToolBarViewComp(this, userUid, binding).attach()
+        ProfileHeaderComp(this, userUid, binding.profileHeaderLayout).attach()
+        ProfileBottomComp(this, userUid, binding.vBottom).attach()
+    }
+
+    override fun onResume() {
+        super.onResume()
+        // TODO: 刷新个人页状态
+    }
+
+
+    internal inner class ProfilePageAdapter : BaseActivityTabFragmentStateAdapter(this) {
+
+        override fun getTabName(pos: Int): String {
+            return PROFILE_TABS.getOrNull(pos)?.name?.invoke() ?: ""
+        }
+
+        override fun getItemCount(): Int {
+            return PROFILE_TABS.size
+        }
+
+        override fun createFragment(position: Int): Fragment {
+            val profileTab = PROFILE_TABS.getOrNull(position) ?: return EmptyFragment()
+            return when (profileTab.type) {
+                ProfileTab.PROFILE -> {
+                    profileTab.fragmentBuilder().apply {
+                        arguments = Bundle().apply {
+                            putString(Profile.Common.EXTRA_UID, userUid)
+                        }
+                    }
+                }
+
+                ProfileTab.PHOTO_WALL -> {
+                    profileTab.fragmentBuilder().apply {
+                        arguments = Bundle().apply {
+                            putString(Profile.Common.EXTRA_UID, userUid)
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 40 - 0
module/profile/src/main/java/com/adealink/weparty/profile/comp/BaseProfileViewComp.kt

@@ -0,0 +1,40 @@
+package com.adealink.weparty.profile.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+
+abstract class BaseProfileViewComp(
+    lifecycleOwner: LifecycleOwner,
+    private val userUid: String
+) : ViewComponent(lifecycleOwner) {
+
+    val isSelf by fastLazy { userUid == ProfileModule.getMyUid() }
+    val profileViewModel by fastLazy { ProfileModule.getProfileViewModel(requireActivity()) }
+
+    override fun onCreate() {
+        super.onCreate()
+        initView()
+        observeViewModel()
+
+        //使用缓存,快速展示
+        val cacheUserInfo = ProfileModule.getCacheUserInfo(uid = userUid)
+        cacheUserInfo?.let {
+            updateUI(cacheUserInfo, true)
+        }
+
+        //监听用户信息变化
+//        profileViewModel?.uidUserInfoRltLD?.observe(viewLifecycleOwner) { rlt ->
+//            val userInfo = (rlt as? Rlt.Success)?.data ?: return@observe
+//            updateUI(userInfo)
+//        }
+    }
+
+
+    open fun initView() {}
+    open fun observeViewModel() {}
+    open fun updateUI(userInfo: UserInfo, fromCache: Boolean = false) {}
+
+}

+ 31 - 0
module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileBottomComp.kt

@@ -0,0 +1,31 @@
+package com.adealink.weparty.profile.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.weparty.commonui.ext.show
+import com.adealink.weparty.profile.databinding.LayoutProfileBottomBinding
+import com.adealink.weparty.profile.dialog.CreateOrderDialog
+
+class ProfileBottomComp(
+    lifecycleOwner: LifecycleOwner,
+    private val userUid: String,
+    private val binding: LayoutProfileBottomBinding,
+) : BaseProfileViewComp(lifecycleOwner, userUid) {
+
+    override fun initView() {
+//        if (isSelf) {
+//            binding.root.gone()
+//        } else {
+//            binding.root.show()
+//        }
+        // TODO: 测试
+        binding.root.show()
+        binding.btnPay.setOnClickListener {
+            clickPay()
+        }
+    }
+
+    private fun clickPay() {
+        CreateOrderDialog().show(fragmentManager)
+    }
+
+}

+ 39 - 0
module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileHeaderComp.kt

@@ -0,0 +1,39 @@
+package com.adealink.weparty.profile.comp
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.databinding.LayoutUserProfileHeaderBinding
+import com.adealink.weparty.profile.dialog.EvaluateDialog
+
+class ProfileHeaderComp(
+    lifecycleOwner: LifecycleOwner,
+    private val userUid: String,
+    private val binding: LayoutUserProfileHeaderBinding,
+) : BaseProfileViewComp(lifecycleOwner, userUid) {
+
+    override fun initView() {
+        binding.ivBg.setImageUrl("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")
+        binding.tvName.text = "Test Name"
+        binding.tvUserId.text = "ID 123456"
+        binding.tvEvaluate.text = "4.2"
+
+        binding.tvEvaluate.setOnClickListener {
+            showEvaluateDialog()
+        }
+    }
+
+    override fun observeViewModel() {
+    }
+
+    @SuppressLint("SetTextI18n")
+    override fun updateUI(userInfo: UserInfo, fromCache: Boolean) {
+        binding.tvName.text = userInfo.name
+        binding.tvUserId.text = "ID ${userInfo.uid}"
+        binding.tvEvaluate.text = userInfo.star?.toString() ?: "5.0"
+    }
+
+    private fun showEvaluateDialog() {
+        EvaluateDialog().show(fragmentManager)
+    }
+}

+ 129 - 0
module/profile/src/main/java/com/adealink/weparty/profile/comp/ProfileToolBarViewComp.kt

@@ -0,0 +1,129 @@
+package com.adealink.weparty.profile.comp
+
+import android.view.ViewGroup.MarginLayoutParams
+import androidx.core.view.updateLayoutParams
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.log.Log
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.util.DisplayUtil
+import com.adealink.frame.util.isActivityInValid
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.databinding.ActivityUserProfileBinding
+import com.google.android.material.appbar.AppBarLayout
+import com.qmuiteam.qmui.widget.util.QMUIStatusBarHelper
+import kotlin.math.abs
+
+class ProfileToolBarViewComp(
+    lifecycleOwner: LifecycleOwner,
+    private val userUid: String,
+    private val binding: ActivityUserProfileBinding
+) : ViewComponent(lifecycleOwner) {
+
+    companion object{
+        const val TAG = "ProfileToolBarViewComp"
+    }
+
+    private val isSelf: Boolean
+        get() {
+            return userUid == ProfileModule.getMyUid()
+        }
+
+    private var userInfo: UserInfo? = null
+    override fun onCreate() {
+        super.onCreate()
+        initView()
+        observeViewModel()
+    }
+
+    private fun initView() {
+        val activity = activity ?: return
+        val statusBarHeight = DisplayUtil.getStatusBarHeight(activity)
+        binding.topBarContainer.updateLayoutParams<MarginLayoutParams> {
+            height = statusBarHeight + 44.dp()
+        }
+
+        binding.collapsingToolbarLayout.minimumHeight = statusBarHeight + 44.dp()
+
+        binding.appBarLayout.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
+            if (isActivityInValid(activity)) {
+                return@OnOffsetChangedListener
+            }
+            val appBarHeight = appBarLayout?.height ?: return@OnOffsetChangedListener
+            Log.d(TAG, "appBarHeight = $appBarHeight, verticalOffset = $verticalOffset")
+            val percent =
+                (abs(verticalOffset) * 1f / (appBarLayout.totalScrollRange)).coerceIn(0F, 1F)
+            binding.topBarContainer.alpha = percent
+
+            //todo: 顶部栏返回按钮
+//            val fromColor = Color.WHITE  // 起始颜色:白色
+//            val toColor = Color.BLACK    // 目标颜色:黑色
+//            val color = ArgbEvaluator().evaluate(percent, fromColor, toColor) as Int
+//            val backDrawable = getCompatDrawable(R.drawable.profile_back_icon).mutate()
+//            backDrawable.setTint(color)
+//            binding.btnBack.setBackgroundDrawable(backDrawable)
+//            binding.btnEdit.background.setTint(color)
+
+            if (percent == 1f) {
+                QMUIStatusBarHelper.setStatusBarLightMode(activity)
+            } else {
+                QMUIStatusBarHelper.setStatusBarDarkMode(activity)
+            }
+
+        })
+
+//        binding.btnBack.onClick {
+//            activity?.finish()
+//        }
+
+        if (isSelf) {
+//            binding.btnEdit.setBackgroundResource(R.drawable.profile_edit_icon)
+//            binding.btnEdit.onClick {
+//                Router.getRouterInstance<BaseDialogFragment>(Profile.EditProfileSelect.PATH)
+//                    ?.show(fragmentManager)
+//            }
+
+        } else {
+//            binding.btnEdit.setBackgroundResource(R.drawable.profile_more_icon)
+//            binding.btnEdit.setOnClickListener {
+//                val noteName = getDisplayName(userUid, "")
+//                UserProtectModule.showReportUserDialog(
+//                    userUid,
+//                    ReportFrom.USER_PROFILE,
+//                    ReportType.USER_INFO,
+//                    showNoteNicknameAction = false,
+//                    name = userInfo?.name ?: "",
+//                    noteName = noteName,
+//                    showSpecialFollowAction = false,
+//                    isSpecialFollowed = specialFollowed,
+//                    showUnFollowAction = isFollowed
+//                )
+//            }
+        }
+    }
+
+
+    private fun observeViewModel() {
+//        profileViewModel.uidUserInfoRltLD.observe(this) {
+//            when (it) {
+//                is Rlt.Success -> {
+//                    if (userUid == it.data.uid) {
+//                        userInfo = it.data
+//                        binding.tvTitle.text = getCompatString(
+//                            R.string.profile_personal_title, getDisplayName(
+//                                uid = userUid, originalName = userInfo?.name ?: ""
+//                            )
+//                        )
+//                    }
+//                }
+//
+//                is Rlt.Failed -> {
+//                    //ntd.
+//                }
+//            }
+//        }
+
+    }
+
+}

+ 44 - 0
module/profile/src/main/java/com/adealink/weparty/profile/dialog/CreateOrderDialog.kt

@@ -0,0 +1,44 @@
+package com.adealink.weparty.profile.dialog
+
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.widget.BottomDialogFragment
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.DialogCreateOrderBinding
+import com.adealink.weparty.profile.dialog.adapter.OrderGoodItemViewBinder
+import com.adealink.weparty.profile.dialog.data.OrderGoodItemData
+import com.adealink.weparty.profile.dialog.data.OrderItemData
+
+class CreateOrderDialog : BottomDialogFragment(R.layout.dialog_create_order) {
+    private val binding by viewBinding(DialogCreateOrderBinding::bind)
+
+    private val listAdapter by fastLazy { MultiTypeListAdapter<OrderGoodItemData>() }
+    override fun initViews() {
+        super.initViews()
+        listAdapter.register(OrderGoodItemViewBinder())
+        binding.rvGoods.adapter = listAdapter
+        binding.rvGoods.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+        binding.btnOrder.setOnClickListener {
+
+        }
+    }
+
+    override fun loadData() {
+        super.loadData()
+        listAdapter.submitList(
+            listOf(
+                OrderGoodItemData(OrderItemData("")),
+                OrderGoodItemData(OrderItemData("")),
+                OrderGoodItemData(OrderItemData("")),
+            )
+        )
+    }
+
+    private fun createOrder() {
+
+    }
+
+}

+ 18 - 0
module/profile/src/main/java/com/adealink/weparty/profile/dialog/EvaluateDialog.kt

@@ -0,0 +1,18 @@
+package com.adealink.weparty.profile.dialog
+
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.frame.router.annotation.RouterUri
+import com.adealink.weparty.commonui.widget.BottomDialogFragment
+import com.adealink.weparty.module.profile.Profile
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.DialogEvaluateBinding
+
+@RouterUri(path = [Profile.Evaluate.PATH], desc = "评价弹窗")
+class EvaluateDialog : BottomDialogFragment(R.layout.dialog_evaluate) {
+
+    private val binding by viewBinding(DialogEvaluateBinding::bind)
+    override fun initViews() {
+        super.initViews()
+    }
+
+}

+ 27 - 0
module/profile/src/main/java/com/adealink/weparty/profile/dialog/adapter/OrderGoodItemViewBinder.kt

@@ -0,0 +1,27 @@
+package com.adealink.weparty.profile.dialog.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.profile.databinding.LayoutOrderGoodItemBinding
+import com.adealink.weparty.profile.dialog.data.OrderGoodItemData
+
+class OrderGoodItemViewBinder :
+    ItemViewBinder<OrderGoodItemData, BindingViewHolder<LayoutOrderGoodItemBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<LayoutOrderGoodItemBinding>,
+        item: OrderGoodItemData,
+    ) {
+        // TODO: 后续替换图片
+
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<LayoutOrderGoodItemBinding> {
+        return BindingViewHolder(LayoutOrderGoodItemBinding.inflate(inflater, parent, false))
+    }
+}

+ 10 - 0
module/profile/src/main/java/com/adealink/weparty/profile/dialog/data/CreateOrderData.kt

@@ -0,0 +1,10 @@
+package com.adealink.weparty.profile.dialog.data
+
+
+data class OrderItemData(
+    val url: String
+)
+
+data class OrderGoodItemData(
+    val data: OrderItemData
+)

+ 16 - 0
module/profile/src/main/java/com/adealink/weparty/profile/ui/about/ProfileFragment.kt

@@ -0,0 +1,16 @@
+package com.adealink.weparty.profile.ui.about
+
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.FragmentProfileBinding
+
+class ProfileFragment : BaseFragment(R.layout.fragment_profile) {
+
+    private val binding by viewBinding(FragmentProfileBinding::bind)
+
+    override fun initViews() {
+        super.initViews()
+    }
+
+}

+ 48 - 0
module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/PhotoWallFragment.kt

@@ -0,0 +1,48 @@
+package com.adealink.weparty.profile.ui.photowall
+
+import androidx.recyclerview.widget.RecyclerView
+import androidx.recyclerview.widget.StaggeredGridLayoutManager
+import com.adealink.frame.base.fastLazy
+import com.adealink.frame.mvvm.view.viewBinding
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.FragmentPhotoWallBinding
+import com.adealink.weparty.profile.ui.photowall.adapter.PhotoItemViewBinder
+import com.adealink.weparty.profile.ui.photowall.data.PhotoItemData
+import com.adealink.weparty.profile.ui.photowall.data.ProfilePhotoData
+
+class PhotoWallFragment : BaseFragment(R.layout.fragment_photo_wall) {
+
+    private val binding by viewBinding(FragmentPhotoWallBinding::bind)
+    private val listAdapter by fastLazy { MultiTypeListAdapter<PhotoItemData>() }
+
+    override fun initViews() {
+        super.initViews()
+        listAdapter.register(PhotoItemViewBinder())
+        binding.rvPhotos.layoutManager = StaggeredGridLayoutManager(2, RecyclerView.VERTICAL)
+        binding.rvPhotos.adapter = listAdapter
+
+        listAdapter.submitList(
+            listOf(
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+                PhotoItemData(ProfilePhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png")),
+            )
+        )
+    }
+
+}

+ 26 - 0
module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/adapter/PhotoItemViewBinder.kt

@@ -0,0 +1,26 @@
+package com.adealink.weparty.profile.ui.photowall.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.profile.databinding.LayoutPhotoWallItemBinding
+import com.adealink.weparty.profile.ui.photowall.data.PhotoItemData
+
+class PhotoItemViewBinder :
+    ItemViewBinder<PhotoItemData, BindingViewHolder<LayoutPhotoWallItemBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<LayoutPhotoWallItemBinding>,
+        item: PhotoItemData,
+    ) {
+        holder.binding.root.setImageUrl(item.data.url)
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<LayoutPhotoWallItemBinding> {
+        return BindingViewHolder(LayoutPhotoWallItemBinding.inflate(inflater, parent, false))
+    }
+}

+ 10 - 0
module/profile/src/main/java/com/adealink/weparty/profile/ui/photowall/data/ProfilePhotoData.kt

@@ -0,0 +1,10 @@
+package com.adealink.weparty.profile.ui.photowall.data
+
+
+data class ProfilePhotoData(
+    val url: String
+)
+
+data class PhotoItemData(
+    val data: ProfilePhotoData
+)

BIN
module/profile/src/main/res/drawable-xhdpi/profile_create_order_button_bg.9.png


BIN
module/profile/src/main/res/drawable-xhdpi/profile_skill_bg.png


+ 12 - 0
module/profile/src/main/res/drawable/profile_bottom_layout_bg.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <gradient
+        android:angle="90"
+        android:centerColor="@color/white"
+        android:endColor="@color/color_00FFFFFF"
+        android:startColor="@color/white"
+        android:type="linear" />
+
+</shape>

+ 10 - 0
module/profile/src/main/res/drawable/profile_create_order_price_bg.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <solid android:color="#141789FF" />
+    <corners
+        android:bottomLeftRadius="24dp"
+        android:topLeftRadius="24dp" />
+
+</shape>

+ 8 - 0
module/profile/src/main/res/drawable/profile_order_good_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" />
+    <stroke android:color="#C9CDD4" android:width="1dp" />
+
+</shape>

+ 11 - 0
module/profile/src/main/res/drawable/profile_order_good_selected_bg.xml

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

+ 11 - 0
module/profile/src/main/res/drawable/profile_tab_bg.xml

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

+ 3 - 3
app/src/main/res/drawable/common_evaluate_view_divider.xml → module/profile/src/main/res/drawable/profile_tab_collapse_bg.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <size
-        android:width="4dp"
-        android:height="4dp" />
+
+    <solid android:color="@color/white" />
+
 </shape>

+ 91 - 0
module/profile/src/main/res/layout/activity_user_profile.xml

@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout 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"
+    android:layout_height="match_parent"
+    android:background="@color/black">
+
+    <com.google.android.material.appbar.AppBarLayout
+        android:id="@+id/appBarLayout"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/transparent"
+        app:elevation="0dp">
+
+        <com.google.android.material.appbar.CollapsingToolbarLayout
+            android:id="@+id/collapsing_toolbar_layout"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical">
+
+                <include
+                    android:id="@+id/profile_header_layout"
+                    layout="@layout/layout_user_profile_header"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:minHeight="93dp"
+                    app:layout_scrollFlags="scroll" />
+            </LinearLayout>
+
+        </com.google.android.material.appbar.CollapsingToolbarLayout>
+
+        <com.adealink.weparty.commonui.widget.CommonTabLayout
+            android:id="@+id/tabLayout"
+            android:layout_width="match_parent"
+            android:layout_height="48dp"
+            android:background="@drawable/profile_tab_bg"
+            app:indicator_color="@color/color_222222"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_scrollFlags="scroll|exitUntilCollapsed"
+            app:normal_tab_color="@color/color_999999"
+            app:normal_text_size="16sp"
+            app:selected_tab_color="@color/color_222222"
+            app:selected_text_size="16sp" />
+
+    </com.google.android.material.appbar.AppBarLayout>
+
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/profileVp"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/topBarContainer"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@color/white">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_title"
+            android:layout_width="match_parent"
+            android:layout_height="44dp"
+            android:layout_marginHorizontal="44dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:maxLines="1"
+            android:textColor="@color/color_222222"
+            android:textSize="18sp"
+            android:textStyle="bold"
+            app:layout_constraintBottom_toBottomOf="parent"
+            tools:text="HelloWorld" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+    <include
+        android:id="@+id/v_bottom"
+        layout="@layout/layout_profile_bottom"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:visibility="gone"
+        tools:visibility="visible" />
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 115 - 0
module/profile/src/main/res/layout/dialog_create_order.xml

@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="wrap_content"
+    android:background="@drawable/common_bottom_dialog_bg"
+    android:paddingHorizontal="16dp"
+    android:paddingTop="18dp"
+    android:paddingBottom="24dp">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_goods"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:itemCount="3"
+        tools:listitem="@layout/layout_order_good_item" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_count"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:layout_marginTop="4dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/rv_goods">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_count"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/common_count_str"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.adealink.weparty.commonui.widget.NumberIncreaseView
+            android:id="@+id/v_number"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:default_number="1"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="48dp"
+        android:layout_marginTop="16dp"
+        app:layout_constraintTop_toBottomOf="@id/cl_count">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_price"
+            android:layout_width="wrap_content"
+            android:layout_height="0dp"
+            android:background="@drawable/profile_create_order_price_bg"
+            android:paddingStart="20dp"
+            android:paddingEnd="60dp"
+            app:layout_constraintBottom_toBottomOf="@id/btn_order"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="@id/btn_order">
+
+            <androidx.appcompat.widget.AppCompatImageView
+                android:layout_width="16dp"
+                android:layout_height="16dp"
+                android:layout_marginEnd="4dp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@id/tv_price"
+                app:layout_constraintTop_toTopOf="parent"
+                app:srcCompat="@drawable/common_diamond_32_ic" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_price"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:gravity="center"
+                android:includeFontPadding="false"
+                android:text="@string/profile_create_order"
+                android:textColor="@color/color_FF4E5969"
+                android:textSize="12sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="2500/hour" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/btn_order"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="-24dp"
+            android:background="@drawable/profile_create_order_button_bg"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:text="@string/profile_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>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 73 - 0
module/profile/src/main/res/layout/dialog_evaluate.xml

@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="wrap_content"
+    tools:background="@color/black">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:background="@drawable/common_bottom_dialog_bg"
+        android:paddingHorizontal="16dp"
+        android:paddingTop="55dp"
+        android:paddingBottom="24dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:text="@string/profile_evaluate_title"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="16sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <com.adealink.weparty.commonui.widget.EvaluateView
+            android:id="@+id/v_evaluate"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dp"
+            app:evaluate_current="0"
+            app:evaluate_divide="12dp"
+            app:evaluate_max="5"
+            app:evaluate_width="30dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/tv_title" />
+
+        <com.adealink.weparty.commonui.widget.CommonButton
+            android:id="@+id/btn_submit"
+            android:layout_width="match_parent"
+            android:layout_height="36dp"
+            android:layout_marginTop="18dp"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:text="@string/common_submit"
+            android:textColor="@color/white"
+            android:textSize="16sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/v_evaluate" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <com.adealink.weparty.commonui.imageview.AvatarView
+        android:id="@+id/iv_avatar"
+        android:layout_width="60dp"
+        android:layout_height="60dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 12 - 0
module/profile/src/main/res/layout/fragment_photo_wall.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/color_18E3EB">
+
+    <androidx.recyclerview.widget.RecyclerView
+        android:id="@+id/rv_photos"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+</androidx.coordinatorlayout.widget.CoordinatorLayout>

+ 60 - 0
module/profile/src/main/res/layout/fragment_profile.xml

@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.core.widget.NestedScrollView 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"
+    android:layout_height="match_parent"
+    android:background="@color/white">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingHorizontal="16dp"
+        android:paddingTop="16dp"
+        android:paddingBottom="40dp">
+
+        <!-- 简介 -->
+        <include
+            android:id="@+id/cl_introduce"
+            layout="@layout/layout_profile_introduce"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <!-- 技能 -->
+        <include
+            android:id="@+id/cl_skill"
+            layout="@layout/layout_profile_skill"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="20dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/cl_introduce" />
+
+        <include
+            android:id="@+id/cl_introduce_1"
+            layout="@layout/layout_profile_introduce"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="20dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/cl_skill" />
+
+        <include
+            android:id="@+id/cl_introduce_2"
+            layout="@layout/layout_profile_introduce"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginTop="20dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/cl_introduce_1" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.core.widget.NestedScrollView>

+ 49 - 0
module/profile/src/main/res/layout/layout_order_good_item.xml

@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="52dp"
+    android:background="@drawable/profile_order_good_bg"
+    android:paddingHorizontal="14dp">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/iv_img"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        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="10dp"
+        android:fontFamily="@font/poppins_regular"
+        android:includeFontPadding="false"
+        android:text="LOL"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="15sp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_img"
+        app:layout_constraintStart_toEndOf="@id/iv_img"
+        app:layout_constraintTop_toTopOf="@id/iv_img"
+        tools:ignore="HardcodedText" />
+
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_price"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="10dp"
+        android:fontFamily="@font/poppins_regular"
+        android:includeFontPadding="false"
+        android:text="2500/round"
+        android:textColor="@color/color_FF4E5969"
+        android:textSize="12sp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_img"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="@id/iv_img"
+        tools:ignore="HardcodedText" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 0
module/profile/src/main/res/layout/layout_photo_wall_item.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<com.adealink.frame.image.view.NetworkImageView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    app:roundedCornerRadius="12dp" />

+ 28 - 0
module/profile/src/main/res/layout/layout_profile_bottom.xml

@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="wrap_content"
+    android:background="@drawable/profile_bottom_layout_bg"
+    android:paddingTop="16dp"
+    android:paddingBottom="36dp">
+
+    <com.adealink.weparty.commonui.widget.CommonButton
+        android:id="@+id/btn_pay"
+        android:layout_width="0dp"
+        android:layout_height="48dp"
+        android:layout_marginHorizontal="16dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="center"
+        android:includeFontPadding="false"
+        android:text="@string/profile_pay_with_her"
+        android:textColor="@color/white"
+        android:textSize="16sp"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:visibility="visible" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 86 - 0
module/profile/src/main/res/layout/layout_profile_introduce.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="match_parent">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_information"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fontFamily="@font/poppins_semibold"
+        android:includeFontPadding="false"
+        android:text="@string/profile_information"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="16sp"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_location"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toBottomOf="@id/tv_information">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_location"
+            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_location_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_location"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="1dp"
+            android:gravity="start"
+            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_location"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_goneMarginStart="4dp"
+            tools:text="Jakarta" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_introduce"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toBottomOf="@id/cl_location">
+
+        <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" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_introduce"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="1dp"
+            android:gravity="start"
+            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"
+            app:layout_goneMarginStart="4dp"
+            tools:text="Hello brother, multiple seasons of S, online,Hello brother, multiple seasons of S, online," />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 17 - 18
module/activity/src/main/res/layout/layout_activity_home_list_top_item.xml → module/profile/src/main/res/layout/layout_profile_skill.xml

@@ -5,27 +5,26 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
-    <com.adealink.frame.image.view.NetworkImageView
-        android:id="@+id/iv_item"
-        android:layout_width="50dp"
-        android:layout_height="50dp"
-        app:layout_constraintEnd_toEndOf="parent"
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_skill"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:fontFamily="@font/poppins_semibold"
+        android:includeFontPadding="false"
+        android:text="@string/profile_skill"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="16sp"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
 
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_item"
-        android:layout_width="wrap_content"
+    <androidx.recyclerview.widget.RecyclerView
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="3dp"
-        android:ellipsize="end"
-        android:singleLine="true"
-        android:textColor="@color/color_FF1B1919"
-        android:textSize="12sp"
-        app:layout_constraintEnd_toEndOf="@id/iv_item"
-        app:layout_constraintStart_toStartOf="@id/iv_item"
-        app:layout_constraintTop_toBottomOf="@id/iv_item"
-        app:layout_constraintWidth_max="70dp"
-        tools:text="Mobile Game Game" />
+        android:layout_marginTop="7dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_skill"
+        tools:itemCount="3"
+        tools:listitem="@layout/layout_profile_skill_item" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="wrap_content">
+
+    <com.adealink.frame.image.view.NetworkImageView
+        android:id="@+id/iv_bg"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:actualImageScaleType="fitXY"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintDimensionRatio="343:66"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:placeholderImage="@drawable/profile_skill_bg"
+        app:placeholderImageScaleType="fitXY" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="66dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:includeFontPadding="false"
+        android:text="LoL"
+        android:textColor="@color/white"
+        android:textSize="14sp"
+        app:layout_constraintBottom_toTopOf="@id/tv_desc"
+        app:layout_constraintStart_toStartOf="@id/iv_bg"
+        app:layout_constraintTop_toTopOf="@id/iv_bg"
+        app:layout_constraintVertical_chainStyle="packed" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_desc"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:includeFontPadding="false"
+        android:text="LoLLoLLoLLoLLoL"
+        android:textColor="@color/white"
+        android:textSize="12sp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_bg"
+        app:layout_constraintStart_toStartOf="@id/tv_title"
+        app:layout_constraintTop_toBottomOf="@id/tv_title" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_price"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="14dp"
+        android:includeFontPadding="false"
+        android:text="2500/Round >"
+        android:textColor="@color/white"
+        android:textSize="12sp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_bg"
+        app:layout_constraintEnd_toEndOf="@id/iv_bg"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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"
+    android:layout_height="wrap_content">
+
+    <com.adealink.frame.image.view.NetworkImageView
+        android:id="@+id/iv_bg"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/profile_header_height"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <!--基础信息 -->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_user_info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="12dp"
+        android:paddingHorizontal="16dp"
+        app:layout_constraintBottom_toBottomOf="@id/iv_bg"
+        app:layout_constraintStart_toStartOf="@id/iv_bg">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/white"
+            android:textSize="18sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintBottom_toTopOf="@id/tv_user_id"
+            app:layout_constraintEnd_toStartOf="@id/v_gender"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintHorizontal_chainStyle="packed"
+            app:layout_constraintStart_toStartOf="parent"
+            tools:text="Super Beautiful Girl Super Beautiful Girl Super Beautiful Girl" />
+
+        <com.adealink.weparty.module.profile.widget.GenderView
+            android:id="@+id/v_gender"
+            style="@style/CommonGenderView"
+            android:layout_marginEnd="24dp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_name"
+            app:layout_constraintEnd_toStartOf="@id/v_barrier_end"
+            app:layout_constraintStart_toEndOf="@id/tv_name"
+            app:layout_constraintTop_toTopOf="@id/tv_name" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_user_id"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FFC9CDD4"
+            android:textSize="12sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            tools:text="ID 12345678" />
+
+
+        <androidx.constraintlayout.widget.Barrier
+            android:id="@+id/v_barrier_end"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:barrierDirection="start"
+            app:constraint_referenced_ids="iv_evaluate_star" />
+
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_evaluate_star"
+            android:layout_width="18dp"
+            android:layout_height="18dp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_evaluate"
+            app:layout_constraintEnd_toStartOf="@id/tv_evaluate"
+            app:layout_constraintTop_toTopOf="@id/tv_evaluate"
+            app:srcCompat="@drawable/common_evaluate_star_selected_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_evaluate"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:textColor="@color/white"
+            android:textSize="18sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="4.2" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
module/profile/src/main/res/values/dimens.xml

@@ -1,3 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+    <dimen name="profile_header_height">360dp</dimen>
 </resources>

+ 7 - 0
module/profile/src/main/res/values/strings.xml

@@ -1,3 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
+    <string name="profile_tab_profile">About Her</string>
+    <string name="profile_tab_photo_wall">Photo Wall</string>
+    <string name="profile_pay_with_her">Pay with her</string>
+    <string name="profile_information">Information</string>
+    <string name="profile_skill">Skill</string>
+    <string name="profile_create_order">Order</string>
+    <string name="profile_evaluate_title">你对Ta的好感度</string>
 </resources>

+ 1 - 0
settings.gradle

@@ -97,6 +97,7 @@ include ':module:im'
 include ':module:playmate'
 include ':module:activity'
 include ':module:setting'
+include ':module:order'
 
 //调试frame框架
 include ':frame:network'