Compare commits

...

48 Commits

Author SHA1 Message Date
max
f4ef62d2d6 固化混淆配置 2024-06-25 10:02:34 +08:00
max
49a10d9f40 feat:调整版本号 2024-06-24 17:40:34 +08:00
max
42b47fcb64 fix:修复PK-RTL适配问题 2024-06-24 16:26:04 +08:00
max
709b0b0274 fix:调整一些翻译 2024-06-24 15:54:39 +08:00
max
b6d59b5986 feat:微调UI 2024-06-24 14:52:49 +08:00
max
ef80b15f27 feat:修改背包icon 2024-06-24 14:22:24 +08:00
max
c14d376a1a feat;调整首页列表分页大小(减轻服务端压力) 2024-06-24 11:44:37 +08:00
max
7f8cd70d99 feat:调整“我的”翻译 2024-06-21 17:46:38 +08:00
max
d2a686f572 feat:首页房间列表:增加公告标题默认值 2024-06-21 16:53:31 +08:00
max
693a14d6cf fix:修复房间排行榜热度-最小化后恢复页面未展示最新值bug 2024-06-21 15:34:16 +08:00
max
cf078ebc5b feat:调整首页列表-公告展示字段 2024-06-20 19:01:05 +08:00
max
408fe443f4 fix:修复首页-排行榜-RTL问题 2024-06-20 17:56:39 +08:00
max
442bd1f238 fix:修复PK邀请弹窗 适配问题 2024-06-20 16:33:07 +08:00
max
4eed4c0cfb fix:修复首页-我的-房间卡片 展示bug 2024-06-20 15:56:10 +08:00
max
bf3ea4b437 feat:调整启动图标 2024-06-20 10:59:12 +08:00
max
f161a8e96b feat:补充翻译 2024-06-19 19:14:39 +08:00
max
574f290004 feat:首页排行榜资源位-背景改为本地 2024-06-19 18:51:59 +08:00
max
a46b5b4f32 feat:调整首页-排行榜-UI
fix:修复首页-我的列表不能主动刷新问题
2024-06-19 18:51:59 +08:00
max
936dd2f8e8 fix:修复首页排行榜异常 2024-06-19 18:51:59 +08:00
max
9d0b6e3a9f feat:完成我的-菜单列表:动态数据(接口) 2024-06-19 18:51:58 +08:00
max
14fa576814 feat:完善首页数据对接(首页排行榜、我的房间、房间标签列表)
feat:删除部分无用代码
2024-06-19 18:51:58 +08:00
max
9d14936d9c feat:初步实现首页排行榜UI效果 2024-06-19 18:51:58 +08:00
max
3dec68b1fc fix:修复一些英文翻译 2024-06-19 18:51:57 +08:00
max
3c75f0e86a feat:删除首页历史无用代码
feat:调整首页刷新机制(去掉定时刷新任务、改为每次可见刷新)
feat:完善首页-我的-房间信息展示
2024-06-19 18:51:57 +08:00
max
0caee6e191 feat:调整翻译文案 2024-06-19 18:51:43 +08:00
max
b9f87b4984 feat:初步完成首页改版UI部分(首页-推荐、首页-我的) 2024-06-19 18:49:52 +08:00
max
2b22fb3d4c fix:修复线上检测异常(房间公聊列表) 2024-06-19 16:25:00 +08:00
max
d80128f217 feat:调整礼物面板-背包图标大小 2024-06-19 15:52:22 +08:00
max
57a7bee15d 补充提交 2024-06-19 15:52:22 +08:00
max
677eb4327b feat:补充翻译 2024-06-19 15:52:22 +08:00
max
d8815a23e7 feat:完成房间礼物面板-背包位置调整
feat:调整礼物面板部分layout的间距、高度
2024-06-19 15:52:21 +08:00
max
a7faa20321 feat:调整房间在线人数定时任务时长 2024-06-19 15:52:21 +08:00
max
612bd50545 feat:调整给自己送礼的提示文案 2024-06-19 15:52:20 +08:00
max
3187bc0d37 fix:增加给自己送礼的提示(文案待确定) 2024-06-19 15:52:20 +08:00
max
48d2bc88b8 fix:修复团队PK-结束后进度未清零bug 2024-06-19 15:52:20 +08:00
max
168c0eab09 feat:补充游戏房、个播房:房间榜热度展示 2024-06-19 15:52:20 +08:00
max
d1fc37aa24 feat:完成房间榜流水展示 2024-06-19 15:52:19 +08:00
max
94cebe457a feat:补充PK-UI-多语言适配 2024-06-19 15:52:19 +08:00
max
6e8f69d273 feat:完善PK-UI改版:多语言资源适配 2024-06-19 15:52:18 +08:00
max
80d852114c fix:修改房间PK面板拖拽实现方案(RTL适配问题)
fix:修改首页房间悬浮球实现方案(RTL适配问题)
2024-06-19 15:52:17 +08:00
max
634adc5f19 fix:房间团队PK-阿语适配 2024-06-19 15:52:17 +08:00
max
3408f444aa fix:修复PK-头像缩放适配问题 2024-06-19 15:52:17 +08:00
max
95f65558a4 feat:完成房间团队PK-UI改版 2024-06-19 15:52:15 +08:00
max
fbb7d20f3d feat:迁移PK入口到玩法列表
feat:部分UI微调
2024-06-19 15:52:15 +08:00
max
12edababcd feat:调整跨房PK倒计时 颜色 2024-06-19 15:52:14 +08:00
max
97949c4828 feat:完成跨房PK-UI改版 2024-06-19 15:52:14 +08:00
max
78fa5751a6 feat:COS 增加动态配置(是否全球加速) 2024-06-14 16:00:55 +08:00
max
a6798cf35d fix:修复首页房间最小化入口展示不出来问题(去掉再次请求用户信息接口的逻辑,改用读取房间信息里面头像字段) 2024-06-11 10:26:22 +08:00
251 changed files with 4429 additions and 6174 deletions

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@@ -30,29 +30,22 @@ import com.chwl.app.game.data.GameModel2;
import com.chwl.app.game.ui.game.GameActivity;
import com.chwl.app.game.ui.game.GameIntent;
import com.chwl.app.game.ui.home.GameHomeFragment;
import com.chwl.app.game.ui.home.GameHomeViewModel;
import com.chwl.app.star.StarFragment;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.bean.game.GameRoomInfo;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.settings.SettingsModel;
import com.chwl.library.utils.JavaUtil;
import com.chwl.library.utils.StringUtils;
import com.example.lib_utils.StringUtils2;
import com.netease.nim.uikit.StatusBarUtil;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.netease.nim.uikit.impl.cache.NimUserInfoCache;
import com.netease.nimlib.sdk.NIMClient;
import com.netease.nimlib.sdk.RequestCallbackWrapper;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent;
import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.team.TeamService;
import com.netease.nimlib.sdk.team.constant.TeamMessageNotifyTypeEnum;
import com.netease.nimlib.sdk.team.model.Team;
import com.netease.nimlib.sdk.uinfo.model.NimUserInfo;
import com.orhanobut.logger.Logger;
import com.trello.rxlifecycle3.android.ActivityEvent;
import com.chwl.app.application.IReportConstants;
@@ -98,7 +91,6 @@ import com.chwl.core.channel_page.model.ChannelPageModel;
import com.chwl.core.community.event.SquareTaskEvent;
import com.chwl.core.community.event.UnReadCountEvent;
import com.chwl.core.home.bean.MainTabType;
import com.chwl.core.home.event.RefreshHomeDataEvent;
import com.chwl.core.home.event.VisitorUnreadCountEvent;
import com.chwl.core.home.model.GameHomeModel;
import com.chwl.core.home.model.HomeModel;
@@ -133,11 +125,6 @@ import org.jetbrains.annotations.NotNull;
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
/**
* @author Administrator
@@ -150,7 +137,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private static final String TAG = "MainActivity";
private static final String EXTRA_APP_QUIT = "APP_QUIT";
private final SparseArray<Fragment> fragmentArray = new SparseArray<>();
private DragLayout avatarLayout;
private View avatarLayout;
private CircleImageView avatarImage;
private LivingIconView userLivingView;
private MainTabLayout mMainTabLayout;
@@ -260,11 +247,6 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
EventBus.getDefault().register(this);
otherModelInit();
Observable.interval(60, TimeUnit.SECONDS)
.compose(bindToLifecycle())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(aLong -> EventBus.getDefault().post(new RefreshHomeDataEvent()));
homeViewModel.getAnchorInfoLiveData().observe(this, anchorInfo -> {
if (anchorInfo != null) {
anchorCardView.setAnchorInfo(anchorInfo);
@@ -592,27 +574,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
private void updateRoomState() {
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo != null) {
UserModel.get().getUserInfo(roomInfo.getUid())
.subscribe(userInfo -> {
if (userInfo != null) {
displayAvatarLayout(userInfo.getAvatar(), roomInfo.getTitle(), userInfo.getErbanNo());
} else {
NimUserInfo nimUserInfo = NimUserInfoCache.getInstance().getUserInfo(roomInfo.getUid() + "");
if (nimUserInfo == null) {
NimUserInfoCache.getInstance().getUserInfoFromRemote(roomInfo.getUid() + "", new RequestCallbackWrapper<NimUserInfo>() {
@Override
public void onResult(int i, NimUserInfo nimUserInfo, Throwable throwable) {
if (nimUserInfo != null) {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
} else {
displayAvatarLayout(nimUserInfo.getAvatar(), roomInfo.getTitle(), userInfo.getUid());
}
}
});
displayAvatarLayout(roomInfo.getAvatar(), roomInfo.getTitle(), roomInfo.getUid());
}
}

View File

@@ -8,17 +8,18 @@ import android.util.AttributeSet
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.PopupWindow
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import androidx.core.view.marginBottom
import androidx.core.view.updateLayoutParams
import androidx.lifecycle.Observer
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.netease.nim.uikit.common.util.sys.TimeUtil
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.widget.DragLayout
import com.chwl.app.databinding.LayoutRoomPkBoardViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.im.custom.bean.RoomPkBean
@@ -29,6 +30,9 @@ import com.chwl.core.utils.CurrentTimeUtils
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.library.rxbus.RxBus
import com.chwl.library.utils.CommonUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.widget.drag.ViewDragLayout
import com.example.lib_utils.UiUtils
import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.disposables.Disposable
@@ -36,7 +40,7 @@ import java.util.concurrent.TimeUnit
class RoomPKBoardView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : DragLayout(context, attrs, defStyleAttr) {
) : ViewDragLayout(context, attrs, defStyleAttr) {
private val binding = LayoutRoomPkBoardViewBinding.inflate(LayoutInflater.from(context))
private val observer = Observer<RoomPkBean?> { updateView(it) }
@@ -45,25 +49,34 @@ class RoomPKBoardView @JvmOverloads constructor(
private var roomPkBean: RoomPkBean? = null
init {
addView(binding.root, LayoutParams(ScreenUtil.dip2px(339f), ScreenUtil.dip2px(233f)))
addView(
binding.root,
FrameLayout.LayoutParams(
context.resources.getDimensionPixelOffset(R.dimen.dp_309),
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
this.gravity = Gravity.CENTER
this.setMargins(0, 0, 0, UiUtils.dip2px(50f))
}
)
//注意这里需要先改变Style,再订阅数据
binding.viewRankListCharmLeft.showCharmStyle()
binding.viewRankListCharmRight.showCharmStyle()
AvRoomDataManager.get().roomPkLiveData.observeForever(observer)
binding.ivDetails.setOnClickListener {
if (CommonUtils.isFastDoubleClick(1000)) return@setOnClickListener
if (CommonUtils.isFastDoubleClick(500)) return@setOnClickListener
binding.groupRank.isVisible = !binding.groupRank.isVisible
if (binding.groupRank.isVisible) {
binding.clRoot.setBackgroundResource(R.drawable.bg_room_pk_board)
binding.clRoot.updateLayoutParams<FrameLayout.LayoutParams> {
width = ScreenUtil.dip2px(339f)
height = ScreenUtil.dip2px(233f)
binding.ivBg.setImageResource(R.drawable.room_pk_bg_full)
binding.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
width = ViewGroup.LayoutParams.MATCH_PARENT
height = context.resources.getDimensionPixelOffset(R.dimen.dp_285)
}
} else {
binding.clRoot.setBackgroundResource(R.drawable.bg_room_pk_board_small)
binding.clRoot.updateLayoutParams<FrameLayout.LayoutParams> {
width = ScreenUtil.dip2px(339f)
height = ScreenUtil.dip2px(137f)
binding.ivBg.setImageResource(R.drawable.room_pk_bg_small)
binding.ivBg.updateLayoutParams<ConstraintLayout.LayoutParams> {
width = ViewGroup.LayoutParams.MATCH_PARENT
height = context.resources.getDimensionPixelOffset(R.dimen.dp_130)
}
}
binding.ivDetails.animate().rotationBy(180f).start()
@@ -122,11 +135,17 @@ class RoomPKBoardView @JvmOverloads constructor(
)
binding.viewRankListCharmRight.updateData(roomPkBean?.arRank)
binding.viewRankListContributeRight.updateData(roomPkBean?.asRank)
binding.pbScore.progress = ((roomPkBean?.cPercent ?: 0.5f) * 100).toInt()
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
layoutParams.horizontalBias = roomPkBean?.cPercent ?: 0.5f
binding.svgaHot.layoutParams = layoutParams
binding.pbScore.post {
val progress = binding.pbScore.width * (roomPkBean?.cPercent ?: 0.5f)
var bias =
(progress - binding.svgaHot.width / 2f) / (binding.pbScore.width - binding.svgaHot.width)
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
bias = 1f.coerceAtMost(bias)
bias = 0f.coerceAtLeast(bias)
layoutParams.horizontalBias = bias
binding.svgaHot.layoutParams = layoutParams
}
binding.tvScoreLeft.text = "${roomPkBean?.cAmount ?: 0}"
binding.tvScoreRight.text = "${roomPkBean?.aAmount ?: 0}"
@@ -134,13 +153,18 @@ class RoomPKBoardView @JvmOverloads constructor(
disposable = Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe { _ ->
binding.tvTime.text = roomPkBean?.endTime?.let {
roomPkBean?.endTime?.let {
val remainTime = (it - CurrentTimeUtils.getCurrentTime()).toInt() / 1000
binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#ff87a1" else "#fff600"))
binding.tvTime.isVisible = remainTime > 0
binding.tvEndHint.isVisible = remainTime <= 0
TimeUtil.secToTime(remainTime)
} ?: "00:00"
binding.tvTime.setTextColor(Color.parseColor(if (remainTime <= 30) "#FFF17D" else "#ffffff"))
if (remainTime > 0) {
binding.tvTime.text = TimeUtil.secToTime(remainTime)
} else {
binding.tvTime.text =
ResUtil.getString(R.string.layout_layout_room_pk_board_view_02)
}
} ?: let {
binding.tvTime.text = "00:00"
}
}
}
@@ -150,7 +174,11 @@ class RoomPKBoardView @JvmOverloads constructor(
contentView =
LayoutInflater.from(context).inflate(R.layout.layout_room_pk_help_view, null)
helpPopupWindow =
PopupWindow(contentView, ScreenUtil.dip2px(244f), ScreenUtil.dip2px(177f))
PopupWindow(
contentView,
resources.getDimensionPixelOffset(R.dimen.dp_209),
ViewGroup.LayoutParams.WRAP_CONTENT
)
helpPopupWindow.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
helpPopupWindow.isOutsideTouchable = true
helpPopupWindow.isFocusable = true
@@ -158,10 +186,10 @@ class RoomPKBoardView @JvmOverloads constructor(
try {
helpPopupWindow.showAsDropDown(
binding.viewHelpAnchor,
binding.ivHelp,
0,
0,
Gravity.START or Gravity.BOTTOM
ScreenUtil.dip2px(7f),
Gravity.END or Gravity.BOTTOM
)
} catch (e: Exception) {
e.printStackTrace()

View File

@@ -5,6 +5,8 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.core.view.isGone
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.databinding.LayoutRoomPkRankListViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
@@ -19,7 +21,6 @@ class RoomPKRankListView @JvmOverloads constructor(
private val binding = LayoutRoomPkRankListViewBinding.inflate(LayoutInflater.from(context))
private val tvValues = arrayOf(binding.tvValue1, binding.tvValue2, binding.tvValue3)
private val ivAvatars = arrayOf(binding.ivAvatar1, binding.ivAvatar2, binding.ivAvatar3)
private var defaultAvatarRes = R.drawable.bg_room_pk_rank_contribute_default
init {
addView(binding.root)
@@ -36,13 +37,9 @@ class RoomPKRankListView @JvmOverloads constructor(
binding.tvValue1.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.tvValue2.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.tvValue3.setBackgroundResource(R.drawable.bg_room_pk_charm)
binding.viewBg1.setBackgroundResource(R.drawable.bg_room_pk_rank_charm1)
binding.viewBg2.setBackgroundResource(R.drawable.bg_room_pk_rank_charm2)
binding.viewBg3.setBackgroundResource(R.drawable.bg_room_pk_rank_charm2)
binding.ivAvatar1.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
binding.ivAvatar2.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
binding.ivAvatar3.setImageResource(R.drawable.bg_room_pk_rank_charm_default)
defaultAvatarRes = R.drawable.bg_room_pk_rank_charm_default
binding.ivAvatarSeat1.setImageResource(R.drawable.room_pk_ic_seat_charm)
binding.ivAvatarSeat2.setImageResource(R.drawable.room_pk_ic_seat_charm)
binding.ivAvatarSeat3.setImageResource(R.drawable.room_pk_ic_seat_charm)
}
fun updateData(data: List<RoomPkBean.RankBean>?) {
@@ -50,12 +47,16 @@ class RoomPKRankListView @JvmOverloads constructor(
val rankBean = data?.getOrNull(i)
tvValues[i].text = rankBean?.amount ?: "0"
tvValues[i].isGone = "0" == tvValues[i].text
ImageLoadUtils.loadImage(
context,
rankBean?.avatar,
ivAvatars[i],
if (rankBean?.avatar.isNullOrEmpty()) defaultAvatarRes else R.drawable.default_avatar
)
if (rankBean?.avatar.isNullOrEmpty()) {
ivAvatars[i].isInvisible = true
} else {
ivAvatars[i].isVisible = true
ImageLoadUtils.loadImage(
context,
rankBean?.avatar,
ivAvatars[i], R.drawable.default_avatar
)
}
ivAvatars[i].tag = rankBean?.uid
}
}

View File

@@ -3,7 +3,6 @@ package com.chwl.app.avroom.anotherroompk
import android.annotation.SuppressLint
import android.os.Bundle
import android.view.WindowManager
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.databinding.DialogRoomPkFinishBinding
@@ -30,10 +29,8 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
@SuppressLint("CheckResult", "SetTextI18n")
override fun init() {
binding?.ivClose?.setOnClickListener { dismissAllowingStateLoss() }
binding?.tvTitleRed?.text = roomPkBean.cTitle.subAndReplaceDot(7)
binding?.tvValueRed?.text = "${roomPkBean.cAmount}"
binding?.ivRedWin?.isVisible = roomPkBean.cUid == roomPkBean.winUid && roomPkBean.winUid != 0L
ImageLoadUtils.loadImage(
context,
roomPkBean.cAvatar,
@@ -43,8 +40,6 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
binding?.tvTitleBlue?.text = roomPkBean.aTitle.subAndReplaceDot(7)
binding?.tvValueBlue?.text = "${roomPkBean.aAmount}"
binding?.ivBlueWin?.isVisible =
roomPkBean.cUid != roomPkBean.winUid && roomPkBean.winUid != 0L
ImageLoadUtils.loadImage(
context,
roomPkBean.aAvatar,
@@ -53,7 +48,7 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
)
roomPkBean.csRank.getOrNull(0)?.let {
binding?.tvNickContribute?.text = it.nick.subAndReplaceDot(7)
binding?.tvNickContribute?.text = it.nick
binding?.tvValueContribute?.text =
context?.getString(R.string.layout_dialog_room_pk_finish_07, it.amount.toString())
?: ""
@@ -66,7 +61,7 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
}
roomPkBean.crRank.getOrNull(0)?.let {
binding?.tvNickCharm?.text = it.nick.subAndReplaceDot(7)
binding?.tvNickCharm?.text = it.nick
binding?.tvValueCharm?.text =
context?.getString(R.string.layout_activity_jewel_09, it.amount?.toString()) ?: ""
ImageLoadUtils.loadImage(
@@ -79,25 +74,13 @@ class RoomPkFinishDialog : BaseDialog<DialogRoomPkFinishBinding>() {
when (roomPkBean.winUid) {
0L -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_719cea_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_deuce)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_deuce)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_deuce)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_deuce)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_draw)
}
roomPkBean.cUid -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_edbf89_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_win)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_win)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_win)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_win)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_win)
}
else -> {
binding?.viewBg?.setBackgroundResource(R.drawable.bg_bfabf6_radius_10)
binding?.clRoot?.setBackgroundResource(R.drawable.bg_room_pk_finish_failed)
binding?.viewContribute?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_failed)
binding?.viewCharm?.setBackgroundResource(R.drawable.bg_room_pk_finish_rank_failed)
binding?.ivClose?.setImageResource(R.drawable.ic_room_pk_finish_close_failed)
binding?.ivStatus?.setImageResource(R.drawable.room_pk_result_fail)
}
}

View File

@@ -9,7 +9,6 @@ import com.chwl.app.databinding.DialogRoomPkReceivedBinding
import com.chwl.core.im.custom.bean.RoomPkBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.anotherroompk.RoomPKModel
import com.chwl.core.utils.extension.ifNotNullOrEmpty
import com.chwl.core.utils.extension.subAndReplaceDot
import com.chwl.core.utils.extension.toast
import io.reactivex.Observable
@@ -37,12 +36,20 @@ class RoomPkReceivedDialog : BaseDialog<DialogRoomPkReceivedBinding>() {
@SuppressLint("CheckResult")
override fun init() {
binding?.tvNick?.text = pkBean.inviteRoomTitle.subAndReplaceDot(7)
binding?.tvNick?.text = pkBean.inviteRoomTitle
binding?.tvTime?.text = "${pkBean.pkDuration}${getString(R.string.layout_activity_room_pk_create_010)}"
pkBean.pkDesc.ifNotNullOrEmpty {
binding?.tvDescTitle?.isVisible = true
binding?.tvDesc?.isVisible = true
binding?.tvDesc?.text = it
val height: Int
if (pkBean.pkDesc.isNullOrEmpty()) {
binding?.groupDesc?.isVisible = false
height = resources.getDimensionPixelOffset(R.dimen.dp_192)
} else {
binding?.tvDesc?.text = pkBean.pkDesc
binding?.groupDesc?.isVisible = true
height = resources.getDimensionPixelOffset(R.dimen.dp_211)
}
binding?.layoutContent?.let {
it.layoutParams.height = height
it.requestLayout()
}
disposable = Observable.intervalRange(0, 10, 0, 1, TimeUnit.SECONDS)
.compose(bindToLifecycle())

View File

@@ -1,297 +0,0 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.app.ui.widget.dialog.CommonTipDialog;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.manager.RoomEvent;
import com.chwl.core.room.pk.bean.PKMemberInfo;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.PKTeamMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.pk.event.PKTimeFinishEvent;
import com.chwl.core.room.pk.event.PKTimeTickEvent;
import com.chwl.core.room.pk.model.PkModel;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.library.utils.FormatUtils;
import com.chwl.library.utils.ResUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
/**
* @author jack
* @Description
* @Date 2019/1/3
*/
public class PKScoreBoardDialog extends BaseDialog {
private TextView tvPkVoteMode;
private View tvClose;
private ProgressBar pbScore;
private TextView tvRedTeamScore;
private TextView tvBlueTeamScore;
private TextView tvPkTimer;
private CircleImageView ivRedAvatar1;
private CircleImageView ivRedAvatar2;
private CircleImageView ivRedAvatar3;
private CircleImageView ivRedAvatar4;
private CircleImageView ivBlueAvatar1;
private CircleImageView ivBlueAvatar2;
private CircleImageView ivBlueAvatar3;
private CircleImageView ivBlueAvatar4;
private TextView tvRestart;
private final List<CircleImageView> redTeamAvatars = new ArrayList<>();
private final List<CircleImageView> blueTeamAvatars = new ArrayList<>();
private RoomPkData roomPkData;
private CompositeDisposable compositeDisposable;
public PKScoreBoardDialog(Context context) {
super(context, R.style.easy_dialog_style);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_pk_score_board);
tvPkVoteMode = (TextView) findViewById(R.id.tv_pk_vote_mode);
tvClose = findViewById(R.id.tv_close);
pbScore = (ProgressBar) findViewById(R.id.pb_score);
tvRedTeamScore = (TextView) findViewById(R.id.tv_red_team_score);
tvBlueTeamScore = (TextView) findViewById(R.id.tv_blue_team_score);
tvPkTimer = (TextView) findViewById(R.id.tv_pk_timer);
tvRestart = (TextView) findViewById(R.id.tv_restart);
ivRedAvatar1 = (CircleImageView) findViewById(R.id.iv_red_avatar_1);
ivRedAvatar2 = (CircleImageView) findViewById(R.id.iv_red_avatar_2);
ivRedAvatar3 = (CircleImageView) findViewById(R.id.iv_red_avatar_3);
ivRedAvatar4 = (CircleImageView) findViewById(R.id.iv_red_avatar_4);
ivBlueAvatar1 = (CircleImageView) findViewById(R.id.iv_blue_avatar_1);
ivBlueAvatar2 = (CircleImageView) findViewById(R.id.iv_blue_avatar_2);
ivBlueAvatar3 = (CircleImageView) findViewById(R.id.iv_blue_avatar_3);
ivBlueAvatar4 = (CircleImageView) findViewById(R.id.iv_blue_avatar_4);
redTeamAvatars.add(ivRedAvatar1);
redTeamAvatars.add(ivRedAvatar2);
redTeamAvatars.add(ivRedAvatar3);
redTeamAvatars.add(ivRedAvatar4);
blueTeamAvatars.add(ivBlueAvatar1);
blueTeamAvatars.add(ivBlueAvatar2);
blueTeamAvatars.add(ivBlueAvatar3);
blueTeamAvatars.add(ivBlueAvatar4);
init();
}
private void init() {
tvClose.setOnClickListener(v -> dismiss());
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData == null) {
return;
}
if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_GIFT) {
tvPkVoteMode.setText(getContext().getResources().getString(R.string.vote_type_gift_value));
} else if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_PERSON) {
tvPkVoteMode.setText(getContext().getResources().getString(R.string.vote_type_gift_member));
}
PKTeamInfo redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
for (int i = 0; i < redTeamAvatars.size(); i++) {
if (i < redTeam.getTeamMembers().size()) {
redTeamAvatars.get(i).setVisibility(View.VISIBLE);
PKTeamMember pkTeamMember = redTeam.getTeamMembers().get(i);
PKMemberInfo pkMemberInfo = findPKMemberInfo(pkTeamMember.getUid());
if (pkMemberInfo == null || pkMemberInfo.getUserInfo() == null) {
continue;
}
GlideApp.with(redTeamAvatars.get(i))
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(redTeamAvatars.get(i));
} else {
redTeamAvatars.get(i).setVisibility(View.GONE);
}
}
PKTeamInfo blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
for (int i = 0; i < blueTeamAvatars.size(); i++) {
if (i < blueTeam.getTeamMembers().size()) {
blueTeamAvatars.get(i).setVisibility(View.VISIBLE);
PKTeamMember pkTeamMember = blueTeam.getTeamMembers().get(i);
PKMemberInfo pkMemberInfo = findPKMemberInfo(pkTeamMember.getUid());
if (pkMemberInfo == null || pkMemberInfo.getUserInfo() == null) {
continue;
}
GlideApp.with(blueTeamAvatars.get(i))
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(blueTeamAvatars.get(i));
} else {
blueTeamAvatars.get(i).setVisibility(View.GONE);
}
}
if (AvRoomDataManager.get().isManager() && !SuperAdminUtil.isSuperAdmin()) {
tvRestart.setVisibility(View.VISIBLE);
tvRestart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (PkModel.get().getCurPkInfo() == null) {
toast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_01));
dismiss();
return;
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
toast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_02));
dismiss();
return;
}
CommonTipDialog tipDialog = new CommonTipDialog(getContext());
tipDialog.setTipMsg(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_03) +
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_04));
tipDialog.setOnActionListener(
new CommonTipDialog.OnActionListener() {
@Override
public void onOk() {
PkModel.get().toPKAgain().subscribe(new SingleObserver<String>() {
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onSuccess(String s) {
dismiss();
}
@Override
public void onError(Throwable e) {
toast(e.getMessage());
}
});
}
}
);
tipDialog.show();
}
});
} else {
tvRestart.setVisibility(View.GONE);
tvRestart.setOnClickListener(null);
}
updateTime();
onPKDataUpdateEvent(null);
}
private PKMemberInfo findPKMemberInfo(String account) {
for (PKMemberInfo pkMemberInfo : PkModel.get().getPkMemberInfoList()) {
if (String.valueOf(pkMemberInfo.getUserInfo().getUid()).equals(account)) {
return pkMemberInfo;
}
}
return null;
}
private void updateTime() {
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData == null) {
return;
}
long pkTimeUntilEnd = roomPkData.getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format("%1$02d:%2$02d", pkTimeUntilEnd / 60, pkTimeUntilEnd % 60));
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
compositeDisposable = new CompositeDisposable();
compositeDisposable.add(IMNetEaseManager.get().getChatRoomEventObservable()
.subscribe(this::onReceiveRoomEvent));
}
private void onReceiveRoomEvent(RoomEvent roomEvent) {
int event = roomEvent.getEvent();
switch (event) {
case RoomEvent.PK_INFO_UPDATE:
roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData != null && (roomPkData.getPkStatus() == RoomPkData.PK_STATUS_BEFORE_PK ||
roomPkData.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK)) {
dismiss();
}
break;
}
}
@Override
protected void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
compositeDisposable.dispose();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
if (PkModel.get().getCurPkInfo() == null
|| PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
dismiss();
return;
}
PKTeamInfo redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
PKTeamInfo blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (redTeam == null || blueTeam == null) {
return;
}
long totalScore = redTeam.getScore() + blueTeam.getScore();
if (totalScore > 0) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeam.getScore()));
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeam.getScore()));
int percent = (int) ((float) redTeam.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeTickEvent(PKTimeTickEvent event) {
updateTime();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeFinishEvent(PKTimeFinishEvent event) {
tvPkTimer.setText("00:00");
}
}

View File

@@ -244,12 +244,12 @@ class RoomGameplayDialog :
private fun getLocalList(): MutableList<RoomGameplayItem> {
val list = ArrayList<RoomGameplayItem>()
// getPkItem()?.let {
// list.add(it)
// }
// getRoomPkItem()?.let {
// list.add(it)
// }
getPkItem()?.let {
list.add(it)
}
getRoomPkItem()?.let {
list.add(it)
}
// getSingleRoomPkItem()?.let {
// list.add(it)
// }
@@ -277,7 +277,7 @@ class RoomGameplayDialog :
R.string.room_PK_mode
)
val icon =
if (AvRoomDataManager.get().isOpenPKMode) R.drawable.ic_room_opt_op_pk else R.drawable.ic_room_opt_in_pk
if (AvRoomDataManager.get().isOpenPKMode) R.drawable.room_gameplay_ic_team_pk else R.drawable.room_gameplay_ic_team_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01))
@@ -317,7 +317,7 @@ class RoomGameplayDialog :
R.string.avroom_dialog_roomoperationdialog_04
)
val icon =
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.ic_room_opt_another_pk_in else R.drawable.ic_room_opt_another_pk_open
if (AvRoomDataManager.get().isOpenAnotherPKMode) R.drawable.room_gameplay_ic_room_pk else R.drawable.room_gameplay_ic_room_pk
return RoomGameplayItem.CustomItem(str, icon) { dialog, item ->
if (AvRoomDataManager.get().isDatingMode) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05))

