feat:恢复粉丝团功能

This commit is contained in:
max
2024-05-13 20:15:55 +08:00
parent 9be483de4b
commit 72863b8bde
22 changed files with 1429 additions and 0 deletions

View File

@@ -889,6 +889,16 @@
android:screenOrientation="portrait"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name=".fansteam.FansTeamJoinActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamJoinedActivity"
android:theme="@style/dialog_web_view_activity" />
<activity
android:name=".fansteam.FansTeamListActivity"
android:screenOrientation="portrait" />
</application>
</manifest>

View File

@@ -2,10 +2,12 @@ package com.chwl.app.avroom.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.View
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.viewModels
import com.chwl.app.R
import com.chwl.app.avroom.adapter.OnMicroItemClickListener
import com.chwl.app.avroom.adapter.SingleAnchorMicroViewAdapter
@@ -20,9 +22,16 @@ import com.chwl.app.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkReceivedDialog
import com.chwl.app.avroom.view.ISingleRoomView
import com.chwl.app.databinding.FragmentSingleRoomBinding
import com.chwl.app.fansteam.FansTeamJoinActivity
import com.chwl.app.fansteam.FansTeamJoinedActivity
import com.chwl.app.fansteam.FansTeamViewModel
import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.fansteam.bean.FansTeamInitInfo
import com.chwl.core.im.custom.bean.FansTeamMsgAttachment
import com.chwl.core.im.custom.bean.RequestUpmicAttachment
import com.chwl.core.im.custom.bean.RoomPKAttachment
import com.chwl.core.manager.AvRoomDataManager
@@ -54,6 +63,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
private lateinit var gameBinding: FragmentSingleRoomBinding
private lateinit var upMicDialog: RequestUpMicDialog
private val fansTeamViewModel: FansTeamViewModel by viewModels()
override fun getRootLayoutId(): Int {
return R.layout.fragment_single_room
}
@@ -75,6 +85,13 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
UriProvider.getSingleRoomHourRankUrl(AvRoomDataManager.get().roomUid)
)
}
fansTeamViewModel.loadFansTeamInitInfo()
fansTeamViewModel.fansTeamInitInfoLiveData.observe(viewLifecycleOwner) {
it?.let {
updateFansTeamInfo(it)
}
}
}
override fun onReceiveRoomEvent(roomEvent: RoomEvent?) {
@@ -100,9 +117,82 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
gameBinding.microView.adapter?.notifyDataSetChanged()
}
RoomEvent.FANS_TEAM_OPEN_SUCCESS,
RoomEvent.FANS_TEAM_OPEN_FAILED,
RoomEvent.FANS_TEAM_JOIN,
RoomEvent.FANS_TEAM_EXIT -> {
(roomEvent.chatRoomMessage?.attachment as? FansTeamMsgAttachment)?.fansTeamMsgInfo?.let {
val currFansTeamInitInfo = fansTeamViewModel.fansTeamInitInfoLiveData.value
updateFansTeamInfo(
FansTeamInitInfo(
it.count,
currFansTeamInitInfo?.fansLevelSeq ?: 1,
roomEvent.event != RoomEvent.FANS_TEAM_OPEN_FAILED,
if (AuthModel.get().currentUid == it.uid) {
roomEvent.event == RoomEvent.FANS_TEAM_JOIN
} else {
currFansTeamInitInfo?.isAnchorFans ?: false
},
AvRoomDataManager.get().isRoomOwner,
roomEvent.event == RoomEvent.FANS_TEAM_OPEN_FAILED
)
)
}
}
}
}
@SuppressLint("SetTextI18n")
private fun updateFansTeamInfo(initInfo: FansTeamInitInfo) {
var clickListener: View.OnClickListener? = null
if (initInfo.hasFansTeamCurrentRoom) {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "粉絲團(${initInfo.anchorFansNum})"
clickListener = View.OnClickListener {
DialogWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamMyFansUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
if (initInfo.isAnchorFans) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text =
"粉絲LV.${if (initInfo.fansLevelSeq == 0) 1 else initInfo.fansLevelSeq}"
clickListener = View.OnClickListener {
FansTeamJoinedActivity.start(requireContext())
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = true
gameBinding.tvFansTeamOpt.isVisible = false
clickListener = View.OnClickListener {
FansTeamJoinActivity.start(requireContext())
}
}
}
} else {
if (AvRoomDataManager.get().isRoomOwner) {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "開通粉絲團"
clickListener = View.OnClickListener {
CommonWebViewActivity.start(
requireContext(),
UriProvider.getFansTeamOpenUrl(AvRoomDataManager.get().roomUid)
)
}
} else {
gameBinding.flFansTeamJoinTip.isVisible = false
gameBinding.tvFansTeamOpt.isVisible = true
gameBinding.tvFansTeamOpt.text = "TA暫未開通粉絲團"
}
}
gameBinding.flFansTeam.setOnClickListener(clickListener)
}
//顯示請求上麥彈窗
private fun showInviteDialog(userInfo: UserInfo) {
if (!this::upMicDialog.isInitialized) {
@@ -121,6 +211,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
override fun onEnterRoom() {
super.onEnterRoom()
fansTeamViewModel.loadFansTeamInitInfo()
}
override fun updateView() {

View File

@@ -0,0 +1,108 @@
package com.chwl.app.fansteam
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.view.Gravity
import android.view.WindowManager
import androidx.activity.viewModels
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.databinding.ActivityFansTeamJoinBinding
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.gift.GiftModel
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.core.utils.extension.toast
import com.chwl.core.utils.net.handleBeanData
import com.chwl.library.utils.ResUtil
class FansTeamJoinActivity : BaseViewBindingActivity<ActivityFansTeamJoinBinding>() {
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, FansTeamJoinActivity::class.java)
context.startActivity(starter)
}
}
private val fansTeamViewModel: FansTeamViewModel by viewModels()
@SuppressLint("CheckResult", "SetTextI18n")
override fun init() {
window.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
window.setGravity(Gravity.BOTTOM)
binding.ivHelp.setOnClickListener {
DialogWebViewActivity.start(this, UriProvider.getFansTeamRuleUrl())
}
binding.llRank.setOnClickListener {
DialogWebViewActivity.start(
this,
UriProvider.getFansTeamRankUrl(AvRoomDataManager.get().roomUid)
)
}
fansTeamViewModel.loadTeamJoinInfo()
fansTeamViewModel.fansTeamJoinInfoLiveData.observe(this) {
it?.let {
binding.ivAvatar.load(it.anchorAvatar)
binding.tvFansTeamName.text = it.anchorNick.subAndReplaceDot(7) + ResUtil.getString(R.string.erban_fansteam_fansteamjoinactivity_01)
binding.tvFansTeamFansNum.text = "${it.teamNum}${getString(R.string.person)}"
binding.ivRank0.load(it.avatarList.getOrNull(0))
binding.ivRank1.load(it.avatarList.getOrNull(1))
binding.ivRank2.load(it.avatarList.getOrNull(2))
it.privilegeConfigVos.find { configVo -> configVo.type == 1 }
?.let { privilegeConfig ->
binding.tvNameplateTitle.text = privilegeConfig.name
binding.tvNameplateDesc.text = privilegeConfig.description
binding.ivFansNameplate.load(privilegeConfig.icon)
}
it.privilegeConfigVos.find { configVo -> configVo.type == 2 }
?.let { privilegeConfig ->
binding.tvGiftTitle.text = privilegeConfig.name
binding.tvGiftDesc.text = privilegeConfig.description
binding.ivFansGift.load(privilegeConfig.icon)
}
it.privilegeConfigVos.find { configVo -> configVo.type == 3 }
?.let { privilegeConfig ->
binding.ivJoinLogo.load(privilegeConfig.icon)
binding.tvJoin.text = privilegeConfig.name
binding.bgJoin.setOnClickListener {
privilegeConfig.giftVo?.let { giftInfo ->
GiftModel.get().sendFansTeamGift(
giftInfo.giftId,
AvRoomDataManager.get().roomUid.toString(),
)
.compose(bindToLifecycle())
.handleBeanData()
.subscribe({
"加入粉絲團成功!".toast()
finish()
}, { t ->
t.message.toast()
})
} ?: run {
toast(R.string.avroom_firstcharge_selectpaytypedialog_01)
}
}
}
}
}
}
}

