Browse Source

feat: 关注/粉丝列表

DoggyZhang 3 months ago
parent
commit
8fdbd597ec
65 changed files with 1598 additions and 409 deletions
  1. 1 0
      app/src/main/java/com/adealink/weparty/commonui/imageview/AvatarView.kt
  2. 2 2
      app/src/main/java/com/adealink/weparty/module/playmate/widget/PriceView.kt
  3. 8 0
      app/src/main/java/com/adealink/weparty/module/profile/Router.kt
  4. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_bean_16_ic.png
  5. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_bean_32_ic.png
  6. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_bean_64_ic.png
  7. 0 0
      app/src/main/res/drawable-xhdpi/common_wallet_coin_16_ic.png
  8. 0 0
      app/src/main/res/drawable-xhdpi/common_wallet_coin_32_ic.png
  9. 0 0
      app/src/main/res/drawable-xhdpi/common_wallet_coin_64_ic.png
  10. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_diamond_16_ic.png
  11. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_diamond_32_ic.png
  12. BIN
      app/src/main/res/drawable-xhdpi/common_wallet_diamond_64_ic.png
  13. 5 0
      app/src/main/res/drawable/common_avatar_bg.xml
  14. 1 1
      app/src/main/res/layout/layout_price_view.xml
  15. 1 0
      app/src/main/res/values/strings.xml
  16. 1 1
      module/order/src/main/res/layout/layout_order_list_item.xml
  17. 4 0
      module/profile/src/main/AndroidManifest.xml
  18. 26 0
      module/profile/src/main/java/com/adealink/weparty/profile/datasource/remote/FollowHttpService.kt
  19. 10 74
      module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt
  20. 45 0
      module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeFunctionCenterComp.kt
  21. 19 7
      module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeHeaderComp.kt
  22. 83 0
      module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeShareComp.kt
  23. 48 0
      module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeWalletComp.kt
  24. 94 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/RelationShipActivity.kt
  25. 45 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/adapter/FansItemViewBinder.kt
  26. 45 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/adapter/FollowItemViewBinder.kt
  27. 45 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/data/RelationShipData.kt
  28. 41 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/RelationShipTab.kt
  29. 43 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/RelationShipViewModel.kt
  30. 71 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/fans/FansFragment.kt
  31. 75 0
      module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/follow/FollowFragment.kt
  32. 4 0
      module/profile/src/main/java/com/adealink/weparty/profile/viewmodel/ProfileViewModelFactory.kt
  33. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_copy_id_ic.png
  34. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_each_follow_button_ic.png
  35. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_each_unfollow_button_ic.png
  36. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_me_help_center_ic.png
  37. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_me_homepage_bg.9.png
  38. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_me_order_ic.png
  39. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_me_setting_ic.png
  40. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_me_share_qrcode_ic.png
  41. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_order_ic.png
  42. BIN
      module/profile/src/main/res/drawable-xhdpi/profile_wallet_ic.png
  43. 9 0
      module/profile/src/main/res/drawable/profile_follow_button_bg.xml
  44. 0 0
      module/profile/src/main/res/drawable/profile_header_cover_bg.xml
  45. 0 0
      module/profile/src/main/res/drawable/profile_indicator.xml
  46. 16 0
      module/profile/src/main/res/drawable/profile_me_share_bg.xml
  47. 6 0
      module/profile/src/main/res/drawable/profile_me_wallet_coin_bg.xml
  48. 6 0
      module/profile/src/main/res/drawable/profile_me_wallet_diamond_bg.xml
  49. 6 0
      module/profile/src/main/res/drawable/profile_unfollow_button_bg.xml
  50. 42 0
      module/profile/src/main/res/layout/activity_profile_relationship.xml
  51. 1 1
      module/profile/src/main/res/layout/dialog_create_order.xml
  52. 17 0
      module/profile/src/main/res/layout/fragment_fans.xml
  53. 17 0
      module/profile/src/main/res/layout/fragment_follow.xml
  54. 27 254
      module/profile/src/main/res/layout/fragment_me.xml
  55. 80 0
      module/profile/src/main/res/layout/item_relationship_fans.xml
  56. 80 0
      module/profile/src/main/res/layout/item_relationship_follow.xml
  57. 139 0
      module/profile/src/main/res/layout/layout_me_function.xml
  58. 174 65
      module/profile/src/main/res/layout/layout_me_header.xml
  59. 46 0
      module/profile/src/main/res/layout/layout_me_share.xml
  60. 75 0
      module/profile/src/main/res/layout/layout_me_share_backup.xml
  61. 129 0
      module/profile/src/main/res/layout/layout_me_wallet.xml
  62. 7 0
      module/profile/src/main/res/values/strings.xml
  63. 2 2
      module/share/src/main/res/layout/fragment_special_qr_code.xml
  64. 1 1
      module/wallet/src/main/res/layout/layout_top_up_product.xml
  65. 1 1
      module/wallet/src/main/res/layout/layout_top_up_product_item.xml

+ 1 - 0
app/src/main/java/com/adealink/weparty/commonui/imageview/AvatarView.kt

@@ -10,6 +10,7 @@ class AvatarView @JvmOverloads constructor(
 ) : GIFImageView(context, attrs, defStyleAttr) {
     init {
         setIsAsCircle(true)
+        setBackgroundResource(R.drawable.common_avatar_bg)
         setDefaultImageResId(R.drawable.common_default_avatar_ic)
         hierarchy.actualImageScaleType = ScalingUtils.ScaleType.CENTER_CROP
     }

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

@@ -47,9 +47,9 @@ class PriceView @JvmOverloads constructor(
         }
 
         if (priceTextSize > 12) {
-            binding.ivPrice.setImageResource(R.drawable.common_coin_64_ic)
+            binding.ivPrice.setImageResource(R.drawable.common_wallet_coin_64_ic)
         } else {
-            binding.ivPrice.setImageResource(R.drawable.common_coin_32_ic)
+            binding.ivPrice.setImageResource(R.drawable.common_wallet_coin_32_ic)
         }
         binding.tvPrice.textSize = priceTextSize
         binding.tvUnit.textSize = unitTextSize

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

@@ -59,4 +59,12 @@ interface Profile {
         }
     }
 
+    interface RelationShip {
+        companion object {
+            const val PATH = "${Common.PATH}/relationship"
+
+            const val EXTRA_TAB = "extra_tab"
+        }
+    }
+
 }

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


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


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


+ 0 - 0
app/src/main/res/drawable-xhdpi/common_coin_16_ic.png → app/src/main/res/drawable-xhdpi/common_wallet_coin_16_ic.png


+ 0 - 0
app/src/main/res/drawable-xhdpi/common_coin_32_ic.png → app/src/main/res/drawable-xhdpi/common_wallet_coin_32_ic.png


+ 0 - 0
app/src/main/res/drawable-xhdpi/common_coin_64_ic.png → app/src/main/res/drawable-xhdpi/common_wallet_coin_64_ic.png


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


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


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


+ 5 - 0
app/src/main/res/drawable/common_avatar_bg.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/white" />
+</shape>

+ 1 - 1
app/src/main/res/layout/layout_price_view.xml

@@ -20,7 +20,7 @@
         app:layout_constraintHorizontal_chainStyle="packed"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
-        app:srcCompat="@drawable/common_coin_32_ic" />
+        app:srcCompat="@drawable/common_wallet_coin_32_ic" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_price"

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

@@ -164,6 +164,7 @@
     <string name="common_upgrade_other_desc">%1$s promote %2$s to %3$s</string>
     <string name="common_search_record">Search record</string>
     <string name="common_coin">Coins</string>
+    <string name="common_diamond">Diamonds</string>
     <string name="common_exp" translatable="false">EXP</string>
     <string name="common_end">End</string>
     <string name="common_copy">Copy</string>

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

@@ -124,7 +124,7 @@
                 app:layout_constraintBottom_toBottomOf="@id/tv_price"
                 app:layout_constraintEnd_toStartOf="@id/tv_price"
                 app:layout_constraintTop_toTopOf="@id/tv_price"
-                app:srcCompat="@drawable/common_coin_16_ic" />
+                app:srcCompat="@drawable/common_wallet_coin_16_ic" />
 
             <androidx.appcompat.widget.AppCompatTextView
                 android:id="@+id/tv_price"