View File

@@ -115,8 +115,8 @@ public class RoomOperationDialog extends BottomSheetDialog {
optAdapter = new OptAdapter(context, null);
addRoomAlbum(optAdapter);
addDatingAction(optAdapter);
addPKAction(optAdapter);
addRoomPKAction(optAdapter);
// addPKAction(optAdapter);
// addRoomPKAction(optAdapter);
addSingleRoomPKAction(optAdapter);
addSendBroadcastAction(optAdapter);
// addInviteFansOptAdapter();

View File

@@ -1,14 +1,13 @@
package com.chwl.app.avroom.dialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
@@ -17,18 +16,16 @@ import androidx.recyclerview.widget.RecyclerView;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.app.databinding.RoomTeamPkResultDialogBinding;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.library.common.util.Utils;
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.PKTeamMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.library.utils.FormatUtils;
import com.chwl.library.utils.ResUtil;
import com.netease.nim.uikit.support.glide.GlideApp;
import java.util.ArrayList;
import java.util.List;
@@ -40,19 +37,14 @@ import lombok.Data;
* @Description
* @Date 2019/1/4
*/
public class PKResultDialog extends BaseDialog {
public class RoomTeamPKResultDialog extends BaseDialog {
private final static int TEAM_RED = PKTeamInfo.TEAM_RED;
private final static int TEAM_BLUE = PKTeamInfo.TEAM_BLUE;
private final static int PK_RESULT_VICTORY = 1;
private final static int PK_RESULT_FAIL = -1;
private final static int PK_RESULT_TIE = 0;
private LinearLayout llGuardianName;
private LinearLayout llGuardianValue;
private LinearLayout llPkMember;
private LinearLayout llScore;
private ImageView ivResultBottom;
private RoomTeamPkResultDialogBinding binding;
private ImageView ivResultTop;
private RecyclerView rvList;
private TextView tvScore;
@@ -60,9 +52,6 @@ public class PKResultDialog extends BaseDialog {
private TextView tvGuardianValue;
private TextView tvTeamStatus;
private TextView tvSeeOtherTeam;
private TextView tvTeamLose;
private LinearLayout llResultTie;
private TextView tvTieScore;
private int pkResult = PK_RESULT_TIE;
private boolean isShowOpponent = false;//是否在显示对手
@@ -70,8 +59,9 @@ public class PKResultDialog extends BaseDialog {
private RoomPkData roomPkData;
private PKTeamInfo teamInfo;
public PKResultDialog(Context context, RoomPkData roomPkData) {
public RoomTeamPKResultDialog(Context context, RoomPkData roomPkData) {
super(context, R.style.full_screen_dialog);
binding = RoomTeamPkResultDialogBinding.inflate(LayoutInflater.from(getContext()));
Window window = getWindow();
if (window != null) {
WindowManager.LayoutParams lps = window.getAttributes();
@@ -87,31 +77,20 @@ public class PKResultDialog extends BaseDialog {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setCanceledOnTouchOutside(true);
setContentView(R.layout.dialog_pk_result);
setContentView(binding.getRoot());
llPkMember = (LinearLayout) findViewById(R.id.ll_pk_member);
llScore = (LinearLayout) findViewById(R.id.ll_score);
ivResultBottom = (ImageView) findViewById(R.id.iv_result_bottom);
ivResultTop = (ImageView) findViewById(R.id.iv_result_top);
rvList = (RecyclerView) findViewById(R.id.rv_list);
rvList = (RecyclerView) findViewById(R.id.recycler_view);
tvScore = (TextView) findViewById(R.id.tv_score);
llGuardianName = (LinearLayout) findViewById(R.id.ll_guardian_name);
llGuardianValue = (LinearLayout) findViewById(R.id.ll_guardian_value);
tvGuardianName = (TextView) findViewById(R.id.tv_guardian_name);
tvGuardianValue = (TextView) findViewById(R.id.tv_guardian_value);
tvTeamStatus = (TextView) findViewById(R.id.tv_team_status);
tvSeeOtherTeam = (TextView) findViewById(R.id.tv_see_other_team);
tvTeamLose = (TextView) findViewById(R.id.tv_team_lose);
llResultTie = (LinearLayout) findViewById(R.id.ll_result_tie);
tvTieScore = (TextView) findViewById(R.id.tv_tie_score);
adapter = new PkResultMemberAdapter(null);
rvList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
rvList.addItemDecoration(new ColorDecoration(Color.TRANSPARENT, Utils.dip2px(getContext(), 10), 0, true));
rvList.setAdapter(adapter);
tvSeeOtherTeam.setOnClickListener(v -> {
@@ -130,28 +109,29 @@ public class PKResultDialog extends BaseDialog {
return;
}
if (roomPkData.getVoteMode() == RoomPkData.VOTE_MODE_PERSON) {
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
}
int result = roomPkData.getResult();
int teamId = findTeamIdByAccount(String.valueOf(AuthModel.get().getCurrentUid()));
if (teamId == PKTeamInfo.TEAM_NONE) {
//观众
if (result == RoomPkData.PK_RESULT_DRAW) {
teamInfo = findTeamByTeamId(PKTeamInfo.TEAM_RED);
pkResult = PK_RESULT_TIE;
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_01));
llPkMember.setVisibility(View.GONE);
llScore.setVisibility(View.GONE);
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
llResultTie.setVisibility(View.VISIBLE);
tvTieScore.setText(FormatUtils.formatPKValue(roomPkData.getTeams().get(0).getScore()));
refreshBgByStatus();
if (teamInfo != null) {
tvScore.setText(teamInfo.getScore() + "");
} else {
tvScore.setText("0");
}
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
refreshView(pkResult, teamInfo);
} else {
pkResult = PK_RESULT_VICTORY;
teamInfo = findTeamByTeamId(result);
refreshView(pkResult, teamInfo);
}
} else {
@@ -161,10 +141,13 @@ public class PKResultDialog extends BaseDialog {
if (result == RoomPkData.PK_RESULT_DRAW) {
pkResult = PK_RESULT_TIE;
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_02));
tvScore.setText(teamInfo.getScore() + "");
llGuardianName.setVisibility(View.GONE);
llGuardianValue.setVisibility(View.GONE);
tvTeamLose.setVisibility(View.GONE);
if (teamInfo != null) {
tvScore.setText(teamInfo.getScore() + "");
} else {
tvScore.setText("0");
}
binding.groupGuardianName.setVisibility(View.GONE);
binding.groupGuardianValue.setVisibility(View.GONE);
refreshView(pkResult, teamInfo);
} else {
@@ -175,7 +158,7 @@ public class PKResultDialog extends BaseDialog {
}
private void showTeamMembers(PKTeamInfo teamInfo) {
private void showTeamMembers(int pkResult, PKTeamInfo teamInfo) {
List<PkResultMember> pkResultMembers = new ArrayList<>();
for (PKTeamMember pkTeamMember : teamInfo.getTeamMembers()) {
PkResultMember resultMember = new PkResultMember();
@@ -184,22 +167,29 @@ public class PKResultDialog extends BaseDialog {
resultMember.isMVP = pkTeamMember.getUid().equals(teamInfo.getMvp());
pkResultMembers.add(resultMember);
}
if (pkResult == PK_RESULT_VICTORY) {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_win);
} else if (pkResult == PK_RESULT_FAIL) {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_fail);
} else {
adapter.setAvatarBg(R.drawable.room_team_pk_result_avatar_bg_draw);
}
adapter.setNewData(pkResultMembers);
}
private void showColorByTeam(PKTeamInfo pkTeamInfo) {
if (pkTeamInfo.getTeam() == PKTeamInfo.TEAM_RED) {
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_FF396F));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_FF4B81));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
} else if (pkTeamInfo.getTeam() == PKTeamInfo.TEAM_BLUE) {
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_59B9FB));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_FD4D72));
tvScore.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvGuardianName.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvGuardianValue.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvTeamStatus.setTextColor(getContext().getResources().getColor(R.color.color_73B8FF));
tvSeeOtherTeam.setTextColor(getContext().getResources().getColor(R.color.color_FF4B81));
} else {
//未知
}
@@ -207,14 +197,11 @@ public class PKResultDialog extends BaseDialog {
private void refreshBgByStatus() {
if (pkResult == PK_RESULT_VICTORY) {
ivResultTop.setImageResource(R.drawable.pk_result_victory_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_victory_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_win);
} else if (pkResult == PK_RESULT_FAIL) {
ivResultTop.setImageResource(R.drawable.pk_result_fail_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_fail_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_fail);
} else if (pkResult == PK_RESULT_TIE) {
ivResultTop.setImageResource(R.drawable.pk_result_tie_top);
ivResultBottom.setImageResource(R.mipmap.pk_result_tie_bottom);
ivResultTop.setImageResource(R.drawable.room_team_pk_result_top_draw);
}
}
@@ -268,7 +255,7 @@ public class PKResultDialog extends BaseDialog {
private void refreshView(int pkResult, PKTeamInfo teamInfo) {
refreshBgByStatus();
showTeamMembers(teamInfo);
showTeamMembers(pkResult, teamInfo);
showColorByTeam(teamInfo);
tvScore.setText(FormatUtils.formatPKValue(teamInfo.getScore()));
@@ -291,7 +278,6 @@ public class PKResultDialog extends BaseDialog {
if (pkResult == PK_RESULT_VICTORY) {
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_06));
} else if (pkResult == PK_RESULT_FAIL) {
tvTeamLose.setVisibility(View.VISIBLE);
}
tvSeeOtherTeam.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_07));
} else {
@@ -305,7 +291,6 @@ public class PKResultDialog extends BaseDialog {
if (pkResult == PK_RESULT_VICTORY) {
tvTeamStatus.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_011));
} else if (pkResult == PK_RESULT_FAIL) {
tvTeamLose.setVisibility(View.VISIBLE);
}
tvSeeOtherTeam.setText(ResUtil.getString(R.string.avroom_dialog_pkresultdialog_012));
} else {
@@ -327,20 +312,26 @@ public class PKResultDialog extends BaseDialog {
class PkResultMemberAdapter extends BaseQuickAdapter<PkResultMember, BaseViewHolder> {
private int avatarBgResId = R.drawable.room_team_pk_result_avatar_bg_win;
public void setAvatarBg(int redId) {
this.avatarBgResId = redId;
}
public PkResultMemberAdapter(@Nullable List<PkResultMember> data) {
super(R.layout.item_pk_result_member_rv, data);
super(R.layout.room_team_pk_result_item, data);
}
@Override
protected void convert(BaseViewHolder helper, PkResultMember item) {
CircleImageView avatar = helper.getView(R.id.civ_avatar);
ImageView avatarBg = helper.getView(R.id.iv_avatar_bg);
avatarBg.setImageResource(avatarBgResId);
ImageView avatar = helper.getView(R.id.iv_avatar);
GlideApp.with(avatar)
.load(item.avatar)
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(avatar);
helper.setVisible(R.id.iv_mvp_mark, item.isMVP);
}
}

View File

@@ -0,0 +1,325 @@
package com.chwl.app.avroom.dialog
import android.text.TextUtils
import android.view.WindowManager
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.base.BaseDialog
import com.chwl.app.databinding.RoomTeamPkDialogBinding
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.widget.dialog.CommonTipDialog
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.pk.bean.PKTeamInfo
import com.chwl.core.room.pk.bean.RoomPKInvitedUpMicMember
import com.chwl.core.room.pk.bean.RoomPkData
import com.chwl.core.room.pk.event.PKDataUpdateEvent
import com.chwl.core.room.pk.event.PKTimeFinishEvent
import com.chwl.core.room.pk.event.PKTimeTickEvent
import com.chwl.core.room.pk.model.PkModel
import com.chwl.library.utils.FormatUtils
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
import io.reactivex.SingleObserver
import io.reactivex.disposables.CompositeDisposable
import io.reactivex.disposables.Disposable
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
import java.util.Locale
class RoomTeamPkDialog : BaseDialog<RoomTeamPkDialogBinding>() {
private var compositeDisposable: CompositeDisposable? = null
private var onActionListener: OnActionListener? = null
override var width = WindowManager.LayoutParams.MATCH_PARENT
override fun init() {
binding.layoutRoot.setOnClickListener {
dismissAllowingStateLoss()
}
binding.userListBlue.showBlueStyle()
binding.ivClose.setOnClickListener {
dismissAllowingStateLoss()
}
binding.tvNext.setOnClickListener {
if (PkModel.get().isFighting) {
onRestartClick()
} else {
onStartClick()
}
}
binding.ivAvatarRed.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_RED)
}
}
binding.ivAvatarBlue.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_BLUE)
}
}
binding.userListRed.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_RED)
}
}
binding.userListBlue.setOnClickListener {
if (!PkModel.get().isFighting) {
onSeatClick(PKTeamInfo.TEAM_BLUE)
}
}
updateView()
}
override fun onStart() {
super.onStart()
EventBus.getDefault().register(this)
compositeDisposable = CompositeDisposable()
}
override fun onStop() {
super.onStop()
EventBus.getDefault().unregister(this)
compositeDisposable?.dispose()
}
fun setOnActionListener(onActionListener: OnActionListener?) {
this.onActionListener = onActionListener
}
fun updateView() {
if (_binding == null) {
return
}
updateTeamUserList()
updateTime()
updateProgress()
if (PkModel.get().isFighting) {
binding.tvNext.setText(R.string.pk_restart)
} else {
binding.tvNext.setText(R.string.start_pk)
}
updateManageButtonVisible(AvRoomDataManager.get().isManager)
}
private fun updateTeamUserList() {
val pkMemberInfoList = PkModel.get().pkMemberInfoList
val redList =
pkMemberInfoList.filter { it.teamId == PKTeamInfo.TEAM_RED }.take(4).mapNotNull {
it.userInfo
}
val blueList =
pkMemberInfoList.filter { it.teamId == PKTeamInfo.TEAM_BLUE }.take(4).mapNotNull {
it.userInfo
}
binding.userListRed.updateData(redList.drop(1).map {
it.avatar
})
binding.userListBlue.updateData(blueList.drop(1).map {
it.avatar
})
binding.ivAvatarRed.loadAvatar(redList.firstOrNull()?.avatar)
binding.ivAvatarBlue.loadAvatar(blueList.firstOrNull()?.avatar)
}
private fun updateManageButtonVisible(isVisible: Boolean) {
val dimensionRatio: String
if (isVisible) {
binding.ivBg.setImageResource(R.drawable.room_team_pk_bg)
binding.tvNext.isVisible = true
dimensionRatio = "309:379"
} else {
binding.ivBg.setImageResource(R.drawable.room_team_pk_bg_no_manage)
binding.tvNext.isVisible = false
dimensionRatio = "309:324"
}
val params = binding.layoutContent.layoutParams as ConstraintLayout.LayoutParams
params.dimensionRatio = dimensionRatio
binding.layoutContent.layoutParams = params
}
private fun updateTime() {
if (_binding == null) {
return
}
val roomPkData = PkModel.get().curPkInfo
val pkTimeUntilEnd: Long
if (roomPkData?.pkStatus != RoomPkData.PK_STATUS_IN_PK) {
pkTimeUntilEnd = roomPkData?.duration ?: 0
} else {
pkTimeUntilEnd = roomPkData.curPkTimeUntilEnd
}
binding.tvTime.text =
String.format(Locale.ENGLISH, "%1$02d:%2$02d", pkTimeUntilEnd / 60, pkTimeUntilEnd % 60)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKDataUpdateEvent(event: PKDataUpdateEvent) {
updateProgress()
if (event.type == PKDataUpdateEvent.TYPE_RESULT) {
safeDismiss()
}
}
private fun updateProgress() {
if (_binding == null) {
return
}
val roomPkData = PkModel.get().curPkInfo
if (roomPkData?.pkStatus != RoomPkData.PK_STATUS_IN_PK) {
updateProgress(0, 0)
return
}
val redTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED)
val blueTeam = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE)
if (redTeam == null || blueTeam == null) {
updateProgress(0, 0)
return
}
updateProgress(redTeam.score, blueTeam.score)
}
private fun updateProgress(redScore: Long, blueScore: Long) {
val totalScore = redScore + blueScore
if (totalScore > 0) {
binding.tvScoreRed.text = FormatUtils.formatPKValue(redScore)
binding.tvScoreBlue.text = FormatUtils.formatPKValue(blueScore)
updateProgress(redScore.toFloat() / totalScore.toFloat())
} else {
updateProgress(0.5f)
}
}
private fun updateProgress(percent: Float) {
binding.pbScore.post {
binding.pbScore.progress = (percent * 100).toInt()
val progress = binding.pbScore.width * (percent)
var bias =
(progress - binding.svgaHot.width / 2f) / (binding.pbScore.width - binding.svgaHot.width)
val layoutParams = binding.svgaHot.layoutParams as ConstraintLayout.LayoutParams
bias = 1f.coerceAtMost(bias)
bias = 0f.coerceAtLeast(bias)
layoutParams.horizontalBias = bias
binding.svgaHot.layoutParams = layoutParams
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKTimeTickEvent(event: PKTimeTickEvent?) {
updateTime()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onPKTimeFinishEvent(event: PKTimeFinishEvent?) {
updateView()
}
private fun onSeatClick(teamType: Int) {
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager) {
//已经排麦不操作
if (!PkModel.get().pkMemberInfoList.isNullOrEmpty() && AvRoomDataManager.get().myIsInQueue) {
SingleToastUtil.showToastShort(ResUtil.getString(R.string.avroom_widget_pkboardview_03))
return
}
onActionListener?.onShowPKMicQueueDialog()
return
}
//添加红队人员
val selectDialog =
PKSelectPeopleDialog(context, teamType, PkModel.get().pkMemberInfoList)
selectDialog.setOnSelectPeopleListener { micEntityList -> //更新队伍,麦序,显示头像
val upMicMemberList: MutableList<RoomPKInvitedUpMicMember> =
ArrayList()
for (micEntity in micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue
}
val roomPKInvitedUpMicMember = RoomPKInvitedUpMicMember()
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.groupType = teamType
} else {
if (TextUtils.isEmpty(micEntity.uid)) {
roomPKInvitedUpMicMember.groupType = PKTeamInfo.TEAM_NONE
} else {
val teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid)
roomPKInvitedUpMicMember.groupType =
if (teamId == teamType) PKTeamInfo.TEAM_NONE else teamId
}
}
roomPKInvitedUpMicMember.uid = micEntity.uid
roomPKInvitedUpMicMember.nick = micEntity.nick
val micQueue = AvRoomDataManager.get().mMicQueueMemberMap
//设置坑位的位置
for (i in 0 until micQueue.size()) {
val key = micQueue.keyAt(i)
val roomQueueInfo = micQueue[key]
if (roomQueueInfo.mChatRoomMember != null && roomQueueInfo.mChatRoomMember.account == micEntity.uid
) {
roomPKInvitedUpMicMember.position = key
}
}
upMicMemberList.add(roomPKInvitedUpMicMember)
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError { throwable: Throwable ->
SingleToastUtil.showToastShort(
throwable.message
)
}
.subscribe()
}
selectDialog.show()
}
private fun onStartClick() {
onActionListener?.onBeginPK()
}
private fun onRestartClick() {
if (PkModel.get().curPkInfo == null) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_01))
dismissAllowingStateLoss()
return
}
if (PkModel.get().curPkInfo?.pkStatus == RoomPkData.PK_STATUS_AFTER_PK) {
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_02))
dismissAllowingStateLoss()
return
}
val tipDialog = CommonTipDialog(context)
tipDialog.setTipMsg(
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_03) +
ResUtil.getString(R.string.avroom_dialog_pkscoreboarddialog_04)
)
tipDialog.setOnActionListener(
object : CommonTipDialog.OnActionListener {
override fun onOk() {
PkModel.get().toPKAgain().subscribe(object : SingleObserver<String?> {
override fun onSubscribe(d: Disposable) {
compositeDisposable?.add(d)
}
override fun onSuccess(t: String) {
dismissAllowingStateLoss()
}
override fun onError(e: Throwable) {
SingleToastUtil.showToast(e.message)
}
})
}
}
)
tipDialog.show()
}
interface OnActionListener {
fun onBeginPK()
fun onShowPKMicQueueDialog()
}
}