View File

@@ -0,0 +1,134 @@
package com.chwl.app.fansteam
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.WindowManager
import android.widget.PopupWindow
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.ActivityFansTeamJoinedBinding
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.fansteam.bean.FansTeamTaskInfo
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.core.utils.extension.toast
import com.chwl.library.utils.ResUtil
class FansTeamJoinedActivity : BaseViewBindingActivity<ActivityFansTeamJoinedBinding>() {
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, FansTeamJoinedActivity::class.java)
context.startActivity(starter)
}
}
private val fansTeamViewModel: FansTeamViewModel by viewModels()
private lateinit var rvDelegate: RVDelegate<FansTeamTaskInfo>
private lateinit var popupWindow: PopupWindow
@SuppressLint("SetTextI18n")
override fun init() {
window.setLayout(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT
)
window.setGravity(Gravity.BOTTOM)
rvDelegate = RVDelegate.Builder<FansTeamTaskInfo>()
.setLayoutManager(LinearLayoutManager(this))
.setRecyclerView(binding.rvTask)
.setAdapter(FansTeamTaskAdapter())
.setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.erban_fansteam_fansteamjoinedactivity_01)))
.build()
binding.llRank.setOnClickListener {
DialogWebViewActivity.start(
this,
UriProvider.getFansTeamRankUrl(AvRoomDataManager.get().roomUid)
)
}
binding.ivHelp.setOnClickListener {
showMorePopup(binding.ivHelp)
}
fansTeamViewModel.loadTeamTaskInfo()
fansTeamViewModel.fansTeamJoinedInfoLiveData.observe(this) {
it?.let {
binding.ivAvatar.load(it.anchorAvatar)
binding.tvFansTeamName.text = it.anchorNick.subAndReplaceDot(7) + ResUtil.getString(R.string.erban_fansteam_fansteamjoinedactivity_02)
binding.tvFansTeamFansNum.text = "${it.teamNum}"
binding.ivMeAvatar.load(it.memberAvatar)
binding.tvValue.text = "親密值Lv.${it.levelSeq}"
binding.tvCurrValue.text = "${it.levelExper}/${it.nextLevelExper}"
binding.pbValue.max = it.nextLevelExper
binding.pbValue.progress = it.levelExper
binding.ivRank0.load(it.avatarList.getOrNull(0))
binding.ivRank1.load(it.avatarList.getOrNull(1))
binding.ivRank2.load(it.avatarList.getOrNull(2))
rvDelegate.setNewData(it.taskVos)
}
}
fansTeamViewModel.exitFansTeamLiveData.observe(this) {
if (it == true) {
"退出粉絲團成功!".toast()
finish()
}
}
}
private fun showMorePopup(parent: View?) {
if (parent == null) return
val contentView: View
if (!this::popupWindow.isInitialized) {
contentView =
LayoutInflater.from(this).inflate(R.layout.popup_fans_team_more, null)
popupWindow =
PopupWindow(contentView, ScreenUtil.dip2px(124f), ScreenUtil.dip2px(98f))
popupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
popupWindow.isFocusable = true
} else {
contentView = popupWindow.contentView
}
contentView.findViewById<View>(R.id.tv_rule).setOnClickListener {
DialogWebViewActivity.start(this, UriProvider.getFansTeamRuleUrl())
popupWindow.dismiss()
}
contentView.findViewById<View>(R.id.tv_exit).setOnClickListener {
dialogManager.showOkCancelDialog("退出後粉絲團後24小時內不能再次加入,確定退出嗎?", true) {
popupWindow.dismiss()
fansTeamViewModel.exitFansTeam()
}
}
popupWindow.showAsDropDown(
parent,
0,
0,
Gravity.END
)
}
}

