瀏覽代碼

feat: 顶部栏,分享二维码

DoggyZhang 4 月之前
父節點
當前提交
c0ff52bace
共有 28 個文件被更改,包括 259 次插入81 次删除
  1. 1 1
      app/src/main/java/com/adealink/weparty/commonui/widget/CommonTopBar.kt
  2. 6 0
      app/src/main/java/com/adealink/weparty/commonui/widget/NumberIncreaseView.kt
  3. 11 0
      app/src/main/java/com/adealink/weparty/module/playmate/data/CategoryData.kt
  4. 2 1
      app/src/main/java/com/adealink/weparty/module/playmate/viewmodel/IPlaymateViewModel.kt
  5. 5 0
      app/src/main/java/com/adealink/weparty/module/playmate/widget/PriceView.kt
  6. 2 0
      app/src/main/java/com/adealink/weparty/module/profile/data/ProfileData.kt
  7. 3 0
      app/src/main/java/com/adealink/weparty/module/profile/viewmodel/IProfileViewModel.kt
  8. 二進制
      app/src/main/res/drawable-xhdpi/common_number_add_ic.png
  9. 0 1
      app/src/main/res/layout/activity_clip_image.xml
  10. 2 2
      app/src/main/res/layout/layout_number_increase_view.xml
  11. 2 1
      module/playmate/src/main/java/com/adealink/weparty/playmate/data/PlaymateData.kt
  12. 2 1
      module/playmate/src/main/java/com/adealink/weparty/playmate/manager/IPlaymateManager.kt
  13. 4 3
      module/playmate/src/main/java/com/adealink/weparty/playmate/manager/PlaymateManager.kt
  14. 3 2
      module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModel.kt
  15. 1 1
      module/profile/src/main/java/com/adealink/weparty/profile/viewmodel/ProfileViewModel.kt
  16. 35 12
      module/share/src/main/java/com/adealink/weparty/share/poster/SharePosterActivity.kt
  17. 6 8
      module/share/src/main/java/com/adealink/weparty/share/qrcode/ChooseCategoryDialog.kt
  18. 10 9
      module/share/src/main/java/com/adealink/weparty/share/qrcode/QRCodeShareDialog.kt
  19. 2 0
      module/share/src/main/java/com/adealink/weparty/share/qrcode/QRCodeTab.kt
  20. 3 3
      module/share/src/main/java/com/adealink/weparty/share/qrcode/adapter/CategoryItemViewBinder.kt
  21. 15 3
      module/share/src/main/java/com/adealink/weparty/share/qrcode/page/CommonQRCodeFragment.kt
  22. 14 3
      module/share/src/main/java/com/adealink/weparty/share/qrcode/page/SpecialQRCodeFragment.kt
  23. 3 3
      module/share/src/main/java/com/adealink/weparty/share/qrcode/viewmodel/QRCodeViewModel.kt
  24. 2 1
      module/share/src/main/res/drawable/share_qr_code_tab_item_bg.xml
  25. 112 4
      module/share/src/main/res/layout/activity_share_poster.xml
  26. 6 1
      module/share/src/main/res/layout/dialog_qr_code_share.xml
  27. 6 21
      module/share/src/main/res/layout/fragment_common_qr_code.xml
  28. 1 0
      module/share/src/main/res/layout/fragment_special_qr_code.xml

+ 1 - 1
app/src/main/java/com/adealink/weparty/commonui/widget/CommonTopBar.kt

@@ -73,7 +73,7 @@ class CommonTopBar @JvmOverloads constructor(
         setTitleTextColor(typedArray.getResourceId(R.styleable.CommonTopBar_title_color,
             R.color.color_222222))
         binding.root.setBackgroundResource(typedArray.getResourceId(R.styleable.CommonTopBar_bar_background,
-            R.color.transparent))
+            R.color.white))
     }
 
     fun setTitle(titleStr: String) {

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

@@ -35,6 +35,7 @@ class NumberIncreaseView @JvmOverloads constructor(
             ).coerceIn(MIN_NUMBER, MAX_NUMBER)
         }
 
+        binding.tvNumber.text = number.toString()
         binding.ivMinus.setOnClickListener {
             clickMinus()
         }