View File

@@ -18,6 +18,7 @@ import com.chwl.app.avroom.game.OnGameStatusChangeListener
import com.chwl.app.avroom.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.GameRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.view.IGameRoomView
import com.chwl.app.databinding.FragmentGameRoomBinding
import com.chwl.app.home.helper.OpenRoomHelper
@@ -271,5 +272,6 @@ class GameRoomFragment : BaseRoomFragment<IGameRoomView?, GameRoomPresenter?>(),
super.initWidget()
registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
}

View File

@@ -8,10 +8,14 @@ import android.view.View;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPkDialog;
import com.chwl.app.avroom.headline.RoomHeadlineWidget;
import com.chwl.app.avroom.online.RoomOnlineWidget;
import com.chwl.app.avroom.rank.RoomRankNumberWidget;
import com.chwl.app.music.widget.MusicPlayerView;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
@@ -25,12 +29,9 @@ import com.chwl.app.avroom.anotherroompk.RoomPkForceFinishDialog;
import com.chwl.app.avroom.anotherroompk.RoomPkReceivedDialog;
import com.chwl.app.avroom.dialog.MicQueueDialog;
import com.chwl.app.avroom.dialog.PKMicQueueDialog;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.PKScoreBoardDialog;
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
import com.chwl.app.avroom.presenter.HomePartyPresenter;
import com.chwl.app.avroom.view.IHomePartyView;
import com.chwl.app.avroom.widget.PKBoardView;
import com.chwl.app.base.BaseMvpActivity;
import com.chwl.app.common.widget.dialog.DialogManager;
import com.chwl.app.databinding.FragmentAvRoomGameBinding;
@@ -87,10 +88,10 @@ import io.reactivex.disposables.Disposable;
*/
@CreatePresenter(HomePartyPresenter.class)
public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, HomePartyPresenter> implements
IHomePartyView, PKBoardView.OnActionListener {
IHomePartyView, RoomTeamPkDialog.OnActionListener {
private long myUid;
private PKBoardView pkBoardView;
private RoomTeamPkDialog teamPkDialog;
private Disposable mDisposable;
private FragmentAvRoomGameBinding gameBinding;
/**
@@ -121,8 +122,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setKtvModel(false);
gameBinding.playTogether.setVisibility(View.GONE);
microView = mView.findViewById(R.id.micro_view);
pkBoardView = mView.findViewById(R.id.layout_pk_board);
pkBoardView.setOnActionListener(this);
gameBinding.ivTeamPk.setOnClickListener(this);
}
@Override
@@ -136,6 +136,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
super.initWidget();
registerWidget(RoomOnlineWidget.class.getSimpleName(), gameBinding.onlineWidget);
registerWidget(RoomHeadlineWidget.class.getSimpleName(), gameBinding.headlineWidget);
registerWidget(RoomRankNumberWidget.class.getSimpleName(), gameBinding.rankNumberWidget);
}
@SuppressLint("CheckResult")
@@ -257,8 +258,12 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
//PK 开始弹出大记分板
if (PkModel.get().getCurPkInfo() != null
&& PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_IN_PK) {
PKScoreBoardDialog pkScoreBoardDialog = new PKScoreBoardDialog(getContext());
pkScoreBoardDialog.show();
showTeamPkDialog();
}
break;
case RoomEvent.PK_CREATE:
if (PkModel.get().getCurPkInfo() != null) {
showTeamPkDialog();
}
break;
case RoomEvent.ROOM_PK_INVITE:
@@ -345,14 +350,14 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private void updatePkScoreBoard() {
if (AvRoomDataManager.get().isOpenPKMode()) {
if (pkBoardView.getVisibility() == View.GONE) {
if (gameBinding.ivTeamPk.getVisibility() == View.GONE) {
// 通知更新背景
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(true);
EventBus.getDefault().post(pkStateEvent);
showTeamPkDialog();
}
pkBoardView.setVisibility(View.VISIBLE);
gameBinding.ivTeamPk.setVisibility(View.VISIBLE);
//这里通过接口获取PK 详情 更新pk 记分板
if (PkModel.get().getCurPkInfo() == null) {
PkModel.get().loadPKDataByRoomId(
@@ -366,7 +371,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
@Override
public void onSuccess(RoomPkData roomPkData) {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
@Override
@@ -375,7 +382,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
});
} else {
pkBoardView.updateView();
if (teamPkDialog != null) {
teamPkDialog.updateView();
}
}
//取消掉正在进行的龙珠
if (AvRoomDataManager.get().haveStartDragon) {
@@ -387,23 +396,41 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
} else {
if (pkBoardView.getVisibility() == View.VISIBLE) {
if (gameBinding.ivTeamPk.getVisibility() == View.VISIBLE) {
// 通知更新bg
PKStateEvent pkStateEvent = new PKStateEvent();
pkStateEvent.setCreate(false);
EventBus.getDefault().post(pkStateEvent);
}
pkBoardView.setVisibility(View.GONE);
}
if (SuperAdminUtil.isSuperAdmin()) {
pkBoardView.setVisibility(View.GONE);
gameBinding.ivTeamPk.setVisibility(View.GONE);
dismissTeamPkDialog();
}
//龙珠相关界面设置
setDragonView();
}
private void showTeamPkDialog() {
if (getActivity() == null) {
return;
}
if (teamPkDialog != null) {
if (teamPkDialog.isResumed()) {
return;
}
dismissTeamPkDialog();
}
teamPkDialog = new RoomTeamPkDialog();
teamPkDialog.setOnActionListener(this);
teamPkDialog.safeShow(requireActivity().getSupportFragmentManager(), this, null);
}
private void dismissTeamPkDialog() {
if (teamPkDialog != null) {
teamPkDialog.safeDismiss();
teamPkDialog = null;
}
}
private void cleanDragonBar() {
LogUtil.e("cleanDragonBar");
@@ -530,6 +557,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
mDisposable.dispose();
mDisposable = null;
}
dismissTeamPkDialog();
super.onDestroy();
}
@@ -565,6 +593,9 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
public void onClick(View v) {
super.onClick(v);
switch (v.getId()) {
case R.id.iv_team_pk:
showTeamPkDialog();
break;
case R.id.play_together:
if (!DynamicFaceModel.get().isShowingFace()) {
FaceInfo faceInfo = DynamicFaceModel.get().getPlayTogetherFace();
@@ -690,12 +721,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
}
@Override
public void onEndPK() {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), PkModel.get().getCurPkInfo());
pkResultDialog.show();
}
@Override
public void onShowPKMicQueueDialog() {
if (PkModel.get().isFighting()) {
@@ -1024,4 +1049,16 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
super.onInitMusicPlayerView(view);
view.linkIconView(gameBinding.ivMusic, gameBinding.ivMusic);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
RoomPkData data = PkModel.get().getCurPkInfo();
if (data == null) {
return;
}
if (event.getType() == PKDataUpdateEvent.TYPE_RESULT && data.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
RoomTeamPKResultDialog teamPkResultDialog = new RoomTeamPKResultDialog(getContext(), PkModel.get().getCurPkInfo());
teamPkResultDialog.show();
}
}
}

View File

@@ -16,6 +16,7 @@ import com.chwl.app.avroom.dialog.RequestUpMicDialog
import com.chwl.app.avroom.headline.RoomHeadlineWidget
import com.chwl.app.avroom.online.RoomOnlineWidget
import com.chwl.app.avroom.presenter.SingleRoomPresenter
import com.chwl.app.avroom.rank.RoomRankNumberWidget
import com.chwl.app.avroom.singleroompk.SingleRoomPkFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkForceFinishDialog
import com.chwl.app.avroom.singleroompk.SingleRoomPkReceivedDialog
@@ -238,6 +239,7 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
super.initWidget()
registerWidget(RoomOnlineWidget::class.java.simpleName, gameBinding.onlineWidget)
registerWidget(RoomHeadlineWidget::class.java.simpleName, gameBinding.headlineWidget)
registerWidget(RoomRankNumberWidget::class.java.simpleName, gameBinding.rankNumberWidget)
}
override fun onInitMusicPlayerView(view: MusicPlayerView) {

View File

@@ -152,7 +152,7 @@ class RoomOnlineWidget : FrameLayoutRoomWidget, RoomWidget {
private fun startUpdateOnlineTask() {
getCompositeDisposable().add(Observable.interval(
0, 10, TimeUnit.SECONDS
0, 30, TimeUnit.SECONDS
).subscribe {
refreshData()
})

View File

@@ -32,7 +32,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.widget.OnMsgLongClickListener;
import com.chwl.app.avroom.widget.TemplateMessageAdapter;
import com.chwl.app.common.widget.CustomImageSpan;
@@ -50,7 +50,6 @@ import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.ObjectTypeHelper;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.DemoCache;
import com.chwl.core.XConstants;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
import com.chwl.core.decoration.car.bean.CarInfo;
@@ -90,6 +89,7 @@ import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessageExtension;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomNotificationAttachment;
import com.netease.nimlib.sdk.msg.attachment.ImageAttachment;
import com.netease.nimlib.sdk.msg.attachment.MsgAttachment;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.constant.NotificationType;
@@ -546,16 +546,20 @@ public class PublicChatMessageView extends FrameLayout {
setMsgNotification(chatRoomMessage, tvContent, baseViewHolder.getAdapterPosition());
setVIPMessageBackground(chatRoomMessage, tvContent);
} else if (chatRoomMessage.getMsgType() == MsgTypeEnum.custom) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
int first = attachment.getFirst();
int second = attachment.getSecond();
if (first == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED) {
if (second == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
setHeadlineMsg(chatRoomMessage, tvContent, attachment);
if (chatRoomMessage.getAttachment() != null && chatRoomMessage.getAttachment() instanceof CustomAttachment) {
CustomAttachment attachment = (CustomAttachment) chatRoomMessage.getAttachment();
int first = attachment.getFirst();
int second = attachment.getSecond();
if (first == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED) {
if (second == CustomAttachment.CUSTOM_MSG_HEADLINE_CHANGED_SUB) {
setHeadlineMsg(chatRoomMessage, tvContent, attachment);
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
tvContent.setText("");
}
}
} catch (UnsupportedOperationException e) {
@@ -563,6 +567,9 @@ public class PublicChatMessageView extends FrameLayout {
clearBackground(tvContent);
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
} catch (Exception e) {
clearBackground(tvContent);
tvContent.setText("");
}
}
@@ -830,7 +837,7 @@ public class PublicChatMessageView extends FrameLayout {
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MESS_SUB_ROOM_PK_RESULT) {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
RoomTeamPKResultDialog pkResultDialog = new RoomTeamPKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
pkResultDialog.show();
}
} else if (attachment instanceof RoomFollowOwnerAttachment2 && !AvRoomDataManager.get().isRoomFans) {

View File

@@ -0,0 +1,92 @@
package com.chwl.app.avroom.rank
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import androidx.databinding.DataBindingUtil
import com.chwl.core.support.room.FrameLayoutRoomWidget
import com.chwl.core.support.room.RoomWidget
import com.chwl.app.R
import com.chwl.app.databinding.RoomRankNumberWidgetBinding
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.im.custom.bean.RoomSerialValueChangedAttachment
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.library.utils.FormatUtils
import com.example.lib_utils.ktx.singleClick
/**
* 房间榜单入口
*/
class RoomRankNumberWidget : FrameLayoutRoomWidget, RoomWidget {
private val binding: RoomRankNumberWidgetBinding =
DataBindingUtil.inflate(
LayoutInflater.from(
context
), R.layout.room_rank_number_widget, this, true
)
constructor(context: Context) : super(context)
constructor(context: Context, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(
context,
attrs,
defStyleAttr
)
constructor(
context: Context,
attrs: AttributeSet?,
defStyleAttr: Int,
defStyleRes: Int
) : super(context, attrs, defStyleAttr, defStyleRes)
init {
this.singleClick {
DialogWebViewActivity.start(context, UriProvider.getRoomRanking())
}
}
override fun onInitialize(roomView: RoomView, roomContext: RoomContext) {
super.onInitialize(roomView, roomContext)
refreshData()
registerMemberChangedListener()
}
override fun onUnbindContext() {
super.onUnbindContext()
updateView(null)
}
private fun registerMemberChangedListener() {
getCompositeDisposable().add(IMNetEaseManager.get().chatRoomEventObservable.subscribe {
when (it.event) {
RoomEvent.SERIAL_VALUE_CHANGED -> {
val attachment =
it.chatRoomMessage.attachment as? RoomSerialValueChangedAttachment
attachment?.serialValue?.let {
updateView(attachment.serialValue)
}
}
}
})
}
private fun refreshData() {
val value = AvRoomDataManager.get().serialValue
updateView(value)
}
private fun updateView(value: Double?) {
if (value == null || value <= 0) {
binding.tvNumber.text = "0"
} else {
binding.tvNumber.text = FormatUtils.formatToShortKMHalfUp(value)
}
}
}

View File

@@ -29,12 +29,9 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
@@ -42,7 +39,6 @@ import android.util.AttributeSet;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
@@ -81,11 +77,9 @@ import com.chwl.app.sadmin.utils.SaAttachmentToMsgUtil;
import com.chwl.app.R;
import com.chwl.app.UIHelper;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.avroom.dialog.PKResultDialog;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
import com.chwl.app.avroom.room_album.UnlockRoomAlbumPhotoDialog;
import com.chwl.library.common.util.Utils;
import com.chwl.app.common.widget.CustomAutoWidthImageSpan;
import com.chwl.app.common.widget.CustomImageSpan;
import com.chwl.app.common.widget.OriginalDrawStatusClickSpan;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.utils.ImageLoadUtilsV2;
@@ -95,7 +89,6 @@ import com.chwl.app.ui.widget.RecyclerViewNoViewpagerScroll;
import com.chwl.app.ui.widget.UserInfoDialog;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.utils.RegexUtil;
import com.chwl.core.XConstants;
import com.chwl.core.DemoCache;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.bean.attachmsg.RoomQueueMsgAttachment;
@@ -162,7 +155,6 @@ import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMNetEaseManager;
import com.chwl.core.miniworld.bean.MiniWorldInWorldInfo;
import com.chwl.core.monsterhunting.bean.MonsterHuntingResult;
import com.chwl.core.monsterhunting.bean.MonsterProtocol;
import com.chwl.core.noble.bean.NobleInfo;
import com.chwl.core.noble.NobleUtil;
import com.chwl.core.praise.PraiseModel;
@@ -2919,7 +2911,7 @@ public class MessageView extends FrameLayout {
}
} else if (attachment.getFirst() == CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK) {
if (attachment.getSecond() == CustomAttachment.CUSTOM_MESS_SUB_ROOM_PK_RESULT) {
PKResultDialog pkResultDialog = new PKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
RoomTeamPKResultDialog pkResultDialog = new RoomTeamPKResultDialog(getContext(), ((RoomPkAttachment) attachment).getRoomPkData());
pkResultDialog.show();
}
} else if (attachment instanceof RoomFollowOwnerAttachment2 && !AvRoomDataManager.get().isRoomFans) {

View File

@@ -1,448 +0,0 @@
package com.chwl.app.avroom.widget;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.netease.nim.uikit.support.glide.GlideApp;
import com.chwl.app.R;
import com.chwl.app.avroom.dialog.PKScoreBoardDialog;
import com.chwl.app.avroom.dialog.PKSelectPeopleDialog;
import com.chwl.app.common.widget.CircleImageView;
import com.chwl.core.bean.RoomQueueInfo;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.room.pk.bean.PKMemberInfo;
import com.chwl.core.room.pk.bean.PKTeamInfo;
import com.chwl.core.room.pk.bean.RoomPKInvitedUpMicMember;
import com.chwl.core.room.pk.bean.RoomPkData;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.pk.event.PKTimeFinishEvent;
import com.chwl.core.room.pk.event.PKTimeTickEvent;
import com.chwl.core.room.pk.model.PkModel;
import com.chwl.library.utils.FormatUtils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.SingleToastUtil;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
/**
* @author jack
* @Description
* @Date 2019/1/8
*/
public class PKBoardView extends RelativeLayout implements View.OnClickListener {
public PKBoardView(Context context) {
super(context);
init();
}
public PKBoardView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PKBoardView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private View llPkScoreBoard;
private View rlRedTeamAddPeople;
private TextView tvRedTeamScore;
private View rlBlueTeamAddPeople;
private TextView tvBlueTeamScore;
private TextView tvPkTimer;
private CircleImageView civRedTeamMember1;
private CircleImageView civRedTeamMember2;
private CircleImageView civRedTeamMember3;
private CircleImageView civRedTeamMember4;
private CircleImageView ivAddRedTeamMember;
private CircleImageView civBlueTeamMember1;
private CircleImageView civBlueTeamMember2;
private CircleImageView civBlueTeamMember3;
private CircleImageView civBlueTeamMember4;
private CircleImageView ivAddBlueTeamMember;
private ProgressBar pbScore;
private ImageView ivPkBegin;
private final List<CircleImageView> civRedAvatars = new ArrayList<>();
private final List<CircleImageView> civBlueAvatars = new ArrayList<>();
private void init() {
inflate(getContext(), R.layout.layout_pk_board_view, this);
if (isInEditMode()) {
return;
}
llPkScoreBoard = findViewById(R.id.root_view);
rlRedTeamAddPeople = findViewById(R.id.fl_left);
tvRedTeamScore = this.findViewById(R.id.tv_red_team_score);
rlBlueTeamAddPeople = findViewById(R.id.fl_right);
tvBlueTeamScore = this.findViewById(R.id.tv_blue_team_score);
tvPkTimer = this.findViewById(R.id.tv_pk_timer);
pbScore = findViewById(R.id.pb_score);
ivPkBegin = findViewById(R.id.iv_pk_begin);
civRedTeamMember1 = findViewById(R.id.civ_red_team_member_1);
civRedTeamMember2 = findViewById(R.id.civ_red_team_member_2);
civRedTeamMember3 = findViewById(R.id.civ_red_team_member_3);
civRedTeamMember4 = findViewById(R.id.civ_red_team_member_4);
ivAddRedTeamMember = findViewById(R.id.iv_add_red_team_member);
civBlueTeamMember1 = findViewById(R.id.civ_blue_team_member_1);
civBlueTeamMember2 = findViewById(R.id.civ_blue_team_member_2);
civBlueTeamMember3 = findViewById(R.id.civ_blue_team_member_3);
civBlueTeamMember4 = findViewById(R.id.civ_blue_team_member_4);
ivAddBlueTeamMember = findViewById(R.id.iv_add_blue_team_member);
civRedAvatars.add(civRedTeamMember1);
civRedAvatars.add(civRedTeamMember2);
civRedAvatars.add(civRedTeamMember3);
civRedAvatars.add(civRedTeamMember4);
civBlueAvatars.add(civBlueTeamMember1);
civBlueAvatars.add(civBlueTeamMember2);
civBlueAvatars.add(civBlueTeamMember3);
civBlueAvatars.add(civBlueTeamMember4);
updateView();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
EventBus.getDefault().register(this);
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
EventBus.getDefault().unregister(this);
}
public void updateView() {
if (PkModel.get().isFighting()) {
long countDownTime = PkModel.get().getCurPkInfo().getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format(Locale.getDefault(), "%1$02d:%2$02d", countDownTime / 60, countDownTime % 60));
ivAddRedTeamMember.setVisibility(GONE);
ivAddBlueTeamMember.setVisibility(GONE);
ivPkBegin.setVisibility(GONE);
rlRedTeamAddPeople.setOnClickListener(null);
rlBlueTeamAddPeople.setOnClickListener(null);
tvPkTimer.setOnClickListener(null);
llPkScoreBoard.setOnClickListener(this);
showTeamAvatars();
PKTeamInfo blueTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (blueTeamInfo != null) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeamInfo.getScore()));
}
PKTeamInfo redTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
if (redTeamInfo != null) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeamInfo.getScore()));
}
if (redTeamInfo != null && blueTeamInfo != null) {
long totalScore = redTeamInfo.getScore() + blueTeamInfo.getScore();
if (totalScore > 0) {
int percent = (int) ((float) redTeamInfo.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
} else {
tvPkTimer.setText(ResUtil.getString(R.string.avroom_widget_pkboardview_01));
if (!isTeamHaveMember(PKTeamInfo.TEAM_RED)) {
ivAddRedTeamMember.setVisibility(VISIBLE);
} else {
ivAddRedTeamMember.setVisibility(GONE);
}
if (!isTeamHaveMember(PKTeamInfo.TEAM_BLUE)) {
ivAddBlueTeamMember.setVisibility(VISIBLE);
} else {
ivAddBlueTeamMember.setVisibility(GONE);
}
pbScore.setProgress(50);
showTeamAvatars();
rlRedTeamAddPeople.setOnClickListener(this);
rlBlueTeamAddPeople.setOnClickListener(this);
if (AvRoomDataManager.get().isManager()) {
ivPkBegin.setVisibility(VISIBLE);
ivPkBegin.setOnClickListener(this);
} else {
ivPkBegin.setVisibility(GONE);
}
llPkScoreBoard.setOnClickListener(null);
RoomPkData roomPkData = PkModel.get().getCurPkInfo();
if (roomPkData != null &&
(roomPkData.getPkStatus() == RoomPkData.PK_STATUS_BEFORE_PK || roomPkData.getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK)) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
}
}
private boolean isTeamHaveMember(int teamId) {
for (PKMemberInfo pkMemberInfo : PkModel.get().getPkMemberInfoList()) {
if (pkMemberInfo.getTeamId() == teamId) {
return true;
}
}
return false;
}
public void showTeamAvatars() {
List<PKMemberInfo> pkMemberInfoList = PkModel.get().getPkMemberInfoList();
for (CircleImageView civRedAvatar : civRedAvatars) {
civRedAvatar.setVisibility(GONE);
}
for (CircleImageView civBlueAvatar : civBlueAvatars) {
civBlueAvatar.setVisibility(GONE);
}
int redIndex = 0;
int blueIndex = 0;
for (int i = 0; i < pkMemberInfoList.size(); i++) {
PKMemberInfo pkMemberInfo = pkMemberInfoList.get(i);
if (pkMemberInfo.getTeamId() == PKTeamInfo.TEAM_RED) {
if (redIndex >= civRedAvatars.size()) {
break;
}
civRedAvatars.get(redIndex).setVisibility(VISIBLE);
GlideApp.with(this)
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(civRedAvatars.get(redIndex));
redIndex++;
} else if (pkMemberInfoList.get(i).getTeamId() == PKTeamInfo.TEAM_BLUE) {
if (blueIndex >= civBlueAvatars.size()) {
break;
}
civBlueAvatars.get(blueIndex).setVisibility(VISIBLE);
GlideApp.with(this)
.load(pkMemberInfo.getUserInfo().getAvatar())
.placeholder(R.drawable.default_avatar)
.dontAnimate()
.into(civBlueAvatars.get(blueIndex));
blueIndex++;
}
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeTickEvent(PKTimeTickEvent event) {
if (PkModel.get().getCurPkInfo() == null) {
return;
}
long countDownTime = PkModel.get().getCurPkInfo().getCurPkTimeUntilEnd();
tvPkTimer.setText(String.format("%1$02d:%2$02d", countDownTime / 60, countDownTime % 60));
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKTimeFinishEvent(PKTimeFinishEvent event) {
updateView();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPKDataUpdateEvent(PKDataUpdateEvent event) {
if (PkModel.get().getCurPkInfo() == null) {
return;
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_IN_PK) {
PKTeamInfo blueTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_BLUE);
if (blueTeamInfo != null) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(blueTeamInfo.getScore()));
}
PKTeamInfo redTeamInfo = PkModel.get().findTeamByTeamId(PKTeamInfo.TEAM_RED);
if (redTeamInfo != null) {
tvRedTeamScore.setText(FormatUtils.formatPKValue(redTeamInfo.getScore()));
}
if (redTeamInfo != null && blueTeamInfo != null) {
long totalScore = redTeamInfo.getScore() + blueTeamInfo.getScore();
if (totalScore > 0) {
int percent = (int) ((float) redTeamInfo.getScore() / (float) totalScore * 100.0f);
pbScore.setProgress(percent);
} else {
pbScore.setProgress(50);
}
}
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_AFTER_PK) {
if (onActionListener != null) {
onActionListener.onEndPK();
}
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
if (PkModel.get().getCurPkInfo().getPkStatus() == RoomPkData.PK_STATUS_TERMINAL_PK_BEFORE_END) {
tvBlueTeamScore.setText(FormatUtils.formatPKValue(0));
tvRedTeamScore.setText(FormatUtils.formatPKValue(0));
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.fl_left:
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager()) {
//已经排麦不操作
if (!PkModel.get().getPkMemberInfoList().isEmpty() && AvRoomDataManager.get().myIsInQueue) {
// Toast.makeText(getContext(), ResUtil.getString(R.string.avroom_widget_pkboardview_02), Toast.LENGTH_SHORT).show();
SingleToastUtil.showToastShort(ResUtil.getString(R.string.avroom_widget_pkboardview_03));
return;
}
if (onActionListener != null) {
onActionListener.onShowPKMicQueueDialog();
}
return;
}
//添加红队人员
PKSelectPeopleDialog selectRedDialog = new PKSelectPeopleDialog(getContext(), PKTeamInfo.TEAM_RED, PkModel.get().getPkMemberInfoList());
selectRedDialog.setOnSelectPeopleListener(new PKSelectPeopleDialog.OnSelectPeopleListener() {
@Override
public void onSelectPeople(List<PKSelectPeopleDialog.MicEntity> micEntityList) {
//更新队伍,麦序,显示头像
List<RoomPKInvitedUpMicMember> upMicMemberList = new ArrayList<>();
for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue;
}
RoomPKInvitedUpMicMember roomPKInvitedUpMicMember = new RoomPKInvitedUpMicMember();
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_RED);
} else {
if (TextUtils.isEmpty(micEntity.uid)) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_NONE);
} else {
int teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid);
roomPKInvitedUpMicMember.setGroupType(
teamId == PKTeamInfo.TEAM_RED ? PKTeamInfo.TEAM_NONE : teamId);
}
}
roomPKInvitedUpMicMember.setUid(micEntity.uid);
roomPKInvitedUpMicMember.setNick(micEntity.nick);
SparseArray<RoomQueueInfo> micQueue = AvRoomDataManager.get().mMicQueueMemberMap;
//设置坑位的位置
for (int i = 0; i < micQueue.size(); i++) {
int key = micQueue.keyAt(i);
RoomQueueInfo roomQueueInfo = micQueue.get(key);
if (roomQueueInfo.mChatRoomMember != null
&& roomQueueInfo.mChatRoomMember.getAccount().equals(micEntity.uid)) {
roomPKInvitedUpMicMember.setPosition(key);
}
}
upMicMemberList.add(roomPKInvitedUpMicMember);
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError(throwable -> SingleToastUtil.showToastShort(throwable.getMessage()))
.subscribe();
}
});
selectRedDialog.show();
break;
case R.id.fl_right:
//不是管理员或者房主弹出排麦dialog
if (!AvRoomDataManager.get().isManager()) {
//已经排麦不操作
if (!PkModel.get().getPkMemberInfoList().isEmpty() && AvRoomDataManager.get().myIsInQueue) {
return;
}
if (onActionListener != null) {
onActionListener.onShowPKMicQueueDialog();
}
return;
}
//添加蓝队人员
PKSelectPeopleDialog selectBlueDialog = new PKSelectPeopleDialog(getContext(), PKTeamInfo.TEAM_BLUE, PkModel.get().getPkMemberInfoList());
selectBlueDialog.setOnSelectPeopleListener(micEntityList -> {
//更新队伍,麦序,显示头像
List<RoomPKInvitedUpMicMember> upMicMemberList = new ArrayList<>();
for (PKSelectPeopleDialog.MicEntity micEntity : micEntityList) {
if (TextUtils.isEmpty(micEntity.uid)) {
continue;
}
RoomPKInvitedUpMicMember roomPKInvitedUpMicMember = new RoomPKInvitedUpMicMember();
if (micEntity.isSelect) {
roomPKInvitedUpMicMember.setGroupType(PKTeamInfo.TEAM_BLUE);
} else {
int teamId = PkModel.get().getTeamIdInPKMemberList(micEntity.uid);
roomPKInvitedUpMicMember.setGroupType(
teamId == PKTeamInfo.TEAM_BLUE ? PKTeamInfo.TEAM_NONE : teamId);
}
roomPKInvitedUpMicMember.setUid(micEntity.uid);
roomPKInvitedUpMicMember.setNick(micEntity.nick);
SparseArray<RoomQueueInfo> micQueue = AvRoomDataManager.get().mMicQueueMemberMap;
//设置坑位的位置
for (int i = 0; i < micQueue.size(); i++) {
int key = micQueue.keyAt(i);
RoomQueueInfo roomQueueInfo = micQueue.get(key);
if (roomQueueInfo.mChatRoomMember != null &&
roomQueueInfo.mChatRoomMember.getAccount().equals(micEntity.uid)) {
roomPKInvitedUpMicMember.setPosition(key);
}
}
upMicMemberList.add(roomPKInvitedUpMicMember);
}
PkModel.get().inviteInTeam(upMicMemberList)
.doOnError(throwable -> SingleToastUtil.showToastShort(throwable.getMessage()))
.subscribe();
});
selectBlueDialog.show();
break;
case R.id.iv_pk_begin:
// 开始PK 倒计时
if (onActionListener != null) {
onActionListener.onBeginPK();
}
break;
case R.id.root_view:
//pk中点击pk 面板
if (PkModel.get().isFighting()) {
PKScoreBoardDialog pkScoreBoardDialog = new PKScoreBoardDialog(getContext());
pkScoreBoardDialog.show();
}
break;
default:
break;
}
}
private OnActionListener onActionListener;
public void setOnActionListener(OnActionListener onActionListener) {
this.onActionListener = onActionListener;
}
public interface OnActionListener {
void onBeginPK();
void onEndPK();
void onShowPKMicQueueDialog();
}
}