+ 4 - 0
module/profile/src/main/AndroidManifest.xml

@@ -36,5 +36,9 @@
             android:name=".blacklist.BlackListActivity"
             android:screenOrientation="portrait"
             android:theme="@style/AppTheme" />
+        <activity
+            android:name=".relation.RelationShipActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/AppTheme" />
     </application>
 </manifest>

+ 26 - 0
module/profile/src/main/java/com/adealink/weparty/profile/datasource/remote/FollowHttpService.kt

@@ -0,0 +1,26 @@
+package com.adealink.weparty.profile.datasource.remote
+
+import com.adealink.frame.base.Rlt
+import com.adealink.frame.network.data.Res
+import com.adealink.weparty.profile.relation.data.FansReq
+import com.adealink.weparty.profile.relation.data.FansRes
+import com.adealink.weparty.profile.relation.data.FollowReq
+import com.adealink.weparty.profile.relation.data.FollowRes
+import retrofit2.http.Body
+import retrofit2.http.POST
+
+interface FollowHttpService {
+
+    @POST("user/my/info/edit")
+    suspend fun pullFollow(
+        @Body req: FollowReq
+    ): Rlt<Res<FollowRes>>
+
+
+    @POST("user/my/info/edit")
+    suspend fun pullFans(
+        @Body req: FansReq
+    ): Rlt<Res<FansRes>>
+
+
+}

+ 10 - 74
module/profile/src/main/java/com/adealink/weparty/profile/me/MeFragment.kt

@@ -1,29 +1,25 @@
 package com.adealink.weparty.profile.me
 
-import android.text.SpannableStringBuilder
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.view.updateLayoutParams
 import androidx.fragment.app.viewModels
 import com.adealink.frame.aab.util.getCompatDimension
-import com.adealink.frame.aab.util.getCompatDrawable
-import com.adealink.frame.aab.util.getCompatString
-import com.adealink.frame.ext.findAndSetSpan
 import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.frame.router.Router
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.onClick
 import com.adealink.frame.util.statusBarHeight
 import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.commonui.ext.dp
-import com.adealink.weparty.commonui.widget.BottomDialogFragment
-import com.adealink.weparty.commonui.widget.CenterImageSpan
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.profile.Profile
 import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.share.Share
 import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.FragmentMeBinding
+import com.adealink.weparty.profile.me.comp.MeFunctionCenterComp
 import com.adealink.weparty.profile.me.comp.MeHeaderComp
+import com.adealink.weparty.profile.me.comp.MeShareComp
+import com.adealink.weparty.profile.me.comp.MeWalletComp
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipViewModel
 import com.adealink.weparty.profile.viewmodel.ProfileViewModel
 import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
 import com.adealink.weparty.R as APP_R
@@ -32,8 +28,8 @@ import com.adealink.weparty.R as APP_R
 class MeFragment : BaseFragment(R.layout.fragment_me) {
 
     private val binding by viewBinding(FragmentMeBinding::bind)
-
     private val profileViewModel by viewModels<ProfileViewModel> { ProfileViewModelFactory() }
+    private val followViewModel by viewModels<RelationShipViewModel> { ProfileViewModelFactory() }
 
     override fun initViews() {
         super.initViews()
@@ -46,92 +42,32 @@ class MeFragment : BaseFragment(R.layout.fragment_me) {
             16.dp(),
             getCompatDimension(APP_R.dimen.main_content_padding_bottom).toInt()
         )
-        val qrCodeText = getCompatString(R.string.profile_generate_qr_code)
-        binding.tvQrCode.text = SpannableStringBuilder(qrCodeText).apply {
-            findAndSetSpan(
-                CenterImageSpan(getCompatDrawable(R.drawable.profile_share_qr_code_tag_ic).apply {
-                    setBounds(0, 0, 16.dp(), 16.dp())
-                }),
-                IMG_TAG
-            )
-        }
-        binding.clQrCode.onClick {
-            generateQRCode()
-        }
 
-        val shareFriendText = getCompatString(R.string.profile_share_with_friends)
-        binding.tvShareFriend.text = SpannableStringBuilder(shareFriendText).apply {
-            findAndSetSpan(
-                CenterImageSpan(getCompatDrawable(R.drawable.profile_share_friends_tag_ic).apply {
-                    setBounds(0, 0, 16.dp(), 16.dp())
-                }),
-                IMG_TAG
-            )
-        }
-        binding.clShare.onClick {
-            clickShare()
-        }
 
         binding.btnLogout.onClick {
             AccountModule.logout(true)
         }
-
-        binding.clWallet.onClick {
-            goWallet()
-        }
-
-        binding.clPayList.onClick {
-
-        }
-        binding.clFinishList.onClick {
-
-        }
-        binding.clRefundList.onClick {
-
-        }
-        binding.clAllList.onClick {
-
-        }
     }
 
     override fun onResume() {
         super.onResume()
         profileViewModel.pullUserInfoBy(ProfileModule.getMyUid(), false)
+        // TODO: 刷新关注人数
+        followViewModel
     }
 
     override fun observeViewModel() {
         super.observeViewModel()
-        profileViewModel.userInfoLD.observe(viewLifecycleOwner) {
 
-        }
     }
 
     override fun initComponents() {
         super.initComponents()
         MeHeaderComp(this, binding.vHeader).attach()
-    }
-
-    private fun goWallet() {
-
-    }
-
-    private fun generateQRCode() {
-        Router.getRouterInstance<BottomDialogFragment>(Share.QRCodeShare.PATH)
-            ?.show(childFragmentManager, Share.QRCodeShare.PATH)
-    }
-
-    private fun clickShare() {
-        activity?.let { act ->
-            Router.build(act, Share.Poster.PATH).start()
-        }
-    }
-
-    private fun goOrderList() {
-
-    }
+        MeShareComp(this, binding.vPlaymateShare).attach()
+        MeWalletComp(this, binding.vWallet).attach()
+        MeFunctionCenterComp(this, binding.vFunctionCenter).attach()
 
-    companion object {
-        private const val IMG_TAG = "[IMG]"
     }
 
 }

+ 45 - 0
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeFunctionCenterComp.kt

@@ -0,0 +1,45 @@
+package com.adealink.weparty.profile.me.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.mvvm.viewmodel.viewModels
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.databinding.LayoutMeFunctionBinding
+import com.adealink.weparty.profile.viewmodel.ProfileViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+class MeFunctionCenterComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutMeFunctionBinding
+) : ViewComponent(lifecycleOwner) {
+
+    private val profileViewModel by viewModels<ProfileViewModel>(
+        ownerProducer = { viewModelStoreOwner },
+        factoryProducer = { ProfileViewModelFactory() }
+    )
+
+    override fun onCreate() {
+        super.onCreate()
+        initView()
+        observeViewModel()
+        loadData()
+    }
+
+    private fun initView() {
+    }
+
+    private fun observeViewModel() {
+        profileViewModel.userInfoLD.observe(viewLifecycleOwner) { user ->
+            updateHeader(user)
+        }
+    }
+
+    private fun loadData() {
+        updateHeader(ProfileModule.getMyUserInfo())
+    }
+
+    private fun updateHeader(userInfo: UserInfo?) {
+    }
+
+}

+ 19 - 7
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeHeaderComp.kt

@@ -13,6 +13,7 @@ import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.module.profile.data.UserInfo
 import com.adealink.weparty.profile.R
 import com.adealink.weparty.profile.databinding.LayoutMeHeaderBinding
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipTab
 import com.adealink.weparty.profile.viewmodel.ProfileViewModel
 import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
 