View File

@@ -0,0 +1,70 @@
package com.chwl.app.fansteam
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import androidx.activity.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.netease.nim.uikit.StatusBarUtil
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.ActivityFansTeamListBinding
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.fansteam.bean.FansTeamInfo
import com.chwl.library.annatation.ActLayoutRes
import com.chwl.library.utils.ResUtil
@ActLayoutRes(R.layout.activity_fans_team_list)
class FansTeamListActivity : BaseViewBindingActivity<ActivityFansTeamListBinding>() {
private lateinit var rvDelegate: RVDelegate<FansTeamInfo>
companion object {
@JvmStatic
fun start(context: Context) {
val starter = Intent(context, FansTeamListActivity::class.java)
context.startActivity(starter)
}
}
private var pageNum = 1
private val pageSize = 20
private val fansTeamViewModel: FansTeamViewModel by viewModels()
@SuppressLint("CheckResult")
override fun init() {
initTitleBar(ResUtil.getString(R.string.erban_fansteam_fansteamlistactivity_01))
rvDelegate = RVDelegate.Builder<FansTeamInfo>()
.setRefreshLayout(binding.swipeRefresh)
.setLayoutManager(LinearLayoutManager(this))
.setRecyclerView(binding.recyclerView)
.setAdapter(FansTeamListAdapter())
.setPageSize(pageSize)
.setEmptyView(EmptyViewHelper.createEmptyTextView(this, ResUtil.getString(R.string.erban_fansteam_fansteamlistactivity_02)))
.build()
binding.swipeRefresh.setOnRefreshListener {
pageNum = 1
fansTeamViewModel.loadJoinFansTeamList(pageNum, pageSize)
}
rvDelegate.adapter.setOnLoadMoreListener({
pageNum++
fansTeamViewModel.loadJoinFansTeamList(pageNum, pageSize)
}, binding.recyclerView)
fansTeamViewModel.loadJoinFansTeamList(pageNum, pageSize)
fansTeamViewModel.joinFansTeamListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun needSteepStateBar() = true
override fun setStatusBar() {
super.setStatusBar()
StatusBarUtil.transparencyBar(this)
StatusBarUtil.StatusBarLightMode(this)
}
}

View File

@@ -0,0 +1,35 @@
package com.chwl.app.fansteam
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.user.activity.UserInfoActivity
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.fansteam.bean.FansTeamInfo
class FansTeamListAdapter :
BaseQuickAdapter<FansTeamInfo?, BaseViewHolder>(R.layout.item_fans_team_list) {
override fun convert(helper: BaseViewHolder, item: FansTeamInfo?) {
if (item == null) {
return
}
ImageLoadUtils.loadAvatar(
mContext,
item.anchorAvatar,
helper.getView(R.id.iv_avatar)
)
ImageLoadUtils.loadAvatar(
mContext,
item.icon,
helper.getView(R.id.iv_nameplate)
)
helper.setText(R.id.tv_nickname, item.anchorNick)
helper.itemView.setOnClickListener {
UserInfoActivity.Companion.start(mContext, item.teamUid)
}
}
}

View File

@@ -0,0 +1,34 @@
package com.chwl.app.fansteam
import android.graphics.Color
import android.widget.ImageView
import android.widget.TextView
import androidx.core.graphics.toColorInt
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.load
import com.chwl.core.fansteam.bean.FansTeamTaskInfo
import com.chwl.library.utils.ResUtil
class FansTeamTaskAdapter :
BaseQuickAdapter<FansTeamTaskInfo, BaseViewHolder>(R.layout.item_fans_team_task) {
override fun convert(helper: BaseViewHolder, item: FansTeamTaskInfo) {
helper.setText(R.id.tv_task_title, item.taskName)
.setText(R.id.tv_task_desc, item.taskDesc)
val tvTaskStatus = helper.getView<TextView>(R.id.tv_task_status)
tvTaskStatus.text = if (item.isFinished || item.awardVal == 0) {
tvTaskStatus.setBackgroundResource(R.drawable.shape_f4f4f4_radius_4dp)
tvTaskStatus.setTextColor("#FF999999".toColorInt())
if (item.isFinished) ResUtil.getString(R.string.erban_fansteam_fansteamtaskadapter_01) else "${item.awardVal}/${item.totalNum}"
} else {
tvTaskStatus.setBackgroundResource(R.drawable.shape_ff4e7f_radius_4dp)
tvTaskStatus.setTextColor(Color.WHITE)
"${item.awardVal}/${item.totalNum}"
}
helper.getView<ImageView>(R.id.iv_task_logo).load(item.icon)
}
}

View File

@@ -0,0 +1,75 @@
package com.chwl.app.fansteam
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.chwl.app.base.BaseViewModel
import com.chwl.core.fansteam.bean.FansTeamInfo
import com.chwl.core.fansteam.bean.FansTeamInitInfo
import com.chwl.core.fansteam.bean.FansTeamJoinInfo
import com.chwl.core.fansteam.bean.FansTeamJoinedInfo
import com.chwl.core.fansteam.FansTeamModel
import com.chwl.core.bean.response.ListResult
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.extension.toast
class FansTeamViewModel : BaseViewModel() {
private val _fansTeamJoinInfoLiveData = MutableLiveData<FansTeamJoinInfo>()
val fansTeamJoinInfoLiveData: LiveData<FansTeamJoinInfo> = _fansTeamJoinInfoLiveData
private val _fansTeamInitInfoLiveData = MutableLiveData<FansTeamInitInfo>()
val fansTeamInitInfoLiveData: LiveData<FansTeamInitInfo> = _fansTeamInitInfoLiveData
private val _fansTeamJoinedInfoLiveData = MutableLiveData<FansTeamJoinedInfo>()
val fansTeamJoinedInfoLiveData: LiveData<FansTeamJoinedInfo> = _fansTeamJoinedInfoLiveData
private val _joinFansTeamListLiveData = MutableLiveData<ListResult<FansTeamInfo>>()
val joinFansTeamListLiveData: LiveData<ListResult<FansTeamInfo>> = _joinFansTeamListLiveData
private val _exitFansTeamLiveData = MutableLiveData<Boolean>()
val exitFansTeamLiveData: LiveData<Boolean> = _exitFansTeamLiveData
fun loadTeamJoinInfo() {
safeLaunch {
_fansTeamJoinInfoLiveData.value = FansTeamModel.getFansTeamJoinInfo()
}
}
fun loadTeamTaskInfo() {
safeLaunch {
_fansTeamJoinedInfoLiveData.value = FansTeamModel.getFansTeamTaskInfo()
}
}
fun loadFansTeamInitInfo() {
if (AvRoomDataManager.get().roomUid == 0L) {
return
}
safeLaunch {
_fansTeamInitInfoLiveData.value = FansTeamModel.getFansTeamInitInfo()
}
}
fun exitFansTeam() {
safeLaunch {
FansTeamModel.outFansTeam()
_exitFansTeamLiveData.value = true
}
}
fun loadJoinFansTeamList(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
it.message.toast()
_joinFansTeamListLiveData.value = ListResult.failed(pageNum)
},
block = {
_joinFansTeamListLiveData.value =
ListResult.success(
FansTeamModel.getJoinFansTeamList(pageNum, pageSize),
pageNum
)
}
)
}
}