View File

@@ -0,0 +1,46 @@
package com.chwl.app.avroom.widget
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.FrameLayout
import androidx.core.view.isInvisible
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.databinding.LayoutRoomTeamPkUserListViewBinding
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.core.room.pk.bean.PKMemberInfo
class TeamPKUserListView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : FrameLayout(context, attrs, defStyleAttr) {
private val binding = LayoutRoomTeamPkUserListViewBinding.inflate(LayoutInflater.from(context))
private val ivAvatars = arrayOf(binding.ivAvatar1, binding.ivAvatar2, binding.ivAvatar3)
init {
addView(binding.root)
}
fun showBlueStyle() {
binding.ivAvatarSeat1.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
binding.ivAvatarSeat2.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
binding.ivAvatarSeat3.setImageResource(R.drawable.room_team_pk_bg_seat_blue)
}
fun updateData(data: List<String?>?) {
for (i in ivAvatars.indices) {
val item = data?.getOrNull(i)
if (item.isNullOrEmpty()) {
ivAvatars[i].isInvisible = true
} else {
ivAvatars[i].isVisible = true
ImageLoadUtils.loadImage(
context,
item,
ivAvatars[i], R.drawable.default_avatar
)
}
}
}
}

View File

@@ -7,9 +7,14 @@ import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.view.*
import androidx.fragment.app.FragmentActivity
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.withResumed
import androidx.viewbinding.ViewBinding
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.trello.rxlifecycle3.components.support.RxDialogFragment
import kotlinx.coroutines.launch
import java.lang.reflect.ParameterizedType
abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
@@ -59,6 +64,46 @@ abstract class BaseDialog<T : ViewBinding> : RxDialogFragment() {
}
}
private var safeShowTask: ((FragmentManager, String?) -> Unit)? = null
fun safeShow(fragmentManager: FragmentManager, lifecycleOwner: LifecycleOwner, tag: String? = null) {
lifecycleOwner.lifecycleScope.launch {
safeShowTask = { fm, tag ->
try {
show(fm, tag)
} catch (e: Exception) {
e.printStackTrace()
}
}
lifecycleOwner.withResumed {
safeShowTask?.invoke(fragmentManager, tag)
}
}
}
fun safeDismiss() {
try {
dismissAllowingStateLoss()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onDestroy() {
super.onDestroy()
safeShowTask = null
}
override fun dismiss() {
super.dismiss()
safeShowTask = null
}
override fun dismissAllowingStateLoss() {
super.dismissAllowingStateLoss()
safeShowTask = null
}
override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
onDismissListener?.invoke()

View File

@@ -0,0 +1,45 @@
package com.chwl.app.home
import androidx.lifecycle.MutableLiveData
import com.chwl.app.base.BaseViewModel
import com.chwl.core.bean.response.ListResult
import com.chwl.core.home.bean.HomeRoomCardInfo
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.model.HomeModel
class HomeMeViewModel : BaseViewModel() {
val roomInfoLiveData = MutableLiveData<HomeRoomCardInfo>()
val historyRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val collectRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
fun getMyRoomInfo() {
safeLaunch {
roomInfoLiveData.postValue(HomeModel.getMyRoomInfo())
}
}
fun getHomeHistoryList(pageNum: Int) {
safeLaunch(
onError = {
historyRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeHistoryRoomList(pageNum, 10)
historyRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
fun getHomeCollectList(pageNum: Int) {
safeLaunch(
onError = {
collectRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeMyCollectRoomList(pageNum, 10)
collectRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
}

View File

@@ -1,76 +1,40 @@
package com.chwl.app.home
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import com.chwl.app.base.BaseViewModel
import com.chwl.core.bean.response.ListResult
import com.chwl.core.home.bean.*
import com.chwl.core.home.model.HomeModel
import com.chwl.core.room.bean.AnchorInfo
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.utils.extension.toast
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.flow.MutableSharedFlow
class HomeViewModel : BaseViewModel() {
private val _tabHomeLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val tabHomeLiveData: MutableLiveData<ListResult<HomeRoomInfo>?> = _tabHomeLiveData
private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
val tabRoomListLiveData = MutableLiveData<ListResult<HomeRoomInfo>?>()
val bannerLiveData = MutableLiveData<List<BannerInfo>?>()
private val _currentResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
val currentResourceLiveData: MutableLiveData<List<CurrentResourceInfo>?> = _currentResourceLiveData
val homeResourceLiveData = MutableLiveData<List<CurrentResourceInfo>?>()
private val _resourceJumpLiveData = MutableLiveData<HomeRoomInfo?>()
val resourceJumpLiveData: LiveData<HomeRoomInfo?> = _resourceJumpLiveData
val resourceJumpFlow = MutableSharedFlow<HomeRoomInfo?>()
// private val _homeChatPickLiveData = MutableLiveData<String?>()
// val homeChatPickLiveData: LiveData<String?> = _homeChatPickLiveData
val pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
private val _gameRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val gameRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _gameRoomLiveData
val openGameRoomLiveData = MutableLiveData<Long?>()
private val _pickRoomLiveData = MutableLiveData<HomeRoomInfo?>()
val pickRoomLiveData: MutableLiveData<HomeRoomInfo?> = _pickRoomLiveData
val anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
private val _openGameRoomLiveData = MutableLiveData<Long?>()
val openGameRoomLiveData: MutableLiveData<Long?> = _openGameRoomLiveData
val homeTabLiveData: MutableLiveData<List<HomeTagInfo>> = MutableLiveData<List<HomeTagInfo>>()
private val _concernsLiveData = MutableLiveData<List<HomeRoomInfo>>()
val concernsLiveData: LiveData<List<HomeRoomInfo>> = _concernsLiveData
private val _collectLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val collectLiveData: LiveData<ListResult<HomeRoomInfo>> = _collectLiveData
private val _tagLiveData = MutableLiveData<List<HomeTagInfo>>()
val tagLiveData: LiveData<List<HomeTagInfo>> = _tagLiveData
private val _emptyLiveData = MutableLiveData<Boolean>()
val emptyLiveData: LiveData<Boolean> = _emptyLiveData
private val _anchorInfoLiveData = MutableLiveData<AnchorInfo?>()
val anchorInfoLiveData: MutableLiveData<AnchorInfo?> = _anchorInfoLiveData
private val _homePlayInfoLiveData = MutableLiveData<List<HomeRoomInfo>?>()
val homePlayInfoData: MutableLiveData<List<HomeRoomInfo>?> = _homePlayInfoLiveData
private val _homeHotRoomLiveData = MutableLiveData<ListResult<HomeRoomInfo>>()
val homeHotRoomLiveData: LiveData<ListResult<HomeRoomInfo>> = _homeHotRoomLiveData
private val _newFriendLiveData = MutableLiveData<ListResult<UserInfo>>()
val newFriendLiveData: LiveData<ListResult<UserInfo>> = _newFriendLiveData
val homeTagLiveData: MutableLiveData<List<HomeTagInfo>> = MutableLiveData<List<HomeTagInfo>>()
fun getHomeTabName(tabId: Int, pageNum: Int) {
val homeRankListLiveData = MutableLiveData<List<List<HomeRankBean>>>()
fun getTabRoomList(tabId: Int, pageNum: Int) {
safeLaunch(
onError = {
_tabHomeLiveData.value = ListResult.failed(pageNum)
tabRoomListLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getHomeTabHome(tabId, pageNum, 20)
_tabHomeLiveData.value = ListResult.success(result, pageNum)
val result = HomeModel.getHomeTabHome(tabId, pageNum, 10)
tabRoomListLiveData.value = ListResult.success(result, pageNum)
}
)
}
@@ -78,13 +42,13 @@ class HomeViewModel : BaseViewModel() {
/**
* 首页改版资源位
*/
fun getCurrentResourceInfo() {
fun getHomeResourceInfo() {
safeLaunch(
onError = {
_currentResourceLiveData.value = null
homeResourceLiveData.value = null
},
block = {
_currentResourceLiveData.value = HomeModel.getCurrentResource()
homeResourceLiveData.value = HomeModel.getCurrentResource()
}
)
}
@@ -92,166 +56,35 @@ class HomeViewModel : BaseViewModel() {
fun getResourceJumpInfo(id: Int) {
safeLaunch(
onError = {
_resourceJumpLiveData.value = null
resourceJumpFlow.emit(null)
it.message.toast()
},
block = {
_resourceJumpLiveData.value = HomeModel.getResourceJumpInfo(id)
resourceJumpFlow.emit(HomeModel.getResourceJumpInfo(id))
}
)
}
//
// fun getHomeChatPick() {
// safeLaunch(
// onError = {
// _homeChatPickLiveData.value = null
// it.message.toast()
// },
// block = {
// _homeChatPickLiveData.value = HomeModel.getHomeChatPick()
// }
// )
// }
fun getBannerInfo() {
safeLaunch(
onError = {
_bannerLiveData.value = null
bannerLiveData.value = null
},
block = {
_bannerLiveData.value = HomeModel.getHomeBanner("1")
bannerLiveData.value = HomeModel.getHomeBanner("1")
}
)
}
fun getTagInfo() {
fun getHomeTabInfo() {
safeLaunch {
_tagLiveData.value = HomeModel.getHomeTag()
homeTabLiveData.value = HomeModel.getNewHomeTab()
}
}
fun getGameRoom(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
it.message.toast()
_gameRoomLiveData.value = ListResult.failed(pageNum)
},
block = {
val result = HomeModel.getGameRoom(pageNum, pageSize)
_gameRoomLiveData.value = ListResult.success(result, pageNum)
}
)
}
fun fastPickGameRoom(mgId: Long? = null) {
safeLaunch(
onError = {
it.message.toast()
},
block = {
val homeRoomInfo = HomeModel.fastPickGameRoom(mgId)
if (homeRoomInfo?.isPick == true) {
_pickRoomLiveData.value = homeRoomInfo
} else if (homeRoomInfo?.isNeedOpenSelfRoom == true) {
_openGameRoomLiveData.value = mgId
}
}
)
}
fun getCollectRoom(pageNum: Int, pageSize: Int) {
safeLaunch(
onError = {
_collectLiveData.value = ListResult.failed(pageNum)
_emptyLiveData.value = true
},
block = {
if (pageNum == 1) {
val concernsRooms = async(Dispatchers.IO) {
try {
HomeModel.getConcernsRoom()
} catch (e: Throwable) {
null
}
}
val collectRooms = async(Dispatchers.IO) {
try {
HomeModel.getCollectRoom(pageNum, pageSize)
} catch (e: Throwable) {
null
}
}
val data = concernsRooms.await()
data?.let { _concernsLiveData.value = it }
val collectList = collectRooms.await()
if (collectList == null) {
_collectLiveData.value = ListResult.failed(pageNum)
} else {
_collectLiveData.value =
ListResult.success(collectList.fansRoomList, pageNum)
}
_emptyLiveData.value = _concernsLiveData.value.isNullOrEmpty() &&
_collectLiveData.value?.data.isNullOrEmpty()
} else {
val result = HomeModel.getCollectRoom(pageNum, pageSize)
_collectLiveData.value = ListResult.success(result?.fansRoomList, pageNum)
}
}
)
}
fun requestAnchorInfo() {
safeLaunch(
onError = {
_anchorInfoLiveData.value = null
},
block = {
_anchorInfoLiveData.value = HomeModel.requestAnchorInfo()
}
)
}
fun getHomePlayV2() {
safeLaunch(
onError = {
_homePlayInfoLiveData.value = null
},
block = {
_homePlayInfoLiveData.value = HomeModel.getHomePlayV2()
}
)
}
fun getHotRoom() {
safeLaunch(
onError = {
_homeHotRoomLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getHotRoom()
_homeHotRoomLiveData.value = ListResult.success(result, 1)
}
)
}
fun getNewFriendList(gender: Int? = null) {
safeLaunch(
onError = {
_newFriendLiveData.value = ListResult.failed(1)
},
block = {
val result = HomeModel.getNewFriendList(gender)
_newFriendLiveData.value = ListResult.success(result, 1)
}
)
}
fun getHomeTagInfo() {
fun getHomeRankList() {
safeLaunch {
homeTagLiveData.value = HomeModel.getNewHomeTag()
homeRankListLiveData.value = HomeModel.getHomeRankList()
}
}
}

View File

@@ -3,108 +3,58 @@ package com.chwl.app.home
import androidx.lifecycle.MutableLiveData
import com.chwl.app.R
import com.chwl.app.base.BaseViewModel
import com.chwl.core.UriProvider
import com.chwl.core.home.model.HomeModel
import com.chwl.core.im.custom.bean.RouterType
import com.chwl.core.room.bean.MeCenterInfo
import com.chwl.library.utils.ResUtil
class MeViewModel : BaseViewModel() {
private val _meCenterInfoLiveData = MutableLiveData<MutableList<MeCenterInfo>?>()
val meCenterInfoLiveData: MutableLiveData<MutableList<MeCenterInfo>?> = _meCenterInfoLiveData
private var menuList: List<MeCenterInfo>? = null
var donationMenuVisible = false
val menuListLiveData = MutableLiveData<List<MeCenterInfo>?>()
val donationMenu: MeCenterInfo by lazy(LazyThreadSafetyMode.NONE) {
MeCenterInfo(
icon = R.drawable.me_ic_menu_donation,
centerName = ResUtil.getString(R.string.me_donation),
skipType = RouterType.USER_DONATION
)
private var donationMenuVisible = false
fun updateDonationMenuVisible(isVisible: Boolean) {
donationMenuVisible = isVisible
if (!menuList.isNullOrEmpty()) {
menuListLiveData.value = transformMenuList(menuList)
}
}
// private val _bannerLiveData = MutableLiveData<List<BannerInfo>?>()
// val bannerLiveData: MutableLiveData<List<BannerInfo>?> = _bannerLiveData
init {
refreshData()
}
fun refreshData() {
// getBannerInfo()
requestMeCenterInfoList()
}
// private fun getBannerInfo() {
// safeLaunch(
// block = {
// _bannerLiveData.value = HomeModel.getHomeBanner("10")
// },
// onError = {
// _bannerLiveData.value = null
// }
// )
// }
private fun requestMeCenterInfoList() {
safeLaunch(
block = {
_meCenterInfoLiveData.value = requestCenterList()
},
onError = {
_meCenterInfoLiveData.value = null
fun requestMenuList() {
safeLaunch(onError = {
if (menuListLiveData.value.isNullOrEmpty()) {
menuListLiveData.postValue(transformMenuList(null))
}
)
}) {
val value = HomeModel.requestMeCenterInfoList()
menuList = value
menuListLiveData.postValue(transformMenuList(value))
}
}
private fun requestCenterList(): MutableList<MeCenterInfo>? {
private fun transformMenuList(list: List<MeCenterInfo>?): List<MeCenterInfo> {
val finalList = ArrayList<MeCenterInfo>()
if (list.isNullOrEmpty()) {
finalList.addAll(getDefaultMenuList())
} else {
finalList.addAll(list)
}
if (!donationMenuVisible) {
val donationMenuPosition = finalList.indexOfFirst {
it.skipType == RouterType.MY_DONATION
}
if (donationMenuPosition >= 0) {
finalList.removeAt(donationMenuPosition)
}
}
return finalList
}
private fun getDefaultMenuList(): MutableList<MeCenterInfo> {
return ArrayList<MeCenterInfo>().apply {
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_room,
centerName = ResUtil.getString(R.string.me_my_room),
skipType = RouterType.MY_ROOM
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_invite_fan,
centerName = ResUtil.getString(R.string.menu_my_invite),
skipType = RouterType.H5,
centerUrl = UriProvider.getInviteFan()
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_dress_shop,
centerName = ResUtil.getString(R.string.decoration_view_decorationstoreactivity_01),
skipType = RouterType.DECORATION_STORE
)
)
// add(
// MeCenterInfo(
// icon = R.drawable.me_ic_menu_revenue,
// centerName = ResUtil.getString(R.string.me_gain_recording),
// skipType = RouterType.MY_REVENUE
// )
// )
if (donationMenuVisible) {
add(donationMenu)
}
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_collect,
centerName = ResUtil.getString(R.string.my_collection),
skipType = RouterType.COLLECTION_ROOM
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_level,
centerName = ResUtil.getString(R.string.menu_my_level),
skipType = RouterType.USER_LEVEL
)
)
add(
MeCenterInfo(
icon = R.drawable.me_ic_menu_setting,

View File

@@ -1,6 +1,8 @@
package com.chwl.app.home.adapter;
import android.content.Context;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
@@ -11,18 +13,21 @@ import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.WrapPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import java.util.List;
public class PartyMagicIndicatorAdapter extends CommonNavigatorAdapter {
public class HomeIndicatorAdapter extends CommonNavigatorAdapter {
private final Context mContext;
private final List<? extends CharSequence> mTitleList;
private int textSize = 14;
private float minScale = 1f;
private int textSize = 21;
private float minScale = 0.857f;
private boolean showIndicator = true;
private OnItemSelectListener mOnItemSelectListener;
public PartyMagicIndicatorAdapter(List<? extends CharSequence> charSequences) {
public HomeIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
this.mContext = context;
this.mTitleList = charSequences;
}
@@ -34,12 +39,11 @@ public class PartyMagicIndicatorAdapter extends CommonNavigatorAdapter {
@Override
public IPagerTitleView getTitleView(Context context, final int i) {
ScaleTransitionPagerTitleView scaleTransitionPagerTitleView = new ScaleTransitionPagerTitleView(context, true);
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.color_6D6B89));
scaleTransitionPagerTitleView.setIncludeFontPadding(false);
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_white));
scaleTransitionPagerTitleView.setNormalColor(ContextCompat.getColor(context, R.color.white_transparent_60));
scaleTransitionPagerTitleView.setSelectedColor(ContextCompat.getColor(context, R.color.color_FFFFFF));
scaleTransitionPagerTitleView.setMinScale(minScale);
scaleTransitionPagerTitleView.setTextSize(textSize);
int padding = UIUtil.dip2px(context, 10);
int padding = UIUtil.dip2px(context, 13);
scaleTransitionPagerTitleView.setPadding(padding, 0, padding, 0);
scaleTransitionPagerTitleView.setText(mTitleList.get(i));
scaleTransitionPagerTitleView.setOnClickListener(view -> {
@@ -53,7 +57,16 @@ public class PartyMagicIndicatorAdapter extends CommonNavigatorAdapter {
@Override
public IPagerIndicator getIndicator(Context context) {
return new WrapPagerIndicator(context);
LinePagerIndicator indicator = new LinePagerIndicator(context);
indicator.setMode(LinePagerIndicator.MODE_EXACTLY);
indicator.setLineHeight(UIUtil.dip2px(mContext, 2.5));
indicator.setRoundRadius(UIUtil.dip2px(mContext, 1.5));
indicator.setLineWidth(UIUtil.dip2px(mContext, 10));
indicator.setColors(context.getResources().getColor(R.color.color_10ECD6));
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
// lp.bottomMargin = mBottomMargin;
indicator.setLayoutParams(lp);
return indicator;
}
public int getTextSize() {
@@ -72,6 +85,14 @@ public class PartyMagicIndicatorAdapter extends CommonNavigatorAdapter {
this.minScale = minScale;
}
public boolean isShowIndicator() {
return showIndicator;
}
public void setShowIndicator(boolean showIndicator) {
this.showIndicator = showIndicator;
}
public void setOnItemSelectListener(OnItemSelectListener onItemSelectListener) {
mOnItemSelectListener = onItemSelectListener;
}

View File

@@ -1,89 +0,0 @@
package com.chwl.app.home.adapter
import android.graphics.Color
import android.graphics.LinearGradient
import android.graphics.Shader
import android.widget.ImageView
import android.widget.TextView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.makeramen.roundedimageview.RoundedImageView
import com.chwl.app.R
import com.chwl.app.home.helper.BannerHelper
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
import com.chwl.core.utils.extension.ifNullOrEmpty
import com.chwl.library.utils.ResUtil
/**
* create by lvzebiao @2019/11/13
*/
class HomePlayAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
init {
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_home_play)
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_home_play_broadcast)
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
if (item.itemType == HomeRoomInfo.TYPE_ROOM ||
item.itemType == HomeRoomInfo.TYPE_BROADCAST
) {
helper.setText(R.id.tv_room_title, item.title)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
val tvMgName = helper.getView<TextView>(R.id.tv_mg_name)
tvMgName.text = item.mgName.ifNullOrEmpty { ResUtil.getString(R.string.home_adapter_homeplayadapter_01) }
if (item.mgName.isNullOrEmpty()) {
setGradient(tvMgName, "#FF8C5FFF", "#FFFF969B")
} else {
setGradient(tvMgName, "#FF61C4FE", "#FFA979FF")
}
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
val ivRoomImage = helper.getView<RoundedImageView>(R.id.iv_room_image)
ImageLoadUtilsV2.loadAvatar(ivRoomImage, item.avatar)
ivRoomImage.borderColor =
Color.parseColor(if (item.gender == 1) "#CCD7FF" else "#FFD0D0")
if (item.itemType == HomeRoomInfo.TYPE_BROADCAST) {
helper.setText(R.id.tv_broad_msg, item.broadMsg)
} else {
helper.setBackgroundRes(
R.id.view_bg,
if (item.gender == 1) R.drawable.bg_home_play_item_man else R.drawable.bg_home_play_item_woman
)
}
} else {
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
}
}
private fun setGradient(textView: TextView, startColor: String, endColor: String) {
val endX = textView.paint.textSize * textView.text.length
val linearGradient = LinearGradient(
0f, 0f, endX, 0f,
Color.parseColor(startColor),
Color.parseColor(endColor),
Shader.TileMode.CLAMP
)
textView.paint.shader = linearGradient
textView.invalidate()
}
}

View File

@@ -0,0 +1,62 @@
package com.chwl.app.home.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chwl.app.R
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.core.home.bean.HomeRankBean
class HomeRankViewFlipperAdapter : BaseAdapter() {
private val list = ArrayList<List<HomeRankBean>>()
fun setNewData(newList: List<List<HomeRankBean>>) {
list.clear()
list.addAll(newList)
notifyDataSetChanged()
}
override fun getCount(): Int {
return list.size
}
override fun getItem(position: Int): List<HomeRankBean>? {
return list.getOrNull(position)
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(parent.context)
.inflate(R.layout.home_recommend_item_rank, parent, false)
view.layoutDirection = View.LAYOUT_DIRECTION_LTR
val rankView1 = view.findViewById<ImageView>(R.id.iv_rank_1)
val rankView2 = view.findViewById<ImageView>(R.id.iv_rank_2)
val rankView3 = view.findViewById<ImageView>(R.id.iv_rank_3)
val rankBorderView1 = view.findViewById<ImageView>(R.id.iv_rank_border_1)
val rankBorderView2 = view.findViewById<ImageView>(R.id.iv_rank_border_2)
val rankBorderView3 = view.findViewById<ImageView>(R.id.iv_rank_border_3)
val list = getItem(position)
loadRankData(rankView1, rankBorderView1, list?.getOrNull(0))
loadRankData(rankView2, rankBorderView2, list?.getOrNull(1))
loadRankData(rankView3, rankBorderView3, list?.getOrNull(2))
return view
}
private fun loadRankData(view: ImageView, borderView: View, data: HomeRankBean?) {
if (data == null) {
view.isVisible = false
borderView.isVisible = false
} else {
view.isVisible = true
borderView.isVisible = true
view.loadAvatar(data.avatar)
}
}
}

View File

@@ -9,20 +9,23 @@ import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
/**
* create by lvzebiao @2019/11/13
*/
class HomeHotAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_recommend) {
class HomeRoomAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.home_item_room) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.avatar)
setText(R.id.tv_online_number, item.onlineNum.toString())
setText(R.id.tv_room_title, item.title)
setText(R.id.tv_desc, item.introduction)
setText(R.id.tv_desc, item.roomDesc)
}
val avatars: Array<ImageView> = arrayOf(
@@ -55,5 +58,16 @@ class HomeHotAdapter :
ImageLoadUtils.loadImage(tagView, tagPict)
tagView.isVisible = true
}
val pkView = helper.getView<SVGAImageView>(R.id.svga_pk)
if (item.isCrossPking) {
pkView.isVisible = true
if (pkView.drawable !is SVGADrawable) {
pkView.loadFromAssets("svga/home_pk.svga")
}
pkView.startAnimation()
} else {
pkView.isVisible = false
pkView.stopAnimation()
}
}
}

View File

@@ -1,56 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.opensource.svgaplayer.SVGAImageView
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
/**
* create by lvzebiao @2019/11/13
*/
class HomeSingleAnchorAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_home_single_anchor) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.setText(R.id.tv_nickname, if (!CoreTextUtils.isEmptyText(item.nick)) item.nick else "")
helper.setText(
R.id.tv_room_name,
if (!CoreTextUtils.isEmptyText(item.title)) item.title else ""
)
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_avatar), item.avatar)
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_avatar_big), item.avatar, false, 8)
val ivPking = helper.getView<SVGAImageView>(R.id.iv_pking)
val ivTag = helper.getView<ImageView>(R.id.iv_tag)
ivPking.isVisible = item.isCrossPking
ivTag.isGone = item.isCrossPking
if (item.isCrossPking) {
ivPking.loadFromAssets("svga/single_room_pking.svga")
} else {
ivTag.load(item.tagPict)
}
helper.setImageResource(
R.id.iv_gender,
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
)
helper.setText(
R.id.tv_topic,
if (!CoreTextUtils.isEmptyText(item.roomDesc)) item.roomDesc else ""
)
helper.itemView.setOnClickListener {
AVRoomActivity.startForFromType(
mContext,
item.uid,
AVRoomActivity.FROM_TYPE_RECOMMEND
)
}
}
}

View File

@@ -3,9 +3,9 @@ package com.chwl.app.home.adapter
import android.widget.ImageView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chad.library.adapter.base.diff.BaseQuickDiffCallback
import com.chwl.app.R
import com.chwl.app.ui.im.RouterHandler
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.room.bean.MeCenterInfo
@@ -15,8 +15,35 @@ class MeCenterAdapter :
override fun convert(helper: BaseViewHolder, item: MeCenterInfo) {
item.icon?.let {
helper.getView<ImageView>(R.id.iv_pic).setImageResource(it)
} ?: let {
helper.getView<ImageView>(R.id.iv_pic).loadImage(item.androidCenterPic)
}
helper.setText(R.id.tv_name, item.centerName)
}
fun updateData(list: List<MeCenterInfo>?) {
val newList = ArrayList<MeCenterInfo>()
if (list != null) {
newList.addAll(list)
}
setNewDiffData(object : BaseQuickDiffCallback<MeCenterInfo>(newList) {
override fun areItemsTheSame(
oldItem: MeCenterInfo,
newItem: MeCenterInfo
): Boolean {
return newItem.centerId == oldItem.centerId
}
override fun areContentsTheSame(
oldItem: MeCenterInfo,
newItem: MeCenterInfo
): Boolean {
return newItem.skipType == oldItem.skipType
&& newItem.centerName == oldItem.centerName
&& newItem.centerUrl == oldItem.centerUrl
&& newItem.androidCenterPic == oldItem.androidCenterPic
}
}, true)
}
}

View File

@@ -1,47 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isVisible
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.opensource.svgaplayer.SVGAImageView
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
/**
* create by lvzebiao @2019/11/13
* 人气主播更多
*/
class MoreSingleAnchorAdapter :
BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_home_single_anchor_more) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
val ivPking = helper.getView<SVGAImageView>(R.id.iv_pking)
val ivTag = helper.getView<ImageView>(R.id.iv_tag)
ivPking.isVisible = item.isCrossPking
ivTag.isVisible = !CoreTextUtils.isEmptyText(item.tagPict) && !item.isCrossPking
if (item.isCrossPking) {
ivPking.loadFromAssets("svga/single_room_pking.svga")
} else {
ivTag.load(item.tagPict)
}
helper.setText(R.id.tv_online_num, item.onlineNum.toString())
.setText(R.id.tv_nickname, item.nick)
.setText(R.id.tv_room_name, item.title)
.setImageResource(
R.id.iv_gender,
if (item.gender == 1) R.drawable.ic_gender_male else R.drawable.ic_gender_female
)
helper.getView<ImageView>(R.id.iv_room_avatar)
.load(item.avatar, 12f, R.drawable.default_cover)
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.uid)
}
}
}