@@ -46,6 +47,11 @@ class NumberIncreaseView @JvmOverloads constructor(
     private fun clickMinus() {
         number = max(MIN_NUMBER, number - 1)
         binding.tvNumber.text = number.toString()
+        if (number <= MIN_NUMBER) {
+            binding.ivMinus.setImageResource(R.drawable.common_number_minus_diable_ic)
+        } else {
+            binding.ivMinus.setImageResource(R.drawable.common_number_minus_ic)
+        }
     }
 
     private fun clickAdd() {

+ 11 - 0
app/src/main/java/com/adealink/weparty/module/playmate/data/CategoryData.kt

@@ -16,3 +16,14 @@ data class PlaymateCategoryData(
         return categoryType == 1
     }
 }
+
+
+@Parcelize
+data class UserPlaymateCategoryData(
+    @SerializedName("id") val id: String, //技能商品id
+    @SerializedName("name") val name: String, //技能商品id
+    @SerializedName("icon") val icon: String,
+    @SerializedName("price") val price: Float,
+    @SerializedName("unit") val unit: String,
+    @SerializedName("cover") val cover: String,
+) : Parcelable

+ 2 - 1
app/src/main/java/com/adealink/weparty/module/playmate/viewmodel/IPlaymateViewModel.kt

@@ -3,6 +3,7 @@ package com.adealink.weparty.module.playmate.viewmodel
 import androidx.lifecycle.LiveData
 import com.adealink.frame.base.Rlt
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 
 interface IPlaymateViewModel {
 
@@ -13,6 +14,6 @@ interface IPlaymateViewModel {
     fun getUserPlaymateCategory(
         uid: String,
         cache: Boolean
-    ): LiveData<Rlt<List<PlaymateCategoryData>>>
+    ): LiveData<Rlt<List<UserPlaymateCategoryData>>>
 
 }

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

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

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

@@ -46,6 +46,8 @@ data class UserInfo(
     @GsonNullable
     @SerializedName("intro") var intro: String? = null, //用户简介
     @GsonNullable
+    @SerializedName("photos") var photos: List<String>? = null, //照片
+    @GsonNullable
     @SerializedName("playmate") var playmate: Boolean? = null, //是否陪玩师
 ) : Parcelable {
 

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

@@ -7,5 +7,8 @@ interface IProfileViewModel {
 
     val myUseInfoLD: LiveData<UserInfo?>
     fun pullMyUserInfo()
+
+    fun getMyUserInfo(): UserInfo?
+
     fun getUserInfoBy(uid: String, cache: Boolean)
 }

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


+ 0 - 1
app/src/main/res/layout/activity_clip_image.xml

@@ -9,7 +9,6 @@
         android:layout_width="match_parent"
         android:layout_height="@dimen/common_top_bar_height"
         app:layout_constraintTop_toTopOf="parent"
-        android:background="@color/white"
         app:top_bar_title="@string/imageselect_crop" />
 
     <androidx.constraintlayout.widget.ConstraintLayout

+ 2 - 2
app/src/main/res/layout/layout_number_increase_view.xml

@@ -29,7 +29,7 @@
         app:layout_constraintEnd_toStartOf="@id/iv_add"
         app:layout_constraintStart_toEndOf="@id/iv_minus"
         app:layout_constraintTop_toTopOf="parent"
-        tools:text="Online Play" />
+        tools:text="0" />
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_add"
@@ -39,6 +39,6 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toEndOf="@id/tv_number"
         app:layout_constraintTop_toTopOf="parent"
-        app:srcCompat="@drawable/common_number_minus_ic" />
+        app:srcCompat="@drawable/common_number_add_ic" />
 
 </merge>

+ 2 - 1
module/playmate/src/main/java/com/adealink/weparty/playmate/data/PlaymateData.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.playmate.data
 
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.google.gson.annotations.SerializedName
 
 data class PlaymateDetailReq(
@@ -34,5 +35,5 @@ data class UserPlaymateCategoryReq(
 )
 
 data class UserPlaymateCategoryRes(
-    @SerializedName("list") val list: List<PlaymateCategoryData>
+    @SerializedName("list") val list: List<UserPlaymateCategoryData>
 )

+ 2 - 1
module/playmate/src/main/java/com/adealink/weparty/playmate/manager/IPlaymateManager.kt

@@ -3,11 +3,12 @@ package com.adealink.weparty.playmate.manager
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.frame.IBaseFrame
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 
 interface IPlaymateManager : IBaseFrame<IPlaymateListener> {
 
     suspend fun pullAllCategory(): Map<String, PlaymateCategoryData>
 
-    suspend fun getUserPlaymateCategory(uid: String, cache: Boolean): Rlt<List<PlaymateCategoryData>>
+    suspend fun getUserPlaymateCategory(uid: String, cache: Boolean): Rlt<List<UserPlaymateCategoryData>>
 
 }

+ 4 - 3
module/playmate/src/main/java/com/adealink/weparty/playmate/manager/PlaymateManager.kt

@@ -10,6 +10,7 @@ import com.adealink.frame.storage.cache.TimeoutLruCache
 import com.adealink.weparty.App
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
 import com.adealink.weparty.module.playmate.data.TAG_PLAYMATE_MANAGER
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.playmate.data.UserPlaymateCategoryReq
 import com.adealink.weparty.playmate.datasource.remote.PlaymateHttpService
 
@@ -23,7 +24,7 @@ class PlaymateManager : BaseFrame<IPlaymateListener>(), IPlaymateManager {
     }
 
     private val userPlaymateCategoryCache by lazy {
-        TimeoutLruCache<String, List<PlaymateCategoryData>>(
+        TimeoutLruCache<String, List<UserPlaymateCategoryData>>(
             500,
             10 * 60 * 1000
         ) //最多缓存5000个,缓存时长10分钟
@@ -50,7 +51,7 @@ class PlaymateManager : BaseFrame<IPlaymateListener>(), IPlaymateManager {
     override suspend fun getUserPlaymateCategory(
         uid: String,
         cache: Boolean
-    ): Rlt<List<PlaymateCategoryData>> {
+    ): Rlt<List<UserPlaymateCategoryData>> {
         if (uid.isEmpty()) {
             return Rlt.Failed(CommonParamError("uid($uid) is invalid"))
         }
@@ -78,7 +79,7 @@ class PlaymateManager : BaseFrame<IPlaymateListener>(), IPlaymateManager {
 
     private fun updateUserPlaymateCategory(
         uid: String,
-        categoryList: List<PlaymateCategoryData>
+        categoryList: List<UserPlaymateCategoryData>
     ) {
         userPlaymateCategoryCache.put(uid, categoryList)
     }

+ 3 - 2
module/playmate/src/main/java/com/adealink/weparty/playmate/viewmodel/PlaymateViewModel.kt

@@ -6,6 +6,7 @@ import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.module.playmate.viewmodel.IPlaymateViewModel
 import com.adealink.weparty.playmate.manager.playmateManager
 import kotlinx.coroutines.launch
@@ -23,8 +24,8 @@ class PlaymateViewModel : BaseViewModel(), IPlaymateViewModel {
     override fun getUserPlaymateCategory(
         uid: String,
         cache: Boolean
-    ): LiveData<Rlt<List<PlaymateCategoryData>>> {
-        val liveData = OnceMutableLiveData<Rlt<List<PlaymateCategoryData>>>()
+    ): LiveData<Rlt<List<UserPlaymateCategoryData>>> {
+        val liveData = OnceMutableLiveData<Rlt<List<UserPlaymateCategoryData>>>()
         viewModelScope.launch {
             val rlt = playmateManager.getUserPlaymateCategory(uid, cache)
             liveData.send(rlt)

+ 1 - 1
module/profile/src/main/java/com/adealink/weparty/profile/viewmodel/ProfileViewModel.kt

@@ -20,7 +20,7 @@ class ProfileViewModel : BaseViewModel(), IProfileViewModel, IProfileListener {
         App.instance.networkService.getHttpService(ProfileHttpService::class.java)
     }
 
-    fun getMyUserInfo(): UserInfo? {
+    override fun getMyUserInfo(): UserInfo? {
         return profileManager.getMyUserInfo()
     }
 

+ 35 - 12
module/share/src/main/java/com/adealink/weparty/share/poster/SharePosterActivity.kt

@@ -4,18 +4,24 @@ import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.core.view.updateLayoutParams
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import com.adealink.frame.aab.util.getCompatDimension
 import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.DisplayUtil.getStatusBarHeight
 import com.adealink.weparty.commonui.BaseActivity
+import com.adealink.weparty.commonui.ext.dpf
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
+import com.adealink.weparty.commonui.recycleview.itemdecoration.HorizontalItemDecoration
+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.share.databinding.ActivitySharePosterBinding
 import com.adealink.weparty.share.poster.adapter.PhotoItemViewBinder
 import com.adealink.weparty.share.poster.comp.SharePosterComp
 import com.adealink.weparty.share.poster.data.PhotoData
 import com.adealink.weparty.share.poster.data.PhotoItemData
+import com.adealink.weparty.R as APP_R
 
 @RouterUri(path = [Share.Poster.PATH], desc = "分享给好友")
 class SharePosterActivity : BaseActivity(), PhotoItemViewBinder.OnPhotoSelectedListener {
@@ -23,17 +29,25 @@ class SharePosterActivity : BaseActivity(), PhotoItemViewBinder.OnPhotoSelectedL
 
     private val listAdapter by fastLazy { MultiTypeListAdapter<PhotoItemData>() }
     private val photoItemList = mutableListOf<PhotoItemData>()
+    private val profileViewModel by fastLazy { ProfileModule.getProfileViewModel(this@SharePosterActivity) }
 
     override fun initViews() {
         super.initViews()
         setContentView(binding.root)
+        binding.topBar.setPadding(
+            0, getStatusBarHeight(this@SharePosterActivity), 0, 0
+        )
         binding.topBar.updateLayoutParams<ConstraintLayout.LayoutParams> {
-            topMargin = getStatusBarHeight(this@SharePosterActivity)
+            height =
+                getStatusBarHeight(this@SharePosterActivity) + getCompatDimension(APP_R.dimen.common_top_bar_height).toInt()
         }
 
         listAdapter.register(PhotoItemViewBinder(this))
         binding.rvAlbum.layoutManager = LinearLayoutManager(this, RecyclerView.HORIZONTAL, false)
         binding.rvAlbum.adapter = listAdapter
+        binding.rvAlbum.addItemDecoration(
+            HorizontalItemDecoration(10.dpf(), 16.dpf(), 0f)
+        )
     }
 
     override fun initComponents() {
@@ -43,17 +57,26 @@ class SharePosterActivity : BaseActivity(), PhotoItemViewBinder.OnPhotoSelectedL
 
     override fun loadData() {
         super.loadData()
-        val photoListData = listOf(
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-            PhotoData("https://im.sdk.qcloud.com/download/tuikit-resource/community-cover/community_cover_default.png"),
-        )
+        val myUserInfo = profileViewModel?.getMyUserInfo()
+        updatePoster(myUserInfo)
+    }
+
+    override fun observeViewModel() {
+        super.observeViewModel()
+        profileViewModel?.myUseInfoLD?.observe(this) {
+            updatePoster(it)
+        }
+    }
+
+    private fun updatePoster(userInfo: UserInfo?) {
+        binding.tvName.text = userInfo?.nickName
+        binding.vGender.setGender(userInfo?.gender)
+        binding.vGender.setAge(userInfo?.age ?: 0)
+        binding.tvEvaluate.text = "4.2"
 
+        val photoListData = userInfo?.photos?.map {
+            PhotoData(it)
+        } ?: emptyList()
         var selectedPhoto: PhotoItemData? = null
         photoItemList.clear()
         photoItemList.addAll(
@@ -66,7 +89,7 @@ class SharePosterActivity : BaseActivity(), PhotoItemViewBinder.OnPhotoSelectedL
             }
         )
         listAdapter.submitList(photoItemList)
-        binding.clContent.ivPhoto.setImageUrl(selectedPhoto?.data?.url)
+        binding.ivPhoto.setImageUrl(selectedPhoto?.data?.url)
     }
 
     override fun onSelected(data: PhotoItemData) {

+ 6 - 8
module/share/src/main/java/com/adealink/weparty/share/qrcode/ChooseCategoryDialog.kt

@@ -6,18 +6,16 @@ import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.commonui.recycleview.adapter.MultiTypeListAdapter
 import com.adealink.weparty.commonui.widget.BottomDialogFragment
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.share.R
 import com.adealink.weparty.share.databinding.DialogChooseCategoryBinding
 import com.adealink.weparty.share.qrcode.adapter.CategoryItem
 import com.adealink.weparty.share.qrcode.adapter.CategoryItemViewBinder
 import com.adealink.weparty.share.qrcode.viewmodel.QRCodeViewModel
 import com.adealink.weparty.share.viewmodel.ShareViewModelFactory
-import com.adealink.weparty.ui.main.tab.ITabManager
-import com.adealink.weparty.ui.main.tab.TabManager
-import kotlin.getValue
 
 class ChooseCategoryDialog : BottomDialogFragment(R.layout.dialog_choose_category),
-    ITabManager by TabManager(), CategoryItemViewBinder.CategoryChooseListener {
+    CategoryItemViewBinder.CategoryChooseListener {
 
     private val binding by viewBinding(DialogChooseCategoryBinding::bind)
 
@@ -26,10 +24,10 @@ class ChooseCategoryDialog : BottomDialogFragment(R.layout.dialog_choose_categor
     }, factoryProducer = { ShareViewModelFactory() })
     private val listAdapter by fastLazy { MultiTypeListAdapter<CategoryItem>() }
 
-    private var list: List<PlaymateCategoryData> = emptyList()
-    private var selected: PlaymateCategoryData? = null
+    private var list: List<UserPlaymateCategoryData> = emptyList()
+    private var selected: UserPlaymateCategoryData? = null
 
-    fun setCategoryList(list: List<PlaymateCategoryData>, selected: PlaymateCategoryData) {
+    fun setCategoryList(list: List<UserPlaymateCategoryData>, selected: UserPlaymateCategoryData?) {
         this.list = list
         this.selected = selected
     }
@@ -44,7 +42,7 @@ class ChooseCategoryDialog : BottomDialogFragment(R.layout.dialog_choose_categor
         )
     }
 
-    override fun onChoose(data: PlaymateCategoryData) {
+    override fun onChoose(data: UserPlaymateCategoryData) {
         qrCodeViewModel.selectCategory(data)
         dismiss()
     }

+ 10 - 9
module/share/src/main/java/com/adealink/weparty/share/qrcode/QRCodeShareDialog.kt

@@ -15,6 +15,7 @@ import com.adealink.weparty.commonui.widget.EmptyFragment
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.module.playmate.PlaymateModule
 import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.module.share.Share
 import com.adealink.weparty.share.R
 import com.adealink.weparty.share.databinding.DialogQrCodeShareBinding
@@ -38,12 +39,12 @@ class QRCodeShareDialog : BottomDialogFragment(R.layout.dialog_qr_code_share),
     private val qrCodeViewModel by viewModels<QRCodeViewModel> { ShareViewModelFactory() }
     private lateinit var pagerAdapter: ShareOtherPageAdapter
 
-    private val myCategoryList = mutableListOf<PlaymateCategoryData>()
+    private val myCategoryList = mutableListOf<UserPlaymateCategoryData>()
 
     override fun initViews() {
         super.initViews()
         binding.clTop.onClick {
-
+            showCategoryChooseDialog()
         }
 
         pagerAdapter = ShareOtherPageAdapter()
@@ -58,8 +59,6 @@ class QRCodeShareDialog : BottomDialogFragment(R.layout.dialog_qr_code_share),
         ) { tabLayout, position ->
             tabLayout.setCustomView(R.layout.layout_qr_code_tab_item)
             tabLayout.customView?.let { customView ->
-                val customBinding = LayoutQrCodeTabItemBinding.bind(customView)
-                val tab = getTab(position) ?: return@let
                 updateTabView(
                     tabLayout,
                     0 == position,
@@ -111,7 +110,7 @@ class QRCodeShareDialog : BottomDialogFragment(R.layout.dialog_qr_code_share),
                         showFailedToast(rlt)
                     }
 
-                    is Rlt.Success<List<PlaymateCategoryData>> -> {
+                    is Rlt.Success<List<UserPlaymateCategoryData>> -> {
                         updateMyCategory(rlt.data)
                     }
                 }
@@ -125,14 +124,13 @@ class QRCodeShareDialog : BottomDialogFragment(R.layout.dialog_qr_code_share),
         }
     }
 
-    private fun updateMyCategory(list: List<PlaymateCategoryData>) {
+    private fun updateMyCategory(list: List<UserPlaymateCategoryData>) {
         myCategoryList.clear()
         myCategoryList.addAll(list)
-
         qrCodeViewModel.selectCategory(list.firstOrNull())
     }
 
-    private fun selectCategory(category: PlaymateCategoryData?) {
+    private fun selectCategory(category: UserPlaymateCategoryData?) {
         //更新视图
         binding.ivCategory.setImageUrl(category?.icon)
         binding.tvCategory.text = category?.name
@@ -140,7 +138,10 @@ class QRCodeShareDialog : BottomDialogFragment(R.layout.dialog_qr_code_share),
     }
 
     private fun showCategoryChooseDialog() {
-
+        ChooseCategoryDialog().apply {
+            setCategoryList(myCategoryList, qrCodeViewModel.currentCategoryLD.value)
+            show(this@QRCodeShareDialog.childFragmentManager, "ChooseCategoryDialog")
+        }
     }
 
     internal inner class ShareOtherPageAdapter : BaseTabFragmentStateAdapter(this) {

+ 2 - 0
module/share/src/main/java/com/adealink/weparty/share/qrcode/QRCodeTab.kt

@@ -3,6 +3,8 @@ package com.adealink.weparty.share.qrcode
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.weparty.commonui.BaseFragment
 import com.adealink.weparty.share.R
+import com.adealink.weparty.share.qrcode.page.CommonQRCodeFragment
+import com.adealink.weparty.share.qrcode.page.SpecialQRCodeFragment
 
 enum class QRCodeTab {
     COMMON,

+ 3 - 3
module/share/src/main/java/com/adealink/weparty/share/qrcode/adapter/CategoryItemViewBinder.kt

@@ -6,12 +6,12 @@ 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.commonui.recycleview.diffutil.BaseListItemData
-import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.share.databinding.LayoutChooseCategoryItemBinding
 import com.adealink.weparty.R as APP_R
 
 data class CategoryItem(
-    val data: PlaymateCategoryData,
+    val data: UserPlaymateCategoryData,
     var selected: Boolean,
 ) : BaseListItemData
 
@@ -44,6 +44,6 @@ class CategoryItemViewBinder(
     }
 
     interface CategoryChooseListener {
-        fun onChoose(data: PlaymateCategoryData)
+        fun onChoose(data: UserPlaymateCategoryData)
     }
 }

+ 15 - 3
module/share/src/main/java/com/adealink/weparty/share/qrcode/CommonQRCodeFragment.kt → module/share/src/main/java/com/adealink/weparty/share/qrcode/page/CommonQRCodeFragment.kt

@@ -1,11 +1,12 @@
-package com.adealink.weparty.share.qrcode
+package com.adealink.weparty.share.qrcode.page
 
 import androidx.fragment.app.viewModels
+import com.adealink.frame.base.fastLazy
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.module.playmate.PlaymateModule
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.share.R
-import com.adealink.weparty.share.databinding.DialogQrCodeShareBinding
-import com.adealink.weparty.share.databinding.DialogQrCodeShareBinding.bind
 import com.adealink.weparty.share.databinding.FragmentCommonQrCodeBinding
 import com.adealink.weparty.share.qrcode.viewmodel.QRCodeViewModel
 import com.adealink.weparty.share.viewmodel.ShareViewModelFactory
@@ -24,4 +25,15 @@ class CommonQRCodeFragment : BaseFragment(R.layout.fragment_common_qr_code) {
         super.initViews()
     }
 
+    override fun observeViewModel() {
+        super.observeViewModel()
+        qrCodeViewModel.currentCategoryLD.observe(this) {
+            updatePanel(it)
+        }
+    }
+
+    private fun updatePanel(data: UserPlaymateCategoryData?) {
+
+    }
+
 }

+ 14 - 3
module/share/src/main/java/com/adealink/weparty/share/qrcode/SpecialQRCodeFragment.kt → module/share/src/main/java/com/adealink/weparty/share/qrcode/page/SpecialQRCodeFragment.kt

@@ -1,10 +1,11 @@
-package com.adealink.weparty.share.qrcode
+package com.adealink.weparty.share.qrcode.page
 
 import androidx.fragment.app.viewModels
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.commonui.BaseFragment
+import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 import com.adealink.weparty.share.R
-import com.adealink.weparty.share.databinding.FragmentCommonQrCodeBinding
 import com.adealink.weparty.share.databinding.FragmentSpecialQrCodeBinding
 import com.adealink.weparty.share.qrcode.viewmodel.QRCodeViewModel
 import com.adealink.weparty.share.viewmodel.ShareViewModelFactory
@@ -12,7 +13,6 @@ import com.adealink.weparty.share.viewmodel.ShareViewModelFactory
 class SpecialQRCodeFragment : BaseFragment(R.layout.fragment_special_qr_code) {
 
     private val binding by viewBinding(FragmentSpecialQrCodeBinding::bind)
-
     private val qrCodeViewModel by viewModels<QRCodeViewModel>(ownerProducer = {
         parentFragment ?: this
     }, factoryProducer = { ShareViewModelFactory() })
@@ -21,4 +21,15 @@ class SpecialQRCodeFragment : BaseFragment(R.layout.fragment_special_qr_code) {
         super.initViews()
     }
 
+    override fun observeViewModel() {
+        super.observeViewModel()
+        qrCodeViewModel.currentCategoryLD.observe(this) {
+            updatePanel(it)
+        }
+    }
+
+    private fun updatePanel(data: UserPlaymateCategoryData?) {
+        binding.etInputPrice.setText(data?.price?.toString() ?: "")
+    }
+
 }

+ 3 - 3
module/share/src/main/java/com/adealink/weparty/share/qrcode/viewmodel/QRCodeViewModel.kt

@@ -2,13 +2,13 @@ package com.adealink.weparty.share.qrcode.viewmodel
 
 import androidx.lifecycle.MutableLiveData
 import com.adealink.frame.mvvm.viewmodel.BaseViewModel
-import com.adealink.weparty.module.playmate.data.PlaymateCategoryData
+import com.adealink.weparty.module.playmate.data.UserPlaymateCategoryData
 
 class QRCodeViewModel : BaseViewModel() {
 
-    val currentCategoryLD = MutableLiveData<PlaymateCategoryData?>()
+    val currentCategoryLD = MutableLiveData<UserPlaymateCategoryData?>()
 
-    fun selectCategory(category: PlaymateCategoryData?) {
+    fun selectCategory(category: UserPlaymateCategoryData?) {
         currentCategoryLD.send(category)
     }
 

+ 2 - 1
module/share/src/main/res/drawable/share_qr_code_tab_item_bg.xml

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

+ 112 - 4
module/share/src/main/res/layout/activity_share_poster.xml

@@ -10,10 +10,18 @@
         android:id="@+id/top_bar"
         android:layout_width="match_parent"
         android:layout_height="@dimen/common_top_bar_height"
-        android:background="@color/white"
         app:layout_constraintTop_toTopOf="parent"
         app:top_bar_title="@string/share_friend_title" />
 
+    <androidx.appcompat.widget.AppCompatImageView
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintDimensionRatio="375:173"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/top_bar"
+        app:srcCompat="@drawable/common_app_top_bg_ic" />
+
     <androidx.core.widget.NestedScrollView
         android:layout_width="0dp"
         android:layout_height="0dp"
@@ -26,9 +34,8 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
-            <include
+            <androidx.constraintlayout.widget.ConstraintLayout
                 android:id="@+id/cl_content"
-                layout="@layout/layout_share_poster_content"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="16dp"
@@ -39,7 +46,108 @@
                 android:paddingBottom="60dp"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
+                app:layout_constraintTop_toTopOf="parent">
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tv_name"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:ellipsize="end"
+                    android:fontFamily="@font/poppins_semibold"
+                    android:includeFontPadding="false"
+                    android:singleLine="true"
+                    android:textColor="@color/color_FF1D2129"
+                    android:textSize="18sp"
+                    app:layout_constrainedWidth="true"
+                    app:layout_constraintEnd_toStartOf="@id/v_gender"
+                    app:layout_constraintHorizontal_bias="0"
+                    app:layout_constraintHorizontal_chainStyle="packed"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent"
+                    tools:text="Super Beautiful Girl Super Beautiful Girl Super Beautiful Girl" />
+
+                <com.adealink.weparty.module.profile.widget.GenderView
+                    android:id="@+id/v_gender"
+                    style="@style/CommonGenderView"
+                    android:layout_marginEnd="24dp"
+                    app:layout_constraintBottom_toBottomOf="@id/tv_name"
+                    app:layout_constraintEnd_toStartOf="@id/v_barrier_end"
+                    app:layout_constraintStart_toEndOf="@id/tv_name"
+                    app:layout_constraintTop_toTopOf="@id/tv_name" />
+
+                <androidx.constraintlayout.widget.Barrier
+                    android:id="@+id/v_barrier_end"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    app:barrierDirection="start"
+                    app:constraint_referenced_ids="iv_evaluate_star" />
+
+                <androidx.appcompat.widget.AppCompatImageView
+                    android:id="@+id/iv_evaluate_star"
+                    android:layout_width="18dp"
+                    android:layout_height="18dp"
+                    app:layout_constraintBottom_toBottomOf="@id/tv_name"
+                    app:layout_constraintEnd_toStartOf="@id/tv_evaluate"
+                    app:layout_constraintTop_toTopOf="@id/tv_name"
+                    app:srcCompat="@drawable/common_evaluate_star_selected_ic" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tv_evaluate"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:fontFamily="@font/poppins_semibold"
+                    android:includeFontPadding="false"
+                    android:textColor="@color/color_FF1D2129"
+                    android:textSize="18sp"
+                    app:layout_constraintBottom_toBottomOf="@id/tv_name"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toTopOf="@id/tv_name"
+                    tools:text="4.2" />
+
+                <com.adealink.frame.image.view.NetworkImageView
+                    android:id="@+id/iv_photo"
+                    android:layout_width="0dp"
+                    android:layout_height="0dp"
+                    android:layout_marginTop="9dp"
+                    app:layout_constraintDimensionRatio="1:1"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@id/tv_name"
+                    app:roundedCornerRadius="20dp" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tv_location"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:background="@drawable/share_friend_photo_location_bg"
+                    android:gravity="center"
+                    android:includeFontPadding="false"
+                    android:paddingStart="12dp"
+                    android:paddingEnd="20dp"
+                    android:textColor="@color/color_FF4E5969"
+                    android:textSize="14sp"
+                    app:layout_constraintBottom_toBottomOf="@id/iv_photo"
+                    app:layout_constraintStart_toStartOf="@id/iv_photo"
+                    tools:text="Photototjo123ju123l123lk" />
+
+                <androidx.appcompat.widget.AppCompatTextView
+                    android:id="@+id/tv_summary"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="14dp"
+                    android:gravity="start"
+                    android:includeFontPadding="false"
+                    android:paddingStart="12dp"
+                    android:paddingEnd="20dp"
+                    android:textColor="@color/color_FF4E5969"
+                    android:textSize="14sp"
+                    app:layout_constrainedWidth="true"
+                    app:layout_constraintEnd_toEndOf="@id/iv_photo"
+                    app:layout_constraintStart_toStartOf="@id/iv_photo"
+                    app:layout_constraintTop_toBottomOf="@id/iv_photo"
+                    tools:text="Hello brother, multiple seasons of S, online,tiple seasons of S, online," />
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
 
             <androidx.recyclerview.widget.RecyclerView
                 android:id="@+id/rv_album"

+ 6 - 1
module/share/src/main/res/layout/dialog_qr_code_share.xml

@@ -55,11 +55,16 @@
         android:layout_width="match_parent"
         android:layout_height="40dp"
         android:background="@drawable/share_qr_code_tab_bg"
-        android:padding="4dp"
         app:layout_constraintTop_toBottomOf="@id/cl_top"
         app:tabBackground="@null"
+        app:tabGravity="fill"
         app:tabIndicatorHeight="0dp"
+        app:tabMaxWidth="0dp"
         app:tabMode="fixed"
+        app:tabPaddingBottom="4dp"
+        app:tabPaddingEnd="4dp"
+        app:tabPaddingStart="4dp"
+        app:tabPaddingTop="4dp"
         app:tabRippleColor="@null" />
 
     <androidx.viewpager2.widget.ViewPager2

+ 6 - 21
module/share/src/main/res/layout/fragment_common_qr_code.xml

@@ -30,30 +30,15 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent" />
 
-            <androidx.appcompat.widget.AppCompatImageView
-                android:id="@+id/iv_price"
-                android:layout_width="20dp"
-                android:layout_height="20dp"
-                android:layout_marginEnd="6dp"
-                app:layout_constraintBottom_toBottomOf="@id/tv_price"
-                app:layout_constraintEnd_toStartOf="@id/tv_price"
-                app:layout_constraintHorizontal_chainStyle="packed"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="@id/tv_price"
-                app:srcCompat="@drawable/common_coin_32_ic" />
-
-            <androidx.appcompat.widget.AppCompatTextView
-                android:id="@+id/tv_price"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
+            <com.adealink.weparty.module.playmate.widget.PriceView
+                android:id="@+id/v_price"
+                style="@style/CommonPriceView"
                 android:layout_marginTop="12dp"
-                android:includeFontPadding="false"
-                android:textColor="@color/color_FF1D2129"
-                android:textSize="14sp"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toEndOf="@id/iv_price"
+                app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/iv_qr_code"
-                tools:text="1500/2hour" />
+                app:price_text_size="24"
+                app:unit_text_size="14" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 

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

@@ -51,6 +51,7 @@
                     android:layout_height="wrap_content"
                     android:layout_marginStart="12dp"
                     android:background="@null"
+                    android:enabled="false"
                     android:fontFamily="@font/poppins_semibold"
                     android:hint="@string/share_input_price"
                     android:includeFontPadding="false"