View File

@@ -0,0 +1,264 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_gravity="bottom">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="@drawable/fans_team_bg_join">
<ImageView
android:id="@+id/iv_help"
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="center"
android:src="@drawable/fans_team_ic_help"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="15dp"
android:layout_marginTop="36dp"
android:src="@drawable/default_avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_fans_team_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:textColor="#ff333333"
android:textSize="14sp"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="@id/iv_avatar"
tools:text="@string/layout_activity_fans_team_join_01" />
<TextView
android:id="@+id/tv_fans_team_fans_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:background="@drawable/shape_white_20dp_round"
android:includeFontPadding="false"
android:paddingStart="5dp"
android:paddingTop="2dp"
android:paddingEnd="5dp"
android:paddingBottom="2dp"
android:textColor="#fffe3478"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/tv_fans_team_name"
app:layout_constraintStart_toEndOf="@id/tv_fans_team_name"
app:layout_constraintTop_toTopOf="@id/tv_fans_team_name"
tools:text="@string/layout_activity_fans_team_join_02" />
<LinearLayout
android:id="@+id/ll_rank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_20dp_round"
android:gravity="center"
android:paddingStart="10dp"
android:paddingTop="4dp"
android:paddingEnd="10dp"
android:paddingBottom="4dp"
app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
app:layout_constraintStart_toStartOf="@id/tv_fans_team_name"
app:layout_constraintTop_toBottomOf="@id/tv_fans_team_name">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fans_team_ic_fans" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_0"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
</LinearLayout>
<ImageView
android:id="@+id/iv_privilege"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="18dp"
android:src="@drawable/fans_team_bg_privilege"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_avatar" />
<View
android:id="@+id/bg_fans_nameplate"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_white_8dp_round"
app:layout_constraintDimensionRatio="345:58"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_privilege" />
<View
android:layout_width="42dp"
android:layout_height="42dp"
android:background="@drawable/shape_f4f4f4_radius_8dp"
app:layout_constraintBottom_toBottomOf="@id/iv_fans_nameplate"
app:layout_constraintEnd_toEndOf="@id/iv_fans_nameplate"
app:layout_constraintStart_toStartOf="@id/iv_fans_nameplate"
app:layout_constraintTop_toTopOf="@id/iv_fans_nameplate" />
<ImageView
android:id="@+id/iv_fans_nameplate"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginStart="10dp"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/bg_fans_nameplate"
app:layout_constraintStart_toStartOf="@id/bg_fans_nameplate"
app:layout_constraintTop_toTopOf="@id/bg_fans_nameplate" />
<TextView
android:id="@+id/tv_nameplate_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textColor="#ff333333"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/tv_nameplate_desc"
app:layout_constraintStart_toEndOf="@id/iv_fans_nameplate"
app:layout_constraintTop_toTopOf="@id/iv_fans_nameplate"
app:layout_constraintVertical_chainStyle="packed"
tools:text="@string/layout_activity_fans_team_join_03" />
<TextView
android:id="@+id/tv_nameplate_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff999999"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/iv_fans_nameplate"
app:layout_constraintStart_toStartOf="@id/tv_nameplate_title"
app:layout_constraintTop_toBottomOf="@id/tv_nameplate_title"
tools:text="@string/layout_activity_fans_team_join_04" />
<View
android:id="@+id/bg_fans_gift"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginTop="7dp"
android:layout_marginEnd="15dp"
android:background="@drawable/shape_white_8dp_round"
app:layout_constraintDimensionRatio="345:58"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/bg_fans_nameplate" />
<View
android:layout_width="42dp"
android:layout_height="42dp"
android:background="@drawable/shape_f4f4f4_radius_8dp"
app:layout_constraintBottom_toBottomOf="@id/iv_fans_gift"
app:layout_constraintEnd_toEndOf="@id/iv_fans_gift"
app:layout_constraintStart_toStartOf="@id/iv_fans_gift"
app:layout_constraintTop_toTopOf="@id/iv_fans_gift" />
<ImageView
android:id="@+id/iv_fans_gift"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginStart="10dp"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="@id/bg_fans_gift"
app:layout_constraintStart_toStartOf="@id/bg_fans_gift"
app:layout_constraintTop_toTopOf="@id/bg_fans_gift" />
<TextView
android:id="@+id/tv_gift_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:textColor="#ff333333"
android:textSize="14sp"
app:layout_constraintBottom_toTopOf="@id/tv_gift_desc"
app:layout_constraintStart_toEndOf="@id/iv_fans_gift"
app:layout_constraintTop_toTopOf="@id/iv_fans_gift"
app:layout_constraintVertical_chainStyle="packed"
tools:text="@string/layout_activity_fans_team_join_05" />
<TextView
android:id="@+id/tv_gift_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#ff999999"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/iv_fans_gift"
app:layout_constraintStart_toStartOf="@id/tv_gift_title"
app:layout_constraintTop_toBottomOf="@id/tv_gift_title"
tools:text="@string/layout_activity_fans_team_join_06" />
<View
android:id="@+id/bg_join"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="15dp"
android:layout_marginTop="32dp"
android:layout_marginEnd="15dp"
android:layout_marginBottom="48dp"
android:background="@drawable/fans_team_bg_join_btn"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="345:48"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/bg_fans_gift" />
<TextView
android:id="@+id/tv_join"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="14sp"
app:layout_constraintBottom_toBottomOf="@id/bg_join"
app:layout_constraintStart_toEndOf="@id/iv_join_logo"
app:layout_constraintTop_toTopOf="@id/bg_join"
tools:text="@string/layout_activity_fans_team_join_07" />
<ImageView
android:id="@+id/iv_join_logo"
android:layout_width="76dp"
android:layout_height="75dp"
android:layout_marginStart="15dp"
app:layout_constraintBottom_toBottomOf="@id/bg_join"
app:layout_constraintStart_toStartOf="@id/bg_join"
tools:src="@drawable/fans_team_ic_join_logo" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_gravity="bottom">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/fans_team_bg_joined"
android:layout_gravity="bottom">
<ImageView
android:id="@+id/iv_help"
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="center"
android:src="@drawable/fans_team_ic_more"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="15dp"
android:layout_marginTop="36dp"
android:src="@drawable/default_avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_fans_team_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:textColor="#ff333333"
android:textSize="14sp"
app:layout_constraintStart_toEndOf="@id/iv_avatar"
app:layout_constraintTop_toTopOf="@id/iv_avatar"
tools:text="@string/layout_activity_fans_team_joined_01" />
<TextView
android:id="@+id/tv_fans_team_fans_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:background="@drawable/shape_white_20dp_round"
android:includeFontPadding="false"
android:paddingStart="5dp"
android:paddingTop="2dp"
android:paddingEnd="5dp"
android:paddingBottom="2dp"
android:textColor="#fffe3478"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/tv_fans_team_name"
app:layout_constraintStart_toEndOf="@id/tv_fans_team_name"
app:layout_constraintTop_toTopOf="@id/tv_fans_team_name"
tools:text="@string/layout_activity_fans_team_joined_02" />
<LinearLayout
android:id="@+id/ll_rank"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_white_20dp_round"
android:gravity="center"
android:paddingStart="10dp"
android:paddingTop="4dp"
android:paddingEnd="10dp"
android:paddingBottom="4dp"
app:layout_constraintBottom_toBottomOf="@id/iv_avatar"
app:layout_constraintStart_toStartOf="@id/tv_fans_team_name"
app:layout_constraintTop_toBottomOf="@id/tv_fans_team_name">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/fans_team_ic_fans" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_0"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_rank_2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:src="@drawable/default_avatar" />
</LinearLayout>
<ImageView
android:id="@+id/iv_task_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:src="@drawable/fans_team_bg_task_title"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_avatar" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_task"
android:layout_width="0dp"
android:layout_height="200dp"
android:layout_marginStart="25dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="25dp"
android:layout_marginBottom="10dp"
android:overScrollMode="never"
android:scrollbars="none"
app:layout_constraintBottom_toTopOf="@id/view_me_info"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/iv_task_title" />
<View
android:id="@+id/view_me_info"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="375:88"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_me_avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginStart="24dp"
android:layout_marginTop="10dp"
android:src="@drawable/default_avatar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/view_me_info" />
<TextView
android:id="@+id/tv_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:includeFontPadding="false"
android:textColor="#ff333333"
android:textSize="10sp"
app:layout_constraintStart_toEndOf="@id/iv_me_avatar"
app:layout_constraintTop_toTopOf="@id/iv_me_avatar"
app:layout_constraintVertical_chainStyle="packed"
tools:text="@string/layout_activity_fans_team_joined_03" />
<ProgressBar
android:id="@+id/pb_value"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="16dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="24dp"
android:max="100"
android:progress="50"
android:progressDrawable="@drawable/fans_team_bg_pb"
app:layout_constraintBottom_toBottomOf="@id/iv_me_avatar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@id/tv_value"
app:layout_constraintTop_toBottomOf="@id/tv_value" />
<TextView
android:id="@+id/tv_curr_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:includeFontPadding="false"
android:text="70/100"
android:textColor="@color/white"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/pb_value"
app:layout_constraintEnd_toEndOf="@id/pb_value"
app:layout_constraintStart_toStartOf="@id/pb_value"
app:layout_constraintTop_toTopOf="@id/pb_value" />
</androidx.constraintlayout.widget.ConstraintLayout>
</FrameLayout>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<com.chwl.app.base.TitleBar
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_30" />
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipe_refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:clipToPadding="false"
android:paddingTop="10dp" />
</FrameLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>