View File

@@ -1,58 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.home.helper.BannerHelper
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
class RoomHotAdapter : BaseMultiItemQuickAdapter<HomeRoomInfo, BaseViewHolder>(null) {
init {
addItemType(HomeRoomInfo.TYPE_ROOM, R.layout.item_room_hot)
addItemType(HomeRoomInfo.TYPE_BROADCAST, R.layout.item_room_hot)
addItemType(HomeRoomInfo.TYPE_BANNER, R.layout.item_room_banner)
}
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
if (item.itemType != HomeRoomInfo.TYPE_BANNER) {
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.uid)
}
helper.getView<ImageView>(R.id.iv_room_image).load(item.avatar)
helper.setText(R.id.tv_online_number, "${item.onlineNum}")
helper.setText(R.id.tv_room_title, item.title)
helper.setText(R.id.tv_id, "ID:${item.erbanNo}")
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
helper.getView<ImageView>(R.id.iv_room_tag).load(item.tagPict)
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
} else {
BannerHelper.setBanner(helper.getView(R.id.roll_view), item.bannerVoList)
}
}
}

View File

@@ -1,55 +0,0 @@
package com.chwl.app.home.adapter
import android.widget.ImageView
import androidx.core.view.isGone
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.ui.utils.ImageLoadUtilsV2
import com.chwl.app.ui.utils.load
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.utils.CoreTextUtils
class RoomLikeAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.item_room_like) {
override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) {
helper.apply {
getView<ImageView>(R.id.iv_room_image).load(item.roomAvatar)
setText(R.id.tv_online_number, "${item.roomOnlineNum}")
setText(R.id.tv_room_title, item.roomName)
setText(R.id.tv_id, "ID:${item.erbanNo}")
}
helper.setVisible(R.id.tv_in_pk, item.isCrossPking)
helper.setVisible(R.id.iv_room_tag, !CoreTextUtils.isEmptyText(item.tagPict))
ImageLoadUtilsV2.loadImage(helper.getView(R.id.iv_room_tag), item.tagPict)
val avatars: Array<ImageView> = arrayOf(
helper.getView(R.id.iv_avatar_0),
helper.getView(R.id.iv_avatar_1),
helper.getView(R.id.iv_avatar_2),
helper.getView(R.id.iv_avatar_3),
helper.getView(R.id.iv_avatar_4)
)
for (i in avatars.indices) {
val avatarUrl = item.micUsers?.getOrNull(i)?.avatar
avatars[i].isGone = avatarUrl.isNullOrBlank()
avatars[i].load(avatarUrl)
}
helper.itemView.setOnClickListener {
AVRoomActivity.start(mContext, item.roomUid)
}
if (item.isValid) {
helper.setGone(R.id.tv_online_number, true)
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item)
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar)
} else {
helper.setGone(R.id.tv_online_number, false)
helper.setBackgroundRes(R.id.view_bg, R.drawable.bg_home_like_item_disable)
helper.setBackgroundRes(R.id.view_room_cover, R.drawable.bg_home_common_avatar_disable)
}
}
}