@@ -40,18 +41,20 @@ class MeHeaderComp(
         binding.tvUserName.onClick {
             goProfile()
         }
-        binding.tvGoProfile.onClick {
-            goProfile()
-        }
         binding.tvUserId.onClick {
             copyUserId()
         }
         binding.btnCopyId.onClick {
             copyUserId()
         }
-        binding.btnEdit.onClick {
-            editUserInfo()
+
+        binding.clFollow.onClick {
+            goFollowList()
         }
+        binding.clFans.onClick {
+            goFansList()
+        }
+
     }
 
     private fun observeViewModel() {
@@ -88,9 +91,18 @@ class MeHeaderComp(
         showToast(getCompatString(R.string.profile_toast_copy_id_success))
     }
 
-    private fun editUserInfo() {
+    private fun goFollowList() {
+        activity?.let { act ->
+            Router.build(act, Profile.RelationShip.PATH)
+                .putExtra(Profile.RelationShip.EXTRA_TAB, RelationShipTab.FOLLOW.index)
+                .start()
+        }
+    }
+
+    private fun goFansList() {
         activity?.let { act ->
-            Router.build(act, Profile.EditProfile.PATH)
+            Router.build(act, Profile.RelationShip.PATH)
+                .putExtra(Profile.RelationShip.EXTRA_TAB, RelationShipTab.FANS.index)
                 .start()
         }
     }

+ 83 - 0
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeShareComp.kt

@@ -0,0 +1,83 @@
+package com.adealink.weparty.profile.me.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.mvvm.viewmodel.viewModels
+import com.adealink.frame.router.Router
+import com.adealink.weparty.commonui.widget.BottomDialogFragment
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.module.share.Share
+import com.adealink.weparty.profile.databinding.LayoutMeShareBinding
+import com.adealink.weparty.profile.viewmodel.ProfileViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+class MeShareComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutMeShareBinding
+) : ViewComponent(lifecycleOwner) {
+
+    private val profileViewModel by viewModels<ProfileViewModel>(
+        ownerProducer = { viewModelStoreOwner },
+        factoryProducer = { ProfileViewModelFactory() }
+    )
+
+    override fun onCreate() {
+        super.onCreate()
+        initView()
+        observeViewModel()
+        loadData()
+    }
+
+    private fun initView() {
+//        val qrCodeText = getCompatString(R.string.profile_generate_qr_code)
+//        binding.tvQrCode.text = SpannableStringBuilder(qrCodeText).apply {
+//            findAndSetSpan(
+//                CenterImageSpan(getCompatDrawable(R.drawable.profile_share_qr_code_tag_ic).apply {
+//                    setBounds(0, 0, 16.dp(), 16.dp())
+//                }),
+//                IMG_TAG
+//            )
+//        }
+//
+//        val shareFriendText = getCompatString(R.string.profile_share_with_friends)
+//        binding.tvShareFriend.text = SpannableStringBuilder(shareFriendText).apply {
+//            findAndSetSpan(
+//                CenterImageSpan(getCompatDrawable(R.drawable.profile_share_friends_tag_ic).apply {
+//                    setBounds(0, 0, 16.dp(), 16.dp())
+//                }),
+//                IMG_TAG
+//            )
+//        }
+    }
+
+    private fun observeViewModel() {
+        profileViewModel.userInfoLD.observe(viewLifecycleOwner) { user ->
+            updateHeader(user)
+        }
+    }
+
+    private fun loadData() {
+        updateHeader(ProfileModule.getMyUserInfo())
+    }
+
+    private fun updateHeader(userInfo: UserInfo?) {
+    }
+
+
+    private fun generateQRCode() {
+        Router.getRouterInstance<BottomDialogFragment>(Share.QRCodeShare.PATH)
+            ?.show(fragmentManager, Share.QRCodeShare.PATH)
+    }
+
+    private fun clickShare() {
+        activity?.let { act ->
+            Router.build(act, Share.Poster.PATH).start()
+        }
+    }
+
+    companion object{
+        private const val IMG_TAG = "[IMG]"
+    }
+
+}

+ 48 - 0
module/profile/src/main/java/com/adealink/weparty/profile/me/comp/MeWalletComp.kt

@@ -0,0 +1,48 @@
+package com.adealink.weparty.profile.me.comp
+
+import androidx.lifecycle.LifecycleOwner
+import com.adealink.frame.mvvm.view.ViewComponent
+import com.adealink.frame.mvvm.viewmodel.viewModels
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.databinding.LayoutMeWalletBinding
+import com.adealink.weparty.profile.viewmodel.ProfileViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+class MeWalletComp(
+    lifecycleOwner: LifecycleOwner,
+    val binding: LayoutMeWalletBinding
+) : ViewComponent(lifecycleOwner) {
+
+    private val profileViewModel by viewModels<ProfileViewModel>(
+        ownerProducer = { viewModelStoreOwner },
+        factoryProducer = { ProfileViewModelFactory() }
+    )
+
+    override fun onCreate() {
+        super.onCreate()
+        initView()
+        observeViewModel()
+        loadData()
+    }
+
+    private fun initView() {
+    }
+
+    private fun observeViewModel() {
+        profileViewModel.userInfoLD.observe(viewLifecycleOwner) { user ->
+            updateHeader(user)
+        }
+    }
+
+    private fun loadData() {
+        updateHeader(ProfileModule.getMyUserInfo())
+    }
+
+    private fun updateHeader(userInfo: UserInfo?) {
+    }
+
+    private fun goWallet() {
+
+    }
+}

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

@@ -0,0 +1,94 @@
+package com.adealink.weparty.profile.relation
+
+import android.os.Bundle
+import androidx.activity.viewModels
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.Fragment
+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.frame.util.statusBarHeight
+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.profile.databinding.ActivityProfileRelationshipBinding
+import com.adealink.weparty.profile.relation.viewmodel.RELATIONSHIP_TABS
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipTab
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+@RouterUri(
+    path = [Profile.RelationShip.PATH],
+    desc = "关系"
+)
+class RelationShipActivity : BaseActivity() {
+
+    @BindExtra(name = Profile.RelationShip.EXTRA_TAB)
+    var tabIndex: Int = RelationShipTab.FOLLOW.index
+
+    private val binding by viewBinding(ActivityProfileRelationshipBinding::inflate)
+    private val viewModel by viewModels<RelationShipViewModel> { ProfileViewModelFactory() }
+    private lateinit var pageAdapter: PageAdapter
+
+    override fun onBeforeCreate() {
+        super.onBeforeCreate()
+        Router.bind(this)
+    }
+
+    override fun initViews() {
+        super.initViews()
+        setContentView(binding.root)
+        binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
+            topMargin = this@RelationShipActivity.statusBarHeight()
+        }
+
+        pageAdapter = PageAdapter()
+        binding.vpContent.adapter = pageAdapter
+        binding.vTab.createMediatorAndAttach(
+            binding.vpContent,
+            pageAdapter,
+            tabIndex.coerceIn(0, RELATIONSHIP_TABS.size - 1)
+        )
+
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        viewModel
+    }
+
+    internal inner class PageAdapter : BaseActivityTabFragmentStateAdapter(this) {
+
+        override fun getTabName(pos: Int): String {
+            return ""
+        }
+
+        override fun getItemCount(): Int {
+            return RELATIONSHIP_TABS.size
+        }
+
+        override fun createFragment(position: Int): Fragment {
+            val profileTab = RELATIONSHIP_TABS.getOrNull(position) ?: return EmptyFragment()
+            return when (profileTab.type) {
+                RelationShipTab.FOLLOW -> {
+                    profileTab.fragmentBuilder().apply {
+                        arguments = Bundle().apply {
+//                            putString(Profile.Common.EXTRA_UID, userUid)
+                        }
+                    }
+                }
+
+                RelationShipTab.FANS -> {
+                    profileTab.fragmentBuilder().apply {
+                        arguments = Bundle().apply {
+//                            putString(Profile.Common.EXTRA_UID, userUid)
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 45 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/adapter/FansItemViewBinder.kt

@@ -0,0 +1,45 @@
+package com.adealink.weparty.profile.relation.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.profile.databinding.ItemRelationshipFansBinding
+import com.adealink.weparty.profile.relation.data.FollowItemData
+
+
+class FansItemViewBinder(val listener: OnFansItemClick) :
+    ItemViewBinder<FollowItemData, BindingViewHolder<ItemRelationshipFansBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<ItemRelationshipFansBinding>,
+        item: FollowItemData,
+    ) {
+        holder.binding.root.onClick {
+            listener.goProfile(item.user.uid)
+        }
+        holder.binding.ivAvatar.setImageUrl(item.user.avatar)
+        holder.binding.tvUserName.text = item.user.nickName
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<ItemRelationshipFansBinding> {
+        return BindingViewHolder(
+            ItemRelationshipFansBinding.inflate(
+                inflater,
+                parent,
+                false
+            )
+        )
+    }
+
+    interface OnFansItemClick {
+        fun eachFollow(uid: String)
+        fun unEachFollow(uid: String)
+
+        fun goProfile(uid: String)
+    }
+}

+ 45 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/adapter/FollowItemViewBinder.kt

@@ -0,0 +1,45 @@
+package com.adealink.weparty.profile.relation.adapter
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.adealink.frame.util.onClick
+import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
+import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
+import com.adealink.weparty.profile.databinding.ItemRelationshipFollowBinding
+import com.adealink.weparty.profile.relation.data.FollowItemData
+
+
+class FollowItemViewBinder(val listener: OnFollowItemClick) :
+    ItemViewBinder<FollowItemData, BindingViewHolder<ItemRelationshipFollowBinding>>() {
+
+    override fun onBindViewHolder(
+        holder: BindingViewHolder<ItemRelationshipFollowBinding>,
+        item: FollowItemData,
+    ) {
+        holder.binding.root.onClick {
+            listener.goProfile(item.user.uid)
+        }
+        holder.binding.ivAvatar.setImageUrl(item.user.avatar)
+        holder.binding.tvUserName.text = item.user.nickName
+    }
+
+    override fun onCreateViewHolder(
+        inflater: LayoutInflater,
+        parent: ViewGroup,
+    ): BindingViewHolder<ItemRelationshipFollowBinding> {
+        return BindingViewHolder(
+            ItemRelationshipFollowBinding.inflate(
+                inflater,
+                parent,
+                false
+            )
+        )
+    }
+
+    interface OnFollowItemClick {
+        fun follow(uid: String)
+        fun unFollow(uid: String)
+
+        fun goProfile(uid: String)
+    }
+}

+ 45 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/data/RelationShipData.kt

@@ -0,0 +1,45 @@
+package com.adealink.weparty.profile.relation.data
+
+import com.adealink.frame.network.data.PageReq
+import com.adealink.weparty.commonui.recycleview.diffutil.BaseListItemData
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.google.gson.annotations.SerializedName
+
+
+data class FollowReq(
+    @SerializedName("page") val page: PageReq
+)
+
+data class FollowRes(
+    @SerializedName("list") val list: List<FollowData>
+)
+
+data class FollowData(
+    @SerializedName("user") val user: UserInfo
+)
+
+
+data class FansReq(
+    @SerializedName("page") val page: PageReq
+)
+
+data class FansRes(
+    @SerializedName("list") val list: List<FansData>
+)
+
+data class FansData(
+    @SerializedName("user") val user: UserInfo
+)
+
+
+sealed class BaseRelationShipItemData : BaseListItemData
+
+
+data class FollowItemData(
+    val user: UserInfo
+) : BaseRelationShipItemData()
+
+
+data class FansItemData(
+    val user: UserInfo
+) : BaseRelationShipItemData()

+ 41 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/RelationShipTab.kt

@@ -0,0 +1,41 @@
+package com.adealink.weparty.profile.relation.viewmodel
+
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.profile.relation.viewmodel.fans.FansFragment
+import com.adealink.weparty.profile.relation.viewmodel.follow.FollowFragment
+
+enum class RelationShipTab(val index: Int) {
+    /**
+     * 关注
+     */
+    FOLLOW(0),
+
+    /**
+     * 粉丝
+     */
+    FANS(1);
+}
+
+data class Tab(
+    val type: RelationShipTab,
+    val fragmentBuilder: () -> BaseFragment
+)
+
+val FOLLOW_TAB = Tab(
+    type = RelationShipTab.FOLLOW,
+    fragmentBuilder = {
+        FollowFragment()
+    }
+)
+
+val FANS_TAB = Tab(
+    type = RelationShipTab.FANS,
+    fragmentBuilder = {
+        FansFragment()
+    }
+)
+
+
+val RELATIONSHIP_TABS = listOf(
+    FOLLOW_TAB, FANS_TAB
+)

+ 43 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/RelationShipViewModel.kt

@@ -0,0 +1,43 @@
+package com.adealink.weparty.profile.relation.viewmodel
+
+import androidx.lifecycle.MutableLiveData
+import com.adealink.frame.mvvm.viewmodel.BaseViewModel
+import com.adealink.weparty.profile.relation.data.FansItemData
+import com.adealink.weparty.profile.relation.data.FollowItemData
+import com.adealink.weparty.util.PageHandler
+import kotlinx.coroutines.launch
+
+class RelationShipViewModel : BaseViewModel() {
+
+
+    private val followList = mutableListOf<FollowItemData>()
+    private val followPageHandler = PageHandler(pageSize = 20)
+    val followListLD = MutableLiveData<List<FollowItemData>>()
+    fun pullFollowed() {
+        viewModelScope.launch {
+
+        }
+    }
+
+    fun loadMoreFollowed(){
+        viewModelScope.launch {
+
+        }
+    }
+
+
+    private val fansList = mutableListOf<FansItemData>()
+    private val fansPageHandler = PageHandler(pageSize = 20)
+    val fansListLD = MutableLiveData<List<FansItemData>>()
+    fun pullFans() {
+        viewModelScope.launch {
+
+        }
+    }
+
+    fun loadMoreFans(){
+        viewModelScope.launch {
+
+        }
+    }
+}

+ 71 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/fans/FansFragment.kt

@@ -0,0 +1,71 @@
+package com.adealink.weparty.profile.relation.viewmodel.fans
+
+import androidx.fragment.app.activityViewModels
+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.frame.router.Router
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
+import com.adealink.weparty.module.profile.Profile
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.FragmentFansBinding
+import com.adealink.weparty.profile.relation.adapter.FansItemViewBinder
+import com.adealink.weparty.profile.relation.data.BaseRelationShipItemData
+import com.adealink.weparty.profile.relation.data.FansItemData
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+class FansFragment : BaseFragment(R.layout.fragment_fans), FansItemViewBinder.OnFansItemClick {
+    private val binding by viewBinding(FragmentFansBinding::bind)
+    private val viewModel by activityViewModels<RelationShipViewModel> { ProfileViewModelFactory() }
+    private val listAdapter by fastLazy { MultiTypeListAdapter<BaseRelationShipItemData>() }
+    override fun initViews() {
+        super.initViews()
+        listAdapter.register(FansItemViewBinder(this))
+        binding.rvFans.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+        binding.rvFans.adapter = listAdapter
+        binding.rvFans.addItemDecoration(
+            VerticalSpaceItemDecoration(20.dp())
+        )
+    }
+
+    override fun loadData() {
+        super.loadData()
+        listAdapter.submitList(
+            listOf(
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FansItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+            )
+        )
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+    }
+
+    override fun eachFollow(uid: String) {
+    }
+
+    override fun unEachFollow(uid: String) {
+    }
+
+    override fun goProfile(uid: String) {
+        val act = activity ?: return
+        Router.build(act, Profile.UserProfile.PATH)
+            .putExtra(Profile.Common.EXTRA_UID, uid)
+            .start()
+    }
+
+}

+ 75 - 0
module/profile/src/main/java/com/adealink/weparty/profile/relation/viewmodel/follow/FollowFragment.kt

@@ -0,0 +1,75 @@
+package com.adealink.weparty.profile.relation.viewmodel.follow
+
+import androidx.fragment.app.activityViewModels
+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.frame.router.Router
+import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.commonui.ext.dp
+import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.recycleview.itemdecoration.VerticalSpaceItemDecoration
+import com.adealink.weparty.module.profile.Profile
+import com.adealink.weparty.module.profile.ProfileModule
+import com.adealink.weparty.module.profile.data.UserInfo
+import com.adealink.weparty.profile.R
+import com.adealink.weparty.profile.databinding.FragmentFollowBinding
+import com.adealink.weparty.profile.relation.adapter.FollowItemViewBinder
+import com.adealink.weparty.profile.relation.data.BaseRelationShipItemData
+import com.adealink.weparty.profile.relation.data.FollowItemData
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipViewModel
+import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
+
+class FollowFragment : BaseFragment(R.layout.fragment_follow),
+    FollowItemViewBinder.OnFollowItemClick {
+
+    private val binding by viewBinding(FragmentFollowBinding::bind)
+    private val viewModel by activityViewModels<RelationShipViewModel> { ProfileViewModelFactory() }
+    private val listAdapter by fastLazy { MultiTypeListAdapter<BaseRelationShipItemData>() }
+
+    override fun initViews() {
+        super.initViews()
+        listAdapter.register(FollowItemViewBinder(this))
+        binding.rvFollow.layoutManager = LinearLayoutManager(context, RecyclerView.VERTICAL, false)
+        binding.rvFollow.adapter = listAdapter
+        binding.rvFollow.addItemDecoration(
+            VerticalSpaceItemDecoration(20.dp())
+        )
+    }
+
+    override fun loadData() {
+        super.loadData()
+        // TODO: 测试
+        listAdapter.submitList(
+            listOf(
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+                FollowItemData(ProfileModule.getMyUserInfo() ?: UserInfo.emptyUserInfo("123", "")),
+            )
+        )
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+    }
+
+    override fun follow(uid: String) {
+    }
+
+    override fun unFollow(uid: String) {
+    }
+
+    override fun goProfile(uid: String) {
+        val act = activity ?: return
+        Router.build(act, Profile.UserProfile.PATH)
+            .putExtra(Profile.Common.EXTRA_UID, uid)
+            .start()
+    }
+
+}

+ 4 - 0
module/profile/src/main/java/com/adealink/weparty/profile/viewmodel/ProfileViewModelFactory.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.profile.viewmodel
 
 import androidx.lifecycle.ViewModel
 import androidx.lifecycle.ViewModelProvider
+import com.adealink.weparty.profile.relation.viewmodel.RelationShipViewModel
 
 @Suppress("UNCHECKED_CAST")
 class ProfileViewModelFactory : ViewModelProvider.NewInstanceFactory() {
@@ -12,6 +13,9 @@ class ProfileViewModelFactory : ViewModelProvider.NewInstanceFactory() {
                 isAssignableFrom(ProfileViewModel::class.java) ->
                     ProfileViewModel()
 
+                isAssignableFrom(RelationShipViewModel::class.java) ->
+                    RelationShipViewModel()
+
                 else ->
                     throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}")
             } as T

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


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


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


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


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


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


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


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


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


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


+ 9 - 0
module/profile/src/main/res/drawable/profile_follow_button_bg.xml

@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <corners android:radius="12dp" />
+    <gradient
+        android:angle="0"
+        android:endColor="#B1EF5D"
+        android:startColor="#4ED2FF" />
+</shape>

+ 0 - 0
module/profile/src/main/res/drawable-xhdpi/profile_header_cover_bg.xml → module/profile/src/main/res/drawable/profile_header_cover_bg.xml


+ 0 - 0
module/profile/src/main/res/drawable-xhdpi/profile_indicator.xml → module/profile/src/main/res/drawable/profile_indicator.xml


+ 16 - 0
module/profile/src/main/res/drawable/profile_me_share_bg.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <gradient
+        android:angle="0"
+        android:centerColor="#DDFFB7"
+        android:endColor="#FFFFFF"
+        android:startColor="#B7EEFF"
+        android:type="linear" />
+
+    <corners android:radius="30dp" />
+
+    <stroke
+        android:width="1dp"
+        android:color="@color/white" />
+</shape>

+ 6 - 0
module/profile/src/main/res/drawable/profile_me_wallet_coin_bg.xml

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

+ 6 - 0
module/profile/src/main/res/drawable/profile_me_wallet_diamond_bg.xml

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

+ 6 - 0
module/profile/src/main/res/drawable/profile_unfollow_button_bg.xml

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

+ 42 - 0
module/profile/src/main/res/layout/activity_profile_relationship.xml

@@ -0,0 +1,42 @@
+<?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">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/top_bar"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/common_top_bar_height"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/iv_back"
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            android:layout_marginStart="16dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/commonui_back_black_48_ic" />
+
+        <com.adealink.weparty.commonui.widget.CommonTabLayout
+            android:id="@+id/v_tab"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/iv_back"
+            app:layout_constraintTop_toTopOf="parent" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/vp_content"
+        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/top_bar" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -72,7 +72,7 @@
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toStartOf="@id/tv_price"
                 app:layout_constraintTop_toTopOf="parent"
-                app:srcCompat="@drawable/common_coin_32_ic" />
+                app:srcCompat="@drawable/common_wallet_coin_32_ic" />
 
             <androidx.appcompat.widget.AppCompatTextView
                 android:id="@+id/tv_price"

+ 17 - 0
module/profile/src/main/res/layout/fragment_fans.xml

@@ -0,0 +1,17 @@
+<?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">
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/v_refresh"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_fans"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 17 - 0
module/profile/src/main/res/layout/fragment_follow.xml

@@ -0,0 +1,17 @@
+<?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">
+
+    <com.scwang.smart.refresh.layout.SmartRefreshLayout
+        android:id="@+id/v_refresh"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_follow"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </com.scwang.smart.refresh.layout.SmartRefreshLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 27 - 254
module/profile/src/main/res/layout/fragment_me.xml

@@ -38,267 +38,40 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
-            <!-- 二维码 -->
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/cl_qr_code"
-                android:layout_width="0dp"
-                android:layout_height="70dp"
-                android:layout_marginTop="14dp"
-                android:background="@drawable/profile_qr_code_button_bg"
-                app:layout_constraintEnd_toStartOf="@id/cl_share"
-                app:layout_constraintHorizontal_weight="1"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/v_header">
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    android:id="@+id/tv_qr_code"
-                    android:layout_width="0dp"
-                    android:layout_height="0dp"
-                    android:layout_marginVertical="10dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="50dp"
-                    android:fontFamily="@font/poppins_semibold"
-                    android:gravity="start|top"
-                    android:includeFontPadding="false"
-                    android:text="@string/profile_generate_qr_code"
-                    android:textColor="@color/color_FF01327B"
-                    android:textSize="16sp"
-                    app:autoSizeMaxTextSize="16sp"
-                    app:autoSizeMinTextSize="8sp"
-                    app:autoSizeTextType="uniform"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-            <!-- 分享 -->
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/cl_share"
-                android:layout_width="0dp"
-                android:layout_height="70dp"
-                android:layout_marginStart="11dp"
-                android:layout_marginTop="14dp"
-                android:background="@drawable/profile_share_button_bg"
+            <!-- 陪玩师分享 -->
+            <include
+                android:id="@+id/v_playmate_share"
+                layout="@layout/layout_me_share"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:visibility="gone"
+                tools:visibility="visible"
+                android:layout_marginTop="16dp"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintHorizontal_weight="1"
-                app:layout_constraintStart_toEndOf="@id/cl_qr_code"
-                app:layout_constraintTop_toBottomOf="@id/v_header">
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    android:id="@+id/tv_share_friend"
-                    android:layout_width="0dp"
-                    android:layout_height="0dp"
-                    android:layout_marginVertical="10dp"
-                    android:layout_marginStart="10dp"
-                    android:layout_marginEnd="50dp"
-                    android:fontFamily="@font/poppins_semibold"
-                    android:gravity="start|top"
-                    android:includeFontPadding="false"
-                    android:text="@string/profile_share_with_friends"
-                    android:textColor="@color/color_FF0A625F"
-                    android:textSize="16sp"
-                    app:autoSizeMaxTextSize="16sp"
-                    app:autoSizeMinTextSize="8sp"
-                    app:autoSizeTextType="uniform"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/v_header" />
 
             <!-- 钱包 -->
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/cl_wallet"
+            <include
+                android:id="@+id/v_wallet"
+                layout="@layout/layout_me_wallet"
                 android:layout_width="match_parent"
-                android:layout_height="56dp"
-                android:layout_marginTop="14dp"
-                android:background="@drawable/profile_me_item_bg"
-                android:paddingHorizontal="16dp"
-                app:layout_constraintTop_toBottomOf="@id/cl_qr_code">
-
-                <androidx.appcompat.widget.AppCompatImageView
-                    android:id="@+id/iv_wallet"
-                    android:layout_width="24dp"
-                    android:layout_height="24dp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:srcCompat="@drawable/profile_wallet_ic" />
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="10dp"
-                    android:fontFamily="@font/poppins_semibold"
-                    android:includeFontPadding="false"
-                    android:text="@string/profile_wallet"
-                    android:textColor="@color/color_FF1D2129"
-                    android:textSize="16sp"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintStart_toEndOf="@id/iv_wallet"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
+                android:layout_height="wrap_content"
+                android:layout_marginTop="16dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/v_playmate_share" />
 
-            <!-- 订单 -->
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/cl_order"
+            <!-- 钱包 -->
+            <include
+                android:id="@+id/v_function_center"
+                layout="@layout/layout_me_function"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="12dp"
-                android:background="@drawable/profile_me_item_bg"
-                android:paddingHorizontal="16dp"
-                android:paddingVertical="12dp"
-                app:layout_constraintTop_toBottomOf="@id/cl_wallet">
-
-                <androidx.appcompat.widget.AppCompatImageView
-                    android:id="@+id/iv_order"
-                    android:layout_width="24dp"
-                    android:layout_height="24dp"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent"
-                    app:srcCompat="@drawable/profile_order_ic" />
-
-                <androidx.appcompat.widget.AppCompatTextView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginStart="10dp"
-                    android:fontFamily="@font/poppins_semibold"
-                    android:includeFontPadding="false"
-                    android:text="@string/profile_order"
-                    android:textColor="@color/color_FF1D2129"
-                    android:textSize="16sp"
-                    app:layout_constraintBottom_toBottomOf="@id/iv_order"
-                    app:layout_constraintStart_toEndOf="@id/iv_order"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-                <View
-                    android:layout_width="0dp"
-                    android:layout_height="1dp"
-                    android:layout_marginTop="10dp"
-                    android:background="@color/color_FFE5E6EB"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@id/iv_order" />
-
-                <!--待付款-->
-                <androidx.appcompat.widget.LinearLayoutCompat
-                    android:id="@+id/cl_pay_list"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="20dp"
-                    android:gravity="center_horizontal"
-                    android:orientation="vertical"
-                    app:layout_constraintEnd_toStartOf="@id/cl_finish_list"
-                    app:layout_constraintHorizontal_chainStyle="spread_inside"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@id/iv_order">
-
-                    <androidx.appcompat.widget.AppCompatImageView
-                        android:layout_width="28dp"
-                        android:layout_height="28dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:srcCompat="@drawable/profile_order_pay_list_ic" />
-
-                    <androidx.appcompat.widget.AppCompatTextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:includeFontPadding="false"
-                        android:text="@string/profile_order_pay_list"
-                        android:textColor="@color/color_FF4E5969"
-                        android:textSize="12sp" />
-
-                </androidx.appcompat.widget.LinearLayoutCompat>
-
-                <!--已完成-->
-                <androidx.appcompat.widget.LinearLayoutCompat
-                    android:id="@+id/cl_finish_list"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="20dp"
-                    android:gravity="center_horizontal"
-                    android:orientation="vertical"
-                    app:layout_constraintEnd_toStartOf="@id/cl_refund_list"
-                    app:layout_constraintStart_toEndOf="@id/cl_pay_list"
-                    app:layout_constraintTop_toBottomOf="@id/iv_order">
-
-                    <androidx.appcompat.widget.AppCompatImageView
-                        android:layout_width="28dp"
-                        android:layout_height="28dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:srcCompat="@drawable/profile_order_finish_list_ic" />
-
-                    <androidx.appcompat.widget.AppCompatTextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:includeFontPadding="false"
-                        android:text="@string/profile_order_finish_list"
-                        android:textColor="@color/color_FF4E5969"
-                        android:textSize="12sp" />
-
-                </androidx.appcompat.widget.LinearLayoutCompat>
-
-                <!--待付款-->
-                <androidx.appcompat.widget.LinearLayoutCompat
-                    android:id="@+id/cl_refund_list"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="20dp"
-                    android:gravity="center_horizontal"
-                    android:orientation="vertical"
-                    app:layout_constraintEnd_toStartOf="@id/cl_all_list"
-                    app:layout_constraintStart_toEndOf="@id/cl_finish_list"
-                    app:layout_constraintTop_toBottomOf="@id/iv_order">
-
-                    <androidx.appcompat.widget.AppCompatImageView
-                        android:layout_width="28dp"
-                        android:layout_height="28dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:srcCompat="@drawable/profile_order_refund_list_ic" />
-
-                    <androidx.appcompat.widget.AppCompatTextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:includeFontPadding="false"
-                        android:text="@string/profile_order_refund_list"
-                        android:textColor="@color/color_FF4E5969"
-                        android:textSize="12sp" />
-
-                </androidx.appcompat.widget.LinearLayoutCompat>
-
-                <!--待付款-->
-                <androidx.appcompat.widget.LinearLayoutCompat
-                    android:id="@+id/cl_all_list"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="20dp"
-                    android:gravity="center_horizontal"
-                    android:orientation="vertical"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toEndOf="@id/cl_refund_list"
-                    app:layout_constraintTop_toBottomOf="@id/iv_order">
-
-                    <androidx.appcompat.widget.AppCompatImageView
-                        android:layout_width="28dp"
-                        android:layout_height="28dp"
-                        app:layout_constraintBottom_toBottomOf="parent"
-                        app:srcCompat="@drawable/profile_order_all_list_ic" />
-
-                    <androidx.appcompat.widget.AppCompatTextView
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:includeFontPadding="false"
-                        android:text="@string/profile_order_all_list"
-                        android:textColor="@color/color_FF4E5969"
-                        android:textSize="12sp" />
-
-                </androidx.appcompat.widget.LinearLayoutCompat>
-
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
+                android:layout_marginTop="16dp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/v_wallet" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 

+ 80 - 0
module/profile/src/main/res/layout/item_relationship_fans.xml

@@ -0,0 +1,80 @@
+<?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="50dp">
+
+    <com.adealink.weparty.commonui.imageview.AvatarView
+        android:id="@+id/iv_avatar"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_user_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:ellipsize="end"
+        android:fontFamily="@font/poppins_semibold"
+        android:includeFontPadding="false"
+        android:singleLine="true"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/v_gender"
+        app:layout_constraintStart_toEndOf="@id/iv_avatar"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Super Beautiful Girl" />
+
+    <com.adealink.weparty.module.profile.widget.GenderView
+        android:id="@+id/v_gender"
+        style="@style/CommonGenderView"
+        android:layout_marginStart="4dp"
+        app:layout_constraintBottom_toBottomOf="@id/tv_user_name"
+        app:layout_constraintEnd_toStartOf="@id/right_barrier"
+        app:layout_constraintStart_toEndOf="@id/tv_user_name"
+        app:layout_constraintTop_toTopOf="@id/tv_user_name" />
+
+
+    <androidx.constraintlayout.widget.Barrier
+        android:id="@+id/right_barrier"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:barrierDirection="start"
+        app:constraint_referenced_ids="btn_follow,
+        " />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/btn_follow"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:includeFontPadding="false"
+        android:minWidth="36dp"
+        android:paddingHorizontal="8dp"
+        android:paddingVertical="4dp"
+        android:singleLine="true"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/btn_each_follow"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:background="@drawable/profile_follow_button_bg"
+        tools:text="follow"
+        tools:textColor="@color/white" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/btn_each_follow"
+        android:layout_width="48dp"
+        android:layout_height="22dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/profile_each_follow_button_ic" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 80 - 0
module/profile/src/main/res/layout/item_relationship_follow.xml

@@ -0,0 +1,80 @@
+<?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="50dp">
+
+    <com.adealink.weparty.commonui.imageview.AvatarView
+        android:id="@+id/iv_avatar"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_user_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:ellipsize="end"
+        android:fontFamily="@font/poppins_semibold"
+        android:includeFontPadding="false"
+        android:singleLine="true"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/v_gender"
+        app:layout_constraintStart_toEndOf="@id/iv_avatar"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Super Beautiful Girl" />
+
+    <com.adealink.weparty.module.profile.widget.GenderView
+        android:id="@+id/v_gender"
+        style="@style/CommonGenderView"
+        android:layout_marginStart="4dp"
+        app:layout_constraintBottom_toBottomOf="@id/tv_user_name"
+        app:layout_constraintEnd_toStartOf="@id/right_barrier"
+        app:layout_constraintStart_toEndOf="@id/tv_user_name"
+        app:layout_constraintTop_toTopOf="@id/tv_user_name" />
+
+
+    <androidx.constraintlayout.widget.Barrier
+        android:id="@+id/right_barrier"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:barrierDirection="start"
+        app:constraint_referenced_ids="btn_follow,
+        " />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/btn_follow"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="12dp"
+        android:includeFontPadding="false"
+        android:minWidth="36dp"
+        android:paddingHorizontal="8dp"
+        android:paddingVertical="4dp"
+        android:singleLine="true"
+        android:textSize="14sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@id/btn_each_follow"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:background="@drawable/profile_follow_button_bg"
+        tools:text="follow"
+        tools:textColor="@color/white" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:id="@+id/btn_each_follow"
+        android:layout_width="48dp"
+        android:layout_height="22dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/profile_each_follow_button_ic" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 139 - 0
module/profile/src/main/res/layout/layout_me_function.xml

@@ -0,0 +1,139 @@
+<?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"
+    android:background="@drawable/profile_me_item_bg"
+    android:paddingHorizontal="16dp">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_wallet"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:text="@string/profile_me_function_center"
+        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_order"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toStartOf="@id/cl_help_center"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_wallet">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/profile_me_order_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="4dp"
+            android:layout_marginTop="32dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="@string/profile_order"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <!--帮助中心-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_help_center"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toStartOf="@id/cl_setting"
+        app:layout_constraintStart_toEndOf="@id/cl_order"
+        app:layout_constraintTop_toBottomOf="@id/tv_wallet">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/profile_me_help_center_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="4dp"
+            android:layout_marginTop="32dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="@string/profile_me_help_center"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <!--设置-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_setting"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:paddingTop="10dp"
+        android:paddingBottom="16dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/cl_help_center"
+        app:layout_constraintTop_toBottomOf="@id/tv_wallet">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="24dp"
+            android:layout_height="24dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:srcCompat="@drawable/profile_me_setting_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginHorizontal="4dp"
+            android:layout_marginTop="32dp"
+            android:ellipsize="end"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:text="@string/profile_me_setting"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="12sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 174 - 65
module/profile/src/main/res/layout/layout_me_header.xml

@@ -5,75 +5,184 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
 
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dp"
+        android:background="@drawable/profile_me_item_bg"
+        android:paddingBottom="18dp"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_user_name"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="96dp"
+            android:layout_marginTop="4dp"
+            android:layout_marginEnd="-4dp"
+            android:ellipsize="end"
+            android:fontFamily="@font/poppins_semibold"
+            android:includeFontPadding="false"
+            android:singleLine="true"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="22sp"
+            app:layout_constrainedWidth="true"
+            app:layout_constraintEnd_toStartOf="@id/tv_home_page_label"
+            app:layout_constraintHorizontal_bias="0"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="Super Beautiful Girl" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_home_page_label"
+            android:layout_width="wrap_content"
+            android:layout_height="30dp"
+            android:background="@drawable/profile_me_homepage_bg"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="center"
+            android:includeFontPadding="false"
+            android:text="@string/profile_me_homepage_label"
+            android:textColor="@color/white"
+            android:textSize="14sp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_user_id_label"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="4dp"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="14sp"
+            app:layout_constraintStart_toStartOf="@id/tv_user_name"
+            app:layout_constraintTop_toBottomOf="@id/tv_user_name"
+            tools:text="ID" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_user_id"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FF4E5969"
+            android:textSize="14sp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_user_id_label"
+            app:layout_constraintStart_toEndOf="@id/tv_user_id_label"
+            app:layout_constraintTop_toTopOf="@id/tv_user_id_label"
+            tools:text="123123123" />
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:id="@+id/btn_copy_id"
+            android:layout_width="15dp"
+            android:layout_height="15dp"
+            android:layout_marginStart="4dp"
+            app:layout_constraintBottom_toBottomOf="@id/tv_user_id"
+            app:layout_constraintStart_toEndOf="@id/tv_user_id"
+            app:layout_constraintTop_toTopOf="@id/tv_user_id"
+            app:srcCompat="@drawable/profile_copy_id_ic" />
+
+
+        <androidx.constraintlayout.widget.Barrier
+            android:id="@+id/bottom_barrier"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:barrierDirection="bottom"
+            app:constraint_referenced_ids="tv_user_id_label,tv_user_id, btn_copy_id" />
+
+        <!--关注-->
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_follow"
+            android:layout_width="0dp"
+            android:layout_height="38dp"
+            android:layout_marginTop="16dp"
+            app:layout_constraintEnd_toStartOf="@id/cl_fans"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/bottom_barrier">
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_follow_count"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:fontFamily="@font/poppins_semibold"
+                android:includeFontPadding="false"
+                android:textColor="@color/color_FF1D2129"
+                android:textSize="18sp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="18" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/profile_me_follower"
+                android:textColor="@color/color_FF1D2129"
+                android:textSize="12sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <View
+            android:layout_width="1dp"
+            android:layout_height="22dp"
+            android:background="@color/color_FFD9D9D9"
+            app:layout_constraintBottom_toBottomOf="@id/cl_follow"
+            app:layout_constraintStart_toEndOf="@id/cl_follow"
+            app:layout_constraintTop_toTopOf="@id/cl_follow" />
+
+        <!--粉丝-->
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/cl_fans"
+            android:layout_width="0dp"
+            android:layout_height="38dp"
+            android:layout_marginTop="16dp"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/cl_follow"
+            app:layout_constraintTop_toBottomOf="@id/bottom_barrier">
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:id="@+id/tv_fans_count"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:fontFamily="@font/poppins_semibold"
+                android:includeFontPadding="false"
+                android:textColor="@color/color_FF1D2129"
+                android:textSize="18sp"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="18" />
+
+            <androidx.appcompat.widget.AppCompatTextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:includeFontPadding="false"
+                android:text="@string/profile_me_fans"
+                android:textColor="@color/color_FF1D2129"
+                android:textSize="12sp"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
     <com.adealink.weparty.commonui.imageview.AvatarView
         android:id="@+id/iv_avatar"
-        android:layout_width="75dp"
-        android:layout_height="75dp"
+        android:layout_width="70dp"
+        android:layout_height="70dp"
+        android:layout_marginStart="16dp"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:roundingBorderColor="@color/white"
-        app:roundingBorderWidth="1dp" />
-
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/btn_edit"
-        android:layout_width="28dp"
-        android:layout_height="28dp"
-        app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
-        app:layout_constraintEnd_toEndOf="@id/iv_avatar"
-        app:srcCompat="@drawable/profile_me_edit_ic" />
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_user_name"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="16dp"
-        android:fontFamily="@font/poppins_semibold"
-        android:includeFontPadding="false"
-        android:textColor="@color/color_FF1D2129"
-        android:textSize="18sp"
-        app:layout_constrainedWidth="true"
-        app:layout_constraintBottom_toTopOf="@id/tv_user_id"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintHorizontal_bias="0"
-        app:layout_constraintStart_toEndOf="@id/iv_avatar"
-        app:layout_constraintTop_toTopOf="@id/iv_avatar"
-        app:layout_constraintVertical_chainStyle="packed"
-        tools:text="Super Beautiful Girl" />
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_user_id"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="4dp"
-        android:includeFontPadding="false"
-        android:textColor="@color/color_FF4E5969"
-        android:textSize="11sp"
-        app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
-        app:layout_constraintStart_toStartOf="@id/tv_user_name"
-        app:layout_constraintTop_toBottomOf="@id/tv_user_name"
-        tools:text="ID 123123123" />
-
-    <androidx.appcompat.widget.AppCompatImageView
-        android:id="@+id/btn_copy_id"
-        android:layout_width="11.5dp"
-        android:layout_height="11.5dp"
-        android:layout_marginStart="4dp"
-        app:layout_constraintBottom_toBottomOf="@id/tv_user_id"
-        app:layout_constraintStart_toEndOf="@id/tv_user_id"
-        app:layout_constraintTop_toTopOf="@id/tv_user_id"
-        app:srcCompat="@drawable/profile_copy_id_ic" />
-
-    <androidx.appcompat.widget.AppCompatTextView
-        android:id="@+id/tv_go_profile"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="4dp"
-        android:includeFontPadding="false"
-        android:text="@string/profile_go_profile"
-        android:textColor="@color/color_FF4E5969"
-        android:textSize="11sp"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:roundingBorderWidth="1dp"
+        tools:background="@drawable/common_default_avatar_ic" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 46 - 0
module/profile/src/main/res/layout/layout_me_share.xml

@@ -0,0 +1,46 @@
+<?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"
+    android:background="@drawable/profile_me_share_bg">
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="22dp"
+        android:layout_height="22dp"
+        android:layout_marginStart="16dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/profile_me_share_qrcode_ic" />
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_wallet"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="8dp"
+        android:layout_marginStart="42dp"
+        android:layout_marginEnd="20dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:text="@string/profile_me_share_your_qrcode"
+        android:textColor="@color/color_FF1D2129"
+        android:textSize="16sp"
+        app:layout_constrainedWidth="true"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_bias="0"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="16dp"
+        android:layout_height="16dp"
+        android:layout_marginEnd="16dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        app:srcCompat="@drawable/common_go_ic" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 75 - 0
module/profile/src/main/res/layout/layout_me_share_backup.xml

@@ -0,0 +1,75 @@
+<?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_qr_code"
+        android:layout_width="0dp"
+        android:layout_height="70dp"
+        android:background="@drawable/profile_qr_code_button_bg"
+        app:layout_constraintEnd_toStartOf="@id/cl_share"
+        app:layout_constraintHorizontal_weight="1"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_qr_code"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginVertical="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginEnd="50dp"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|top"
+            android:includeFontPadding="false"
+            android:text="@string/profile_generate_qr_code"
+            android:textColor="@color/color_FF01327B"
+            android:textSize="16sp"
+            app:autoSizeMaxTextSize="16sp"
+            app:autoSizeMinTextSize="8sp"
+            app:autoSizeTextType="uniform"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <!-- 分享 -->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_share"
+        android:layout_width="0dp"
+        android:layout_height="70dp"
+        android:layout_marginStart="11dp"
+        android:background="@drawable/profile_share_button_bg"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintHorizontal_weight="1"
+        app:layout_constraintStart_toEndOf="@id/cl_qr_code"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_share_friend"
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_marginVertical="10dp"
+            android:layout_marginStart="10dp"
+            android:layout_marginEnd="50dp"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|top"
+            android:includeFontPadding="false"
+            android:text="@string/profile_share_with_friends"
+            android:textColor="@color/color_FF0A625F"
+            android:textSize="16sp"
+            app:autoSizeMaxTextSize="16sp"
+            app:autoSizeMinTextSize="8sp"
+            app:autoSizeTextType="uniform"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 129 - 0
module/profile/src/main/res/layout/layout_me_wallet.xml

@@ -0,0 +1,129 @@
+<?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_me_item_bg"
+    android:paddingHorizontal="16dp"
+    android:paddingBottom="12dp">
+
+    <androidx.appcompat.widget.AppCompatTextView
+        android:id="@+id/tv_wallet"
+        android:layout_width="wrap_content"
+        android:layout_height="40dp"
+        android:fontFamily="@font/poppins_semibold"
+        android:gravity="start|center_vertical"
+        android:includeFontPadding="false"
+        android:text="@string/profile_wallet"
+        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_coin"
+        android:layout_width="0dp"
+        android:layout_height="64dp"
+        android:background="@drawable/profile_me_wallet_coin_bg"
+        app:layout_constraintEnd_toStartOf="@id/cl_diamond"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/tv_wallet">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginEnd="5dp"
+            android:layout_marginBottom="5dp"
+            android:alpha="0.2"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:srcCompat="@drawable/common_wallet_coin_64_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_coin"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="12dp"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="18sp"
+            app:layout_constraintBottom_toTopOf="@id/tv_coin_unit"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:text="12k" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_coin_unit"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:text="@string/common_coin"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="12sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="@id/tv_coin"
+            app:layout_constraintTop_toBottomOf="@id/tv_coin" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+    <!--钻石-->
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/cl_diamond"
+        android:layout_width="0dp"
+        android:layout_height="64dp"
+        android:layout_marginStart="10dp"
+        android:background="@drawable/profile_me_wallet_diamond_bg"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toEndOf="@id/cl_coin"
+        app:layout_constraintTop_toBottomOf="@id/tv_wallet">
+
+        <androidx.appcompat.widget.AppCompatImageView
+            android:layout_width="40dp"
+            android:layout_height="40dp"
+            android:layout_marginEnd="5dp"
+            android:layout_marginBottom="5dp"
+            android:alpha="0.2"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:srcCompat="@drawable/common_wallet_diamond_64_ic" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_diamond"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="12dp"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="18sp"
+            app:layout_constraintBottom_toTopOf="@id/tv_diamond_unit"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:layout_constraintVertical_chainStyle="packed"
+            tools:text="12k" />
+
+        <androidx.appcompat.widget.AppCompatTextView
+            android:id="@+id/tv_diamond_unit"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:fontFamily="@font/poppins_semibold"
+            android:gravity="start|center_vertical"
+            android:includeFontPadding="false"
+            android:text="@string/common_diamond"
+            android:textColor="@color/color_FF1D2129"
+            android:textSize="12sp"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="@id/tv_diamond"
+            app:layout_constraintTop_toBottomOf="@id/tv_diamond" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

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

@@ -9,6 +9,7 @@
     <string name="profile_go_profile"><![CDATA[个人页 >]]></string>
     <string name="profile_generate_qr_code">Generate QR code [IMG]</string>
     <string name="profile_share_with_friends">Share with friends [IMG]</string>
+    <string name="profile_me_share_your_qrcode">Share your QR Code</string>
     <string name="profile_wallet">My Wallet</string>
     <string name="profile_order">My Order</string>
     <string name="profile_order_pay_list">待付款</string>
@@ -28,4 +29,10 @@
     <string name="profile_search_history">History</string>
     <string name="profile_search_contact">联系人</string>
     <string name="profile_search_user_fans">粉丝数 %s</string>
+    <string name="profile_me_homepage_label">Homepage</string>
+    <string name="profile_me_follower">Follower</string>
+    <string name="profile_me_fans">Fans</string>
+    <string name="profile_me_function_center">Function Center</string>
+    <string name="profile_me_help_center">Help Center</string>
+    <string name="profile_me_setting">Settings</string>
 </resources>

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

@@ -43,7 +43,7 @@
                     app:layout_constraintHorizontal_chainStyle="packed"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toTopOf="@id/et_input_price"
-                    app:srcCompat="@drawable/common_coin_32_ic" />
+                    app:srcCompat="@drawable/common_wallet_coin_32_ic" />
 
                 <androidx.appcompat.widget.AppCompatEditText
                     android:id="@+id/et_input_price"
@@ -101,7 +101,7 @@
                 app:layout_constraintBottom_toBottomOf="@id/tv_sum"
                 app:layout_constraintEnd_toStartOf="@id/tv_sum"
                 app:layout_constraintTop_toTopOf="@id/tv_sum"
-                app:srcCompat="@drawable/common_coin_32_ic" />
+                app:srcCompat="@drawable/common_wallet_coin_32_ic" />
 
             <androidx.appcompat.widget.AppCompatTextView
                 android:id="@+id/tv_sum"

+ 1 - 1
module/wallet/src/main/res/layout/layout_top_up_product.xml

@@ -28,7 +28,7 @@
         app:layout_constraintBottom_toBottomOf="@id/tv_balance_title"
         app:layout_constraintStart_toEndOf="@id/tv_balance_title"
         app:layout_constraintTop_toTopOf="@id/tv_balance_title"
-        app:srcCompat="@drawable/common_coin_16_ic" />
+        app:srcCompat="@drawable/common_wallet_coin_16_ic" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_balance"

+ 1 - 1
module/wallet/src/main/res/layout/layout_top_up_product_item.xml

@@ -17,7 +17,7 @@
         app:layout_constraintHorizontal_chainStyle="packed"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="@id/tv_currency"
-        app:srcCompat="@drawable/common_coin_16_ic" />
+        app:srcCompat="@drawable/common_wallet_coin_16_ic" />
 
     <androidx.appcompat.widget.AppCompatTextView
         android:id="@+id/tv_currency"