View File

@@ -89,6 +89,64 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/layout_hour_rank" />
<FrameLayout
android:id="@+id/fl_fans_team"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_8"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/layout_hour_rank"
tools:visibility="visible">
<LinearLayout
android:id="@+id/fl_fans_team_join_tip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/bg_fans_team_entrance"
android:orientation="horizontal"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_gravity="bottom"
android:layout_marginStart="8dp"
android:gravity="center"
android:includeFontPadding="false"
android:text="@string/layout_fragment_single_room_02"
android:textColor="@color/white"
android:textSize="@dimen/sp_12" />
<ImageView
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="end"
android:layout_marginStart="6dp"
android:layout_marginEnd="8dp"
android:scaleType="centerInside"
android:src="@drawable/fans_team_ic_room_entrance" />
</LinearLayout>
<TextView
android:id="@+id/tv_fans_team_opt"
android:layout_width="wrap_content"
android:layout_height="22dp"
android:layout_marginTop="6dp"
android:background="@drawable/bg_fans_team_entrance"
android:drawableEnd="@drawable/fans_team_ic_room_love"
android:drawablePadding="5dp"
android:gravity="center"
android:paddingStart="8dp"
android:paddingEnd="8dp"
android:text="@string/layout_fragment_single_room_03"
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
android:visibility="gone" />
</FrameLayout>
<ViewStub
android:id="@+id/vs_music_player"
android:layout_width="0dp"

