UserProfileActivity.kt 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.adealink.weparty.profile
  2. import android.os.Bundle
  3. import androidx.activity.viewModels
  4. import androidx.constraintlayout.widget.ConstraintLayout
  5. import androidx.core.view.updateLayoutParams
  6. import androidx.fragment.app.Fragment
  7. import com.adealink.frame.aab.util.getCompatDimension
  8. import com.adealink.frame.mvvm.view.viewBinding
  9. import com.adealink.frame.router.Router
  10. import com.adealink.frame.router.annotation.BindExtra
  11. import com.adealink.frame.router.annotation.RouterUri
  12. import com.adealink.frame.util.statusBarHeight
  13. import com.adealink.weparty.commonui.BaseActivity
  14. import com.adealink.weparty.commonui.recycleview.adapter.BaseActivityTabFragmentStateAdapter
  15. import com.adealink.weparty.commonui.widget.EmptyFragment
  16. import com.adealink.weparty.module.profile.Profile
  17. import com.adealink.weparty.module.profile.data.TAB_INDEX_PERSONAL
  18. import com.adealink.weparty.profile.comp.ProfileBottomComp
  19. import com.adealink.weparty.profile.comp.ProfileHeaderComp
  20. import com.adealink.weparty.profile.comp.ProfileToolBarViewComp
  21. import com.adealink.weparty.profile.databinding.ActivityUserProfileBinding
  22. import com.adealink.weparty.profile.viewmodel.ProfileViewModel
  23. import com.adealink.weparty.profile.viewmodel.ProfileViewModelFactory
  24. @RouterUri(
  25. path = [Profile.UserProfile.PATH],
  26. desc = "用户个人页"
  27. )
  28. class UserProfileActivity : BaseActivity() {
  29. @BindExtra(name = Profile.Common.EXTRA_UID)
  30. var userUid: String = ""
  31. private val binding by viewBinding(ActivityUserProfileBinding::inflate)
  32. private val profileViewModel by viewModels<ProfileViewModel> { ProfileViewModelFactory() }
  33. private lateinit var profilePageAdapter: ProfilePageAdapter
  34. override fun onBeforeCreate() {
  35. super.onBeforeCreate()
  36. Router.bind(this)
  37. }
  38. override fun initViews() {
  39. super.initViews()
  40. setContentView(binding.root)
  41. binding.profileHeaderLayout.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
  42. height =
  43. getCompatDimension(R.dimen.profile_header_height).toInt() + this@UserProfileActivity.statusBarHeight()
  44. }
  45. profilePageAdapter = ProfilePageAdapter()
  46. binding.profileVp.adapter = profilePageAdapter
  47. binding.tabLayout.createMediatorAndAttach(
  48. binding.profileVp,
  49. profilePageAdapter,
  50. TAB_INDEX_PERSONAL
  51. )
  52. }
  53. override fun initComponents() {
  54. super.initComponents()
  55. ProfileToolBarViewComp(this, userUid, binding).attach()
  56. ProfileHeaderComp(this, userUid, binding.profileHeaderLayout).attach()
  57. ProfileBottomComp(this, userUid, binding.vBottom).attach()
  58. }
  59. override fun onResume() {
  60. super.onResume()
  61. profileViewModel.pullUserInfoBy(userUid, false)
  62. }
  63. internal inner class ProfilePageAdapter : BaseActivityTabFragmentStateAdapter(this) {
  64. override fun getTabName(pos: Int): String {
  65. return PROFILE_TABS.getOrNull(pos)?.name?.invoke() ?: ""
  66. }
  67. override fun getItemCount(): Int {
  68. return PROFILE_TABS.size
  69. }
  70. override fun createFragment(position: Int): Fragment {
  71. val profileTab = PROFILE_TABS.getOrNull(position) ?: return EmptyFragment()
  72. return when (profileTab.type) {
  73. ProfileTab.PROFILE -> {
  74. profileTab.fragmentBuilder().apply {
  75. arguments = Bundle().apply {
  76. putString(Profile.Common.EXTRA_UID, userUid)
  77. }
  78. }
  79. }
  80. ProfileTab.PHOTO_WALL -> {
  81. profileTab.fragmentBuilder().apply {
  82. arguments = Bundle().apply {
  83. putString(Profile.Common.EXTRA_UID, userUid)
  84. }
  85. }
  86. }
  87. }
  88. }
  89. }
  90. }