View File

@@ -1,184 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.dialog.CreateRoomDialog
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentAccompanyBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeChatAdapter
import com.chwl.app.home.adapter.RoomNewFriendsAdapter
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.core.user.UserModel
import com.chwl.core.user.bean.UserInfo
import com.chwl.core.user.event.LoginUserInfoUpdateEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class AccompanyFragment : BaseViewBindingFragment<FragmentAccompanyBinding>() {
private lateinit var charAdapter: HomeChatAdapter
private lateinit var roomNewFriendsAdapter: RoomNewFriendsAdapter
private val homeViewModel: HomeViewModel by activityViewModels()
private lateinit var rvDelegate: RVDelegate<UserInfo>
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
initRefreshView()
initChatTab()
initHotRoomTab()
showGameGuide()
binding.ivGameGuide.setOnClickListener {
//首页_扩列聊天-创建游戏房
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.NINE),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
CreateRoomDialog().apply { setGameVisible() }.show(context)
}
}
private fun initRefreshView() {
binding.refreshLayout.setOnRefreshListener {
binding.refreshLayout.finishRefresh()
EventBus.getDefault().post(RefreshHomeDataEvent())
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initChatTab() {
charAdapter = HomeChatAdapter()
charAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = charAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_扩列聊天-用户房间
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.SEVEN),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
AVRoomActivity.startForFromType(
mContext,
homePlayInfo.uid,
AVRoomActivity.FROM_TYPE_RECOMMEND
)
}
}
binding.mRecyclerChat.adapter = charAdapter
binding.mLiCreateRoom.setOnClickListener {
//首页_扩列聊天-创建普通房
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.EIGHT),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
OpenRoomHelper.openRoom(context as BaseActivity?)
}
homeViewModel.homePlayInfoData.observe(this) {
it?.let {
if (it.isNotEmpty()) {
binding.mLiCreateRoom.visibility = View.GONE
binding.nsHost.visibility = View.VISIBLE
charAdapter.setNewData(it)
} else {
binding.mLiCreateRoom.visibility = View.VISIBLE
binding.nsHost.visibility = View.GONE
}
}
}
}
private fun initHotRoomTab() {
roomNewFriendsAdapter = RoomNewFriendsAdapter()
rvDelegate = RVDelegate.Builder<UserInfo>()
.setAdapter(roomNewFriendsAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(EmptyViewHelper.createEmptyTextView(context, "暂无新朋友"))
.setLayoutManager(LinearLayoutManager(mContext))
.build()
homeViewModel.newFriendLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData()
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData()
isShield = false
}
}
private fun loadData() {
homeViewModel.getHomePlayV2()
homeViewModel.getNewFriendList()
}
private fun showGameGuide(){
val userInfo = UserModel.get().cacheLoginUserInfo
if (userInfo?.isHasPermitRoom == true) {
binding.ivGameGuide.visibility = View.GONE
} else {
binding.ivGameGuide.visibility = View.GONE
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) {
showGameGuide()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -43,7 +43,7 @@ class ContactsListFragment : BaseViewBindingFragment<FragmentContactListBinding>
private val viewModel: HomeMessageViewModel by activityViewModels()
private val publicChatAdapter = PublicChatLaneAdapter(ArrayList())
private val stateHelper = FragmentVisibleStateHelper(this) {
private val stateHelper = FragmentVisibleStateHelper(this).start {
onVisibleChanged(it)
}
companion object {

View File

@@ -1,148 +1,32 @@
package com.chwl.app.home.fragment
import android.view.Gravity
import android.view.View
import androidx.core.view.isVisible
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.FragmentHomeBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeBannerAdapter
import com.chwl.app.home.dialog.RecommendRoomDialog
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.home.adapter.HomeIndicatorAdapter
import com.chwl.app.ui.search.SearchActivity
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.user.adapter.MainIndicatorAdapter
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.DemoCache
import com.chwl.core.UriProvider
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.library.utils.ListUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.zhpan.bannerview.BannerViewPager
import org.greenrobot.eventbus.EventBus
/**
首页
*/
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener,
MainIndicatorAdapter.OnItemSelectListener {
private val TAB_ID_RECOMMEND = Int.MAX_VALUE - 1
private val TAB_ID_ACCOMPANY = Int.MAX_VALUE - 2
private val tabList = mutableListOf<HomeTagInfo>()
private val tabTitleList = mutableListOf<String>()
private val homeViewModel: HomeViewModel by activityViewModels()
class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClickListener {
override fun init() {
initListener()
initTab()
initBanner()
initResource()
homeViewModel.homeTagLiveData.observe(this) {
loadTabList(transformTabList(it))
}
homeViewModel.getHomeTagInfo()
}
private fun initListener() {
binding.tvSearch.setOnClickListener(this)
binding.ivRanking.setOnClickListener(this)
binding.ivMyRoom.setOnClickListener(this)
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
EventBus.getDefault().post(RefreshHomeDataEvent())
homeViewModel.getBannerInfo()
if (binding.viewPager.adapter?.itemCount == 0) {
homeViewModel.getHomeTagInfo()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initResource(){
homeViewModel.currentResourceLiveData.observe(this) {
it?.let {
val resourceViews = arrayOf(
binding.ivResource0,
binding.ivResource1
)
if (it.size != 2) {
resourceViews.forEach {
it.isVisible = false
}
return@observe
}
resourceViews.forEach {
it.isVisible = true
}
for (i in resourceViews.indices) {
resourceViews[i].load(it[i].icon)
resourceViews[i].setOnClickListener { _ ->
when {
it[i].resourceType == 5 -> {
CommonWebViewActivity.start(context, it[i].resourceContent)
}
else -> {
dialogManager.showProgressDialog(mContext)
homeViewModel.getResourceJumpInfo(it[i].id)
}
}
}
}
}
}
homeViewModel.resourceJumpLiveData.observe(this) {
dialogManager.dismissDialog()
it?.let {
if (it.isPick) {
AVRoomActivity.start(context, it.uid)
} else {
RecommendRoomDialog.newInstance(it).show(context)
}
}
}
homeViewModel.getCurrentResourceInfo()
}
private fun initBanner() {
val bannerView: BannerViewPager<BannerInfo?> =
binding.bannerView as BannerViewPager<BannerInfo?>
homeViewModel.bannerLiveData.observe(this) {
it?.let {
if (ListUtils.isListEmpty(it)) {
bannerView.visibility = View.GONE
return@let
}
bannerView.visibility = View.VISIBLE
bannerView.adapter = HomeBannerAdapter()
bannerView.post {
binding.bannerView.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
homeViewModel.getBannerInfo()
}
override fun onClick(v: View) {
@@ -161,107 +45,31 @@ class HomeFragment : BaseViewBindingFragment<FragmentHomeBinding>(), View.OnClic
DemoCache.saveAnchorCardView(1)
}
}
R.id.iv_ranking -> {
//首页_排行榜
CommonWebViewActivity.start(mContext, UriProvider.getRanking())
}
R.id.iv_my_room -> {
OpenRoomHelper.openRoom(baseActivity)
}
}
}
private fun initTab() {
val fragmentList = ArrayList<Fragment>()
fragmentList.add(HomeRecommendFragment())
fragmentList.add(HomeWithMeFragment())
val titleList = ArrayList<String>()
titleList.add(getString(R.string.main_tab_recommend))
titleList.add(getString(R.string.main_me))
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
val magicIndicatorAdapter = MainIndicatorAdapter(context, tabTitleList)
magicIndicatorAdapter.setOnItemSelectListener(this)
val magicIndicatorAdapter = HomeIndicatorAdapter(context, titleList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
binding.viewPager.adapter =
object : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun getItemId(position: Int): Long {
return tabList[position].id.toLong()
}
override fun containsItem(itemId: Long): Boolean {
return tabList.firstOrNull { it.id.toLong() == itemId } != null
}
override fun createFragment(position: Int): Fragment {
val itemId = getItemId(position)
return when (itemId) {
TAB_ID_RECOMMEND.toLong() -> {
RecommendFragment()
}
TAB_ID_ACCOMPANY.toLong() -> {
AccompanyFragment()
}
else -> {
return HomeTabFragment.newInstance(itemId.toInt())
}
}
}
override fun getItemCount(): Int {
return tabList.size
}
}
binding.viewPager.offscreenPageLimit = 2
binding.viewPager.adapter = CommonVPAdapter(
childFragmentManager,
lifecycle,
fragmentList
)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
loadTabList(transformTabList(emptyList()))
}
private fun transformTabList(list: List<HomeTagInfo>): List<HomeTagInfo> {
// val finalList = ArrayList<HomeTagInfo>()
// finalList.add(
// HomeTagInfo(
// TAB_ID_RECOMMEND,
// ResUtil.getString(R.string.home_fragment_homefragment_04),
// 0
// )
// )
// finalList.addAll(list)
// finalList.add(
// HomeTagInfo(
// TAB_ID_ACCOMPANY,
// ResUtil.getString(R.string.home_fragment_homefragment_07),
// 0
// )
// )
return list
}
private fun loadTabList(list: List<HomeTagInfo>) {
// 预防脏数据导致fragment复用问题
val newList = list.distinctBy {
it.id
}
val currentListId = tabList.joinToString { it.id.toString() }
val newListId = newList.joinToString { it.id.toString() }
if (currentListId == newListId) {
return
}
tabList.clear()
tabList.addAll(newList)
tabTitleList.clear()
tabTitleList.addAll(tabList.map { it.name })
binding.magicIndicator.navigator.notifyDataSetChanged()
binding.viewPager.adapter?.notifyDataSetChanged()
}
override fun onDestroyView() {
super.onDestroyView()
tabList.clear()
tabTitleList.clear()
}
override fun onItemSelect(position: Int, view: TextView?) {
binding.viewPager.currentItem = position
binding.viewPager.isUserInputEnabled = false
}
}

View File

@@ -0,0 +1,274 @@
package com.chwl.app.home.fragment
import android.view.View
import android.widget.LinearLayout
import androidx.core.view.isVisible
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout.OnRefreshListener
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.FragmentHomeRecommendBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeBannerAdapter
import com.chwl.app.home.adapter.HomeRankViewFlipperAdapter
import com.chwl.app.home.dialog.RecommendRoomDialog
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.search.SearchActivity
import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.app.utils.CommonJumpHelper
import com.chwl.core.DemoCache
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.library.utils.ListUtils
import com.example.lib_utils.ktx.getDrawableById
import com.zhpan.bannerview.BannerViewPager
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
/**
首页
*/
class HomeRecommendFragment : BaseViewBindingFragment<FragmentHomeRecommendBinding>(),
View.OnClickListener {
private val tabList = mutableListOf<HomeTagInfo>()
private val homeViewModel: HomeViewModel by activityViewModels()
override fun init() {
initListener()
initTab()
initBanner()
initResource()
initRank()
FragmentVisibleStateHelper(this).apply {
start {
onVisibleChanged(it, isFirstVisible)
}
}
homeViewModel.getHomeTabInfo()
homeViewModel.getBannerInfo()
homeViewModel.getHomeResourceInfo()
homeViewModel.getHomeRankList()
}
private fun initListener() {
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
childFragmentManager.fragments.forEach {
(it as? OnRefreshListener)?.onRefresh()
}
homeViewModel.getHomeRankList()
homeViewModel.getBannerInfo()
if (binding.viewPager.adapter?.itemCount == 0) {
homeViewModel.getHomeTabInfo()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
}
private fun initResource() {
homeViewModel.homeResourceLiveData.observe(this) {
it?.let {
val resourceViews = arrayOf(
binding.ivResource0,
binding.ivResource1
)
if (it.size != 2) {
resourceViews.forEach {
it.isVisible = false
}
binding.viewFlipper.isVisible = false
return@observe
}
binding.viewFlipper.isVisible = true
resourceViews.forEachIndexed { index, imageView ->
imageView.isVisible = true
if (index != 0) {
imageView.load(it[index].icon)
}
imageView.setOnClickListener { _ ->
when {
it[index].resourceType == 5 -> {
CommonWebViewActivity.start(context, it[index].resourceContent)
}
else -> {
dialogManager.showProgressDialog(mContext)
homeViewModel.getResourceJumpInfo(it[index].id)
}
}
}
}
}
}
lifecycleScope.launch {
lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) {
homeViewModel.resourceJumpFlow.collectLatest {
dialogManager.dismissDialog()
it?.let {
if (it.isPick) {
AVRoomActivity.start(context, it.uid)
} else {
RecommendRoomDialog.newInstance(it).show(context)
}
}
}
}
}
}
private fun initBanner() {
val bannerView: BannerViewPager<BannerInfo?> =
binding.bannerView as BannerViewPager<BannerInfo?>
homeViewModel.bannerLiveData.observe(this) {
it?.let {
if (ListUtils.isListEmpty(it)) {
bannerView.visibility = View.GONE
return@let
}
bannerView.visibility = View.VISIBLE
bannerView.adapter = HomeBannerAdapter()
bannerView.post {
binding.bannerView.setPageMargin(UIUtil.dip2px(mContext, 8.0))
.setScrollDuration(800)
.setOnPageClickListener { _: View?, position: Int ->
CommonJumpHelper.bannerJump(context, it[position])
}
.create(it)
}
}
}
}
private fun initRank() {
val rankAdapter = HomeRankViewFlipperAdapter()
binding.viewFlipper.adapter = rankAdapter
binding.viewFlipper.setInAnimation(context, R.animator.home_rank_anim_in)
binding.viewFlipper.setOutAnimation(context, R.animator.home_rank_anim_out)
homeViewModel.homeRankListLiveData.observe(this) {
rankAdapter.setNewData(it ?: emptyList())
}
}
override fun onClick(v: View) {
when (v.id) {
R.id.tv_search -> {
//首页_搜索
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.ONE),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
SearchActivity.start(activity)
//为啥触发条件这么恶心
if (DemoCache.readAnchorCardView() == 0) {
DemoCache.saveAnchorCardView(1)
}
}
}
}
private fun initTab() {
binding.viewPager.adapter =
object : FragmentStateAdapter(childFragmentManager, lifecycle) {
override fun getItemId(position: Int): Long {
return tabList[position].id.toLong()
}
override fun containsItem(itemId: Long): Boolean {
return tabList.firstOrNull { it.id.toLong() == itemId } != null
}
override fun createFragment(position: Int): Fragment {
val itemId = getItemId(position)
return HomeTabRoomFragment.newInstance(itemId.toInt()).apply {
autoRefreshOnVisible = true
}
}
override fun getItemCount(): Int {
return tabList.size
}
}
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
homeViewModel.homeTabLiveData.observe(this) {
loadTabList(transformTabList(it))
}
}
private fun resetTabIndicator(list: List<String>) {
val commonNavigator = CommonNavigator(context)
if (list.size <= 4) {
commonNavigator.isAdjustMode = true
}
val magicIndicatorAdapter = HomeRecommendIndicatorAdapter(
context,
list
)
magicIndicatorAdapter.setOnItemSelectListener { position, _ ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
val titleContainer: LinearLayout = commonNavigator.titleContainer // must after setNavigator
titleContainer.showDividers = LinearLayout.SHOW_DIVIDER_MIDDLE
titleContainer.dividerPadding = resources.getDimensionPixelOffset(R.dimen.dp_15)
titleContainer.dividerDrawable = getDrawableById(R.drawable.home_recommend_tab_splitter)
binding.magicIndicator.onPageSelected(binding.viewPager.currentItem)
}
private fun transformTabList(list: List<HomeTagInfo>): List<HomeTagInfo> {
return list
}
private fun loadTabList(list: List<HomeTagInfo>) {
// 预防脏数据导致fragment复用问题
val newList = list.distinctBy {
it.id
}
val currentListId = tabList.joinToString { it.id.toString() }
val newListId = newList.joinToString { it.id.toString() }
if (currentListId == newListId) {
return
}
tabList.clear()
tabList.addAll(newList)
binding.viewPager.adapter?.notifyDataSetChanged()
resetTabIndicator(tabList.map { it.name })
}
override fun onDestroyView() {
super.onDestroyView()
tabList.clear()
}
private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) {
if (isVisible) {
if (!isFirstVisible) {
if (homeViewModel.homeResourceLiveData.value == null) {
homeViewModel.getHomeResourceInfo()
}
homeViewModel.getHomeRankList()
}
binding.viewFlipper.startFlipping()
} else {
binding.viewFlipper.stopFlipping()
}
}
}

View File

@@ -0,0 +1,101 @@
package com.chwl.app.home.fragment
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 收藏
*/
class HomeRoomCollectListFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val viewModel: HomeMeViewModel by viewModels()
private var pageNum = 1
companion object {
fun newInstance(): HomeRoomCollectListFragment {
return HomeRoomCollectListFragment()
}
}
override fun init() {
initListView()
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(10)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
viewModel.collectRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
viewModel.getHomeCollectList(pageNum)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -0,0 +1,101 @@
package com.chwl.app.home.fragment
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 最近访问记录
*/
class HomeRoomHistoryListFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val viewModel: HomeMeViewModel by viewModels()
private var pageNum = 1
companion object {
fun newInstance(): HomeRoomHistoryListFragment {
return HomeRoomHistoryListFragment()
}
}
override fun init() {
initListView()
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(10)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
viewModel.historyRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
viewModel.getHomeHistoryList(pageNum)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -1,128 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeHotAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabFragmentBinding
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
* Peko首页
*/
class HomeTabFragment : BaseViewBindingFragment<HomeTabFragmentBinding>() {
private lateinit var roomHotAdapter: HomeHotAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by viewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
private var pageNum = 1
private var tabId: Int? = null
companion object {
fun newInstance(tabId: Int): HomeTabFragment {
return HomeTabFragment().apply {
arguments = Bundle().apply {
putInt("tabId", tabId)
}
}
}
}
override fun init() {
tabId = arguments?.getInt("tabId")
initHotRoomTab()
}
private fun initHotRoomTab() {
roomHotAdapter = HomeHotAdapter()
roomHotAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(20)
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, getString(R.string.data_empty)))
.setLayoutManager(LinearLayoutManager(mContext))
.build()
roomHotAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
homeViewModel.tabHomeLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
homeViewModel.getHomeTabName(tabId ?: 0, pageNum)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData(true)
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -1,220 +0,0 @@
package com.chwl.app.home.fragment;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.view.ViewGroup;
import androidx.annotation.Nullable;
import com.trello.rxlifecycle3.android.FragmentEvent;
import com.chwl.app.R;
import com.chwl.app.application.IReportConstants;
import com.chwl.app.application.ReportManager;
import com.chwl.app.avroom.activity.AVRoomActivity;
import com.chwl.app.base.BaseFragment;
import com.chwl.app.home.adapter.HomeTopAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.core.home.bean.HomeTabMapInfo;
import com.chwl.core.home.event.RefreshHomeDataEvent;
import com.chwl.core.home.model.GameHomeModel;
import com.chwl.core.room.event.RoomShieldEvent;
import com.chwl.core.utils.net.RxHelper;
import com.chwl.library.utils.ListUtils;
import com.zhpan.bannerview.BannerViewPager;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
/**
*
*/
public class HomeTabHomeFragment extends BaseFragment {
private static final Comparator<HomeTabMapInfo> comp = (o1, o2) -> {
int seq = o1.getSeq() - o2.getSeq();
return Integer.compare(seq, 0);
};
private BannerViewPager<HomeTabMapInfo> mBanner;
//是否需要刷新接口进行屏蔽房间操作
private boolean isShield = false;
public static HomeTabHomeFragment newInstance() {
HomeTabHomeFragment fragment = new HomeTabHomeFragment();
return fragment;
}
@Override
public int getRootLayoutId() {
return R.layout.fragment_home_room_tab;
}
@Override
public void onFindViews() {
super.onFindViews();
mBanner = mView.findViewById(R.id.mBanner);
}
/**
* 请求数据
*/
@SuppressLint("CheckResult")
private void getData() {
GameHomeModel.get()
.getHomeTabHome()
.compose(RxHelper.handleSchedulers())
.compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW))
.subscribe((serviceResult, throwable) -> {
if (throwable == null) {
if (ListUtils.isListEmpty(serviceResult)) {
return;
}
List<HomeTabMapInfo> roomsList = new ArrayList<>(serviceResult);//未处理的数
List<HomeTabMapInfo> randomList = new ArrayList<>();//不是置顶的
List<HomeTabMapInfo> finalList = new ArrayList<>();//最终的6条数据
for (int i = 0; i < roomsList.size(); i++) {
roomsList.get(i).setItemType(HomeTabMapInfo.TYPE_NORMAL);//对原始数据设置type
}
for (int i = 0; i < roomsList.size(); i++) {
if (roomsList.get(i).isIsTop()) {
finalList.add(roomsList.get(i));
} else {
randomList.add(roomsList.get(i));
}
}
sortSeqRoom(finalList);
refreshRoomData(finalList, randomList);
}
});
}
/**
* 刷新数据
*/
private void refreshRoomData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
mBanner.setAdapter(new HomeTopAdapter());
mBanner.post(() -> {
int width = UIUtil.getScreenWidth(mContext) - (UIUtil.dip2px(mContext, 10) * 3);
int revealWidth = width / 3;
ViewGroup.LayoutParams bannerLayoutParams = mBanner.getLayoutParams();
bannerLayoutParams.height = revealWidth + UIUtil.dip2px(mContext, 32);
mBanner.setLayoutParams(bannerLayoutParams);
setupBanner(
revealWidth,
revealWidth,
getConvertData(finalList1, randomList1)
);
});
}
private void setupBanner(
int leftRevealWidth,
int rightRevealWidth,
List<HomeTabMapInfo> list
) {
mBanner.setPageMargin(UIUtil.dip2px(mContext, 10))
.setScrollDuration(800)
.setRevealWidth(leftRevealWidth, rightRevealWidth)
.setOnPageClickListener((clickedView, position) -> {
//首页_热门房间
HashMap<String, Object> map = new HashMap<>(3);
map.put(IReportConstants.HOMEPAGE_TYPE, IReportConstants.FIVE);
map.put(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE);
ReportManager.get().reportEvent(IReportConstants.MODULE_HOMEPAGE_CLICK, map);
AVRoomActivity.startForFromType(mContext, list.get(position).getRoomUid(), AVRoomActivity.FROM_TYPE_RECOMMEND);
})
.create(list);
}
/**
* 转化房间数组不足6的加上虚位以待
*
* @param
* @return
*/
private List<HomeTabMapInfo> getConvertData(List<HomeTabMapInfo> finalList, List<HomeTabMapInfo> randomList) {
List<HomeTabMapInfo> finalList1 = new ArrayList<>(finalList);//最终的6条数据
List<HomeTabMapInfo> randomList1 = new ArrayList<>(randomList);//不是置顶的
int ROOM_COUNT = 6;//首页显示6条数据
randomList1 = randomList(randomList1);
finalList1.addAll(randomList1);
if (finalList1.size() >= ROOM_COUNT) {
finalList1 = finalList1.subList(0, ROOM_COUNT);
}
return finalList1;
}
/**
* **************************** 排序 ***********************************
*/
private void sortSeqRoom(List<HomeTabMapInfo> list) {
if (list.size() == 0) {
return;
}
Collections.sort(list, comp);
}
private List<HomeTabMapInfo> randomList(List<HomeTabMapInfo> sourceList) {
if (sourceList == null || sourceList.size() == 0) {
return sourceList;
}
ArrayList randomList = new ArrayList(sourceList.size());
do {
int randomIndex = Math.abs(new Random().nextInt(sourceList.size()));
randomList.add(sourceList.remove(randomIndex));
} while (sourceList.size() > 0);
return randomList;
}
@Override
public void initiate() {
getData();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onResume() {
super.onResume();
if(isShield){
getData();
isShield = false;
}
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRefreshHomeDataEvent(RefreshHomeDataEvent event) {
if (isResumed()) getData();
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onRoomShieldEvent(RoomShieldEvent event){
isShield = true;
}
}

View File

@@ -0,0 +1,113 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.util.Log
import android.view.View
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeRoomAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.HomeTabRoomFragmentBinding
import com.chwl.app.support.FragmentVisibleStateHelper
/**
* 首页-房间列表
*/
class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(),
SwipeRefreshLayout.OnRefreshListener {
private lateinit var adapter: HomeRoomAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by viewModels()
var autoRefreshOnVisible = false
private var pageNum = 1
private var tabId: Int? = null
companion object {
fun newInstance(tabId: Int): HomeTabRoomFragment {
return HomeTabRoomFragment().apply {
arguments = Bundle().apply {
putInt("tabId", tabId)
}
}
}
}
override fun init() {
tabId = arguments?.getInt("tabId")
initListView()
if (autoRefreshOnVisible) {
FragmentVisibleStateHelper(this).apply {
start {
if (it && !isFirstVisible) {
loadData(true)
}
}
}
}
}
private fun initListView() {
adapter = HomeRoomAdapter()
adapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = adapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setPageSize(10)
.setAdapter(adapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(
EmptyViewHelper.createEmptyTextViewHeight(
context,
getString(R.string.data_empty)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)
homeViewModel.tabRoomListLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
} else {
pageNum++
}
homeViewModel.getTabRoomList(tabId ?: 0, pageNum)
}
override fun onRefresh() {
if (isResumed) {
loadData(true)
}
}
}

View File

@@ -0,0 +1,114 @@
package com.chwl.app.home.fragment
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.databinding.HomeMeFragmentBinding
import com.chwl.app.home.HomeMeViewModel
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.user.adapter.HomeRecommendIndicatorAdapter
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadAvatar
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.home.bean.HomeRoomCardInfo
import com.chwl.core.home.bean.MicUsersBean
import com.example.lib_utils.ktx.singleClick
/**
首页-我的
*/
class HomeWithMeFragment : BaseViewBindingFragment<HomeMeFragmentBinding>() {
private val viewModel: HomeMeViewModel by activityViewModels()
override fun init() {
initListener()
initTab()
initObserve()
FragmentVisibleStateHelper(this).start {
if (it) {
viewModel.getMyRoomInfo()
}
}
}
private fun initListener() {
binding.refreshLayout.setOnRefreshListener {
it.finishRefresh()
viewModel.getMyRoomInfo()
childFragmentManager.fragments.forEach {
(it as? SwipeRefreshLayout.OnRefreshListener)?.onRefresh()
}
}
binding.refreshLayout.isEnableLoadmore = false
binding.refreshLayout.isEnableOverScrollBounce = false
binding.layoutRoomCard.singleClick {
OpenRoomHelper.openRoom(baseActivity)
}
}
private fun initTab() {
val tabList = listOf(getString(R.string.lately), getString(R.string.collect))
val fragmentList = listOf(HomeRoomHistoryListFragment(), HomeRoomCollectListFragment())
val commonNavigator = CommonNavigator(context)
val magicIndicatorAdapter = HomeRecommendIndicatorAdapter(
context,
tabList
)
magicIndicatorAdapter.setOnItemSelectListener { position, _ ->
binding.viewPager.currentItem = position
}
commonNavigator.adapter = magicIndicatorAdapter
binding.magicIndicator.navigator = commonNavigator
binding.magicIndicator.onPageSelected(binding.viewPager.currentItem)
binding.viewPager.offscreenPageLimit = fragmentList.size
binding.viewPager.adapter = CommonVPAdapter(
childFragmentManager,
lifecycle,
fragmentList
)
ViewPagerHelper.bind(binding.magicIndicator, binding.viewPager)
}
private fun initObserve() {
viewModel.roomInfoLiveData.observe(this) {
updateRoomInfo(it)
}
}
private fun updateRoomInfo(roomInfo: HomeRoomCardInfo?) {
binding.tvRoomName.text = roomInfo?.title
binding.tvRoomTopic.text = roomInfo?.roomDesc
binding.ivRoomCover.load(roomInfo?.avatar ?: "")
binding.tvOnlineNumber.text = roomInfo?.onlineNum?.toString() ?: "0"
loadRoomUsers(roomInfo?.micUsers)
}
private fun loadRoomUsers(list: List<MicUsersBean>?) {
val avatarViewList = arrayOf(
binding.ivRoomUser0,
binding.ivRoomUser1,
binding.ivRoomUser2,
binding.ivRoomUser3,
binding.ivRoomUser4
)
avatarViewList.forEachIndexed { index, imageView ->
val item = list?.getOrNull(index)
if (item == null) {
imageView.setImageDrawable(null)
imageView.isGone = true
} else {
imageView.loadAvatar(item.avatar)
imageView.isVisible = true
}
}
binding.layoutRoomUserList.isGone = list.isNullOrEmpty()
}
}

View File

@@ -29,7 +29,6 @@ import com.chwl.app.module_hall.hall.activity.ModuleClanActivity
import com.chwl.app.module_hall.hall.activity.ModuleHallActivity
import com.chwl.app.support.FragmentVisibleStateHelper
import com.chwl.app.ui.im.RouterHandler
import com.chwl.app.ui.pay.ChargeActivity
import com.chwl.app.ui.relation.AttentionListActivity
import com.chwl.app.ui.relation.FansListActivity
import com.chwl.app.ui.utils.ImageLoadUtils
@@ -39,7 +38,6 @@ import com.chwl.app.view.GenderAgeTextView
import com.chwl.app.vip.VipMainActivity
import com.chwl.app.vip.VipViewModel
import com.chwl.core.auth.AuthModel
import com.chwl.core.im.custom.bean.RouterType
import com.chwl.core.initial.InitialModel
import com.chwl.core.level.UserLevelVo
import com.chwl.core.manager.IMNetEaseManager
@@ -100,9 +98,11 @@ class MeFragment : BaseFragment(), View.OnClickListener {
override fun initiate() {
EventBus.getDefault().register(this)
mBinding.rvMenu.adapter = mCenterAdapter
mCenterAdapter.setOnItemClickListener { adapter, view, position ->
mCenterAdapter.getItem(position)?.let {
RouterHandler.handle(mContext, it.skipType, it.centerUrl)
RouterHandler.handle(mContext, it.skipType?:-1, it.centerUrl)
}
}
@@ -116,7 +116,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
}
)
meViewModel.meCenterInfoLiveData.observe(viewLifecycleOwner) {
meViewModel.menuListLiveData.observe(viewLifecycleOwner) {
setCenterData(it)
}
@@ -136,20 +136,20 @@ class MeFragment : BaseFragment(), View.OnClickListener {
loadVipInfo(it)
}
FragmentVisibleStateHelper(this) {
onVisibleChanged(it)
FragmentVisibleStateHelper(this).apply {
start {
onVisibleChanged(it, isFirstVisible)
}
}
}
private fun setCenterData(list: List<MeCenterInfo>?) {
if (list.isNullOrEmpty()) {
mBinding.rvMenu.visibility = View.GONE
mBinding.layoutMenu.visibility = View.GONE
return
}
mBinding.rvMenu.visibility = View.VISIBLE
mBinding.rvMenu.adapter = mCenterAdapter
mCenterAdapter.setNewData(list)
mBinding.layoutMenu.visibility = View.VISIBLE
mCenterAdapter.updateData(list)
}
private fun onGetRelationShipEvent(event: RelationShipEvent) {
@@ -201,33 +201,9 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|| levelSep >= (initInfo?.giveDiamondExperLevel
?: 0) || levelSep >= (initInfo?.giveGiftExperLevel ?: 0)
) {
reloadMenuForDonation(true)
meViewModel.updateDonationMenuVisible(true)
} else {
reloadMenuForDonation(false)
}
}
private fun reloadMenuForDonation(isVisible: Boolean) {
meViewModel.donationMenuVisible = isVisible
val list = mCenterAdapter.data
val itemIndex = list.indexOfFirst {
it.skipType == RouterType.USER_DONATION
}
if (isVisible) {
if (itemIndex == -1) {
val index = list.indexOfFirst {
it.skipType == RouterType.MY_REVENUE
}
if (index == -1) {
mCenterAdapter.addData(meViewModel.donationMenu)
} else {
mCenterAdapter.addData(index, meViewModel.donationMenu)
}
}
} else {
if (itemIndex != -1) {
mCenterAdapter.remove(itemIndex)
}
meViewModel.updateDonationMenuVisible(false)
}
}
@@ -267,12 +243,12 @@ class MeFragment : BaseFragment(), View.OnClickListener {
fun onLoginUserInfoUpdateEvent(event: LoginUserInfoUpdateEvent?) {
setUserData()
vipViewModel.getVipPageInfo()
meViewModel.refreshData()
}
@SuppressLint("CheckResult")
private fun reloadClanInfo(){
HallDataManager.get().requestUserClanInfo(AuthModel.get().currentUid).compose(bindToLifecycle())
private fun reloadClanInfo() {
HallDataManager.get().requestUserClanInfo(AuthModel.get().currentUid)
.compose(bindToLifecycle())
.subscribe { info: UserClanInfo? ->
val clanHallInfo = info?.asClanHall()
if (clanHallInfo != null) {
@@ -321,7 +297,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
} else {
mBinding.tvGuild.setText(R.string.me_join_guild)
mBinding.ivGuild.singleClick {
CommonWebViewActivity.start(context, familyInfo.getFullFamilyListUrl())
CommonWebViewActivity.start(context, familyInfo.getFullFamilyListUrl())
}
}
}
@@ -396,9 +372,10 @@ class MeFragment : BaseFragment(), View.OnClickListener {
private fun loadVipInfo(data: VipInfo?) {
}
private fun onVisibleChanged(isVisible: Boolean) {
private fun onVisibleChanged(isVisible: Boolean, isFirstVisible: Boolean) {
if (isVisible) {
reloadClanInfo()
meViewModel.requestMenuList()
}
}
}

View File

@@ -1,144 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.Gravity
import android.widget.TextView
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import com.coorchice.library.utils.LogUtils
import com.netease.nim.uikit.common.util.sys.ScreenUtil
import com.chwl.app.R
import com.chwl.app.avroom.adapter.CommonVPAdapter
import com.chwl.app.avroom.adapter.RoomVPAdapter
import com.chwl.app.base.BaseFragment
import com.chwl.app.databinding.FragmentPartyBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.PartyMagicIndicatorAdapter
import com.chwl.app.ui.widget.magicindicator.ViewPagerHelper
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.CommonNavigator
import com.chwl.core.home.bean.HomeTagInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class PartyFragment : BaseFragment(), PartyMagicIndicatorAdapter.OnItemSelectListener {
private lateinit var mBinding: FragmentPartyBinding
private val mFragments: ArrayList<Fragment> = ArrayList()
private val mTabInfoList: ArrayList<CharSequence> = ArrayList()
private val homeViewModel: HomeViewModel by activityViewModels()
private var currentIndex = 1
companion object {
fun newInstance(): PartyFragment {
val args = Bundle()
val fragment = PartyFragment()
fragment.arguments = args
return fragment
}
}
override fun getRootLayoutId(): Int {
return R.layout.fragment_party
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroy() {
super.onDestroy()
EventBus.getDefault().unregister(this)
}
override fun onFindViews() {
mBinding = DataBindingUtil.bind(mView)!!
}
override fun initiate() {
homeViewModel.tagLiveData.observe(this) {
it?.let {
onGetHomeTagSuccess(it)
}
}
}
override fun onResume() {
super.onResume()
homeViewModel.getTagInfo()
}
private fun onGetHomeTagSuccess(info: List<HomeTagInfo>) {
var changed = false
val oldTabInfoList: List<CharSequence> = ArrayList<CharSequence>(mTabInfoList)
for (tagInfo in info) {
if (!oldTabInfoList.contains(tagInfo.name)) {
changed = true
break
}
}
//只有HomeTagInfo发生改变才刷新数据
if (changed) {
LogUtils.e("$changed:oldTabInfoList")
mTabInfoList.clear()
mFragments.clear()
for (i in info.indices) {
//过滤对象是空和没有标签名同时也没有子标签的情况
var title: CharSequence?
var fragment: Fragment?
var name = info[i].name
if (name != null) {
name = name.trim { it <= ' ' }
}
title = name
mTabInfoList.add(title)
val tabId: Int = info[i].id
fragment = when (title) {
ResUtil.getString(R.string.home_fragment_partyfragment_01) -> {
RoomLikeFragment.newInstance()
}
ResUtil.getString(R.string.home_fragment_partyfragment_02) -> {
RoomGameFragment.newInstance()
}
else -> {
RoomCommonFragment.newInstance(tabId)
}
}
mFragments.add(fragment)
}
val commonNavigator = CommonNavigator(context)
commonNavigator.setTitleWrapContent(false)
commonNavigator.titleMargin = ScreenUtil.dip2px(2.0F)
commonNavigator.setTitleGravity(Gravity.CENTER_VERTICAL)
val magicIndicatorAdapter = PartyMagicIndicatorAdapter(mTabInfoList)
magicIndicatorAdapter.textSize = 14
magicIndicatorAdapter.setOnItemSelectListener(this)
commonNavigator.adapter = magicIndicatorAdapter
mBinding.magicIndicator.navigator = commonNavigator
mBinding.viewPager.offscreenPageLimit = 2
mBinding.viewPager.adapter = CommonVPAdapter(
childFragmentManager, lifecycle,
mFragments
)
ViewPagerHelper.bind(mBinding.magicIndicator, mBinding.viewPager)
onItemSelect(currentIndex, null)
}
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) homeViewModel.getTagInfo()
}
override fun onItemSelect(position: Int, view: TextView?) {
currentIndex = position
mBinding.viewPager.currentItem = currentIndex
}
}

View File

@@ -1,111 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import android.view.View
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.chad.library.adapter.base.BaseQuickAdapter
import com.chwl.app.R
import com.chwl.app.application.IReportConstants
import com.chwl.app.application.ReportManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRecommendBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeHotAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
/**
首页
*/
class RecommendFragment : BaseViewBindingFragment<FragmentRecommendBinding>() {
private lateinit var roomHotAdapter: HomeHotAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val homeViewModel: HomeViewModel by activityViewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
initHotRoomTab()
}
private fun initHotRoomTab() {
roomHotAdapter = HomeHotAdapter()
roomHotAdapter.onItemClickListener =
BaseQuickAdapter.OnItemClickListener { _: BaseQuickAdapter<*, *>?, _: View?, position: Int ->
val homePlayInfo: HomeRoomInfo? = roomHotAdapter.getItem(position)
if (homePlayInfo != null) {
//首页_房间派对
ReportManager.get().reportEvent(
IReportConstants.MODULE_HOMEPAGE_CLICK, mapOf(
Pair(IReportConstants.HOMEPAGE_TYPE, IReportConstants.TEN),
Pair(IReportConstants.MODULE, IReportConstants.MOLISTAR_HOMEPAGE)
)
)
AVRoomActivity.start(mContext, homePlayInfo.uid)
}
}
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.mRecyclerRoom)
.setEmptyView(EmptyViewHelper.createEmptyTextViewHeight(context, ResUtil.getString(R.string.hot_recommend_empty)))
.setLayoutManager(LinearLayoutManager(mContext, RecyclerView.VERTICAL, false))
.build()
homeViewModel.homeHotRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData()
}
override fun onResume() {
super.onResume()
if (isShield) {
loadData()
isShield = false
}
}
private fun loadData() {
homeViewModel.getHotRoom()
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) {
loadData()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?) {
isShield = true
}
}

View File

@@ -1,116 +0,0 @@
package com.chwl.app.home.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomCommonBinding
import com.chwl.app.home.RoomCommonViewModel
import com.chwl.app.home.adapter.RoomCommonAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomCommonFragment : BaseViewBindingFragment<FragmentRoomCommonBinding>() {
companion object {
fun newInstance(tabID: Int): RoomCommonFragment {
val args = Bundle()
args.putInt("tab_id", tabID)
val fragment = RoomCommonFragment()
fragment.arguments = args
return fragment
}
}
private val tabID: Int by lazy { arguments?.getInt("tab_id") ?: -1 }
private var pageNum: Int = 1
private val pageSize = 20
private lateinit var mAdapter: RoomCommonAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var roomCommonViewModel: RoomCommonViewModel? = null
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
val roomCommonViewModel: RoomCommonViewModel by viewModels()
this.roomCommonViewModel = roomCommonViewModel
mAdapter = RoomCommonAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
.setPageSize(20)
.setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomcommonfragment_01)))
.setRefreshLayout(binding.refreshLayout)
.setRecyclerView(binding.recyclerView)
.build()
mAdapter.setOnItemClickListener { _, _, position ->
mAdapter.getItem(position)?.let {
AVRoomActivity.start(context, it.roomUid)
}
}
mAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.recyclerView)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
roomCommonViewModel.commonRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
@SuppressLint("CheckResult")
fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
pageNum = if (isRefresh) 1 else (pageNum + 1)
roomCommonViewModel?.getCommonRoom(tabID, pageNum, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -1,126 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import androidx.fragment.app.viewModels
import androidx.recyclerview.widget.LinearLayoutManager
import com.chwl.app.R
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomGameBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.RoomGameAdapter
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomGameFragment : BaseViewBindingFragment<FragmentRoomGameBinding>() {
companion object {
fun newInstance(): RoomGameFragment {
val args = Bundle()
val fragment = RoomGameFragment()
fragment.arguments = args
return fragment
}
}
private lateinit var roomHotAdapter: RoomGameAdapter
private var page = 1
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private val pageSize = 20
private var homeViewModel: HomeViewModel? = null
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
val homeViewModel: HomeViewModel by viewModels()
this.homeViewModel = homeViewModel
roomHotAdapter = RoomGameAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(roomHotAdapter)
.setRecyclerView(binding.recyclerView)
.setEmptyView(
EmptyViewHelper.createEmptyTextView(
context,
ResUtil.getString(R.string.home_fragment_roomgamefragment_01)
)
)
.setLayoutManager(LinearLayoutManager(mContext))
.setRefreshLayout(binding.refreshLayout)
.setPageSize(pageSize)
.build()
roomHotAdapter.setOnLoadMoreListener({ loadData(false) }, binding.recyclerView)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
homeViewModel.gameRoomLiveData.observe(this) {
rvDelegate.loadData(it)
}
binding.tvMatch.setOnClickListener {
homeViewModel.fastPickGameRoom()
}
homeViewModel.pickRoomLiveData.observe(this) {
it?.let {
AVRoomActivity.start(mContext, it.uid)
}
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
binding.refreshLayout.isRefreshing = isRefresh
if (isRefresh) {
page = 1
} else {
page++
}
homeViewModel?.getGameRoom(page, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -1,154 +0,0 @@
package com.chwl.app.home.fragment
import android.os.Bundle
import androidx.core.view.isGone
import androidx.core.view.isVisible
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.android.material.appbar.AppBarLayout
import com.chwl.app.R
import com.chwl.app.base.BaseViewBindingFragment
import com.chwl.app.common.EmptyViewHelper
import com.chwl.app.databinding.FragmentRoomLikeBinding
import com.chwl.app.home.HomeViewModel
import com.chwl.app.home.adapter.HomeConcernsAdapter
import com.chwl.app.home.adapter.RoomLikeAdapter
import com.chwl.app.ui.relation.AttentionListActivity
import com.chwl.app.ui.utils.RVDelegate
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.core.home.event.RefreshHomeDataEvent
import com.chwl.core.room.event.RoomShieldEvent
import com.chwl.library.utils.ResUtil
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
import org.greenrobot.eventbus.ThreadMode
class RoomLikeFragment : BaseViewBindingFragment<FragmentRoomLikeBinding>() {
companion object {
fun newInstance(): RoomLikeFragment {
val args = Bundle()
val fragment = RoomLikeFragment()
fragment.arguments = args
return fragment
}
}
private lateinit var concernsAdapter : HomeConcernsAdapter
private lateinit var likeRvDelegate: RVDelegate<HomeRoomInfo>
private lateinit var mAdapter : RoomLikeAdapter
private lateinit var rvDelegate: RVDelegate<HomeRoomInfo>
private var pageNum = 1
private val pageSize = 20
private val homeViewModel: HomeViewModel by activityViewModels()
//是否需要刷新接口进行屏蔽房间操作
private var isShield = false
override fun init() {
binding.appBarLayout.addOnOffsetChangedListener(
AppBarLayout.OnOffsetChangedListener { _, verticalOffset ->
binding.refreshLayout.isEnabled = verticalOffset == 0
})
concernsAdapter = HomeConcernsAdapter()
likeRvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(concernsAdapter)
.setRecyclerView(binding.rvLike)
.setLayoutManager(GridLayoutManager(mContext,5, GridLayoutManager.VERTICAL, false))
.build()
homeViewModel.concernsLiveData.observe(this) {
likeRvDelegate.setNewData(it)
val isGone = concernsAdapter.data.isNullOrEmpty()
binding.tvMore.isGone = isGone
binding.tvLike.isGone = isGone
binding.rvLike.isGone = isGone
}
mAdapter = RoomLikeAdapter()
rvDelegate = RVDelegate.Builder<HomeRoomInfo>()
.setAdapter(mAdapter)
.setLayoutManager(LinearLayoutManager(mContext))
.setPageSize(pageSize)
.setRefreshLayout(binding.refreshLayout)
.setEmptyView(EmptyViewHelper.createEmptyTextView(mContext, ResUtil.getString(R.string.home_fragment_roomlikefragment_01)))
.setRecyclerView(binding.rvCollect)
.build()
homeViewModel.collectLiveData.observe(this) {
rvDelegate.loadData(it)
}
mAdapter.setOnLoadMoreListener({
loadData(false)
}, binding.rvCollect)
binding.refreshLayout.setOnRefreshListener {
loadData(true)
}
homeViewModel.emptyLiveData.observe(this) {
it?.let {
binding.refreshLayout.isRefreshing = false
binding.clEmpty.isVisible = it
binding.coordinatorLayout.isVisible = !it
}
}
binding.tvGoPlay.setOnClickListener {
(parentFragment as PartyFragment).onItemSelect(1, null)
}
binding.tvMore.setOnClickListener {
AttentionListActivity.start(context)
}
}
override fun onLazyLoad() {
super.onLazyLoad()
loadData(true)
}
override fun onResume() {
super.onResume()
if(isShield){
loadData(true)
isShield = false
}
}
private fun loadData(isRefresh: Boolean) {
if (isRefresh) {
pageNum = 1
binding.refreshLayout.isRefreshing = true
} else {
pageNum++
}
homeViewModel.getCollectRoom(pageNum, pageSize)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
EventBus.getDefault().register(this)
}
override fun onDestroyView() {
super.onDestroyView()
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRefreshHomeDataEvent(event: RefreshHomeDataEvent?) {
if (isResumed) loadData(true)
}
@Subscribe(threadMode = ThreadMode.MAIN)
fun onRoomShieldEvent(event: RoomShieldEvent?){
isShield = true
}
}

View File

@@ -42,7 +42,7 @@ class StarFragment : BaseViewBindingFragment<StarFragmentBinding>(), MainTabCont
private var currentUser: StarUser? = null
override fun init() {
FragmentVisibleStateHelper(this) {
FragmentVisibleStateHelper(this).start {
onVisibleChanged(it)
}
initView()

View File

@@ -8,21 +8,23 @@ import androidx.lifecycle.LifecycleOwner
import com.chwl.app.base.BaseFragment
class FragmentVisibleStateHelper(
private val fragment: Fragment,
private val onVisibleChanged: (Boolean) -> Unit
private val fragment: Fragment
) : LifecycleEventObserver {
private var onVisibleChanged: ((Boolean) -> Unit)? = null
private var isRealVisible = false
private var visibleCount = 0
val isVisible get() = isRealVisible
val isFirstVisible get() = isVisible && visibleCount == 1
init {
fun start(onVisibleChanged: (Boolean) -> Unit): FragmentVisibleStateHelper {
this.onVisibleChanged = onVisibleChanged
fragment.lifecycle.addObserver(this)
(fragment as? BaseFragment)?.let {
it.onHiddenChangedListener = Consumer<Boolean> {
checkVisibleState()
}
}
return this
}
fun checkVisibleState() {
@@ -32,12 +34,15 @@ class FragmentVisibleStateHelper(
)
if (isRealVisible != newRealVisible) {
isRealVisible = newRealVisible
if (newRealVisible) {
visibleCount++
}
onVisibleChanged(newRealVisible)
}
}
private fun onVisibleChanged(isVisible: Boolean) {
onVisibleChanged.invoke(isVisible)
onVisibleChanged?.invoke(isVisible)
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {

View File

@@ -290,10 +290,7 @@ public class RouterHandler {
case RouterType.MY_REVENUE:
EarnRecordActivity.start(context);
break;
case RouterType.USER_LEVEL:
CommonWebViewActivity.start(context, UriProvider.getUserLevelUrl());
break;
case RouterType.USER_DONATION:
case RouterType.MY_DONATION:
GiveGoldActivity.Companion.start(context);
break;
default:

View File

@@ -1,8 +1,7 @@
package com.chwl.app.ui.user.adapter;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.LinearGradient;
import android.graphics.Color;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.ViewGroup;
@@ -13,26 +12,24 @@ import androidx.core.content.ContextCompat;
import com.chwl.app.R;
import com.chwl.app.ui.widget.XRecyclerView.ScaleTransitionPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.FragmentContainerHelper;
import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.GradientLinePagerIndicator;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.model.PositionData;
import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import java.util.List;
public class MainIndicatorAdapter extends CommonNavigatorAdapter {
public class HomeRecommendIndicatorAdapter extends CommonNavigatorAdapter {
private final Context mContext;
private final List<? extends CharSequence> mTitleList;
private int textSize = 16;
private int textSize = 14;
private float minScale = 1f;
private boolean showIndicator = true;
private OnItemSelectListener mOnItemSelectListener;
public MainIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
public HomeRecommendIndicatorAdapter(Context context, List<? extends CharSequence> charSequences) {
this.mContext = context;
this.mTitleList = charSequences;
}

View File

@@ -40,6 +40,7 @@ import com.chwl.core.gift.bean.LuckyBagNoticeInfo;
import com.chwl.core.gift.bean.SimpleUserInfo;
import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.example.lib_utils.UiUtils;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
@@ -156,7 +157,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
private TextView giftNumberText;
private ImageView giftNumberOptions;
private ImageView ivOpenNoble;
private TextView tvGiftValue;
// private TextView tvGiftValue;
private EditText etSendMessage;
private Button sendGiftButton;
private View layoutEmpty;
@@ -177,7 +178,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
private List<List<GiftInfoVm>> pagerList;
private WalletInfo goldWalletInfo = PayModel.get().getCurrentWalletInfo();
private int itemType = ITEM_TYPE_GOLD;
private HorizontalScrollView hsvTabs;
private View rlGifts;
private View llTabs;
private View llDrawGift;
@@ -422,7 +422,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
reloadView = root.findViewById(R.id.tv_reload);
reloadView.setOnClickListener(this);
loadingView = root.findViewById(R.id.iv_loading);
hsvTabs = root.findViewById(R.id.hsv_tabs);
rlGifts = root.findViewById(R.id.rl_gifts);
llTabs = root.findViewById(R.id.ll_tabs);
llDrawGift = root.findViewById(R.id.ll_draw_gift);
@@ -446,7 +445,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_WEEK, ResUtil.getString(R.string.ui_widget_giftdialog_07), ResUtil.getString(R.string.ui_widget_giftdialog_08)));
// tabInfoList.add(new GiftTab(GiftIndicator.TYPE_DRAW_GIFT, ResUtil.getString(R.string.ui_widget_giftdialog_09), ResUtil.getString(R.string.ui_widget_giftdialog_010)));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_SING_ROOM, ResUtil.getString(R.string.ui_widget_giftdialog_hot), ResUtil.getString(R.string.ui_widget_giftdialog_hot)));
tabInfoList.add(new GiftTab(GiftIndicator.TYPE_KNAP, ResUtil.getString(R.string.ui_widget_giftdialog_011), ResUtil.getString(R.string.ui_widget_giftdialog_012)));
// tabInfoList.add(new GiftTab(GiftIndicator.TYPE_KNAP, ResUtil.getString(R.string.ui_widget_giftdialog_011), ResUtil.getString(R.string.ui_widget_giftdialog_012)));
giftIndicator = root.findViewById(R.id.gift_indicator);
giftIndicator.initTab(
tabInfoList,
@@ -494,10 +493,13 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
ivOpenNoble = root.findViewById(R.id.iv_open_noble);
etSendMessage = root.findViewById(R.id.et_gift_message);
if (UiUtils.INSTANCE.isRtl(context)) {
ivOpenNoble.setScaleType(ImageView.ScaleType.FIT_START);
}
ivOpenNoble.setOnClickListener(this);
sendContainer = root.findViewById(R.id.send_container);
layoutEmpty.setVisibility(View.GONE);
tvGiftValue = root.findViewById(R.id.tv_gift_value);
// tvGiftValue = root.findViewById(R.id.tv_gift_value);
if (giftId == 0) {
// 更新所有礼物
@@ -532,19 +534,23 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
}
View descLayout = root.findViewById(R.id.desc_layout);
View seatLayout = root.findViewById(R.id.rl_avatars);
if (isInRoom && (userOnMic || uid == 0)) {
avatarList.setVisibility(View.VISIBLE);
descLayout.setVisibility(View.GONE);
avatarList.setVisibility(View.VISIBLE);
if (micMemberInfos != null && micMemberInfos.size() > 0) {
avatarListAdapter = new GiftAvatarAdapter(getContext());
avatarListAdapter.setMicMemberInfos(micMemberInfos);
avatarListAdapter.setOnItemSelectedListener(this);
avatarList.setAdapter(avatarListAdapter);
seatLayout.setVisibility(View.VISIBLE);
}else{
seatLayout.setVisibility(View.GONE);
}
} else {
avatarList.setVisibility(View.INVISIBLE);
avatarList.setVisibility(View.GONE);
descLayout.setVisibility(View.VISIBLE);
seatLayout.setVisibility(View.VISIBLE);
Single<UserInfo> single = UserModel.get().getUserInfo(uid);
@@ -652,7 +658,6 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
currentGiftInfoList = GiftModel.get().getKnapList();
} else if (position == GiftIndicator.TYPE_NOBLE) {
currentGiftInfoList = nobleGiftInfos;
ivOpenNoble.setVisibility(View.VISIBLE);
} else if (position == GiftIndicator.TYPE_NORMAL) {
currentGiftInfoList = getNormalGiftInfos();
} else if (position == GiftIndicator.TYPE_LUCKY) {
@@ -682,7 +687,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
if (ListUtils.isListEmpty(currentGiftInfoList)) {
currentGiftInfo = null;
if (isKnap) {
tvGiftValue.setVisibility(View.VISIBLE);
// tvGiftValue.setVisibility(View.VISIBLE);
showEmptyView();
} else if (position == GiftIndicator.TYPE_LUCKY ||
position == GiftIndicator.TYPE_WEEK ||
@@ -705,7 +710,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
pagerList = beanTransformVm(context, currentGiftInfoList, isKnap, position == GiftIndicator.TYPE_WEEK ? 4 : 8, currentGiftInfo);
setGridViewData(pagerList);
if (isKnap) {
tvGiftValue.setVisibility(View.VISIBLE);
// tvGiftValue.setVisibility(View.VISIBLE);
updateTotalPrice();
} else {
if (giftNumber == -1) {
@@ -719,9 +724,9 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
updateDrawGift();
giftIndicator.post(() -> {
if (position < GiftIndicator.TYPE_WEEK) {
hsvTabs.fullScroll(View.FOCUS_LEFT);
giftIndicator.fullScroll(View.FOCUS_LEFT);
} else {
hsvTabs.fullScroll(View.FOCUS_RIGHT);
giftIndicator.fullScroll(View.FOCUS_RIGHT);
}
});
}
@@ -945,21 +950,21 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
}
private void updateTotalPrice() {
String diamond = "";
double totalValue = 0;
for (int i = 0; i < currentGiftInfoList.size(); i++) {
totalValue += currentGiftInfoList.get(i).getCount() * currentGiftInfoList.get(i).getGoldPrice();
}
if (totalValue >= 10000) {
totalValue = totalValue / 10000.0f;
diamond = FormatUtils.formatBigDecimal(totalValue) + "W+";
} else {
diamond = String.valueOf((int) totalValue);
}
SpannableBuilder text = new SpannableBuilder()
.append(ResUtil.getString(R.string.ui_widget_giftdialog_021), new ForegroundColorSpan(Color.parseColor("#7A797A")))
.append(diamond + ResUtil.getString(R.string.avroom_widget_messageview_027), new ForegroundColorSpan(Color.WHITE));
tvGiftValue.setText(text.build());
// String diamond = "";
// double totalValue = 0;
// for (int i = 0; i < currentGiftInfoList.size(); i++) {
// totalValue += currentGiftInfoList.get(i).getCount() * currentGiftInfoList.get(i).getGoldPrice();
// }
// if (totalValue >= 10000) {
// totalValue = totalValue / 10000.0f;
// diamond = FormatUtils.formatBigDecimal(totalValue) + "W+";
// } else {
// diamond = String.valueOf((int) totalValue);
// }
// SpannableBuilder text = new SpannableBuilder()
// .append(ResUtil.getString(R.string.ui_widget_giftdialog_021), new ForegroundColorSpan(Color.parseColor("#7A797A")))
// .append(diamond + ResUtil.getString(R.string.avroom_widget_messageview_027), new ForegroundColorSpan(Color.WHITE));
// tvGiftValue.setText(text.build());
}
private void showEmptyView() {
@@ -992,8 +997,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
layoutLoadFiled.setVisibility(View.GONE);
layoutEmpty.setVisibility(View.GONE);
etSendMessage.setVisibility(View.GONE);
tvGiftValue.setVisibility(View.GONE);
ivOpenNoble.setVisibility(View.GONE);
// tvGiftValue.setVisibility(View.GONE);
llStarWeek.setVisibility(View.GONE);
gridView.setVisibility(View.VISIBLE);
@@ -1271,6 +1275,12 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
return;
}
if (!userOnMic && uid > 0) {
if (uid == AuthModel.get().getCurrentUid()) {
SingleToastUtil.showToast(ResUtil.getString(R.string.send_gift_to_self_tips));
sendGiftButton.setText(ResUtil.getString(R.string.ui_widget_giftdialog_026));
sendGiftButton.setEnabled(true);
return;
}
ArrayList<MicMemberInfo> targetUids = new ArrayList<>();
MicMemberInfo micMemberInfo = new MicMemberInfo();
micMemberInfo.setAccount(String.valueOf(uid));

View File

@@ -2,8 +2,11 @@ package com.chwl.app.ui.widget.magicindicator;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.HorizontalScrollView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -14,9 +17,7 @@ import com.chwl.app.ui.widget.magicindicator.buildins.UIUtil;
import com.chwl.core.gift.bean.GiftTab;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import io.reactivex.Observable;
import lombok.Getter;
@@ -29,37 +30,43 @@ import lombok.Getter;
*/
public class GiftIndicator extends LinearLayout {
/**普通礼物*/
/**
* 普通礼物
*/
public static final int TYPE_NORMAL = 0;
/**星球礼物*/
/**
* 星球礼物
*/
public static final int TYPE_LUCKY = 1;
/**贵族礼物*/
/**
* 贵族礼物
*/
public static final int TYPE_NOBLE = 2;
/**周星礼物*/
/**
* 周星礼物
*/
public static final int TYPE_WEEK = 3;
/**涂鸦礼物*/
/**
* 涂鸦礼物
*/
public static final int TYPE_DRAW_GIFT = 4;
/**背包礼物*/
/**
* 背包礼物
*/
public static final int TYPE_KNAP = 5;
/**个播人气礼物*/
/**
* 个播人气礼物
*/
public static final int TYPE_SING_ROOM = 6;
private Map<String, String> map = new HashMap<>();
public GiftIndicator(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setOrientation(LinearLayout.HORIZONTAL);
}
private List<GiftTab> tabList = new ArrayList<>();
@Getter
@@ -67,13 +74,26 @@ public class GiftIndicator extends LinearLayout {
private int mFalseColor;
private int mTrueColor;
private LinearLayout tabLayout;
private View knapView;
private HorizontalScrollView scrollView;
public GiftIndicator(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
LayoutInflater.from(context).inflate(R.layout.gift_dialog_tab_indicator, this, true);
setOrientation(LinearLayout.HORIZONTAL);
setGravity(Gravity.CENTER_VERTICAL);
scrollView = findViewById(R.id.scroll_view);
tabLayout = findViewById(R.id.layout_tab);
knapView = findViewById(R.id.iv_knap);
}
public void initTab(List<GiftTab> list, int falseColor, int trueColor) {
for (int i = 0; i < list.size(); i++) {
GiftTab tab = list.get(i);
View view = inflate(GiftIndicator.this.getContext(), R.layout.layout_gift_indicator_item, null);
tab.setItemView(view);
addView(view, new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
tabLayout.addView(view, new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
UIUtil.dip2px(getContext(), 26)));
TextView tvTitle = view.findViewById(R.id.tv_title);
tvTitle.setText(tab.getUnSelectedTitle());
@@ -93,6 +113,10 @@ public class GiftIndicator extends LinearLayout {
emitter.onNext(index.getType());
});
}
knapView.setOnClickListener(v -> {
setPosition(TYPE_KNAP);
emitter.onNext(TYPE_KNAP);
});
});
}
@@ -130,4 +154,7 @@ public class GiftIndicator extends LinearLayout {
}
}
public void fullScroll(int direction) {
scrollView.fullScroll(direction);
}
}

View File

@@ -3,6 +3,7 @@ package com.chwl.app.vip.dialog
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.fragment.app.activityViewModels
import com.chwl.app.R
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
@@ -69,6 +70,6 @@ class VipUpgradeDialog : BaseDialog<DialogVipUpgradeBinding>() {
} catch (e: MalformedURLException) {
}
binding?.tvLevelDesc?.text = "恭喜你成為「${vipInfo.vipName}」!當前已自動佩戴該等級裝扮,是否保留原有裝扮?"
binding?.tvLevelDesc?.text = getString(R.string.level_up_wear_dress_tips_format).format(vipInfo.vipName)
}
}

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="800"
android:interpolator="@android:anim/decelerate_interpolator">
<propertyValuesHolder
android:propertyName="translationY"
android:valueFrom="80dp"
android:valueTo="0"
android:valueType="floatType" />
<propertyValuesHolder
android:duration="300"
android:propertyName="alpha"
android:valueFrom="0.4"
android:valueTo="1.0"
android:valueType="floatType" />
</objectAnimator>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="400"
android:interpolator="@android:anim/accelerate_interpolator">
<propertyValuesHolder
android:propertyName="translationY"
android:valueFrom="0"
android:valueTo="-20dp"
android:valueType="floatType" />
<propertyValuesHolder
android:propertyName="alpha"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType" />
</objectAnimator>

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 544 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 562 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Some files were not shown because too many files have changed in this diff Show More