View File

@@ -0,0 +1,50 @@
<?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:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="15dp"
android:paddingTop="8dp"
android:paddingEnd="15dp"
android:paddingBottom="8dp">
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/iv_avatar"
android:layout_width="40dp"
android:layout_height="40dp"
android:scaleType="centerCrop"
android:src="@drawable/default_avatar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_nickname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:ellipsize="end"
android:lines="1"
android:textColor="@color/color_333333"
android:textSize="13sp"
app:layout_constrainedWidth="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/iv_avatar"
app:layout_constraintTop_toTopOf="parent"
tools:text="@string/layout_item_fans_team_list_01" />
<ImageView
android:id="@+id/iv_nameplate"
android:layout_width="wrap_content"
android:layout_height="27dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,65 @@
<?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="58dp"
android:layout_marginTop="4dp"
android:layout_marginBottom="4dp"
android:background="@drawable/shape_white_8dp_round">
<ImageView
android:id="@+id/iv_task_logo"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginStart="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:src="@drawable/default_cover"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_task_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:includeFontPadding="false"
android:textColor="@color/color_333333"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@id/tv_task_desc"
app:layout_constraintStart_toEndOf="@id/iv_task_logo"
app:layout_constraintTop_toTopOf="@id/iv_task_logo"
app:layout_constraintVertical_chainStyle="packed"
tools:text="@string/layout_item_fans_team_task_01" />
<TextView
android:id="@+id/tv_task_desc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:lines="1"
android:textColor="@color/color_999999"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="@id/iv_task_logo"
app:layout_constraintStart_toStartOf="@id/tv_task_title"
app:layout_constraintTop_toBottomOf="@id/tv_task_title"
tools:text="@string/layout_item_fans_team_task_02" />
<TextView
android:id="@+id/tv_task_status"
android:layout_width="wrap_content"
android:layout_height="20dp"
android:layout_marginEnd="10dp"
android:gravity="center"
android:minWidth="48dp"
android:textColor="@color/color_999999"
android:textSize="10sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="0/20" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -262,5 +262,31 @@ public class UriProvider {
public static String getRoomHourRankUrl(long roomUid) {
return JAVA_WEB_URL.concat("/molistar/modules/room_rank/hourRankLicense.html?roomUid=" + roomUid);
}
/**
* 粉丝团规则
*/
public static String getFansTeamRuleUrl() {
return JAVA_WEB_URL.concat("/molistar/modules/fans_club/rule.html");
}
/**
* 粉丝团排行
*/
public static String getFansTeamRankUrl(long roomUid) {
return JAVA_WEB_URL.concat("/molistar/modules/fans_club/fans_rank.html?roomUid=" + roomUid);
}
/**
* 我的粉丝团
*/
public static String getFansTeamMyFansUrl(long roomUid) {
return JAVA_WEB_URL.concat("/molistar/modules/fans_club/myfans.html?roomUid=" + roomUid);
}
/**
* 开通粉丝团
*/
public static String getFansTeamOpenUrl(long roomUid) {
return JAVA_WEB_URL.concat("/molistar/modules/fans_club/nameplate.html?roomUid=" + roomUid);
}
}

View File

@@ -0,0 +1,90 @@
package com.chwl.core.fansteam
import com.chwl.core.fansteam.bean.FansTeamInfo
import com.chwl.core.fansteam.bean.FansTeamInitInfo
import com.chwl.core.fansteam.bean.FansTeamJoinInfo
import com.chwl.core.fansteam.bean.FansTeamJoinedInfo
import com.chwl.core.base.BaseModel
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.utils.net.launchRequest
import com.chwl.library.net.rxnet.RxNet
import retrofit2.http.GET
import retrofit2.http.Query
object FansTeamModel : BaseModel() {
private val api = RxNet.create(Api::class.java)
suspend fun getFansTeamJoinInfo(): FansTeamJoinInfo? =
launchRequest {
api.getFansTeamJoinInfo(AvRoomDataManager.get().roomUid)
}
suspend fun getFansTeamTaskInfo(): FansTeamJoinedInfo? =
launchRequest {
api.getFansTeamTaskInfo(AvRoomDataManager.get().roomUid)
}
suspend fun getFansTeamInitInfo(): FansTeamInitInfo? =
launchRequest {
api.getFansTeamInitInfo(AvRoomDataManager.get().roomUid)
}
suspend fun outFansTeam(): String? =
launchRequest {
api.outFansTeam(AvRoomDataManager.get().roomUid)
}
suspend fun getJoinFansTeamList(pageNum: Int, pageSize: Int): List<FansTeamInfo>? =
launchRequest {
api.getJoinFansTeamList(pageNum, pageSize)
}
private interface Api {
/**
* 加入粉丝团 --弹窗内容
*
* @return
*/
@GET("anchorFansTeam/applyFansTeamPopInfoVo")
suspend fun getFansTeamJoinInfo(@Query("teamUid") roomUid: Long): ServiceResult<FansTeamJoinInfo>
/**
* 粉丝团任务列表
*
* @return
*/
@GET("anchorFansTeam/getFansTaskInfo")
suspend fun getFansTeamTaskInfo(@Query("teamUid") roomUid: Long): ServiceResult<FansTeamJoinedInfo>
/**
* 进房初始化当前用户与房间粉丝团关系
*
* @return
*/
@GET("/anchorFansTeam/initInRoomFansTeam")
suspend fun getFansTeamInitInfo(@Query("teamUid") roomUid: Long): ServiceResult<FansTeamInitInfo>
/**
* 退出粉丝团
*
* @return
*/
@GET("/anchorFansTeam/outAnchorFansTeam")
suspend fun outFansTeam(@Query("teamUid") roomUid: Long): ServiceResult<String>
/**
* 我的粉丝团列表
*
* @return
*/
@GET("/anchorFansTeam/getJoinFansTeamList")
suspend fun getJoinFansTeamList(
@Query("page") page: Int,
@Query("pageSize") pageSize: Int
): ServiceResult<List<FansTeamInfo>>
}
}

View File

@@ -0,0 +1,11 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
@Keep
data class FansTeamInfo(
val anchorAvatar: String = "",
val anchorNick: String = "",
val icon: String = "",
val teamUid: Long = 0
)

View File

@@ -0,0 +1,13 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
@Keep
data class FansTeamInitInfo(
val anchorFansNum: Int = 0,
val fansLevelSeq: Int = 0,
val hasFansTeamCurrentRoom: Boolean = false,
val isAnchorFans: Boolean = false,
val isCurrentRoomAnchor: Boolean = false,
val isRedPop: Boolean = false
)

View File

@@ -0,0 +1,16 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
@Keep
data class FansTeamJoinInfo(
val anchorAvatar: String = "",
val anchorNick: String = "",
val avatarList: List<String> = listOf(),
val isJoinLimit: Boolean = false,
val privilegeConfigVos: List<PrivilegeConfigVo> = listOf(),
val teamId: Int = 0,
val teamNum: Int = 0,
val teamUid: Int = 0,
val taskVos: List<FansTeamTaskInfo>? = null
)

View File

@@ -0,0 +1,18 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
@Keep
data class FansTeamJoinedInfo(
val anchorAvatar: String = "",
val anchorNick: String = "",
val avatarList: List<String> = listOf(),
val levelExper: Int = 0,
val levelSeq: Int = 0,
val memberAvatar: String = "",
val memberUid: Int = 0,
val nextLevelExper: Int = 0,
val taskVos: List<FansTeamTaskInfo> = listOf(),
val teamNum: Int = 0,
val teamUid: Int = 0
)

View File

@@ -0,0 +1,15 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
@Keep
data class FansTeamTaskInfo(
val awardVal: Int = 0,
val icon: String = "",
val taskId: String = "",
val isFinished: Boolean = false,
val taskCode: String = "",
val taskDesc: String = "",
val taskName: String = "",
val totalNum: Int = 0
)

View File

@@ -0,0 +1,18 @@
package com.chwl.core.fansteam.bean
import androidx.annotation.Keep
import com.chwl.core.gift.bean.GiftInfo
@Keep
data class PrivilegeConfigVo(
val createTime: String = "",
val description: String = "",
val icon: String = "",
val isShow: Int = 0,
val name: String = "",
val normalId: Int = 0,
val privilegeId: Int = 0,
val seq: Int = 0,
val status: Int = 0,
val type: Int = 0,//特权类型 1铭牌 2专属礼物 3入团礼物
val giftVo: GiftInfo? = null
)