Compare commits

..

11 Commits

Author SHA1 Message Date
eggmanQQQ
927059e873 try remove liulishuo download lib 2024-10-15 18:27:27 +08:00
eggmanQQQ
2d33a96376 fix : 清理公屏时没有清理另外两个tab的数据 2024-10-15 18:25:59 +08:00
eggmanQQQ
84ff7be54e feat : 游戏飘屏 修改 实现方案 2024-10-15 16:30:23 +08:00
eggmanQQQ
367a55654b feat : 火箭横幅位置下调 2024-10-15 15:10:20 +08:00
eggmanQQQ
7e48f77f1c fix: 修复bug 2024-10-15 14:23:33 +08:00
eggmanQQQ
11e5271193 feat: 游戏中奖飘屏,通用img飘屏,通用vga飘屏 添加dp68的 顶部间距 2024-10-15 11:01:09 +08:00
eggmanQQQ
20457a9bdf feat ; 接入 游戏飘屏, 修复bug 2024-10-15 10:29:03 +08:00
eggmanQQQ
47d1985d66 feat : 新增BOOM 公屏消息, 封禁弹窗功能修改 , 修复部分发现的bug 2024-10-11 18:01:23 +08:00
eggmanQQQ
4dc4dfc93b feat : 麦 人声音乐 开关功能, 初次提交 2024-10-10 19:42:26 +08:00
eggmanQQQ
04b71fa067 feat ; 房间消息公屏 分类 初次提交 2024-10-10 18:10:09 +08:00
eggmanQQQ
583173308e feat ; boom 功能 初步提测 2024-10-10 16:07:38 +08:00
130 changed files with 4650 additions and 1397 deletions

View File

@@ -13,7 +13,7 @@
android:protectionLevel="signature" /> <!-- 谷歌内购权限 -->
<permission
android:name="${applicationId}.push.permission.MESSAGE"
android:protectionLevel="signature" /> <!-- Required -->
android:protectionLevel="signature" /> <!-- Required -->
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
@@ -78,7 +78,7 @@
<uses-permission android:name="com.meizu.c2dm.permission.RECEIVE" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<!-- AppsFlyer需要参考https://dev.appsflyer.com/hc/docs/install-android-sdk#setting-required-permissions -->
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
<uses-permission android:name="com.google.android.gms.permission.AD_ID" tools:node="remove" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<!-- 对于 Android 12.0 及以上设备,还需要添加如下权限: -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

Binary file not shown.

View File

@@ -35,6 +35,7 @@ import com.chwl.app.star.StarFragment;
import com.chwl.app.support.PreloadResourceViewModel;
import com.chwl.app.ui.login.LoginPasswordActivity;
import com.chwl.core.home.bean.MainTabInfo;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.settings.SettingsModel;
import com.chwl.library.utils.JavaUtil;
import com.netease.nim.uikit.StatusBarUtil;
@@ -305,7 +306,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
PreloadResourceViewModel viewModel = new ViewModelProvider(
GlobalViewModelOwner.Companion.getInstance()
).get(PreloadResourceViewModel.class);
viewModel.start();
viewModel.start(context);
}
@Override
@@ -666,6 +667,7 @@ public class MainActivity extends BaseMvpActivity<IMainView, MainPresenter>
@Override
public void exitRoom(RoomInfo roomInfo) {
AudioEngineManager.get().setNotRecord(false);
closeOpenRoomAnimation();
DaemonService.stop(MainActivity.this);
}

View File

@@ -25,7 +25,6 @@ import com.chwl.library.language.LanguageHelper;
import com.coorchice.library.utils.LogUtils;
import com.example.lib_utils.ServiceTime;
import com.hjq.toast.ToastUtils;
import com.liulishuo.filedownloader.FileDownloader;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.sdk.NIMClient;
@@ -459,7 +458,6 @@ public class App extends BaseApp {
.build();
Realm.setDefaultConfiguration(config);
FileDownloader.setup(BasicConfig.INSTANCE.getAppContext());
LogUtil.i(TAG, channel);
}

View File

@@ -9,7 +9,7 @@ public abstract class BottomViewListenerWrapper {
}
public void onOpenMicBtnClick() {
public void onOpenMicBtnClick(int type) {
}

View File

@@ -42,6 +42,7 @@ import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.RoomNotifyManager;
import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment;
import com.chwl.app.ui.webview.baishun.IBaiShunGameListener;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.library.widget.SVGAView;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.room.game.bean.BaiShunGameConfig;
@@ -814,6 +815,7 @@ public class AVRoomActivity extends BaseMvpActivity<IAvRoomView, AvRoomPresenter
public void exitRoom(RoomInfo currentRoomInfo) {
if (currentRoomInfo != null && currentRoomInfo.getUid() == roomUid) {
finish();
AudioEngineManager.get().setNotRecord(false);
}
}

View File

@@ -57,7 +57,7 @@ abstract class BaseRoomNotifyDialog<VB : ViewBinding>(context: Context, theme: I
windowParams.width = WindowManager.LayoutParams.MATCH_PARENT
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT
windowParams.dimAmount = 0.0f
windowParams.gravity = Gravity.TOP
windowParams.gravity = getGravity()
windowParams.x = 0
windowParams.y = getTopOffset()
window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
@@ -66,6 +66,11 @@ abstract class BaseRoomNotifyDialog<VB : ViewBinding>(context: Context, theme: I
window.setWindowAnimations(getAnimations())
}
protected open fun getGravity():Int{
return Gravity.TOP
}
protected open fun getStaySecond():Float{
return 5f
}

View File

@@ -0,0 +1,192 @@
package com.chwl.app.avroom.dialog
import android.graphics.Color
import android.view.Gravity
import android.view.View
import android.view.WindowManager
import android.widget.ImageView
import com.chwl.app.R
import com.chwl.app.application.GlobalHandleManager
import com.chwl.app.avroom.widget.GalleryLayoutManager.LayoutParams
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogRoomBoomInfoBinding
import com.chwl.app.databinding.ItemRoomBoomInfoLevelBinding
import com.chwl.app.ui.utils.loadAnim2
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.response.ServiceResult
import com.chwl.core.gift.bean.BoomInfo
import com.chwl.core.user.UserModel
import com.chwl.core.utils.net.RxHelper
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setRL
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.chwl.library.net.rxnet.RxNet
import com.example.lib_utils.ktx.dp
import com.example.lib_utils.ktx.getString
import com.tencent.qgame.animplayer.AnimView
import io.reactivex.Single
import retrofit2.http.GET
import retrofit2.http.Query
class RoomBoomInfoDialog : BaseDialogFragment<DialogRoomBoomInfoBinding>() {
override var width = WindowManager.LayoutParams.MATCH_PARENT
override var height = 658.dp
override var dimAmount = 0f
override var gravity = Gravity.BOTTOM
public var roomUid = -1L
public var mCallBack :CallBack? = null
private var indexLevel = 0;
override fun init() {
if (roomUid > 0) {
getBoomInfo(roomUid)
.compose(bindToLifecycle())
.doOnSuccess {
setView(it)
}
.doOnError {
}
.subscribe()
}
binding.btn2.setOnClickListener {
mCallBack?.onClick(0,0)
}
binding.more2.setOnClickListener {
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
DialogWebViewActivity.start(activity, UriProvider.getBoomRule(UserModel.get().partitionId), true)
}
binding.more3.setOnClickListener {
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
DialogWebViewActivity.start(activity, UriProvider.getBoomRule(UserModel.get().partitionId), true)
}
binding.levelLayoutBg.setRL()
}
private fun setView(boomInfos: List<BoomInfo>) {
val sortedByDescending = boomInfos.sortedByDescending { it.level }
sortedByDescending.forEachIndexed{ index, boomInfo ->
val levelView = ItemRoomBoomInfoLevelBinding.inflate(layoutInflater, binding.levelLayout, true)
levelView.root.setBackgroundResource(R.color.transparent)
levelView.levelText.text="LV.${boomInfo.level}"
levelView.levelIcon.loadImage(boomInfo.pic)
levelView.root.tag = boomInfo
levelView.root.setOnClickListener {
val tag = it.tag
if (tag != null && tag is BoomInfo){
if (indexLevel != tag.level) {
indexLevel = tag.level
setInfo(tag)
for (i in 0 until binding.levelLayout.childCount) {
val view = binding.levelLayout.getChildAt(i)
view.setBackgroundResource(R.color.transparent)
}
it.setBackgroundColor(Color.parseColor("#9739ff"))
}
}
}
if (boomInfo.currLevel) {
levelView.root.setBackgroundColor(Color.parseColor("#9739ff"))
indexLevel = boomInfo.level
setInfo(boomInfo)
mCallBack?.onCurrBoomInfo(boomInfo)
}
}
}
private fun setInfo(indexData: BoomInfo?) {
indexData?.let {
if (it.rank && it.roomBoomRankVos.isVerify()) {
binding.avatarLayout.setVis(true)
binding.rewardLayout.visibility = View.INVISIBLE
it.roomBoomRankVos.forEach { rank->
if (rank.position == 1) {
binding.avatar1.loadImage(rank.avatar)
binding.nick1.text = rank.nick
}else if (rank.position == 2) {
binding.avatar2.loadImage(rank.avatar)
binding.nick2.text = rank.nick
}else if (rank.position == 3) {
binding.avatar3.loadImage(rank.avatar)
binding.nick3.text = rank.nick
}
}
} else if (it.roomBoomLevelAwardVos.isVerify()){
binding.rewardLayout.setVis(true)
binding.avatarLayout.visibility = View.INVISIBLE
it.roomBoomLevelAwardVos.forEachIndexed { index, boomInfoAward ->
val childAt = binding.rewardList.getChildAt(index)
if (childAt != null && childAt is ImageView && boomInfoAward.awardPic.isVerify()) {
childAt.loadImage(boomInfoAward.awardPic)
}
}
}
setPro(indexData.speed,indexData.level)
binding.recordAnimLayout.removeAllViews()
val animView = AnimView(binding.recordAnimLayout.context)
binding.recordAnimLayout.addView(animView)
val layoutParams = animView.layoutParams
layoutParams.width = LayoutParams.MATCH_PARENT
layoutParams.height = LayoutParams.MATCH_PARENT
animView.layoutParams = layoutParams
animView.setLoop(Int.MAX_VALUE)
animView.loadAnim2(it.vapUrl)
if (UserModel.get().partitionId == 2L) {
binding.avatarTime.text = R.string.roomBoomInfoRankHint2.getString()
} else {
binding.avatarTime.text = R.string.roomBoomInfoRankHint.getString()
}
}
}
fun setPro(speed: Int, level: Int) {
if (level != indexLevel) return
binding.proMax.post{
val max = binding.proMax.height
binding.pro.setViewWH(height = (max * (speed.toFloat() / 100)).toInt(), isDP = false)
binding.proVal.text = speed.toString()
}
}
private fun getBoomInfo(roomUid: Long): Single<List<BoomInfo>> {
return api.getBoomInfo(roomUid)
.compose(RxHelper.handleBeanData())
.compose(RxHelper.handleSchedulers())
}
private val api: Api = RxNet.create(Api::class.java);
interface Api {
@GET("/room/boom/level/info")
fun getBoomInfo(@Query("roomUid") roomUid: Long): Single<ServiceResult<List<BoomInfo>>>
}
public interface CallBack{
fun onCurrBoomInfo(boomInfo: BoomInfo)
fun onClick(type: Int,data:Any)
}
}

View File

@@ -0,0 +1,89 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import com.chwl.app.R
import com.chwl.app.bindadapter.BaseAdapter
import com.chwl.app.bindadapter.BindingViewHolder
import com.chwl.app.databinding.RoomBoomRewardBinding
import com.chwl.app.databinding.RoomBoomRewardItemBinding
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.auth.AuthModel
import com.chwl.core.gift.bean.BoomMsgAwardBean
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.example.lib_utils.ktx.getString
class RoomBoomRewardDialog(private val context: Context) :
BaseRoomNotifyDialog<RoomBoomRewardBinding>(context) {
var list : List<BoomMsgAwardBean>?=null
var mAdapter = object : BaseAdapter<BoomMsgAwardBean>(R.layout.room_boom_reward_item, 1) {
override fun convert(helper: BindingViewHolder, item: BoomMsgAwardBean?) {
val binding = RoomBoomRewardItemBinding.bind(helper.itemView)
binding.boomItem.loadImage(item?.awardPic)
}
}
override fun createBinding(inflater: LayoutInflater): RoomBoomRewardBinding {
return RoomBoomRewardBinding.inflate(inflater)
}
override fun init() {
mBinding.confirm.setOnClickListener {
dismiss()
}
if (list.isVerify()) {
val filterList = list!!.filter { it.uid == AuthModel.get().currentUid }
if (filterList.isVerify()) {
setOnReceive(filterList)
} else {
setUnReceive()
}
} else {
setUnReceive()
}
}
override fun useAutoDismiss() = false
override fun useSlipSlip() = false
override fun getGravity(): Int {
return Gravity.CENTER
}
override fun getAnimations(): Int {
return -1
}
// 没有中奖的UI
private fun setUnReceive() {
mBinding.bg.setViewWH(height = 200)
mBinding.title.visibility = View.INVISIBLE
// mBinding.confirm.text = ""
mBinding.hint.text = R.string.roomBoomAwardHintEmpty.getString()
mBinding.rvList.setVis(false)
}
//中奖UI
private fun setOnReceive(filterList: List<BoomMsgAwardBean>) {
mBinding.bg.setViewWH(height = 395)
mBinding.title.setVis(true)
// mBinding.confirm.text = ""
mBinding.hint.text = R.string.roomBoomAwardHint.getString()
mBinding.rvList.setVis(true)
mBinding.rvList.adapter = mAdapter
mAdapter.setNewData(filterList)
}
}

View File

@@ -18,6 +18,7 @@ import com.chwl.app.base.BaseActivity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.databinding.RoomGameplayDialogBinding
import com.chwl.app.home.helper.OpenRoomHelper
import com.chwl.app.treasure_box.widget.GoldBoxHelper
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
@@ -30,6 +31,7 @@ import com.chwl.core.room.game.bean.GameInfo
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.support.room.AudioRoomContext
import com.chwl.core.utils.LogUtils
import com.chwl.library.common.util.isVerify
import com.chwl.library.utils.JavaUtil
import com.chwl.library.utils.ResUtil
import com.chwl.library.utils.SingleToastUtil
@@ -46,7 +48,11 @@ class RoomGameListDialog :
private val adapter = RoomGameListAdapter()
private var dialogManager: DialogManager? = null
private lateinit var recycleView: RecyclerView
val cacheKey = "game_list#${parentFragment.hashCode()}"
var game_list = "game_list#"
var gameplay_list = "gameplay_list#"
var code = 0
private var mStatus = -1
private var mGameData = arrayListOf<GameInfo>()
var listener: RoomGameplayDialog.GameplayDialogListener? = null
@@ -111,17 +117,26 @@ class RoomGameListDialog :
}
private fun requestData() {
game_list = "game_list#$code"
gameplay_list = "gameplay_list#$code"
val dataService = AudioRoomContext.get()?.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
// val cacheKey = "game_list#${parentFragment.hashCode()}"
val list = dataService?.getData(cacheKey) as? List<GameInfo>
if (!list.isNullOrEmpty()) {
updateDialogHeight(list.size)
loadData(list)
val gameList = dataService?.getData(game_list) as? List<GameInfo>
val gameplayList = dataService?.getData(gameplay_list) as? List<RoomIcon>
LogUtils.d("gameListData-- code1=$game_list size=${gameList?.size} code2=$gameplay_list size=${gameplayList?.size}")
if (gameList.isVerify() || gameplayList.isVerify()){
mGameData.clear()
if (gameList.isVerify()) mGameData.addAll(0,gameList!!)
if (gameplayList.isVerify()) mGameData.addAll(roomIconToGameInfo(gameplayList!!))
updateDialogHeight(mGameData.size)
loadData(mGameData)
return
}
val getGameList = getGameList(AvRoomDataManager.get().roomUid)
.doOnError {
SingleToastUtil.showToast(it.message)
@@ -129,8 +144,10 @@ class RoomGameListDialog :
}
.subscribe { it: List<GameInfo> ->
LogUtils.d(" gamegame getGameList GameInfo = $it")
mGameData.addAll(0,it)
dataService?.putData(cacheKey, it)
dataService?.putData(game_list, it)
updateDialogHeight(mGameData.size)
loadData(mGameData)
}
@@ -142,12 +159,11 @@ class RoomGameListDialog :
}
.subscribe { it: List<RoomIcon> ->
LogUtils.d(" gamegame roomGamePlayList RoomIcon = $it")
it.forEachIndexed { index, roomIcon ->
if (roomIcon.isBaiShunGame()) {
mGameData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
}
}
dataService?.putData(cacheKey, mGameData)
val roomIconToGameInfo = roomIconToGameInfo(it)
mGameData.addAll(roomIconToGameInfo)
dataService?.putData(gameplay_list, it)
updateDialogHeight(mGameData.size)
loadData(mGameData)
}
@@ -157,6 +173,18 @@ class RoomGameListDialog :
}
private fun roomIconToGameInfo(list : List<RoomIcon>): ArrayList<GameInfo> {
val newData = arrayListOf<GameInfo>()
list.forEachIndexed { index, roomIcon ->
if (roomIcon.isBaiShunGame()) {
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:""))
}else if(roomIcon.isFindLove()){
newData.add(GameInfo(name = roomIcon.name?:"", pic = roomIcon.icon?:"" , pic2 = roomIcon.icon?:"", skipContent = roomIcon.skipContent?:"", ruleValue = roomIcon.ruleValue?:"", isFindLove = true))
}
}
return newData
}
private fun loadData(list: List<GameInfo>?) {
if (list.isNullOrEmpty()) {
switchStatus(-1)
@@ -239,7 +267,11 @@ class RoomGameListDialog :
)
}
}else if(!gameInfo.skipContent.isNullOrEmpty() || !gameInfo.ruleValue.isNullOrEmpty()){
jumpBaiShunGame(gameInfo)
if (gameInfo.isFindLove) {
jumpFindLove()
} else {
jumpBaiShunGame(gameInfo)
}
}
dismissAllowingStateLoss()
@@ -257,17 +289,23 @@ class RoomGameListDialog :
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
listener?.onShowBaiShunGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
private fun jumpFindLove() {
GoldBoxHelper.handleBoxClick(requireContext())
}
override fun onDestroy() {
super.onDestroy()
onUnbindContext()

View File

@@ -0,0 +1,58 @@
package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.LayoutInflater
import com.chwl.app.R
import com.chwl.app.application.GlobalHandleManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
import com.chwl.app.databinding.RoomNotifyBoomBinding
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.ktx.getString
class RoomNotifyBoomDialog(context: Context) :
BaseRoomNotifyDialog<RoomNotifyBoomBinding>(context) {
var data: BoomMsgDialogBean? = null
override fun createBinding(inflater: LayoutInflater): RoomNotifyBoomBinding {
return RoomNotifyBoomBinding.inflate(inflater)
}
override fun init() {
data?.let { data ->
mBinding.boomIcon.loadImage(data.pic)
mBinding.avatar.loadImage(data.avatar)
mBinding.roomName.text = R.string.roomNick.getString(data.roomTitle)
mBinding.boomDes.text = R.string.roomBoomNotify.getString()
mBinding.root.setOnClickListener {
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
val mDialogManager = DialogManager(activity)
mDialogManager?.showOkCancelDialog(
ResUtil.getString(R.string.changeRoomTips),
true,
object :
OkCancelDialogListener {
override fun onCancel() {
mDialogManager?.dismissDialog()
}
override fun onOk() {
mDialogManager?.dismissDialog()
if (AvRoomDataManager.get().roomUid != data.roomUid) {
AVRoomActivity.start(context, data.roomUid)
}
}
})
}
}
}
}

View File

@@ -3,6 +3,7 @@ package com.chwl.app.avroom.dialog
import android.content.Context
import android.view.LayoutInflater
import com.chwl.app.R
import com.chwl.app.application.GlobalHandleManager
import com.chwl.app.avroom.activity.AVRoomActivity
import com.chwl.app.common.widget.dialog.DialogManager
import com.chwl.app.common.widget.dialog.DialogManager.OkCancelDialogListener
@@ -11,6 +12,7 @@ import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.utils.NumberUtils
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.library.common.util.setRL
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.UiUtils
@@ -29,9 +31,7 @@ class RoomNotifyLuckGiftDialog(private val context: Context) : BaseRoomNotifyDia
override fun init() {
if (UiUtils.isRtl(context)) {
mBinding.bg.scaleX = -1f
}
mBinding.bg.setRL()
ImageLoadUtils.loadImage(mBinding.avatar,luckyGiftMsgBean?.sender?.avatar?:"")
mBinding.giftName.text = luckyGiftMsgBean?.giftNameMap?.getFirstText()
@@ -41,7 +41,8 @@ class RoomNotifyLuckGiftDialog(private val context: Context) : BaseRoomNotifyDia
mBinding.coinNum.text = coinNum
mBinding.clickArea.setOnClickListener {
mDialogManager = DialogManager(context)
val activity = GlobalHandleManager.get().activity ?: return@setOnClickListener
mDialogManager = DialogManager(activity)
mDialogManager?.showOkCancelDialog(ResUtil.getString(R.string.changeRoomTips), true, object : OkCancelDialogListener {
override fun onCancel() {
mDialogManager?.dismissDialog()

View File

@@ -17,6 +17,7 @@ import android.view.View
import android.view.ViewGroup
import android.view.ViewStub
import android.widget.EditText
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.RelativeLayout
import android.widget.TextView
@@ -42,6 +43,7 @@ import com.chwl.app.avroom.adapter.OnMicroItemClickListener
import com.chwl.app.avroom.adapter.RoomMessageIndicatorAdapter
import com.chwl.app.avroom.dialog.AttentionHintDialog
import com.chwl.app.avroom.dialog.DatingVipRuleDialog
import com.chwl.app.avroom.dialog.RoomBoomInfoDialog
import com.chwl.app.avroom.dialog.RoomGameListDialog
import com.chwl.app.avroom.dialog.RoomGameplayDialog
import com.chwl.app.avroom.dialog.RoomOperationDialog
@@ -58,6 +60,9 @@ import com.chwl.app.friend.view.SelectFriendActivity
import com.chwl.app.home.adapter.RoomActAdapter
import com.chwl.app.music.widget.MusicPlayerView
import com.chwl.app.room_chat.activity.RoomMsgActivity
import com.chwl.app.ui.utils.GameUtil
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.utils.loadImage
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.webview.DialogWebViewActivity
import com.chwl.app.ui.widget.ButtonItem
@@ -73,18 +78,27 @@ import com.chwl.app.ui.widget.rollviewpager.RollPagerView
import com.chwl.app.ui.widget.rollviewpager.Util
import com.chwl.app.ui.widget.rollviewpager.hintview.ColorPointHintView
import com.chwl.app.utils.KeyBoardUtils
import com.chwl.app.utils.RoomBoomManager
import com.chwl.core.Constants
import com.chwl.core.UriProvider
import com.chwl.core.auth.AuthModel
import com.chwl.core.bean.RoomMicInfo
import com.chwl.core.contacts.MyConstant
import com.chwl.core.gift.GiftModel
import com.chwl.core.gift.bean.BoomInfo
import com.chwl.core.gift.bean.BoomMsgAnimBean
import com.chwl.core.gift.bean.BoomMsgAwardList
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.gift.bean.BoomMsgExpPushBean
import com.chwl.core.gift.bean.GiftInfo
import com.chwl.core.gift.bean.GiftType
import com.chwl.core.gift.event.GiftComboEvent
import com.chwl.core.gift.event.NotifyEvent
import com.chwl.core.gift.event.RoomFreeGiftEvent
import com.chwl.core.helper.AtProxy
import com.chwl.core.home.bean.BannerInfo
import com.chwl.core.home.event.OpenRoomMessageInputEvent
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.RoomFollowOwnerAttachment
import com.chwl.core.im.custom.bean.RoomFollowOwnerAttachment2
import com.chwl.core.manager.AudioEngineManager
@@ -95,19 +109,25 @@ import com.chwl.core.mentoring_relationship.event.MentoringStopCountingEvent
import com.chwl.core.room.anotherroompk.ShowGiftDialogEvent
import com.chwl.core.room.anotherroompk.ShowUserInfoDialogEvent
import com.chwl.core.room.bean.RightBottomIconConfig
import com.chwl.core.room.bean.RoomBoomInfo
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.bean.RoomInfo
import com.chwl.core.room.core.RoomDataService
import com.chwl.core.room.event.RoomAtEvent
import com.chwl.core.room.event.RoomClearScreenEvent
import com.chwl.core.room.game.GameModel.getGameList
import com.chwl.core.room.game.GameStatus
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.core.room.game.bean.GameInfo
import com.chwl.core.room.giftvalue.helper.GiftValueMrg
import com.chwl.core.room.model.AvRoomModel
import com.chwl.core.room.queue.bean.MicMemberInfo
import com.chwl.core.share.bean.SessionType
import com.chwl.core.super_admin.SaConstant
import com.chwl.core.super_admin.model.SuperAdminModel
import com.chwl.core.super_admin.util.SuperAdminUtil
import com.chwl.core.support.room.AudioRoomContext
import com.chwl.core.support.room.AudioRoomContext.Companion.get
import com.chwl.core.support.room.RoomContext
import com.chwl.core.support.room.RoomView
import com.chwl.core.support.room.RoomWidget
@@ -117,6 +137,9 @@ import com.chwl.core.user.bean.UserInfo
import com.chwl.core.utils.LogUtils
import com.chwl.core.utils.net.VipLevelNotEnoughException
import com.chwl.library.common.util.LimitClickUtils
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setViewWH
import com.chwl.library.common.util.setVis
import com.chwl.library.net.rxnet.utils.RxNetWorkUtils
import com.chwl.library.rxbus.RxBus
import com.chwl.library.utils.JavaUtil
@@ -161,6 +184,15 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
protected lateinit var inputEdit: EditText
protected lateinit var inputSend: ImageView
protected lateinit var microView: MicroView
protected lateinit var btnIvConfigEntrance: ImageView
protected lateinit var btnIvgame: ImageView
protected lateinit var boomLayout: FrameLayout
protected lateinit var boomIcon: ImageView
protected lateinit var boomProMax: ImageView
protected lateinit var boomPro: ImageView
private var musicPlayerView: MusicPlayerView? = null
private var mVsMusicPlayer: ViewStub? = null
private var mDisposable: Disposable? = null
@@ -201,6 +233,9 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
// 房间小组件
private var widgets: HashMap<String, RoomWidget> = HashMap()
//boomInfo 弹窗
private var mBoomInfoDialog : RoomBoomInfoDialog ? = null
@CallSuper
override fun onFindViews() {
initMessageView()
@@ -233,14 +268,55 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
showRoomIntroduction(false)
}
})
btnIvConfigEntrance = mView.findViewById(R.id.iv_config_entrance)
btnIvgame = mView.findViewById(R.id.iv_game)
boomLayout = mView.findViewById(R.id.boomLayout)
boomIcon = mView.findViewById(R.id.boomIcon)
boomProMax = mView.findViewById(R.id.boomProMax)
boomPro = mView.findViewById(R.id.boomPro)
boomIcon.post {
boomIcon.rotation = -30f
}
boomLayout.setOnClickListener {
mBoomInfoDialog = RoomBoomInfoDialog().apply {
roomUid = AvRoomDataManager.get().roomUid
}
mBoomInfoDialog?.setOnDismissListener {
mBoomInfoDialog = null
}
mBoomInfoDialog?.mCallBack = object : RoomBoomInfoDialog.CallBack {
override fun onCurrBoomInfo(boomInfo: BoomInfo) {
onExpPush(BoomMsgExpPushBean().apply {
speed = boomInfo.speed
level = boomInfo.level
pic = boomInfo.pic
})
}
override fun onClick(type: Int, data: Any) {
mBoomInfoDialog?.dismiss()
onSendGiftBtnClick()
}
}
mBoomInfoDialog?.show(requireContext())
}
}
protected open fun initMessageView() {
messagePager = mView.findViewById<ViewPager2>(R.id.message_pager)
messageView = MessageView(context)
val tabList: MutableList<String> = java.util.ArrayList(2)
tabList.add(getString(R.string.room))
// tabList.add(getString(R.string.public_chat))
tabList.add(getString(R.string.all))
tabList.add(getString(R.string.send_msg))
tabList.add(getString(R.string.send_gift_tab_title))
messageView.setMsgType(getString(R.string.all))
val messageIndicator = mView.findViewById<MagicIndicator>(R.id.message_indicator)
messagePager.offscreenPageLimit = tabList.size
messagePager.adapter = object : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
@@ -257,7 +333,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
override fun getItemCount(): Int {
return tabList.size
return 1
}
override fun getItemViewType(position: Int): Int {
@@ -272,7 +348,12 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
commonNavigator.setTitleWrapContent(false)
val magicIndicatorAdapter = RoomMessageIndicatorAdapter(context, tabList)
magicIndicatorAdapter.setOnItemSelectListener { position: Int, view: TextView? ->
messagePager.currentItem = position
// messagePager.currentItem = position
val tab = tabList.getOrNull(position)
tab?.let {
messageIndicator.onPageSelected(position)
messageView.setMsgType(it)
}
}
commonNavigator.adapter = magicIndicatorAdapter
messageIndicator.navigator = commonNavigator
@@ -330,6 +411,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
openOrCloseGiftValue(true)
updateView()
updateMicBtn()
AudioEngineManager.get().isNotRecord = false
microView.setOnMicroItemClickListener(this)
mDisposable = IMNetEaseManager.get().chatRoomEventObservable
.subscribe { onReceiveRoomEvent(it) }
@@ -365,6 +447,62 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
//获取免费礼物详情
mvpPresenter?.queryFreeFlower()
initRoomAlbum()
initRoomBoom()
requestGamesData()
}
private fun initRoomBoom() {
AvRoomModel.get().getRoomBoomInfo(AvRoomDataManager.get().roomUid)
.doOnSuccess { boomInfo: RoomBoomInfo ->
if (boomInfo.roomBoomSignVoList.isVerify()) {
boomInfo.roomBoomSignVoList.forEachIndexed { index, roomBoomInfoSign ->
RoomBoomManager.addAnim(BoomMsgAnimBean().apply {
countDownUrl = roomBoomInfoSign.countDownVapUrl
endUrl = roomBoomInfoSign.endVapUrl
level = roomBoomInfoSign.level
})
}
}
if (boomInfo.prizes.isVerify()) {
val toMap = boomInfo.prizes.groupBy { it.level }.toMap()
toMap.forEach { t, u ->
RoomBoomManager.addAward(BoomMsgAwardList().apply {
list = u
})
}
}
}
.doOnError {
LogUtils.d("")
}
.compose(bindToLifecycle())
.subscribe()
AvRoomModel.get().getBoomInfo(AvRoomDataManager.get().roomUid)
.doOnSuccess {
it.forEach { info->
if (info.currLevel) {
mBoomExp = BoomMsgExpPushBean().apply {
level = info.level
speed = info.speed
pic = info.pic
}
boomLayout.setVis(true)
boomIcon.loadImage(info.pic)
boomProMax.post {
boomPro.setViewWH(width = (boomProMax.width * (info.speed.toFloat() / 100)).toInt(), isDP = false)
}
}
}
}
.doOnError {
LogUtils.d(""+it?.message)
}
.compose(bindToLifecycle())
.subscribe()
}
@SuppressLint("CheckResult")
@@ -414,6 +552,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
updateRedPackage()
updateView()
updateRemoteMuteBtn()
updateConfigButtonArea()
openOrCloseGiftValue(false)
}
@@ -475,6 +614,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
RoomEvent.LEAVE_MODE -> microView.adapter.notifyDataSetChanged()
RoomEvent.ROOM_CLEAN_SCREEN -> messageView.clear()
RoomEvent.MSG_BOOM -> onBoomAboutMsg(roomEvent);
}
}
@@ -716,6 +857,8 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
super.onDestroyView()
releaseView()
unregisterWidgets()
mBoomInfoDialog?.dismiss()
mBoomInfoDialog = null
}
override fun onDestroy() {
@@ -757,6 +900,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
R.id.iv_game -> {
val dialog = RoomGameListDialog();
dialog.code = hashCode()
dialog.listener = object : RoomGameplayDialog.GameplayDialogListener {
override fun onShowBaiShunGame(url: String, config: BaiShunGameConfig) {
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
@@ -1336,37 +1480,69 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
* 底部按鈕點擊處理
*/
open inner class BaseRoomBottomViewWrapper : BottomViewListenerWrapper() {
@SuppressLint("CheckResult")
override fun onOpenMicBtnClick() {
override fun onOpenMicBtnClick(type : Int) {
//todo do 关麦开麦
val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString())
if (roomQueueInfo?.mRoomMicInfo == null) return
//先判斷麥上是否是開麥的
if (!roomQueueInfo.mRoomMicInfo.isMicMute && !AudioEngineManager.get().isAudienceRole) {
if (!isHavingMicPermissions) {
val rxPermissions = RxPermissions(this@BaseRoomFragment)
rxPermissions.request(Manifest.permission.RECORD_AUDIO)
.subscribe { aBoolean: Boolean ->
if (aBoolean) {
AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
if (type == MyConstant.MicType.open) {
AudioEngineManager.get().isMute = false
AudioEngineManager.get().isNotRecord = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}else if (type == MyConstant.MicType.music) {
AudioEngineManager.get().isMute = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().isNotRecord = true
}else if (type == MyConstant.MicType.close) {
AudioEngineManager.get().isMute = true
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE)
AudioEngineManager.get().isNotRecord = false
}
updateMicBtn()
} else {
toast("開啟權限後才能開麥")
toast(R.string.ask_again.getString())
}
}
return
}
AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute
if (type == MyConstant.MicType.open) {
AudioEngineManager.get().isMute = false
AudioEngineManager.get().isNotRecord = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}else if (type == MyConstant.MicType.music) {
AudioEngineManager.get().isMute = false
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
AudioEngineManager.get().isNotRecord = true
}else if (type == MyConstant.MicType.close) {
AudioEngineManager.get().isMute = true
// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE)
AudioEngineManager.get().isNotRecord = false
}
updateMicBtn()
if (AudioEngineManager.get().isMute) {
AudioEngineManager.get().stopLocalAudio()
} else if (AvRoomDataManager.get().isOnMic(myUid)) {
AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER)
}
}
}
override fun onSendFaceBtnClick() {
if (AvRoomDataManager.get().isOnMic(myUid) || AvRoomDataManager.get().isRoomOwner) {
if (dynamicFaceDialog == null) {
@@ -1498,7 +1674,7 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
//礼物连击相关 消息
@Subscribe(threadMode = ThreadMode.MAIN)
fun onGiftComboEvent(event: GiftComboEvent) {
when (event.action) {
@@ -1515,4 +1691,163 @@ open class BaseRoomFragment<V : IBaseRoomView?, P1 : BaseRoomPresenter<V>?> :
}
}
//横幅相关消息
@Subscribe(threadMode = ThreadMode.MAIN)
fun onNotifyEvent(event: NotifyEvent) {
when (event.action) {
NotifyEvent.Action.ACT_BAI_SHUN_GAME-> {
val gameId = event.data
if (gameId is String){
val roomContext = get()
if (roomContext != null) {
val dataService = roomContext.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
if (dataService != null) {
val gameplay_list = "gameplay_list#" + hashCode()
val gameplayList = dataService?.getData(gameplay_list) as? List<RoomIcon>
if (gameplayList.isVerify()) {
val game = GameUtil.findGame(gameId.toLong(), gameplayList!!)
if (game != null) {
GameUtil.startGame(game){url, config->
(activity as? AVRoomActivity)?.showBaiShunGame(url, config)
}
}
}
}
}
}
}
else -> {}
}
}
var hasBaishunGames = false
private fun requestGamesData() {
val roomContext = get()
if (roomContext != null) {
val dataService = roomContext.findAbility<RoomDataService>(RoomDataService::class.java.simpleName)
if (dataService != null) {
val game_list = "game_list#" + hashCode()
val gameplay_list = "gameplay_list#" + hashCode()
val getGameList = getGameList(AvRoomDataManager.get().roomUid)
.doOnError {
}
.subscribe { it: List<GameInfo> ->
if (dataService != null) {
LogUtils.d("gameListData-- game_list 2 save code=$game_list size=${it.size}")
dataService.putData(game_list, it)
}
}
val roomGamePlayList = AvRoomModel.get().roomGamePlayList.doOnError {
hasBaishunGames = false
updateConfigButtonArea()
}.subscribe { roomIcons ->
if (dataService != null) {
LogUtils.d("gameListData-- gameplay_list 1 save code=$gameplay_list size=${roomIcons.size}")
dataService.putData(gameplay_list, roomIcons)
}
hasBaishunGames = roomIcons.size > 0
updateConfigButtonArea()
}
}
}
}
private fun updateConfigButtonArea() {
val configModel = AvRoomDataManager.get().rightBottomIconConfig
if (configModel == null) {
btnIvConfigEntrance.setVisibility(View.GONE)
} else {
if (configModel.icon1Url == null) {
btnIvConfigEntrance.setVisibility(View.GONE)
} else {
ImageLoadUtils.loadAvatar(configModel.icon1Url, btnIvConfigEntrance)
btnIvConfigEntrance.setVisibility(View.VISIBLE)
}
if (configModel.icon2Url != null) {
ImageLoadUtils.loadAvatar(configModel.icon2Url, btnIvgame)
}
}
if (hasBaishunGames) {
btnIvgame.setVisibility(View.VISIBLE)
} else {
btnIvgame.setVisibility(View.GONE)
}
}
/**
* boom 玩法消息
*/
private fun onBoomAboutMsg(roomEvent: RoomEvent) {
val data = roomEvent.boomMsg
if (data != null) {
LogUtils.d(" RoomBoomManager BaseRoom onBoomAboutMsg() second=${data.second} ")
if (data.second == CustomAttachment.BOOM_SECOND_EXP_PUSH) {
val expPushBean = data.expPushBean
if (expPushBean != null) {
onExpPush(expPushBean)
}
} else if (data.second == CustomAttachment.BOOM_SECOND_AWARD) {
val awardList = data.awardList
if (awardList != null) {
onAwardDialog(awardList)
}
} else if (data.second == CustomAttachment.BOOM_SECOND_DIALOG) {
// 播放动画
val dialogBean = data.DialogBean
if (dialogBean != null) {
onBoomAnim(dialogBean)
}
}
}
}
var mBoomExp: BoomMsgExpPushBean?=null
//更新boom进度
private fun onExpPush(expPushBean: BoomMsgExpPushBean) {
LogUtils.d(" RoomBoomManager BaseRoom onExpPush() indexLevel=${mBoomExp?.level} expPushLevel=${expPushBean.level} indexSpeed=${mBoomExp?.speed} expPushSpeed=${expPushBean.speed} ")
mBoomInfoDialog?.setPro(expPushBean.speed,expPushBean.level)
if (mBoomExp != null) {
if (mBoomExp!!.level > expPushBean.level) return
if (mBoomExp!!.speed >= expPushBean.speed) return
}
mBoomExp = expPushBean
boomLayout.setVis(true)
boomIcon.loadImage(expPushBean.pic)
boomProMax.post {
val width = (boomProMax.width * (expPushBean.speed.toFloat() / 100)).toInt()
LogUtils.d(" RoomBoomManager BaseRoom onExpPush() width = $width")
boomPro.setViewWH(width = width, isDP = false)
}
}
//boom中奖弹窗
private fun onAwardDialog(awardList: BoomMsgAwardList) {
LogUtils.d(" RoomBoomManager BaseRoom onAwardDialog() ")
RoomBoomManager.addAward(awardList)
}
//boom进度满了 播放动画
private fun onBoomAnim(dialogBean: BoomMsgDialogBean) {
LogUtils.d(" RoomBoomManager BaseRoom onBoomAnim() ")
if (dialogBean.roomUid == AvRoomDataManager.get().roomUid) {
RoomBoomManager.addAnim(BoomMsgAnimBean().apply {
countDownUrl = dialogBean.countDownVapUrl.trim()
endUrl = dialogBean.endVapUrl.trim()
level = dialogBean.level
})
}
}
}

View File

@@ -22,11 +22,11 @@ import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.chwl.app.avroom.activity.RoomTitleEditActivity;
import com.chwl.app.avroom.dialog.RoomNotifyLuckGiftDialog;
import com.chwl.app.databinding.LayoutRoomNotifyLuckyGiftTipBinding;
import com.chwl.app.utils.GiftAnimUtil;
import com.chwl.app.utils.NumberUtils;
import com.chwl.app.utils.RoomNotifyManager;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.app.utils.RoomNotifyDialogManager;
import com.chwl.app.utils.WeakPool;
import com.chwl.core.auth.AuthModel;
import com.chwl.core.gift.bean.CpMsgBean;
@@ -86,7 +86,6 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.lang.reflect.Field;
import java.util.ArrayList;
import io.reactivex.SingleObserver;
import io.reactivex.disposables.Disposable;
@@ -233,6 +232,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
@SuppressLint("CheckResult")
@Override
public void initiate() {
RoomBoomManager.INSTANCE.init(gameMainBinding.roomAnim);
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
if (roomInfo == null) return;
if (!AvRoomDataManager.get().haveSelfChange) {
@@ -524,7 +524,8 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
luckyGiftTipPool.clear();
handler.removeCallbacksAndMessages(null);
RoomNotifyManager.INSTANCE.clear();
RoomNotifyDialogManager.INSTANCE. clear();
RoomBoomManager.INSTANCE. clear();
if (giftView != null) {
giftView.release();
@@ -765,7 +766,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
private void showLuckyGiftDlg(LuckyGiftMsgAllBean data) {
//todo do 校验数据是否异常
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
RoomNotifyDialogManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_TEMPLATE,
CustomAttachment.CUSTOM_MSG_SUPER_LUCKY_GIFT_ROOM,
data
@@ -780,7 +781,7 @@ public class HomePartyFragment extends BaseFragment implements View.OnClickListe
//todo do 校验数据是否异常
CpMsgBean cpMsgBean = roomEvent.getCpMsgBean();
if (cpMsgBean != null) {
RoomNotifyManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
RoomNotifyDialogManager.INSTANCE.addDialog(new RoomNotifyDialogBean(
CustomAttachment.CP_FIRST,
cpMsgBean.getSecond(),
cpMsgBean

View File

@@ -7,6 +7,7 @@ import android.view.View;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.databinding.DataBindingUtil;
import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog;
@@ -17,10 +18,13 @@ import com.chwl.app.avroom.rank.RoomRankNumberWidget;
import com.chwl.app.music.widget.MusicPlayerView;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.ui.webview.DialogWebViewActivity;
import com.chwl.app.ui.widget.GiftDialog;
import com.chwl.core.gift.bean.GiftInfo;
import com.chwl.core.room.bean.RightBottomIconConfig;
import com.chwl.core.room.bean.RoomIcon;
import com.chwl.core.room.core.RoomDataService;
import com.chwl.core.room.pk.event.PKDataUpdateEvent;
import com.chwl.core.room.queue.bean.MicMemberInfo;
import com.chwl.core.support.room.AudioRoomContext;
import com.chwl.core.support.room.RoomAbility;
import com.chwl.core.support.room.RoomContext;
@@ -79,6 +83,7 @@ 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.concurrent.TimeUnit;
@@ -110,8 +115,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
private PKMicQueueDialog pkMicQueueDialog;
private Disposable roomPkOrderDisposable;
private boolean hasBaishunGames;
public static HomePartyRoomFragment newInstance() {
HomePartyRoomFragment roomFragment = new HomePartyRoomFragment();
Bundle bundle = new Bundle();
@@ -160,35 +163,8 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
updateQueuingMicBtn();
updatePkScoreBoard();
initRoomPkOrder(AvRoomDataManager.get().showPkBeginTime, AvRoomDataManager.get().pkBeginTime);
requestData();
}
private void requestData() {
RoomContext roomContext = AudioRoomContext.Companion.get();
if (roomContext != null) {
RoomDataService dataService = roomContext.findAbility(RoomDataService.class.getSimpleName());
if (dataService != null) {
String cacheKey = "gameplay_list#" + hashCode();
Disposable disposable = AvRoomModel.get().getRoomGamePlayList().doOnError(new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
hasBaishunGames = false;
updateConfigButtonArea();
}
}).subscribe(new Consumer<List<RoomIcon>>() {
@Override
public void accept(List<RoomIcon> roomIcons) throws Exception {
if (dataService != null) {
dataService.putData(cacheKey, roomIcons);
}
hasBaishunGames = roomIcons.size() > 0;
updateConfigButtonArea();
}
});
}
}
}
@Override
public void onReceiveRoomEvent(RoomEvent roomEvent) {
@@ -236,7 +212,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
gameBinding.setRoomInfo(AvRoomDataManager.get().mCurrentRoomInfo);
updateQueuingMicBtn();
updatePkScoreBoard();
updateConfigButtonArea();
getMvpPresenter().updateLeaveMode();
break;
case RoomEvent.ENTER_ROOM:
@@ -510,7 +485,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
updateMicroView();
changeModelShowView();
refreshDatingNextStatus();
// updateConfigButtonArea();
}
protected void updateMicroView(){
@@ -538,29 +512,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment<IHomePartyView, Home
refreshDatingNextStatus();
}
public void updateConfigButtonArea() {
RightBottomIconConfig configModel = AvRoomDataManager.get().rightBottomIconConfig;
if (configModel == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
if (configModel.getIcon1Url() == null) {
gameBinding.ivConfigEntrance.setVisibility(View.GONE);
} else {
ImageLoadUtils.loadAvatar(configModel.getIcon1Url(), gameBinding.ivConfigEntrance);
gameBinding.ivConfigEntrance.setVisibility(View.VISIBLE);
}
if (configModel.getIcon2Url() != null) {
ImageLoadUtils.loadAvatar(configModel.getIcon2Url(), gameBinding.ivGame);
}
}
if (hasBaishunGames) {
gameBinding.ivGame.setVisibility(View.VISIBLE);
}else {
gameBinding.ivGame.setVisibility(View.GONE);
}
}
private void updateQueuingMicBtn() {
if (AvRoomDataManager.get().mCurrentRoomInfo != null) {

View File

@@ -68,7 +68,6 @@ class SingleRoomFragment : BaseRoomFragment<ISingleRoomView?, SingleRoomPresente
private lateinit var gameBinding: FragmentSingleRoomBinding
private lateinit var upMicDialog: RequestUpMicDialog
private var hasBaishunGames = false
private val fansTeamViewModel: FansTeamViewModel by viewModels()
override fun getRootLayoutId(): Int {

View File

@@ -12,34 +12,37 @@ import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.chwl.core.manager.AvRoomDataManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.chwl.library.utils.SizeUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import com.chwl.app.R;
import com.chwl.app.avroom.BottomViewListenerWrapper;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
import com.chwl.app.room_chat.activity.RoomMsgActivity;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.contacts.MyConstant;
import com.chwl.core.helper.ImHelperUtils;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.manager.IMMessageManager;
import com.chwl.core.pay.event.FirstChargeEvent;
import com.chwl.core.room.bean.RoomInfo;
import com.chwl.core.room.bean.RoomModeType;
import com.chwl.core.super_admin.util.SuperAdminUtil;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.SharedPreferenceUtils;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.chwl.library.utils.ListUtils;
import com.netease.nim.uikit.api.NimUIKit;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
import com.netease.nimlib.sdk.msg.model.RecentContact;
import com.netease.nimlib.sdk.uinfo.model.UserInfo;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
@@ -78,6 +81,9 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
@Nullable
private PopupWindow msgTipPopupWindow;
private PopupWindow micSetPopupWindow;
private int bottomHeight;
private int micSetHeight;
@NonNull
private final Runnable msgRunnable = this::dismissMsgPopupWindow;
@@ -129,6 +135,22 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
sendGift.setVisibility(GONE);
sendMsgInput.setVisibility(GONE);
}
iconRoomMsg.post(() -> {
bottomHeight = iconRoomMsg.getHeight();
View view = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null);
view.setVisibility(View.INVISIBLE);
ViewGroup parent = (ViewGroup) this.getParent();
parent.addView(view);
view.post(() -> {
micSetHeight = view.getHeight();
try {
parent.removeView(view);
}catch (Exception e){
}
});
});
}
@Override
@@ -227,11 +249,45 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
}
public void setMicBtnOpen(boolean isOpen) {
if(openMic == null){
return;
}
// if (isOpen) {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
// } else {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
// }
if (isOpen) {
openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
if (AudioEngineManager.get().isNotRecord()) {
openMic.setImageResource(R.drawable.room_menu_ic_mic_music);
} else {
openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
}
} else {
openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
}
//
// RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
// if (currentRoomInfo != null) {
// openMic.setEnabled(true);
// if(!AudioEngineManager.get().isMute()){
// if (AudioEngineManager.get().isNotRecord()) {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_music);
// } else {
// openMic.setImageResource(R.drawable.room_menu_ic_mic_open);
// }
// }else{
// openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
// }
// } else {
// openMic.setEnabled(false);
// openMic.setImageResource(R.drawable.room_menu_ic_mic_close);
// }
}
public void setRemoteMuteOpen(boolean isOpen) {
@@ -317,10 +373,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
public void onClick(View v) {
switch (v.getId()) {
case R.id.icon_room_open_mic:
if (wrapper != null) {
wrapper.onOpenMicBtnClick();
}
// showMicSetDialog(openMic);
showMicSetDialog(openMic);
break;
case R.id.tv_room_send_msg_input:
@@ -468,29 +521,48 @@ public class BottomView extends LinearLayout implements View.OnClickListener {
contentView = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null);
micSetPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
micSetPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
micSetPopupWindow.setOutsideTouchable(true);
// micSetPopupWindow.setTouchable(true);
// micSetPopupWindow.setFocusable(false);
// micSetPopupWindow.setAnimationStyle(R.style.style_anim_mic_set);
} else {
if (micSetPopupWindow.isShowing()) return;
contentView = micSetPopupWindow.getContentView();
}
contentView.post(() -> {
LogUtils.d("height = "+contentView.getHeight());
});
ImageView micOff = contentView.findViewById(R.id.micOff);
ImageView micMusic = contentView.findViewById(R.id.micMusic);
ImageView micOn = contentView.findViewById(R.id.micOn);
micOff.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micMusic.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
});
micOn.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.open);
}
});
micMusic.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.music);
}
});
micOff.setOnClickListener(v -> {
micSetPopupWindow.dismiss();
if (wrapper != null) {
wrapper.onOpenMicBtnClick(MyConstant.MicType.close);
}
});
int[] vLoc = new int[2];
parent.getLocationInWindow(vLoc);
try {
micSetPopupWindow.showAsDropDown(parent,0, -ScreenUtil.dip2px(180),Gravity.CENTER_HORIZONTAL);
micSetPopupWindow.showAsDropDown(parent,0,-(bottomHeight+micSetHeight),Gravity.BOTTOM);
} catch (Exception e) {
e.printStackTrace();
}

View File

@@ -12,13 +12,13 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.RelativeLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.chwl.library.utils.PathHelper;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
import com.chwl.library.download.DownloadTask;
import com.chwl.library.download.FileDownloadListener;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.chwl.library.common.glide.GlideUtils;
import com.example.lib_utils.log.LogUtil;
import com.netease.nim.uikit.common.util.string.StringUtil;
import com.opensource.svgaplayer.SVGACallback;
@@ -205,22 +205,44 @@ public class GiftEffectView extends RelativeLayout {
private void drawSvgaEffect(String url) {
log("drawSvgaEffect url:" + url);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener<File>() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
drawSvgaEffectFile(path);
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
log("drawSvgaEffect onDownloadError url:" + url);
effectHandler.sendEmptyMessage(0);
return true;
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
log("drawSvgaEffect onDownloadError url:" + url);
effectHandler.sendEmptyMessage(0);
public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
if (resource != null) {
String path = resource.getPath();
log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
drawSvgaEffectFile(path);
}
return true;
}
});
// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
// @Override
// public void onDownloadCompleted(@NonNull DownloadTask task) {
// String path = task.getRequest().getPath();
// log("drawSvgaEffect onDownloadCompleted url:" + url + " path:" + path);
// drawSvgaEffectFile(path);
// }
//
// @Override
// public void onDownloadError(@NonNull DownloadException exception) {
// log("drawSvgaEffect onDownloadError url:" + url);
// effectHandler.sendEmptyMessage(0);
// }
// });
}
private void drawSvgaEffectFile(String path) {
@@ -236,23 +258,45 @@ public class GiftEffectView extends RelativeLayout {
private void drawVAPEffect(String url) {
log("drawVAPEffect url:" + url);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener<File>() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + path);
vapAnimView.startPlay(new File(path));
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
log("drawVAPEffect onDownloadError url:" + url);
effectHandler.sendEmptyMessageDelayed(0, 4000);
return true;
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
log("drawVAPEffect onDownloadError url:" + url);
exception.printStackTrace();
effectHandler.sendEmptyMessageDelayed(0, 4000);
public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
if (resource != null) {
log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + resource.getPath());
vapAnimView.startPlay(resource);
}
return true;
}
});
// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, DOWNLOAD_TAG, null, 60000L);
// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
// @Override
// public void onDownloadCompleted(@NonNull DownloadTask task) {
// String path = task.getRequest().getPath();
// log("drawVAPEffect onDownloadCompleted url:" + url + " path:" + path);
// vapAnimView.startPlay(new File(path));
// }
//
// @Override
// public void onDownloadError(@NonNull DownloadException exception) {
// log("drawVAPEffect onDownloadError url:" + url);
// exception.printStackTrace();
// effectHandler.sendEmptyMessageDelayed(0, 4000);
// }
// });
}
private void deleteAnim() {
@@ -270,7 +314,6 @@ public class GiftEffectView extends RelativeLayout {
public void release() {
log("release");
DownloadManager.INSTANCE.stopTag(DOWNLOAD_TAG);
effectHandler.removeMessages(0);
}

View File

@@ -1,5 +1,7 @@
package com.chwl.app.avroom.widget;
import static com.chwl.core.im.custom.bean.CustomAttachment.BOOM_FIRST;
import static com.chwl.core.im.custom.bean.CustomAttachment.BOOM_SECOND_DIALOG;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_FAIRY;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GIFT_COMPOUND;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MSG_RED_PACKAGE;
@@ -32,6 +34,7 @@ import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.text.Editable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.method.LinkMovementMethod;
import android.text.style.ForegroundColorSpan;
@@ -58,8 +61,11 @@ import com.chwl.app.photo.BigPhotoActivity;
import com.chwl.app.photo.PagerOption;
import com.chwl.app.ui.widget.TextSpannableBuilder;
import com.chwl.app.utils.ObjectTypeHelper;
import com.chwl.core.gift.bean.BoomMsgDialogBean;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.chwl.core.im.custom.bean.TemplateMessageAttachment;
import com.chwl.core.monsterhunting.bean.MonsterDataBean;
import com.chwl.core.utils.LogUtils;
import com.chwl.core.utils.extension.StringExtensionKt;
import com.example.lib_utils.UiUtils;
import com.netease.nim.uikit.business.uinfo.UserInfoHelper;
@@ -222,7 +228,9 @@ public class MessageView extends FrameLayout {
private static final int LOAD_MESSAGE_COUNT = 10;
private final int textColor = 0x80ffffff;
private final List<ChatRoomMessage> atMessages = new ArrayList<>();
private final List<ChatRoomMessage> chatRoomMessages = new LinkedList<>();
private final List<ChatRoomMessage> allMessages = new LinkedList<>();
private final List<ChatRoomMessage> giftMessages = new LinkedList<>();
private final List<ChatRoomMessage> chatMessages = new LinkedList<>();
private RecyclerView messageListView;
private TextView tvBottomTip;
private TextView tvAtTip;
@@ -244,6 +252,8 @@ public class MessageView extends FrameLayout {
private int expLevelWidth;
private int expLevelHeight;
private int giftLength;
private int boomWidth;
private int boomHeight;
private volatile boolean needAutoScroll = true;//是否自動滾動到底部
private Consumer<String> clickConsumer;
private OnClick onClick;
@@ -251,6 +261,94 @@ public class MessageView extends FrameLayout {
private OnMsgLongClickListener onLongClickListener;
private TemplateMessageAdapter templateMessageAdapter;
//分类
private String mMsgType;
public void setMsgType(String msgType) {
mMsgType = msgType;
if (isAll()) {
mMessageAdapter.setData(allMessages);
} else if (isGift()) {
mMessageAdapter.setData(giftMessages);
} else if (isChat()) {
mMessageAdapter.setData(chatMessages);
}
checkShowAtTip();
mMessageAdapter.notifyDataSetChanged();
messageListView.post(() -> {
needAutoScroll = true;
if (mMessageAdapter.getItemCount() - 1 >= 0) {
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
}
});
}
private boolean isAll() {
return mMsgType.equals(ResUtil.getString(R.string.all));
}
private boolean isChat() {
return mMsgType.equals(ResUtil.getString(R.string.send_msg));
}
private boolean isGift() {
return mMsgType.equals(ResUtil.getString(R.string.send_gift_tab_title));
}
//todo do 消息类型分类 需要进一步判断
private boolean isChatMsg(ChatRoomMessage msg) {
return (msg.getMsgType() == MsgTypeEnum.text);
}
//todo do 消息类型分类 需要进一步判断
private boolean isGiftMsg(ChatRoomMessage msg) {
if (msg.getMsgType() == MsgTypeEnum.custom) {
CustomAttachment attachment = (CustomAttachment) msg.getAttachment();
if (attachment == null) {
return false;
} else {
int first = attachment.getFirst();
int second = attachment.getSecond();
return (first != BOOM_FIRST
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_AUCTION
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_ROOM_TIP
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_FACE
&& first != CustomAttachment.CUSTOM_MESS_HEAD_NOBLE
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_QUEUE
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_SUPER_ADMIN
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_KICK_MIC
&& first != CustomAttachment.CUSTOM_MSG_UPDATE_ROOM_INFO
&& first != CustomAttachment.CUSTOM_MSG_QUEUING_MIC
&& first != CustomAttachment.CUSTOM_MESS_HEAD_ROOM_PK
&& first != CustomAttachment.CUSTOM_MSG_SIGN_IN
&& first != CustomAttachment.CUSTOM_MSG_MINI_WORLD
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_PUBLIC_SCREEN
&& first != CustomAttachment.CUSTOM_MSG_HEADER_TYPE_FOLLOW_ROOM
&& first != CustomAttachment.CUSTOM_MSG_DATING
&& first != CustomAttachment.CUSTOM_MSG_VIP
&& first != CustomAttachment.CUSTOM_MSG_FANS_TEAM
&& first != CustomAttachment.CUSTOM_MSG_ROOM_ALBUM
&& first != CustomAttachment.CUSTOM_MSG_ROOM_TEMPLATE
);
}
} else {
return false;
}
}
private boolean isCurrType(ChatRoomMessage msg) {
boolean isType = false;
if (isAll()) {
isType = true;
} else if (isChat()) {
isType = isChatMsg(msg);
} else if (isGift()) {
isType = isGiftMsg(msg);
}
return isType;
}
public MessageView(Context context) {
this(context, null);
}
@@ -263,6 +361,7 @@ public class MessageView extends FrameLayout {
super(context, attr, i);
init(context);
}
public void setOnLongClickListener(OnMsgLongClickListener onLongClickListener) {
this.onLongClickListener = onLongClickListener;
}
@@ -280,13 +379,35 @@ public class MessageView extends FrameLayout {
super.onAttachedToWindow();
List<ChatRoomMessage> tmpList = AvRoomDataManager.get().getChatRoomMessages();
if (!ListUtils.isListEmpty(tmpList)) {
this.chatRoomMessages.addAll(tmpList);
this.allMessages.addAll(tmpList);
addMsgByType(tmpList, false);
}
if (mMessageAdapter.getItemCount() - 1 >= 0) {
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
}
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
disposable = AvRoomDataManager.get().getChatRoomMsgProcessor()
.subscribe(this::onCurrentRoomReceiveNewMsg);
}
private void addMsgByType(List<ChatRoomMessage> list, boolean isHistory) {
list.forEach(chatRoomMessage -> {
if (!isHistory) {
if (isChatMsg(chatRoomMessage)) {
chatMessages.add(chatRoomMessage);
} else if (isGiftMsg(chatRoomMessage)) {
giftMessages.add(chatRoomMessage);
}
} else {
if (isChatMsg(chatRoomMessage)) {
chatMessages.add(chatMessages.size() > 0 ? 1 : 0, chatRoomMessage);
} else if (isGiftMsg(chatRoomMessage)) {
giftMessages.add(giftMessages.size() > 0 ? 1 : 0, chatRoomMessage);
}
}
});
}
@Override
protected void onDetachedFromWindow() {
if (disposable != null) disposable.dispose();
@@ -311,6 +432,8 @@ public class MessageView extends FrameLayout {
expLevelHeight = Utils.dip2px(context, 18);
expLevelWidth = expLevelHeight * 36 / 18;//expLevelHeight * 114 / 45
giftLength = Utils.dip2px(context, 35);
boomWidth = Utils.dip2px(context, 41);
boomHeight = Utils.dip2px(context, 60);
// 內容區域
layoutManger = new LinearLayoutManager(context, RecyclerView.VERTICAL, false);
FrameLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
@@ -324,7 +447,7 @@ public class MessageView extends FrameLayout {
messageListView.setLayoutManager(layoutManger);
messageListView.addItemDecoration(new DividerItemDecoration(context, layoutManger.getOrientation(), 16, R.color.transparent));
mMessageAdapter = new MessageAdapter(getContext());
mMessageAdapter.setData(chatRoomMessages);
mMessageAdapter.setData(allMessages);
messageListView.setAdapter(mMessageAdapter);
messageListView.setItemAnimator(new MyItemAnimator());
messageListView.getItemAnimator().setAddDuration(0);
@@ -348,7 +471,10 @@ public class MessageView extends FrameLayout {
tvBottomTip.setOnClickListener(v -> {
tvBottomTip.setVisibility(GONE);
needAutoScroll = true;
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
if (mMessageAdapter.getItemCount() - 1 >= 0) {
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
}
});
addView(tvBottomTip);
@@ -366,7 +492,14 @@ public class MessageView extends FrameLayout {
tvAtTip.setVisibility(GONE);
tvAtTip.setOnClickListener(v -> {
if (!atMessages.isEmpty()) {
int scrollIndex = chatRoomMessages.indexOf(atMessages.remove(0));
int scrollIndex = -1;
if (isAll()) {
scrollIndex = allMessages.indexOf(atMessages.remove(0));
} else if (isChat()) {
scrollIndex = chatMessages.indexOf(atMessages.remove(0));
}
if (scrollIndex != -1 && scrollIndex < mMessageAdapter.getItemCount()) {
messageListView.smoothScrollToPosition(scrollIndex);
}
@@ -397,7 +530,7 @@ public class MessageView extends FrameLayout {
if (lastVisibleItemPosition == RecyclerView.NO_POSITION) {
// Logger.e(TAG, "lastCompletelyVisibleItemPosition : RecyclerView.NO_POSITION");
needAutoScroll = true;
} else if (!atMessages.isEmpty() && atMessages.remove(chatRoomMessages.get(lastVisibleItemPosition))) {
} else if (!atMessages.isEmpty() && atMessages.remove(allMessages.get(lastVisibleItemPosition))) {
checkShowAtTip();
}
// Log.e(TAG, "lastVisibleItemPosition:" + lastVisibleItemPosition
@@ -444,31 +577,56 @@ public class MessageView extends FrameLayout {
*/
private void addMessages(ChatRoomMessage msg) {
if (msg == null) return;
chatRoomMessages.add(msg);
allMessages.add(msg);
//通知adapter 刷新
mMessageAdapter.notifyItemInserted(mMessageAdapter.getItemCount() - 1);
List<ChatRoomMessage> msgs = new ArrayList<>();
msgs.add(msg);
addMsgByType(msgs, false);
if (mMessageAdapter.getItemCount() - 1 >= 0 && isCurrType(msg)) {
mMessageAdapter.notifyItemInserted(mMessageAdapter.getItemCount() - 1);
}
showTipsOrScrollToBottom();
checkAtMe(msg, false);
keepSizeUnderLimit();
}
private void addHistoryMessages(List<ChatRoomMessage> messages) {
chatRoomMessages.addAll(chatRoomMessages.size() > 0 ? 1 : 0, messages);
allMessages.addAll(allMessages.size() > 0 ? 1 : 0, messages);
addMsgByType(messages, true);
mMessageAdapter.notifyDataSetChanged();
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
if (mMessageAdapter.getItemCount() - 1 >= 0) {
messageListView.scrollToPosition(mMessageAdapter.getItemCount() - 1);
}
for (ChatRoomMessage message : messages) {
checkAtMe(message, true);
}
}
private void keepSizeUnderLimit() {
while (chatRoomMessages.size() > MAX_MESSAGE_SIZE) {
Log.i("keepSizeUnderLimit", "size" + chatRoomMessages.size());
ChatRoomMessage message = chatRoomMessages.remove(0);
if (atMessages.remove(message)) {
checkShowAtTip();
while (allMessages.size() > MAX_MESSAGE_SIZE) {
Log.i("keepSizeUnderLimit", "size" + allMessages.size());
ChatRoomMessage message = allMessages.remove(0);
if (isAll()) {
if (atMessages.remove(message)) {
checkShowAtTip();
}
}
mMessageAdapter.notifyItemRemoved(0);
}
while (chatMessages.size() > MAX_MESSAGE_SIZE) {
chatMessages.remove(0);
if (isChat()) {
mMessageAdapter.notifyItemRemoved(0);
}
}
while (giftMessages.size() > MAX_MESSAGE_SIZE) {
giftMessages.remove(0);
if (isGift()) {
mMessageAdapter.notifyItemRemoved(0);
}
}
}
private void checkShowAtTip() {
@@ -507,7 +665,10 @@ public class MessageView extends FrameLayout {
}
return;
}
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
if (mMessageAdapter.getItemCount() - 1 >= 0) {
messageListView.smoothScrollToPosition(mMessageAdapter.getItemCount() - 1);
}
}
public void release() {
@@ -522,7 +683,7 @@ public class MessageView extends FrameLayout {
* @param b
*/
public void changeFollowStatus(int position, boolean b) {
ChatRoomMessage chatRoomMessage = chatRoomMessages.get(position);
ChatRoomMessage chatRoomMessage = allMessages.get(position);
if (!(chatRoomMessage.getAttachment() instanceof RoomFollowOwnerAttachment)) {
return;
}
@@ -539,7 +700,7 @@ public class MessageView extends FrameLayout {
* @param b
*/
public void changeJoinMiniWorldStatus(int position, boolean b) {
ChatRoomMessage chatRoomMessage = chatRoomMessages.get(position);
ChatRoomMessage chatRoomMessage = allMessages.get(position);
if (!(chatRoomMessage.getAttachment() instanceof JoinMiniWorldAttachment)) {
return;
}
@@ -550,7 +711,9 @@ public class MessageView extends FrameLayout {
public void clear() {
if (mMessageAdapter != null) {
chatRoomMessages.clear();
allMessages.clear();
chatMessages.clear();
giftMessages.clear();
mMessageAdapter.notifyDataSetChanged();
}
if (tvBottomTip != null) {
@@ -563,7 +726,7 @@ public class MessageView extends FrameLayout {
this.needAutoScroll = needAutoScroll;
}
public RecyclerView getMessageListView(){
public RecyclerView getMessageListView() {
return messageListView;
}
@@ -583,7 +746,7 @@ public class MessageView extends FrameLayout {
void onShowRoomIntroduction();
}
private class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.MessageViewHolder> implements OnClickListener {
@@ -898,6 +1061,11 @@ public class MessageView extends FrameLayout {
} else {
getTemplateMessageAdapter().convert(tvContent, null);
}
} else if (first == BOOM_FIRST) {
if (second == BOOM_SECOND_DIALOG) {
BoomMsgAttachment boomMsgAttachment = (BoomMsgAttachment) chatRoomMessage.getAttachment();
setMsgBoom(tvContent, boomMsgAttachment);
}
} else {
tvContent.setTextColor(Color.WHITE);
tvContent.setText(tvContent.getResources().getText(R.string.not_support_message_tip));
@@ -1004,7 +1172,7 @@ public class MessageView extends FrameLayout {
}
private boolean hadUnlock(int photoId) {
List<Integer> unlockedIds= AvRoomDataManager.get().getUnlockedRoomAlbumPhotos();
List<Integer> unlockedIds = AvRoomDataManager.get().getUnlockedRoomAlbumPhotos();
return unlockedIds.contains(photoId);
}
@@ -2581,6 +2749,39 @@ public class MessageView extends FrameLayout {
tvContent.setMovementMethod(new LinkMovementMethod());
}
/**
* {boom图片} 恭喜! {用户名} 触发了超级大奖BOOM...
*/
private void setMsgBoom(TextView tvContent, BoomMsgAttachment boomMsgAttachment) {
if (boomMsgAttachment == null || boomMsgAttachment.DialogBean == null) return;
BoomMsgDialogBean data = boomMsgAttachment.DialogBean;
String boomUrl = data.getPic();
String nick = RegexUtil.getPrintableString(data.getNick());
String text = ResUtil.getString(R.string.roomBoomMessageView, nick);
// tvContent.setText(text);
SpannableString spStr = new SpannableString(text);
int start = text.indexOf(nick);
int end = start + nick.length();
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#FF3b3b"));
spStr.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextSpannableBuilder textSpan = new TextSpannableBuilder(tvContent)
.append(boomUrl, boomWidth, boomHeight)
.append(spStr);
// TextSpannableBuilder textSpan = new TextSpannableBuilder(tvContent)
// .append(boomUrl, boomWidth, boomHeight)
// .append(ResUtil.getString(R.string.avroom_widget_roomeffectview_04), new ForegroundColorSpan(getResources().getColor(R.color.white)))
// .append(" "+nick+" ", new ForegroundColorSpan(Color.parseColor("#FF3b3b")))
// .append(ResUtil.getString(R.string.roomBoomMessageView), new ForegroundColorSpan(getResources().getColor(R.color.white)));
tvContent.setText(textSpan.build());
tvContent.setOnClickListener(null);
tvContent.setMovementMethod(new LinkMovementMethod());
tvContent.setBackgroundResource(R.drawable.shape_room_message_bg);
}
/**
* {badge}xxx來了
*

View File

@@ -138,6 +138,48 @@ class TemplateMessageAdapter(val listener: Listener?) {
textView.movementMethod = LinkMovementMethod()
}
fun convertText(textView: TextView, attachment: TemplateMessage?) {
if (attachment == null) {
textView.text = ""
return
}
val nodeList = attachment.getNodeList()
val textBuilder = TextSpannableBuilder(textView)
nodeList.forEach {
if (it is TemplateNode.NormalNode) {
val textColor = parseColor(it.textColor)
if (textColor != null) {
textBuilder.append(it.text, ForegroundColorSpan(textColor))
} else {
textBuilder.append(it.text)
}
} else if (it is TemplateNode.SpecialNode) {
when (it.content.type) {
Content.TEXT -> {
val text = it.content.text?.getFirstText()
if (!text.isNullOrEmpty()) {
val textColor = parseColor(it.content.textColor)
val clickSpan = createClickSpan(textView.context, it.content, listener)
val list = ArrayList<Any>()
if (textColor != null) {
list.add(ForegroundColorSpan(textColor))
}
if (clickSpan != null) {
list.add(clickSpan)
}
textBuilder.append(text, *list.toArray())
}
}
}
}
}
textView.text = textBuilder.build()
textView.setOnClickListener(null)
textView.movementMethod = LinkMovementMethod()
}
private fun createClickSpan(
context: Context,
content: Content,

View File

@@ -1,6 +1,8 @@
package com.chwl.app.base;
import static com.chwl.core.Constants.DEBUG_MAX_UID;
import static com.chwl.core.im.custom.bean.CustomAttachment.BOOM_FIRST;
import static com.chwl.core.im.custom.bean.CustomAttachment.BOOM_SECOND_DIALOG;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_HEAD_NOBLE;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_OPENNOBLE;
import static com.chwl.core.im.custom.bean.CustomAttachment.CUSTOM_MESS_SUB_RENEWNOBLE;
@@ -28,7 +30,6 @@ import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.StyleSpan;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
@@ -46,13 +47,23 @@ import androidx.fragment.app.FragmentManager;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.chwl.app.notify.GlobalNotifyManager;
import com.chwl.app.utils.RoomBoomManager;
import com.chwl.core.gift.bean.BoomMsgAnimBean;
import com.chwl.core.gift.bean.BoomMsgDialogBean;
import com.chwl.core.im.custom.bean.BoomMsgAttachment;
import com.chwl.core.manager.AvRoomDataManager;
import com.chwl.core.utils.LogUtils;
import com.chwl.library.language.LanguageHelper;
import com.example.lib_utils.UiUtils;
import com.google.gson.Gson;
import com.netease.nim.uikit.common.util.log.LogUtil;
import com.netease.nimlib.chatroom.model.ChatRoomMessageImpl;
import com.netease.nimlib.sdk.NIMSDK;
import com.netease.nimlib.sdk.Observer;
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
import com.netease.nimlib.sdk.msg.constant.MsgTypeEnum;
import com.netease.nimlib.sdk.msg.model.BroadcastMessage;
import com.netease.nimlib.session.IMMessageImpl;
import com.orhanobut.logger.Logger;
import com.readystatesoftware.systembartint.SystemBarTintManager;
import com.tbruyelle.rxpermissions2.RxPermissions;
@@ -1173,8 +1184,29 @@ public abstract class BaseActivity extends RxAppCompatActivity
}
}
break;
case BOOM_FIRST:
if (second == BOOM_SECOND_DIALOG) {
LogUtils.d(" RoomBoomManager BaseAct BOOM_SECOND_DIALOG start");
BoomMsgDialogBean bean = JSON.parseObject(String.valueOf(baseProtocol.getData()), BoomMsgDialogBean.class);
if (bean == null) return;
if (bean.getPartitionId() != UserModel.get().getPartitionId()) return;
//全服飘屏
RoomBoomManager.INSTANCE.addDialog(bean);
//房间内动画跟进度
RoomBoomManager.INSTANCE.notify(bean);
//房间内公屏
BoomMsgAttachment boomMsgAttachment = new BoomMsgAttachment(BOOM_FIRST, BOOM_SECOND_DIALOG);
boomMsgAttachment.DialogBean = bean;
ChatRoomMessage chatRoomMessage = new ChatRoomMessageImpl();
chatRoomMessage.setAttachment(boomMsgAttachment);
((IMMessageImpl)chatRoomMessage).setMsgType(MsgTypeEnum.custom.getValue());
AvRoomDataManager.get().addChatRoomMessage(chatRoomMessage);
}
break;
default:
break;
}
}

View File

@@ -3,7 +3,12 @@ package com.chwl.app.decoration.adapter;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.chwl.app.R;
import com.chwl.app.bindadapter.BaseAdapter;
import com.chwl.app.bindadapter.BindingViewHolder;
@@ -11,13 +16,8 @@ import com.chwl.app.databinding.ItemMyUserCardWearBinding;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.decoration.headwear.bean.UserCardWearInfo;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
import com.chwl.library.download.DownloadTask;
import com.chwl.library.download.FileDownloadListener;
import com.chwl.library.common.glide.GlideUtils;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.PathHelper;
import java.io.File;
@@ -37,21 +37,37 @@ public class MyUserCardWearAdapter extends BaseAdapter<UserCardWearInfo> {
ItemMyUserCardWearBinding binding = (ItemMyUserCardWearBinding) helper.getBinding();
binding.ivUserCardWearMp4.setLoop(Integer.MAX_VALUE);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(item.getPic());
DownloadRequest request = DownloadRequest.Companion.build(item.getPic(), filePath, "gift_effect_download", null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
GlideUtils.instance().downloadFromUrl(binding.ivUserCardWearMp4.getContext(), item.getPic(), new RequestListener<File>() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
binding.ivUserCardWearMp4.startPlay(new File(path));
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
return true;
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
if (resource != null) {
binding.ivUserCardWearMp4.startPlay(resource);
}
return true;
}
});
// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(item.getPic());
// DownloadRequest request = DownloadRequest.Companion.build(item.getPic(), filePath, "gift_effect_download", null, 60000L);
// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
// @Override
// public void onDownloadCompleted(@NonNull DownloadTask task) {
// String path = task.getRequest().getPath();
// binding.ivUserCardWearMp4.startPlay(new File(path));
// }
//
// @Override
// public void onDownloadError(@NonNull DownloadException exception) {
// ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
// }
// });
helper.addOnClickListener(R.id.tv_used);

View File

@@ -13,12 +13,16 @@ 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.loadAnim
import com.chwl.app.ui.utils.loadFromAssets
import com.chwl.core.home.bean.HomeRoomInfo
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setVis
import com.example.lib_utils.AppUtils
import com.example.lib_utils.UiUtils
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAImageView
import com.tencent.qgame.animplayer.AnimView
/**
* create by lvzebiao @2019/11/13
@@ -105,5 +109,21 @@ class HomeRoomAdapter : BaseQuickAdapter<HomeRoomInfo, BaseViewHolder>(R.layout.
pkView.isVisible = false
pkView.stopAnimation()
}
val boomIcon = helper.getView<ImageView>(R.id.boomIcon)
val boomAnim = helper.getView<AnimView>(R.id.boomAnim)
boomIcon.setVis(false)
boomAnim.setVis(false)
if (item.isRoomBoom) {
if (item.roomBoomPic.isVerify()) {
boomIcon.load(item.roomBoomPic)
boomIcon.setVis(true)
}else if (item.roomBoomVapUrl.isVerify()){
boomAnim.loadAnim(item.roomBoomVapUrl)
boomAnim.setVis(true)
}
}
}
}

View File

@@ -82,6 +82,7 @@ class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(
.setLayoutManager(LinearLayoutManager(mContext))
.build()
adapter.setOnLoadMoreListener({
loadData(false)
}, binding.mRecyclerRoom)

View File

@@ -11,13 +11,13 @@ import android.view.View.OnLongClickListener
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.activityViewModels
import androidx.fragment.app.viewModels
import com.chwl.app.BuildConfig
import com.chwl.app.R
import com.chwl.app.UIHelper
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.RoomNotifyCpBindDialog
import com.chwl.app.avroom.dialog.RoomNotifyLevelUpDialog
import com.chwl.app.avroom.dialog.RoomBoomRewardDialog
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseFragment
import com.chwl.app.databinding.FragmentMeBinding
@@ -36,11 +36,13 @@ import com.chwl.app.ui.relation.FansListActivity
import com.chwl.app.ui.utils.ImageLoadUtils
import com.chwl.app.ui.wallet.WalletActivity
import com.chwl.app.ui.webview.CommonWebViewActivity
import com.chwl.app.ui.widget.UserInfoDialog
import com.chwl.app.view.GenderAgeTextView
import com.chwl.app.vip.VipCenterActivity
import com.chwl.app.vip.VipViewModel
import com.chwl.app.vip.dialog.VipUpgradeDialog
import com.chwl.core.auth.AuthModel
import com.chwl.core.gift.bean.CpMsgBean
import com.chwl.core.gift.bean.BoomMsgAwardBean
import com.chwl.core.initial.InitialModel
import com.chwl.core.level.UserLevelVo
import com.chwl.core.manager.IMNetEaseManager
@@ -369,6 +371,28 @@ class MeFragment : BaseFragment(), View.OnClickListener {
ReportManager.get().reportEvent(IReportConstants.PAYPAGE_SHOW, map)
}
R.id.tv_user_name -> {
//todo do 测试按钮
if (BuildConfig.DEBUG) {
// val data1 = arrayListOf<BoomMsgAwardBean>()
// for (i in 0 until 10) {
// data1.add(BoomMsgAwardBean().apply {
// awardPic = "http://beta.img.pekolive.com/FpHRJteaNhJrb-ZBvS3cweeZoPV4?imageslim"
// uid = AuthModel.get().currentUid
// })
// }
// RoomBoomRewardDialog(requireContext()).apply {
// list = data1
// }.show()
// VipUpgradeDialog.newInstance(VipInfo(vipName = "v1", vipLogo = "https://image.pekolive.com/v5.mp4")).show(requireContext())
UserInfoDialog.showNewUserInfoDialog(requireContext(),AuthModel.get().currentUid)
}
}
else -> {}
}
}

View File

@@ -154,6 +154,8 @@ object GlobalNotifyManager : Observer<BroadcastMessage>, ILog {
// 通用飘屏
CustomAttachment.CUSTOM_MSG_TEMPLATE_NOTIFY -> {
if (protocol.second == CustomAttachment.CUSTOM_MSG_TEMPLATE_NOTIFY_ALL) {
//todo do 通用飘屏不在房间外显示
if (AvRoomDataManager.get().mCurrentRoomInfo == null) return
val data = Gson().fromJson<RoomTemplateNotifyMsgBean>(
protocol.data.toString(),
RoomTemplateNotifyMsgBean::class.java

View File

@@ -1,6 +1,7 @@
package com.chwl.app.notify
import android.content.Context
import com.chwl.app.notify.views.BaiShunGameNotify
import com.chwl.app.notify.views.FindLoveImageNotify
import com.chwl.app.notify.views.TemplateImageNotify
import com.chwl.app.notify.views.TemplateSvgaNotify
@@ -11,6 +12,7 @@ import com.chwl.app.support.float.FloatView
import com.chwl.app.support.float.FloatViewAdapter
import com.chwl.app.support.float.FloatWindow
import com.chwl.core.gift.bean.LuckyBagNoticeInfo
import com.chwl.core.home.bean.BannerInfo.SKIP_TYPE_ROOM_BAI_SHUN
import com.chwl.core.im.custom.bean.CustomAttachment
import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment
import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean
@@ -19,12 +21,16 @@ import com.chwl.core.noble.bean.AllServiceGiftProtocol
class NotifyAdapter : FloatViewAdapter {
var onShowUserCard: ((String) -> Unit)? = null
//todo do 通用飘屏
override fun onCreateFloatView(context: Context, item: Any): FloatView? {
when (item) {
// 通用飘屏
is RoomTemplateNotifyMsgBean -> {
if (item.resourceType == RoomTemplateNotifyMsgBean.TYPE_IMAGE) {
if (item.skipType == SKIP_TYPE_ROOM_BAI_SHUN) {
return BaiShunGameNotify(context).apply {
onShowUserCard = this@NotifyAdapter.onShowUserCard
}
}else if (item.resourceType == RoomTemplateNotifyMsgBean.TYPE_IMAGE) {
return TemplateImageNotify(context).apply {
onShowUserCard = this@NotifyAdapter.onShowUserCard
}

View File

@@ -10,9 +10,11 @@ import com.chwl.app.support.float.DoubleQueue
import com.chwl.app.support.float.FloatWindowEngine
import com.chwl.app.support.float.SimpleFloatWindow
import com.chwl.app.support.float.SimpleFloatQueue
import com.chwl.core.home.bean.BannerInfo.SKIP_TYPE_ROOM_BAI_SHUN
import com.chwl.core.im.custom.bean.RoomBoxPrizeAttachment
import com.chwl.core.im.custom.bean.RoomReceivedLuckyGiftAttachment
import com.chwl.core.im.custom.bean.RoomTemplateNotifyAttachment
import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean
import com.chwl.core.manager.AvRoomDataManager
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
@@ -99,11 +101,11 @@ class RoomNotifyManager(activity: FragmentActivity) : LifecycleEventObserver, IL
}
private fun onReceiveChatRoomEvent(roomEvent: RoomEvent) {
//todo do 通用飘屏 房间内
when (roomEvent.event) {
// 通用模版
RoomEvent.TEMPLATE_NOTIFY -> {
val attachment =
roomEvent.chatRoomMessage.attachment as? RoomTemplateNotifyAttachment
val attachment = roomEvent.chatRoomMessage.attachment as? RoomTemplateNotifyAttachment
val data = attachment?.getTemplateMsg() ?: return
queue.addLast(data)
}

View File

@@ -0,0 +1,174 @@
package com.chwl.app.notify.views
import android.content.Context
import android.graphics.Color
import android.text.Spannable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.LayoutInflater
import android.widget.ImageView
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.Group
import com.chwl.app.R
import com.chwl.app.avroom.widget.TemplateMessageAdapter
import com.chwl.app.common.widget.CircleImageView
import com.chwl.app.support.float.BaseFloatView
import com.chwl.app.ui.utils.loadImage
import com.chwl.core.gift.event.NotifyEvent
import com.chwl.core.im.custom.bean.RoomTemplateNotifyMsgBean
import com.chwl.core.im.custom.bean.TemplateMessage.Content
import com.chwl.library.common.util.isVerify
import com.chwl.library.common.util.setVis
import com.chwl.library.widget.SVGAView
import com.opensource.svgaplayer.SVGADrawable
import com.opensource.svgaplayer.SVGAParser
import com.opensource.svgaplayer.SVGAVideoEntity
import org.greenrobot.eventbus.EventBus
import java.net.URL
class BaiShunGameNotify(context: Context) : BaseFloatView(context),
TemplateMessageAdapter.Listener {
private val templateMessageAdapter = TemplateMessageAdapter(this)
var onShowUserCard: ((String) -> Unit)? = null
init {
LayoutInflater.from(context).inflate(R.layout.layout_template_notify_baishun, this, true)
}
override fun onBind(item: Any) {
val data = item as? RoomTemplateNotifyMsgBean
if (data == null) {
requestRemoveSelf()
return
}
val svgaView = findViewById<SVGAView>(R.id.iv_bg)
val textView = findViewById<TextView>(R.id.tv_text)
if (data.resourceType == RoomTemplateNotifyMsgBean.TYPE_SVGA && data.resourceContent.isVerify()) {
SVGAParser.shareParser().decodeFromURL(
URL(data.resourceContent),
object : SVGAParser.ParseCompletion {
override fun onComplete(videoItem: SVGAVideoEntity) {
val width = videoItem.videoSize.width
val height = videoItem.videoSize.height
var dimensionRatio = "75:11"
if (width > 0 && height > 0) {
dimensionRatio = "$width:$height"
}
val params = svgaView.layoutParams as ConstraintLayout.LayoutParams
params.dimensionRatio = dimensionRatio
svgaView.layoutParams = params
val drawable = SVGADrawable(videoItem)
svgaView.setImageDrawable(drawable)
svgaView.startAnimation()
setView2(data,textView)
}
override fun onError() {
requestRemoveSelf()
}
},
null
)
} else {
svgaView.loadFile("svga/baishun_notify_bg.svga")
setView2(data,textView)
}
}
// private fun setView(data:RoomTemplateNotifyMsgBean,textView:TextView) {
// val textSize = data.fontSize?.toFloat() ?: 12f
// val textColor = templateMessageAdapter.parseColor(data.textColor) ?: Color.WHITE
// textView.textSize = textSize
// textView.setTextColor(textColor)
// startEnterAnim()
// templateMessageAdapter.convert(textView, data)
// val go = findViewById<ImageView>(R.id.go)
// go.setVis(true)
// go.setOnClickListener {
// val event = NotifyEvent()
// event.action = NotifyEvent.Action.ACT_BAI_SHUN_GAME
// event.data = data.skipContent
// EventBus.getDefault().post(event)
// }
// startDelayRemove()
// }
private fun setView2(data:RoomTemplateNotifyMsgBean,textView:TextView) {
var gameIcon = ""
var avatar = ""
var nick = ""
var diamondNum = ""
val contents = data.contents
val firstText = data.template?.getFirstText()
if (contents.isVerify()) {
contents?.forEachIndexed { index, content ->
if (content.type == Content.TEXT){
if (content.key == "nick"){
nick = content.text?.getFirstText()?:""
}else if (content.key == "diamondNum"){
diamondNum = content.text?.getFirstText()?:""
}
}else if (content.type == Content.IMAGE){
if (content.key == "gameIcon"){
gameIcon = content.image ?:""
}else if (content.key == "avatar"){
avatar = content.image ?:""
}
}
}
}
if (gameIcon.isVerify()) {
val gameIconView = findViewById<ImageView>(R.id.gameIcon)
gameIconView.loadImage(gameIcon)
}
if (avatar.isVerify()) {
val avatarView = findViewById<CircleImageView>(R.id.avatar)
avatarView.loadImage(avatar)
}
// "{gameIcon} {avatar} {nick} Win {diamondNum} Coins"
// if (firstText.isVerify()) {
// val replaceGameIcon = firstText?.replace("{gameIcon}","")
// val replaceAvatar = replaceGameIcon?.replace("{avatar}","")
// val replaceNick = replaceAvatar?.replace("{nick}",nick)
// val replaceDiamondNum = replaceNick?.replace("{diamondNum}",diamondNum)
// var newText = replaceDiamondNum
// if (newText.isVerify()) {
// val spStr = SpannableString(newText)
// val start: Int = newText!!.indexOf(nick)
// val end = start + nick.length
// val colorSpan = ForegroundColorSpan(Color.parseColor("#FF3b3b"))
// spStr.setSpan(colorSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
// }
// }
templateMessageAdapter.convertText(textView, data)
val go = findViewById<ImageView>(R.id.go)
go.setVis(true)
go.setOnClickListener {
val event = NotifyEvent()
event.action = NotifyEvent.Action.ACT_BAI_SHUN_GAME
event.data = data.skipContent
EventBus.getDefault().post(event)
}
val allView = findViewById<Group>(R.id.allView)
startEnterAnim()
allView.setVis(true)
startDelayRemove()
}
override fun onShowUserCard(uid: String) {
onShowUserCard?.invoke(uid)
}
}

View File

@@ -1,16 +1,18 @@
package com.chwl.app.support
import android.annotation.SuppressLint
import android.content.Context
import androidx.lifecycle.viewModelScope
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.chwl.app.BuildConfig
import com.chwl.app.base.BaseViewModel
import com.chwl.library.utils.PathHelper
import com.chwl.core.home.model.HomeModel
import com.chwl.library.common.glide.GlideUtils
import com.chwl.library.common.util.SPUtils
import com.chwl.library.download.DownloadException
import com.chwl.library.download.DownloadListener
import com.chwl.library.download.DownloadManager
import com.chwl.library.download.DownloadRequest
import com.chwl.library.download.DownloadTask
import com.chwl.library.utils.NetworkUtils
import com.example.lib_utils.AppUtils
import com.example.lib_utils.FileUtils2
@@ -18,8 +20,10 @@ import com.example.lib_utils.log.ILog
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import java.io.File
class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
@SuppressLint("StaticFieldLeak")
class PreloadResourceViewModel : BaseViewModel(), ILog , RequestListener<File?> {
private val DOWNLOAD_TAG = "RESOURCE_DOWNLOAD_TAG"
@@ -27,7 +31,10 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
private var isStarted = false
fun start() {
private var mContext : Context? = null
fun start(context: Context) {
mContext = context
if (BuildConfig.DEBUG) {
// 太多请求了,影响查看控制台日志
return
@@ -85,40 +92,53 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
}
private fun downloadTask(url: String) {
val path = PathHelper.generateResourcesFilePath(url)
logI("downloadTask() url:${url} path:${path}")
val request = DownloadRequest.build(
url = url,
path = path,
tag = DOWNLOAD_TAG,
header = null,
timeout = null
)
DownloadManager.download(request, this)
// val path = PathHelper.generateResourcesFilePath(url)
// logI("downloadTask() url:${url} path:${path}")
// val request = DownloadRequest.build(
// url = url,
// path = path,
// tag = DOWNLOAD_TAG,
// header = null,
// timeout = null
// )
// DownloadManager.download(request, this)
GlideUtils.instance().downloadFromUrl(mContext,url,this)
}
override fun onDownloadError(exception: DownloadException) {
super.onDownloadError(exception)
val url = exception.task()?.getRequest()?.getUrl()
logI(
"onDownloadError() url:${url} message:${exception.message}"
)
exception.printStackTrace()
nextTask(url)
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<File?>?,
isFirstResource: Boolean
): Boolean {
if (model is String) {
logI("onDownloadError() url:${model} message:${e?.message}")
nextTask(model)
}
return true
}
override fun onDownloadCompleted(task: DownloadTask) {
super.onDownloadCompleted(task)
val url = task.getRequest().getUrl()
logI(
"onDownloadCompleted() url:${url} path:${
task.getRequest().getPath()
}"
)
makeDownloadRecord(url)
nextTask(url)
override fun onResourceReady(
resource: File?,
model: Any?,
target: Target<File?>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
if (model is String) {
logI("onDownloadCompleted() url:${model} path:${resource?.path}")
makeDownloadRecord(model)
nextTask(null)
}
return true
}
private fun isWifiNet(): Boolean {
return getNetType() == NetworkUtils.NET_WIFI
}
@@ -149,10 +169,12 @@ class PreloadResourceViewModel : BaseViewModel(), DownloadListener, ILog {
val set = getDownloadRecord()
set.add(url)
SPUtils.putStringSet("RESOURCE_DOWNLOAD_COMPLETE", set)
preloadResourceList?.remove(url)
}
override fun onCleared() {
super.onCleared()
DownloadManager.stopTag(DOWNLOAD_TAG)
}
}

View File

@@ -47,7 +47,7 @@ public class LogoutHelper {
activity.toast(ResUtil.getString(R.string.login_helper_logouthelper_013));
} else if (e instanceof BanAccountException) {
BanAccountException exception = (BanAccountException) e;
String text = ResUtil.getString(R.string.login_helper_logouthelper_02) + exception.getMessage() + ResUtil.getString(R.string.login_helper_logouthelper_03);
String text = exception.getMessage() + " " +ResUtil.getString(R.string.login_helper_logouthelper_03);
int start = text.length();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(ResUtil.getString(R.string.login_helper_logouthelper_04), Locale.ENGLISH);
simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT+08"));

View File

@@ -368,7 +368,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
view.setImageResource(if (on) R.drawable.ic_user_edit_sw_on else R.drawable.ic_user_edit_sw_off)
view.tag = on
if (notify) {
//通知 cp设置改变 todo do
//通知 cp设置改变
}
}

View File

@@ -5,12 +5,8 @@ import com.chad.library.adapter.base.BaseQuickAdapter
import com.chad.library.adapter.base.BaseViewHolder
import com.chwl.app.R
import com.chwl.app.ui.utils.load
import com.chwl.app.ui.utils.loadAnim2
import com.chwl.core.user.bean.MedalBean
import com.chwl.library.download.DownloadManager
import com.chwl.library.download.DownloadRequest
import com.chwl.library.download.DownloadTask
import com.chwl.library.download.FileDownloadListener
import com.chwl.library.utils.PathHelper
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.AnimView
import com.tencent.qgame.animplayer.inter.IAnimListener
@@ -46,14 +42,7 @@ class UserInfoMedalAdapter :
}
})
val filePath = PathHelper.generateResourcesFilePath(it)
val request = DownloadRequest.build(it, filePath, "", null, 600000L)
DownloadManager.download(request, object : FileDownloadListener() {
override fun onDownloadCompleted(task: DownloadTask) {
val path = task.getRequest().getPath()
mp4View.startPlay(File(path))
}
})
mp4View.loadAnim2(it)
} else {
val imageView = helper.getView<ImageView>(R.id.iv_image)
imageView.load(item.picUrl,0f,R.drawable.transparent_draw)

View File

@@ -0,0 +1,45 @@
package com.chwl.app.ui.utils
import com.chwl.app.BuildConfig
import com.chwl.app.R
import com.chwl.core.room.bean.RoomIcon
import com.chwl.core.room.game.bean.BaiShunGameConfig
import com.chwl.library.utils.SingleToastUtil
import com.google.gson.Gson
object GameUtil {
fun findGame(gameId:Long,games:List<RoomIcon>): RoomIcon? {
var data : RoomIcon? = null
games?.forEachIndexed { index, roomIcon ->
if (gameId == roomIcon.id) {
data = roomIcon
}
}
return data
}
fun startGame(data : RoomIcon, openGame: (url:String,config:BaiShunGameConfig)->Unit) {
try {
val url = data.skipContent
val ruleValue = Gson().fromJson<RoomIcon.RuleValueBean>(
data.ruleValue,
RoomIcon.RuleValueBean::class.java
)
val config = Gson().fromJson<BaiShunGameConfig>(
ruleValue.RESERVE,
BaiShunGameConfig::class.java
)
if (config != null && url != null) {
config.reloadDynamicParams()
openGame(url, config)
} else {
SingleToastUtil.showToast(R.string.manager_trtc_trtcengineadapter_042)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}

View File

@@ -10,10 +10,14 @@ import androidx.annotation.Dimension
import androidx.annotation.Dimension.Companion.DP
import androidx.annotation.DrawableRes
import androidx.fragment.app.FragmentActivity
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.load.resource.bitmap.CenterCrop
import com.bumptech.glide.load.resource.bitmap.CircleCrop
import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.CustomTarget
import com.bumptech.glide.request.target.Target
import com.bumptech.glide.request.transition.Transition
import com.bumptech.glide.util.Util
import com.netease.nim.uikit.common.util.sys.ScreenUtil
@@ -26,6 +30,7 @@ import com.tencent.qgame.animplayer.AnimView
import com.tencent.qgame.animplayer.util.ScaleType
import com.chwl.app.R
import com.chwl.core.utils.LogUtils
import com.chwl.library.common.glide.GlideUtils
import java.io.File
import java.net.MalformedURLException
import java.net.URL
@@ -174,4 +179,33 @@ fun AnimView.loadAnim(url: String) {
this@loadAnim.startPlay(resource)
}
})
}
fun AnimView.loadAnim2(url: String) {
if (context.isDestroyed()) return
GlideUtils.instance().downloadFromUrl(context,url.trim(),object : RequestListener<File?> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<File?>?,
isFirstResource: Boolean
): Boolean {
return true
}
override fun onResourceReady(
resource: File?,
model: Any?,
target: Target<File?>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
if (resource != null) {
if (this@loadAnim2.isAttachedToWindow){
this@loadAnim2.startPlay(resource)
}
}
return true
}
})
}

View File

@@ -25,6 +25,7 @@ import com.chwl.core.gift.bean.BonsellaJoinAttack
import com.chwl.core.gift.bean.GiftMultiReceiverInfo
import com.chwl.core.gift.bean.GiftType
import com.chwl.core.utils.LogUtils
import com.chwl.library.common.util.setRL
import com.chwl.library.utils.ResUtil
import com.example.lib_utils.UiUtils
import java.util.LinkedList
@@ -259,9 +260,8 @@ class BonsellaJoinAttackLayout @JvmOverloads constructor(
@SuppressLint("SetTextI18n")
fun showUi(bonsellaJoinAttack: BonsellaJoinAttack) {
if (UiUtils.isRtl(context)){
ivLayoutBg.scaleX = -1f
}
ivLayoutBg.setRL()
refreshNum(bonsellaJoinAttack)
tvNick.text = bonsellaJoinAttack.sentUserName

View File

@@ -1784,14 +1784,14 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene
* @param isWholeMic
* @param callback
*/
void onSendGiftBtnClick(GiftInfo giftInfo,
default void onSendGiftBtnClick(GiftInfo giftInfo,
ArrayList<MicMemberInfo> micMemberInfos,
int number,
String msg,
boolean isKnap,
boolean isWholeMic,
@Nullable List<List<Integer>> drawFixedArray,
SenGiftCallback callback);
SenGiftCallback callback){};
}

View File

@@ -32,14 +32,13 @@ import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.core.vip.bean.UserVipInfo;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
import com.chwl.library.download.DownloadTask;
import com.chwl.library.download.FileDownloadListener;
import com.chwl.library.utils.PathHelper;
import com.chwl.library.common.glide.GlideUtils;
import com.chwl.library.widget.SVGAView;
import com.google.android.flexbox.FlexboxLayout;
import com.netease.nim.uikit.common.util.sys.ScreenUtil;
@@ -659,20 +658,38 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
}
private void drawVAPEffect(String url) {
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
DownloadRequest request = DownloadRequest.Companion.build(url, filePath, "gift_effect_download", null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
GlideUtils.instance().downloadFromUrl(getContext(), url, new RequestListener<File>() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
ivUserCardWearMP4.startPlay(new File(path));
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<File> target, boolean isFirstResource) {
ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
return true;
}
@Override
public void onDownloadError(@NonNull DownloadException exception) {
ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
public boolean onResourceReady(File resource, Object model, Target<File> target, DataSource dataSource, boolean isFirstResource) {
if (resource != null) {
ivUserCardWearMP4.startPlay(resource);
}
return true;
}
});
// String filePath = PathHelper.INSTANCE.generateResourcesFilePath(url);
// DownloadRequest request = DownloadRequest.Companion.build(url, filePath, "gift_effect_download", null, 60000L);
// DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
// @Override
// public void onDownloadCompleted(@NonNull DownloadTask task) {
// String path = task.getRequest().getPath();
// ivUserCardWearMP4.startPlay(new File(path));
// }
//
// @Override
// public void onDownloadError(@NonNull DownloadException exception) {
// ImageLoadUtils.loadImage(context, userInfo.getUserInfoCardPic(), ivUserCardWear);
// }
// });
}
private void copyName() {

View File

@@ -0,0 +1,321 @@
package com.chwl.app.utils
import android.annotation.SuppressLint
import android.widget.FrameLayout
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.chwl.app.application.GlobalHandleManager
import com.chwl.app.avroom.dialog.BaseRoomNotifyDialog
import com.chwl.app.avroom.dialog.RoomNotifyBoomDialog
import com.chwl.app.avroom.dialog.RoomBoomRewardDialog
import com.chwl.app.avroom.widget.GalleryLayoutManager.LayoutParams
import com.chwl.core.gift.bean.BoomInfo
import com.chwl.core.gift.bean.BoomMsgAnimBean
import com.chwl.core.gift.bean.BoomMsgAwardList
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.gift.bean.BoomMsgExpPushBean
import com.chwl.core.im.custom.bean.BoomMsgAttachment
import com.chwl.core.im.custom.bean.CustomAttachment.BOOM_FIRST
import com.chwl.core.im.custom.bean.CustomAttachment.BOOM_SECOND_DIALOG
import com.chwl.core.im.custom.bean.CustomAttachment.BOOM_SECOND_EXP_PUSH
import com.chwl.core.manager.IMNetEaseManager
import com.chwl.core.manager.RoomEvent
import com.chwl.core.utils.LogUtils
import com.chwl.library.common.glide.GlideUtils
import com.chwl.library.common.util.isVerify
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.AnimView
import com.tencent.qgame.animplayer.inter.IAnimListener
import java.io.File
import java.util.LinkedList
@SuppressLint("StaticFieldLeak")
object RoomBoomManager {
private var dialog: BaseRoomNotifyDialog<*>? = null
private val queue = LinkedList<BoomMsgDialogBean>()
private val AnimQueue = LinkedList<BoomMsgAnimBean>()
private val awardQueue = LinkedList<BoomMsgAwardList>()
private var mAnimLayout: FrameLayout? = null
var boomInfo : List<BoomInfo>? = null
fun addDialog(data: BoomMsgDialogBean) {
LogUtils.d(" RoomBoomManager addDialog() ")
queue.add(data)
showNextDialog()
}
private fun showNextDialog() {
if (dialog?.isShowing == true) {
return
}
if (queue.isNotEmpty()) {
val data = queue.removeAt(0)
dialog = createDialog(data)
dialog?.mCallBack = object : BaseRoomNotifyDialog.CallBack {
override fun onHide() {
showNextDialog()
}
}
dialog?.showDialog()
}
}
private fun createDialog(bean: BoomMsgDialogBean): BaseRoomNotifyDialog<*>? {
var dialog: BaseRoomNotifyDialog<*>? = null
val activity = GlobalHandleManager.get().activity ?: return null
dialog = RoomNotifyBoomDialog(activity).apply {
data = bean
}
return dialog
}
fun addAnim(data: BoomMsgAnimBean) {
LogUtils.d(" RoomBoomManager addAnim()-- start")
if (mAnimLayout == null) return
AnimQueue.add(data)
LogUtils.d(" RoomBoomManager addAnim()-- end")
showNextAnim()
}
private fun showNextAnim() {
LogUtils.d(" RoomBoomManager showNextAnim()-- start")
if (AnimQueue.isNotEmpty() && mAnimLayout != null && !isAnimStart) {
// val animData = AnimQueue.removeAt(0)
val minBy = AnimQueue.minBy { it.level }
val index = AnimQueue.indexOf(minBy)
val animData = AnimQueue.removeAt(index)
animData?.let { anim ->
val urls = arrayListOf<String>()
if (anim.countDownUrl.isVerify()) urls.add(anim.countDownUrl)
if (anim.endUrl.isVerify()) urls.add(anim.endUrl)
LogUtils.d(" RoomBoomManager showNextAnim()-- end")
startDownAnim(urls, anim)
}
}
}
var isAnimStart = false
private fun startDownAnim(urls: ArrayList<String>, animData: BoomMsgAnimBean) {
LogUtils.d(" RoomBoomManager startDownAnim()")
if (urls.isVerify()) {
isAnimStart = true
urls.forEach { url ->
LogUtils.d(" RoomBoomManager startDownAnim() forEach url=$url")
mAnimLayout?.let { animLayout ->
GlideUtils.instance().downloadFromUrl(
animLayout.context,
url.trim(),
object : RequestListener<File?> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<File?>?,
isFirstResource: Boolean
): Boolean {
LogUtils.d(" RoomBoomManager onLoadFailed()-- end url=$url")
startShowAnim(animLayout, animData, true)
return true
}
override fun onResourceReady(
resource: File?,
model: Any?,
target: Target<File?>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
LogUtils.d(" RoomBoomManager onResourceReady()-- end url=$url")
resource?.let { file ->
if (url == animData.countDownUrl) {
animData.countDownFile = file
} else if (url == animData.endUrl) {
animData.endFile = file
}
}
startShowAnim(animLayout, animData)
return true
}
})
}
}
}
}
private fun startShowAnim(
animLayout: FrameLayout,
animData: BoomMsgAnimBean,
isFailed: Boolean = false
) {
LogUtils.d(" RoomBoomManager startShowAnim()-- animData=$animData isFailed=$isFailed")
if (isFailed) {
startAnimEnd(animData)
} else {
if (animData.countDownFile != null && animData.endFile != null) {
playerAnim(animLayout,animData.countDownFile){
playerAnim(animLayout,animData.endFile){
LogUtils.d(" RoomBoomManager startShowAnim() playerAnim-onVideoComplete() endFile ")
mAnimLayout?.post {
showAwardDialog(animData)
}
}
}
}
}
}
private fun playerAnim(animLayout: FrameLayout,file: File,onComplete : ()->Unit) {
LogUtils.d(" RoomBoomManager playerAnim --start file=${file.name}")
animLayout.post {
animLayout.removeAllViews()
val animView = AnimView(animLayout.context)
animLayout.addView(animView)
val layoutParams = animView.layoutParams
layoutParams.width = LayoutParams.MATCH_PARENT
layoutParams.height = LayoutParams.MATCH_PARENT
animView.layoutParams = layoutParams
// animView.setLoop(1)
animView.setAnimListener(object : IAnimListener {
override fun onFailed(errorType: Int, errorMsg: String?) {
LogUtils.d(" RoomBoomManager playerAnim --playAnim onFailed() file=${file.name} ")
}
override fun onVideoComplete() {
LogUtils.d(" RoomBoomManager playerAnim --playAnim onVideoComplete() file=${file.name} ")
onComplete()
}
override fun onVideoDestroy() {
LogUtils.d(" RoomBoomManager playerAnim --playAnim onVideoDestroy() file=${file.name} ")
}
override fun onVideoRender(frameIndex: Int, config: AnimConfig?) {
}
override fun onVideoStart() {
LogUtils.d(" RoomBoomManager playerAnim --playAnim onVideoStart file=${file.name} ")
}
})
animView.startPlay(file)
}
LogUtils.d(" RoomBoomManager playerAnim --end file=${file.name} ")
}
private fun startAnimEnd(animData: BoomMsgAnimBean, needRemove:Boolean = true) {
LogUtils.d(" RoomBoomManager startAnimEnd ")
isAnimStart = false
if (awardQueue.isVerify()) {
var awardIndex = -1
awardQueue.forEachIndexed { index, boomMsgAwardList ->
if (boomMsgAwardList.list.isVerify()) {
if (animData.level == (boomMsgAwardList.list?.get(0)?.level ?: -1)){
awardIndex = index
}
}
}
LogUtils.d(" RoomBoomManager startAnimEnd find awardIndex =$awardIndex")
if (awardIndex != -1) {
if (needRemove) awardQueue.removeAt(awardIndex)
}
}
showNextAnim()
}
fun addAward(awardList: BoomMsgAwardList) {
LogUtils.d(" RoomBoomManager addAward() -- start")
if (mAnimLayout == null) return
awardQueue.add(awardList)
LogUtils.d(" RoomBoomManager addAward() -- end")
}
private fun showAwardDialog(animData: BoomMsgAnimBean) {
LogUtils.d(" RoomBoomManager showAwardDialog ")
if (awardQueue.isVerify()) {
var awardIndex = -1
awardQueue.forEachIndexed { index, boomMsgAwardList ->
if (boomMsgAwardList.list.isVerify()) {
if (animData.level == (boomMsgAwardList.list?.get(0)?.level ?: -1)) {
awardIndex = index
}
}
}
LogUtils.d(" RoomBoomManager showAwardDialog find awardIndex = $awardIndex")
if (awardIndex != -1) {
val award = awardQueue.removeAt(awardIndex)
if (award.list.isVerify()) {
val activity = GlobalHandleManager.get().activity ?: return
val dialog = RoomBoomRewardDialog(activity)
dialog.list = award.list
dialog.setOnDismissListener {
startAnimEnd(animData,false)
}
dialog.showDialog()
LogUtils.d(" RoomBoomManager showAwardDialog showDialog ")
}
} else {
startAnimEnd(animData)
}
} else {
startAnimEnd(animData)
}
LogUtils.d(" RoomBoomManager showAwardDialog -- end")
}
fun init(view: FrameLayout) {
mAnimLayout = view
}
fun notify(bean: BoomMsgDialogBean) {
LogUtils.d(" RoomBoomManager notify()-- BOOM_SECOND_EXP_PUSH start")
// BOOM_SECOND_DIALOG 是广播消息,在BaseAct 处理
val msg = BoomMsgAttachment(BOOM_FIRST,BOOM_SECOND_EXP_PUSH)
msg.expPushBean = BoomMsgExpPushBean().apply {
pic = bean.pic
level = bean.level
speed = 0
}
IMNetEaseManager.get().chatRoomEventObservable.onNext(
RoomEvent()
.setEvent(RoomEvent.MSG_BOOM)
.setBoomMsg(msg)
)
LogUtils.d(" RoomBoomManager notify()-- BOOM_SECOND_DIALOG start")
val msg2 = BoomMsgAttachment(BOOM_FIRST,BOOM_SECOND_DIALOG)
msg2.DialogBean = bean
IMNetEaseManager.get().chatRoomEventObservable.onNext(
RoomEvent()
.setEvent(RoomEvent.MSG_BOOM)
.setBoomMsg(msg2)
)
LogUtils.d(" RoomBoomManager notify()-- end")
}
fun clear() {
dialog?.clearDialog()
dialog = null
queue.clear()
mAnimLayout = null
AnimQueue.clear()
awardQueue.clear()
boomInfo = null
}
}

View File

@@ -12,7 +12,7 @@ import com.chwl.core.gift.bean.RoomNotifyDialogBean
import com.chwl.core.im.custom.bean.CustomAttachment
import java.util.LinkedList
object RoomNotifyManager {
object RoomNotifyDialogManager {
private val queue = LinkedList<RoomNotifyDialogBean>()
private var dialog : BaseRoomNotifyDialog<*>?=null

View File

@@ -0,0 +1,43 @@
package com.chwl.app.utils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.tencent.qgame.animplayer.AnimConfig;
import com.tencent.qgame.animplayer.inter.IAnimListener;
public class VapAnimListener implements IAnimListener {
@Override
public void onFailed(int i, @Nullable String s) {
//播放发送错误,可能回调多次
}
@Override
public boolean onVideoConfigReady(@NonNull AnimConfig animConfig) {
return false;
}
@Override
public void onVideoStart() {
//开始播放
}
@Override
public void onVideoRender(int i, @Nullable AnimConfig animConfig) {
//每一帧的回调
}
@Override
public void onVideoComplete() {
//播放结束,播放失败也会回调
}
@Override
public void onVideoDestroy() {
//播放器被销毁
}
}

View File

@@ -6,14 +6,13 @@ import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.load.DataSource
import com.bumptech.glide.load.engine.GlideException
import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target
import com.chwl.app.R
import com.chwl.core.vip.bean.VipInfo
import com.chwl.library.download.DownloadException
import com.chwl.library.download.DownloadManager.download
import com.chwl.library.download.DownloadRequest.Companion.build
import com.chwl.library.download.DownloadTask
import com.chwl.library.download.FileDownloadListener
import com.chwl.library.utils.PathHelper.generateResourcesFilePath
import com.chwl.library.common.glide.GlideUtils
import com.chwl.library.utils.ResUtil.getString
import com.tencent.qgame.animplayer.AnimConfig
import com.tencent.qgame.animplayer.AnimView
@@ -137,18 +136,43 @@ class VipCenterBannerAdapter(
})
val filePath = generateResourcesFilePath(data.vipLogo)
val request = build(data.vipLogo, filePath, DOWNLOAD_TAG, null, 60000L)
download(request, object : FileDownloadListener() {
override fun onDownloadCompleted(task: DownloadTask) {
val path = task.getRequest().getPath()
holder.vapAnimView.startPlay(File(path))
//todo do , liulishuo 下载器 换 glide 下载 , 注意 .trim() 去掉前后空格符
GlideUtils.instance().downloadFromUrl(holder.vapAnimView.context,data.vipLogo.trim(),object : RequestListener<File?> {
override fun onLoadFailed(
e: GlideException?,
model: Any?,
target: Target<File?>?,
isFirstResource: Boolean
): Boolean {
return true
}
override fun onDownloadError(exception: DownloadException) {
exception.printStackTrace()
override fun onResourceReady(
resource: File?,
model: Any?,
target: Target<File?>?,
dataSource: DataSource?,
isFirstResource: Boolean
): Boolean {
if (resource != null) {
holder.vapAnimView.startPlay(resource)
}
return true
}
})
// val filePath = generateResourcesFilePath(data.vipLogo)
// val request = build(data.vipLogo, filePath, DOWNLOAD_TAG, null, 60000L)
// download(request, object : FileDownloadListener() {
// override fun onDownloadCompleted(task: DownloadTask) {
// val path = task.getRequest().getPath()
// holder.vapAnimView.startPlay(File(path))
// }
//
// override fun onDownloadError(exception: DownloadException) {
// exception.printStackTrace()
// }
// })
}
inner class BannerViewHolder(view: View) : RecyclerView.ViewHolder(view) {

View File

@@ -10,18 +10,10 @@ import com.opensource.svgaplayer.SVGAVideoEntity
import com.chwl.app.base.BaseActivity
import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogVipUpgradeBinding
import com.chwl.app.ui.utils.loadAnim
import com.chwl.app.ui.utils.loadAnim2
import com.chwl.app.vip.VipViewModel
import com.chwl.core.vip.bean.VipInfo
import com.chwl.library.download.DownloadException
import com.chwl.library.download.DownloadManager.download
import com.chwl.library.download.DownloadRequest
import com.chwl.library.download.DownloadRequest.Companion
import com.chwl.library.download.DownloadTask
import com.chwl.library.download.FileDownloadListener
import com.chwl.library.utils.PathHelper.generateResourcesFilePath
import java.io.File
import java.net.MalformedURLException
import java.net.URL
class VipUpgradeDialog : BaseDialogFragment<DialogVipUpgradeBinding>() {
@@ -62,19 +54,9 @@ class VipUpgradeDialog : BaseDialogFragment<DialogVipUpgradeBinding>() {
binding?.tvVipUplevel?.setOnClickListener { dismissAllowingStateLoss() }
binding?.tvVipOrigin?.setOnClickListener { vm.saveOriginDisguise() }
binding?.ivVipIconMp4?.setLoop(Int.MAX_VALUE)
binding?.ivVipIconMp4?.loadAnim(vipInfo.vipLogo)
val filePath = generateResourcesFilePath(vipInfo.vipLogo)
val request = DownloadRequest.build(vipInfo.vipLogo, filePath, "gift_effect_download", null, 60000L)
download(request, object : FileDownloadListener() {
override fun onDownloadCompleted(task: DownloadTask) {
val path = task.getRequest().getPath()
binding?.ivVipIconMp4?.startPlay(File(path))
}
override fun onDownloadError(exception: DownloadException) {
exception.printStackTrace()
}
})
// try {
// SVGAParser.shareParser()

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,426 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="658dp"
android:layout_gravity="bottom">
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/ic_room_boom_info_bg" />
<FrameLayout
android:id="@+id/recordAnimLayout"
android:layout_width="211dp"
android:layout_height="489dp"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/levelLayoutRoot"
android:layout_width="80dp"
android:layout_height="247dp"
android:layout_marginTop="90dp"
android:orientation="vertical"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" >
<ImageView
android:background="@drawable/ic_room_boom_info_level_bg"
android:id="@+id/levelLayoutBg"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<LinearLayout
android:id="@+id/levelLayout"
android:orientation="vertical"
android:paddingTop="12dp"
android:paddingEnd="11dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
<FrameLayout
android:layout_width="60dp"
android:layout_height="240dp"
android:layout_marginTop="101dp"
android:background="@drawable/ic_room_boom_info_pro_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent">
<View
android:id="@+id/proMax"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="24dp"
android:layout_marginBottom="50dp" />
<com.google.android.material.imageview.ShapeableImageView
android:id="@+id/pro"
android:layout_width="20dp"
android:layout_height="0dp"
tools:layout_height="100dp"
android:scaleType="fitXY"
android:layout_marginStart="1dp"
android:layout_gravity="center_horizontal|bottom"
android:layout_marginTop="24dp"
android:layout_marginBottom="50dp"
app:shapeAppearance="@style/shape_corner_8dp"
android:src="@drawable/ic_room_boom_info_pro" />
<TextView
android:id="@+id/proVal"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_gravity="bottom"
android:layout_marginStart="9dp"
android:layout_marginEnd="5dp"
android:layout_marginBottom="13.5dp"
android:background="@drawable/ic_room_boom_info_pro_val_bg"
android:gravity="center"
android:textColor="#f0e7ba"
android:textSize="15sp"
tools:text="111 " />
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rewardLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:clipToPadding="false"
android:paddingTop="15dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/levelLayoutRoot"
tools:visibility="visible">
<ImageView
android:id="@+id/bg2"
android:layout_width="match_parent"
android:layout_height="240dp"
android:layout_marginHorizontal="10dp"
android:layout_marginBottom="10dp"
android:background="@drawable/ic_room_boom_award_root_bg"
app:layout_constraintBottom_toTopOf="@id/btn2" />
<TextView
android:id="@+id/title2"
android:layout_width="175dp"
android:layout_height="51dp"
android:layout_marginTop="-15dp"
android:background="@drawable/ic_room_boom_award_title_bg"
android:gravity="center"
android:lines="1"
android:text="@string/roomBoomInfoAwardTitle"
android:textColor="#f0e7ba"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/bg2" />
<ImageView
android:id="@+id/more2"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_marginTop="6.5dp"
android:layout_marginEnd="3dp"
android:background="@drawable/ic_room_boom_more"
app:layout_constraintEnd_toEndOf="@id/bg2"
app:layout_constraintTop_toTopOf="@id/title2" />
<TextView
android:id="@+id/hint2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="4.5dp"
android:layout_marginHorizontal="5dp"
android:gravity="center"
android:text="@string/roomBoomInfoAwardHint"
android:textColor="#cba1ff"
android:textSize="10sp"
app:layout_constraintEnd_toEndOf="@id/bg2"
app:layout_constraintStart_toStartOf="@id/bg2"
app:layout_constraintTop_toBottomOf="@id/title2" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rewardList"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="11dp"
app:layout_constraintEnd_toEndOf="@id/bg2"
app:layout_constraintStart_toStartOf="@id/bg2"
app:layout_constraintTop_toBottomOf="@id/hint2">
<ImageView
android:id="@+id/reward1"
android:layout_width="115dp"
android:layout_height="150dp"
android:layout_marginEnd="13dp"
android:background="@drawable/ic_room_boom_info_award_item_bg"
android:padding="10dp"
android:scaleType="fitCenter"
app:layout_constraintEnd_toStartOf="@id/reward2"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
tools:src="@drawable/room_menu_gift_img" />
<ImageView
android:id="@+id/reward2"
android:layout_width="68dp"
android:layout_height="68dp"
android:layout_marginEnd="13dp"
android:background="@drawable/ic_room_boom_info_award_item_bg"
android:padding="7dp"
android:scaleType="fitXY"
app:layout_constraintEnd_toStartOf="@id/reward3"
app:layout_constraintStart_toEndOf="@+id/reward1"
app:layout_constraintTop_toTopOf="@+id/reward1"
tools:src="@drawable/room_menu_gift_img" />
<ImageView
android:id="@+id/reward3"
android:layout_width="68dp"
android:layout_height="68dp"
android:background="@drawable/ic_room_boom_info_award_item_bg"
android:padding="7dp"
android:scaleType="fitXY"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/reward2"
app:layout_constraintTop_toTopOf="@+id/reward1"
tools:src="@drawable/room_menu_gift_img" />
<ImageView
android:id="@+id/reward4"
android:layout_width="68dp"
android:layout_height="68dp"
android:layout_marginTop="5.5dp"
android:background="@drawable/ic_room_boom_info_award_item_bg"
android:padding="7dp"
android:scaleType="fitXY"
app:layout_constraintStart_toStartOf="@id/reward2"
app:layout_constraintBottom_toBottomOf="@id/reward1"
tools:src="@drawable/room_menu_gift_img" />
<ImageView
android:id="@+id/reward5"
android:layout_width="68dp"
android:layout_height="68dp"
android:layout_marginTop="5.5dp"
android:background="@drawable/ic_room_boom_info_award_item_bg"
android:padding="7dp"
android:scaleType="fitXY"
app:layout_constraintStart_toStartOf="@id/reward3"
app:layout_constraintBottom_toBottomOf="@id/reward1"
tools:src="@drawable/room_menu_gift_img" />
</androidx.constraintlayout.widget.ConstraintLayout>
<TextView
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginHorizontal="17dp"
android:layout_marginBottom="11dp"
android:background="@drawable/ic_room_boom_info_award_hint_bg"
android:gravity="center"
android:text="@string/roomBoomInfoAwardBtn"
android:textColor="@color/white"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/avatarLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="@id/rewardLayout"
android:clipToPadding="false"
android:paddingTop="15dp"
android:visibility="invisible"
app:layout_constraintBottom_toBottomOf="parent"
tools:visibility="gone">
<ImageView
android:id="@+id/bg3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="10dp"
android:background="@drawable/ic_room_boom_info_rank_bg"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/title3"
android:layout_width="215dp"
android:layout_height="51dp"
android:layout_marginTop="-15dp"
android:background="@drawable/ic_room_boom_award_title_bg"
android:gravity="center"
android:lines="1"
android:text="@string/roomBoomInfoRankTitle"
android:textColor="#f0e7ba"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/bg3" />
<ImageView
android:id="@+id/more3"
android:layout_width="43dp"
android:layout_height="43dp"
android:layout_marginTop="8.5dp"
android:background="@drawable/ic_room_boom_more"
app:layout_constraintEnd_toEndOf="@id/bg3"
app:layout_constraintTop_toTopOf="@id/bg3" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/avatar1"
android:layout_width="@dimen/dp_86"
android:layout_height="@dimen/dp_86"
android:src="@drawable/default_avatar"
app:layout_constraintBottom_toBottomOf="@+id/avatarHead1"
app:layout_constraintEnd_toEndOf="@+id/avatarHead1"
app:layout_constraintStart_toStartOf="@+id/avatarHead1"
app:layout_constraintTop_toTopOf="@+id/avatarHead1" />
<ImageView
android:id="@+id/avatarHead1"
android:layout_width="@dimen/dp_120"
android:layout_height="@dimen/dp_120"
android:layout_marginTop="23.5dp"
android:background="@drawable/ic_room_boom_info_rank_head"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title3" />
<TextView
android:id="@+id/nick1"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_marginTop="14.5dp"
android:background="@drawable/ic_room_boom_info_rank_nick_bg"
android:gravity="center"
android:textColor="#f0e7ba"
android:textSize="15sp"
android:lines="1"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="@+id/avatarHead1"
app:layout_constraintStart_toStartOf="@+id/avatarHead1"
app:layout_constraintTop_toBottomOf="@+id/avatarHead1"
tools:text="nick" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/avatar2"
android:layout_width="@dimen/dp_66"
android:layout_height="@dimen/dp_66"
android:src="@drawable/default_avatar"
app:layout_constraintBottom_toBottomOf="@+id/avatarHead2"
app:layout_constraintEnd_toEndOf="@+id/avatarHead2"
app:layout_constraintStart_toStartOf="@+id/avatarHead2"
app:layout_constraintTop_toTopOf="@+id/avatarHead2" />
<ImageView
android:id="@+id/avatarHead2"
android:layout_width="@dimen/dp_90"
android:layout_height="@dimen/dp_90"
android:layout_marginTop="@dimen/dp_51"
android:layout_marginEnd="@dimen/dp_3"
android:background="@drawable/ic_room_boom_info_rank_head"
app:layout_constraintEnd_toStartOf="@+id/avatarHead1"
app:layout_constraintTop_toBottomOf="@id/title3"
app:layout_constraintTop_toTopOf="@+id/avatarHead1" />
<TextView
android:id="@+id/nick2"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_marginTop="14.5dp"
android:background="@drawable/ic_room_boom_info_rank_nick_bg"
android:gravity="center"
android:textColor="#f0e7ba"
android:textSize="15sp"
android:lines="1"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="@+id/avatarHead2"
app:layout_constraintStart_toStartOf="@+id/avatarHead2"
app:layout_constraintTop_toBottomOf="@+id/avatarHead2"
tools:text="nick" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/avatar3"
android:layout_width="@dimen/dp_66"
android:layout_height="@dimen/dp_66"
android:src="@drawable/default_avatar"
app:layout_constraintBottom_toBottomOf="@+id/avatarHead3"
app:layout_constraintEnd_toEndOf="@+id/avatarHead3"
app:layout_constraintStart_toStartOf="@+id/avatarHead3"
app:layout_constraintTop_toTopOf="@+id/avatarHead3" />
<ImageView
android:id="@+id/avatarHead3"
android:layout_width="@dimen/dp_90"
android:layout_height="@dimen/dp_90"
android:layout_marginStart="@dimen/dp_3"
android:layout_marginTop="@dimen/dp_51"
android:background="@drawable/ic_room_boom_info_rank_head"
app:layout_constraintStart_toEndOf="@+id/avatarHead1"
app:layout_constraintTop_toBottomOf="@id/title3"
app:layout_constraintTop_toTopOf="@+id/avatarHead1" />
<TextView
android:id="@+id/nick3"
android:layout_width="0dp"
android:layout_height="28dp"
android:layout_marginTop="14.5dp"
android:background="@drawable/ic_room_boom_info_rank_nick_bg"
android:gravity="center"
android:textColor="#f0e7ba"
android:lines="1"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="@+id/avatarHead3"
app:layout_constraintStart_toStartOf="@+id/avatarHead3"
app:layout_constraintTop_toBottomOf="@+id/avatarHead3"
tools:text="nick" />
<TextView
android:id="@+id/avatarTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="15dp"
android:textColor="@color/white"
android:textSize="12sp"
android:text="@string/roomBoomInfoRankHint"
app:layout_constraintBottom_toBottomOf="@id/bg3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -213,33 +213,56 @@
app:shaderMode="rightToLeft"
app:shaderStartColor="#FA4771" />
<ImageView
android:id="@+id/iv_queuing_micro"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_above="@id/bottom_view"
android:layout_alignParentEnd="true"
android:layout_marginEnd="6dp"
android:layout_marginBottom="10dp"
android:adjustViewBounds="true"
android:onClick="@{click}"
android:src="@drawable/ic_dating_queuing_micro"
android:visibility="gone"
tools:contentDescription="@string/layout_fragment_av_room_game_05"
tools:translationY="500dp"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_game"
android:layout_width="@dimen/dp_38"
android:layout_height="@dimen/dp_38"
android:layout_above="@id/iv_queuing_micro"
<FrameLayout
android:id="@+id/boomLayout"
android:layout_width="@dimen/dp_42"
android:layout_height="@dimen/dp_44"
android:layout_above="@id/iv_team_pk"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_20"
android:onClick="@{click}"
android:src="@drawable/room_ic_game"
android:layout_marginBottom="@dimen/dp_8"
android:visibility="gone"
tools:translationY="500dp"
tools:visibility="visible">
<ImageView
android:id="@+id/boomIcon"
android:layout_width="@dimen/dp_30"
android:layout_gravity="center_horizontal|top"
android:layout_height="@dimen/dp_42"
tools:src="@drawable/room_team_pk_icon" />
<ImageView
android:id="@+id/boomProMax"
android:layout_width="match_parent"
android:layout_gravity="bottom"
android:background="@drawable/ic_room_boom_pro_bg"
android:layout_marginHorizontal="@dimen/dp_3"
android:layout_height="@dimen/dp_7"/>
<ImageView
android:id="@+id/boomPro"
android:layout_width="1dp"
tools:layout_width="match_parent"
android:layout_gravity="bottom"
android:scaleType="fitXY"
android:src="@drawable/ic_room_boom_pro"
android:layout_marginHorizontal="@dimen/dp_3_5"
android:layout_height="@dimen/dp_7"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_team_pk"
android:layout_width="@dimen/dp_38"
android:layout_height="@dimen/dp_38"
android:layout_above="@id/iv_config_entrance"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_8"
android:src="@drawable/room_team_pk_icon"
android:visibility="gone"
tools:translationY="500dp"
tools:visibility="visible" />
@@ -258,20 +281,37 @@
tools:translationY="500dp"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_team_pk"
android:id="@+id/iv_game"
android:layout_width="@dimen/dp_38"
android:layout_height="@dimen/dp_38"
android:layout_above="@id/iv_config_entrance"
android:layout_above="@id/iv_queuing_micro"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_8"
android:src="@drawable/room_team_pk_icon"
android:layout_marginBottom="@dimen/dp_20"
android:onClick="@{click}"
android:src="@drawable/room_ic_game"
android:visibility="gone"
tools:translationY="500dp"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_queuing_micro"
android:layout_width="65dp"
android:layout_height="wrap_content"
android:layout_above="@id/bottom_view"
android:layout_alignParentEnd="true"
android:layout_marginEnd="6dp"
android:layout_marginBottom="10dp"
android:adjustViewBounds="true"
android:onClick="@{click}"
android:src="@drawable/ic_dating_queuing_micro"
android:visibility="gone"
tools:contentDescription="@string/layout_fragment_av_room_game_05"
tools:translationY="500dp"
tools:visibility="visible" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@@ -198,6 +198,11 @@
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<FrameLayout
android:id="@+id/roomAnim"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
</layout>

View File

@@ -178,6 +178,59 @@
android:layout_height="match_parent" />
</LinearLayout>
<FrameLayout
android:id="@+id/boomLayout"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_44"
android:layout_above="@id/iv_game"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_8"
android:visibility="gone"
tools:visibility="visible">
<ImageView
android:id="@+id/boomIcon"
android:layout_width="@dimen/dp_30"
android:layout_gravity="center_horizontal|top"
android:layout_height="@dimen/dp_42"
tools:src="@drawable/room_team_pk_icon" />
<ImageView
android:id="@+id/boomProMax"
android:layout_width="match_parent"
android:layout_gravity="bottom"
android:background="@drawable/ic_room_boom_pro_bg"
android:layout_marginHorizontal="@dimen/dp_3"
android:layout_height="@dimen/dp_7"/>
<ImageView
android:id="@+id/boomPro"
android:layout_width="1dp"
tools:layout_width="match_parent"
android:layout_gravity="bottom"
android:scaleType="fitXY"
android:src="@drawable/ic_room_boom_pro"
android:layout_marginHorizontal="@dimen/dp_3_5"
android:layout_height="@dimen/dp_7"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_config_entrance"
android:layout_width="@dimen/dp_38"
android:layout_height="@dimen/dp_38"
android:layout_above="@id/iv_game"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_10"
android:onClick="@{click}"
android:visibility="visible"
tools:translationY="700dp"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_game"
android:layout_width="@dimen/dp_38"

View File

@@ -62,6 +62,7 @@
<TextView
android:id="@+id/tv_user_name"
android:layout_width="0dp"
android:onClick="@{click}"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_12"
android:drawablePadding="@dimen/dp_5"

View File

@@ -178,6 +178,46 @@
app:layout_constraintBottom_toTopOf="@+id/bottom_view"
tools:translationY="500dp">
<FrameLayout
android:id="@+id/boomLayout"
android:layout_width="@dimen/dp_40"
android:layout_height="@dimen/dp_44"
android:layout_above="@id/iv_config_entrance"
android:layout_alignParentEnd="true"
android:layout_marginEnd="@dimen/dp_11"
android:layout_marginBottom="@dimen/dp_8"
android:visibility="gone"
tools:translationY="500dp"
tools:visibility="visible">
<ImageView
android:id="@+id/boomIcon"
android:layout_width="@dimen/dp_30"
android:layout_gravity="center_horizontal|top"
android:layout_height="@dimen/dp_42"
tools:src="@drawable/room_team_pk_icon" />
<ImageView
android:id="@+id/boomProMax"
android:layout_width="match_parent"
android:layout_gravity="bottom"
android:background="@drawable/ic_room_boom_pro_bg"
android:layout_marginHorizontal="@dimen/dp_3"
android:layout_height="@dimen/dp_7"/>
<ImageView
android:id="@+id/boomPro"
android:layout_width="1dp"
tools:layout_width="match_parent"
android:layout_gravity="bottom"
android:scaleType="fitXY"
android:src="@drawable/ic_room_boom_pro"
android:layout_marginHorizontal="@dimen/dp_3_5"
android:layout_height="@dimen/dp_7"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_config_entrance"
android:layout_width="@dimen/dp_38"

View File

@@ -3,7 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="@dimen/dp_92"
android:layout_marginHorizontal="@dimen/dp_15"
android:layout_marginVertical="@dimen/dp_5"
android:background="@drawable/shape_white_10dp_round">
@@ -105,11 +105,37 @@
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/bg_like_pk" />
<com.tencent.qgame.animplayer.AnimView
android:id="@+id/boomAnim"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_8"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/tv_online_number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_tag"
tools:background="@drawable/btn_play"
tools:visibility="visible" />
<ImageView
android:id="@+id/boomIcon"
android:layout_width="@dimen/dp_30"
android:layout_height="@dimen/dp_30"
android:layout_marginEnd="@dimen/dp_8"
android:visibility="invisible"
app:layout_constraintBottom_toTopOf="@+id/tv_online_number"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/iv_tag"
tools:background="@drawable/btn_play"
tools:visibility="visible" />
<ImageView
android:id="@+id/iv_top"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="345:92"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintTop_toTopOf="parent"
tools:background="@drawable/home_room_bg_hour_top"
tools:visibility="gone" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="9.5dp">
<ImageView
android:id="@+id/levelIcon"
android:layout_width="23dp"
android:layout_height="36dp"
android:layout_marginStart="3.5dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/levelText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:textColor="#f8f4c9"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@+id/levelIcon"
app:layout_constraintStart_toEndOf="@+id/levelIcon"
app:layout_constraintTop_toTopOf="@+id/levelIcon" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
<com.chwl.library.widget.SVGAView
android:id="@+id/iv_bg"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_marginTop="@dimen/dp_68"
app:autoPlay="true"
app:clearsAfterDetached="true"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/smash_eggs_notity_bg_4" />
<ImageView
android:id="@+id/gameIcon"
android:layout_width="44dp"
android:layout_height="44dp"
android:scaleType="fitXY"
android:layout_marginStart="@dimen/dp_40"
app:layout_constraintBottom_toBottomOf="@+id/iv_bg"
app:layout_constraintStart_toStartOf="@+id/iv_bg"
app:layout_constraintTop_toTopOf="@+id/iv_bg" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/avatar"
android:layout_width="28dp"
android:layout_height="28dp"
android:layout_marginStart="@dimen/dp_5"
android:src="@drawable/default_avatar"
app:layout_constraintBottom_toBottomOf="@+id/iv_bg"
app:layout_constraintStart_toEndOf="@+id/gameIcon"
app:layout_constraintTop_toTopOf="@+id/iv_bg" />
<com.coorchice.library.SuperTextView
android:id="@+id/tv_text"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginHorizontal="@dimen/dp_5"
android:ellipsize="end"
android:gravity="start|center_vertical"
android:includeFontPadding="false"
android:lineSpacingExtra="0dp"
android:lines="2"
android:lineSpacingMultiplier="0.8"
android:textColor="@color/white"
android:textDirection="locale"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@id/iv_bg"
app:layout_constraintEnd_toStartOf="@id/go"
app:layout_constraintStart_toEndOf="@id/avatar"
app:layout_constraintTop_toTopOf="@id/iv_bg"
tools:layout_height="wrap_content"
tools:text="Message\nMessage" />
<ImageView
android:id="@+id/go"
android:layout_width="35dp"
android:layout_height="25dp"
android:layout_marginEnd="@dimen/dp_40"
android:src="@drawable/ic_notify_go"
app:layout_constraintBottom_toBottomOf="@+id/tv_text"
app:layout_constraintEnd_toEndOf="@id/iv_bg"
app:layout_constraintTop_toTopOf="@+id/tv_text" />
<androidx.constraintlayout.widget.Group
android:id="@+id/allView"
app:constraint_referenced_ids="gameIcon,avatar,tv_text,go"
android:visibility="invisible"
tools:visibility="visible"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</merge>

View File

@@ -11,6 +11,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_marginTop="@dimen/dp_68"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/smash_eggs_notity_bg_4" />

View File

@@ -12,6 +12,7 @@
android:layout_height="0dp"
app:clearsAfterDetached="true"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="@dimen/dp_68"
app:loopCount="1"
tools:src="@drawable/smash_eggs_notity_bg_4" />

View File

@@ -7,25 +7,26 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/micOn"
android:layout_width="@dimen/dp_36"
android:layout_marginVertical="5dp"
android:src="@drawable/room_menu_ic_mic_open"
android:layout_height="@dimen/dp_36"/>
<ImageView
android:id="@+id/micMusic"
android:layout_width="@dimen/dp_36"
android:layout_marginVertical="5dp"
android:layout_marginVertical="@dimen/dp_5"
android:src="@drawable/room_menu_ic_mic_music"
android:layout_height="@dimen/dp_36"/>
<ImageView
android:id="@+id/micOff"
android:layout_width="@dimen/dp_36"
android:layout_marginVertical="5dp"
android:layout_marginVertical="@dimen/dp_5"
android:src="@drawable/room_menu_ic_mic_close"
android:layout_height="@dimen/dp_36"/>
<ImageView
android:id="@+id/micOn"
android:layout_width="@dimen/dp_36"
android:layout_marginVertical="@dimen/dp_5"
android:src="@drawable/room_menu_ic_mic_open"
android:layout_height="@dimen/dp_36"/>
</LinearLayout>

View File

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="@dimen/dp_10"
android:clipToPadding="false"
android:paddingTop="20dp">
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="395dp"
android:background="@drawable/ic_room_boom_award_root_bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/title"
android:layout_width="224dp"
android:layout_height="53dp"
android:layout_marginTop="-18dp"
android:background="@drawable/ic_room_boom_award_title_bg"
android:gravity="center"
android:text="@string/roomBoomAwardTitle"
android:textColor="#f0e7ba"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/bg" />
<TextView
android:id="@+id/hint"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="14.5dp"
android:text="@string/roomBoomAwardHint"
android:textColor="#cba1ff"
android:textSize="10sp"
android:gravity="center"
android:layout_marginHorizontal="10dp"
app:layout_constraintEnd_toEndOf="@+id/bg"
app:layout_constraintStart_toStartOf="@+id/bg"
app:layout_constraintTop_toBottomOf="@+id/title" />
<FrameLayout
android:id="@+id/listLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginHorizontal="29dp"
android:layout_marginTop="6dp"
android:layout_marginBottom="27dp"
app:layout_constraintBottom_toTopOf="@id/confirm"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/hint">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvList"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="3"
tools:itemCount="1"
tools:listitem="@layout/room_boom_reward_item" />
</FrameLayout>
<TextView
android:id="@+id/confirm"
android:layout_width="176dp"
android:layout_height="44dp"
android:layout_marginTop="37dp"
android:layout_marginBottom="24dp"
android:background="@drawable/ic_room_boom_award_btn_bg"
android:gravity="center"
android:text="@string/ok"
android:textColor="@color/white"
android:textSize="15sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/bg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="6dp"
android:layout_marginVertical="10dp"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/boomItem"
android:layout_width="match_parent"
android:background="@drawable/ic_room_boom_award_item_bg"
android:padding="7dp"
tools:src="@drawable/btn_play"
android:layout_gravity="center"
android:layout_height="88dp" />
</FrameLayout>

View File

@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp">
<ImageView
android:id="@+id/bg"
android:layout_width="match_parent"
android:layout_height="90dp"
android:layout_marginTop="@dimen/dp_68"
android:layout_marginStart="57dp"
android:background="@drawable/ic_room_boom_notify_bg"
app:layout_constraintTop_toTopOf="parent" />
<com.chwl.app.common.widget.CircleImageView
android:id="@+id/avatar"
android:src="@drawable/default_avatar"
android:layout_width="56dp"
android:layout_height="56dp"
app:layout_constraintStart_toStartOf="@+id/avatarHead"
app:layout_constraintBottom_toBottomOf="@+id/avatarHead"
android:layout_marginBottom="14dp"
app:layout_constraintEnd_toEndOf="@+id/avatarHead"/>
<ImageView
android:id="@+id/avatarHead"
android:layout_width="94dp"
android:layout_height="90dp"
android:background="@drawable/ic_room_boom_notify_head"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/bg" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="@+id/bg"
app:layout_constraintEnd_toStartOf="@id/go"
android:layout_marginBottom="19dp"
app:layout_constraintStart_toEndOf="@+id/avatarHead">
<ImageView
android:id="@+id/boomIcon"
android:layout_width="35dp"
android:layout_height="35dp" />
<TextView
android:id="@+id/roomName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:lines="1"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/boomIcon"
app:layout_constraintTop_toTopOf="@id/boomIcon"
tools:text="111" />
<TextView
android:id="@+id/boomDes"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="2dp"
android:layout_marginBottom="1dp"
android:ellipsize="end"
android:lines="1"
android:textColor="@color/white"
android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/roomName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/boomIcon"
app:layout_constraintTop_toBottomOf="@+id/boomIcon"
tools:text="111" />
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:id="@+id/go"
android:layout_width="97dp"
android:layout_height="90dp"
android:src="@drawable/ic_room_boom_notify_go"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/bg" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -351,7 +351,7 @@
</string>
<string name="text_monster_hunting_introduction">· مقدمة عن اللعبة ·</string>
<string name="text_ok">موافق</string>
<string name="text_ok">تاكيد</string>
<string name="text_canle">إلغاء</string>
<string name="text_quit_monster_hunting">هل أنت متأكد أنك تريد التوقف عن صيد ال وحوش؟</string>
<string name="text_check_damage">عرض لوحة تسجيل الضرر</string>
@@ -940,10 +940,10 @@
<string name="cp_revert_tip">بعد التراجع، سيتم استعادة مدة المصاحبة والمستوى؛ هل أنت متأكد من رغبتك في استعادة العلاقة؟</string>
<string name="message_at_tip">%d شخص قام بالإشارة إليك</string>
<string name="CP_Need_tips">تحتاج إلى %s للترقية</string>
<string name="Agent_ID">معرّف العميل</string>
<string name="Guild_ID">معرّف النقابة</string>
<string name="Guild_Nick">نيك النقابة</string>
<string name="CP_Need_tips">تحتاج إلى للترقية %s</string>
<string name="Agent_ID">معرّف الوكيل</string>
<string name="Guild_ID">معرّف الوكالة</string>
<string name="Guild_Nick">اسم الوكالة</string>
<string name="CP_Cancel">هل أنت متأكد من أنك تريد إنفاق %s قطعة نقدية لإلغاء CP الخاص بك مع %s ؟</string>
<string name="charge_my_diamond">الكوينز الذهبية</string>
<string name="charge_confirm_charge">تأكيد الشحن</string>
@@ -1015,10 +1015,10 @@
<string name="me_roomid">معرف الغرفة:</string>
<string name="me_room_number_people">عدد الأشخاص في الغرفة:</string>
<string name="me_association">الوكالة</string>
<string name="me_association_id">معرف النقابة:</string>
<string name="me_association_id">معرّف الوكالة:</string>
<string name="me_association_number">عدد النقابة:</string>
<string name="me_room_number">رقم الغرفة:</string>
<string name="me_association_room">النقابة</string>
<string name="me_association_room">الوكالة</string>
<string name="me_room">الغرفة</string>
<string name="me_ordinary_gift">هدايا عادية</string>
<string name="me_lucky_gift">هدايا الحظ</string>
@@ -3683,8 +3683,8 @@
<string name="layout_layout_ok_cancel_label_dialog_big_message_01">تحذير أمان</string>
<string name="layout_layout_ok_cancel_label_dialog_big_message_02">قد يكون الرابط خطرًا. يرجى فتح الروابط فقط من مصادر موثوق بها!</string>
<string name="layout_layout_ok_cancel_label_dialog_big_message_03">إلغاء</string>
<string name="layout_layout_ok_cancel_label_dialog_big_message_04">موافق</string>
<string name="layout_layout_ok_dialog_01">موافق</string>
<string name="layout_layout_ok_cancel_label_dialog_big_message_04">تاكيد</string>
<string name="layout_layout_ok_dialog_01">تاكيد</string>
<string name="layout_layout_phone_country_choose_01">الدولة/المنطقة</string>
<string name="layout_layout_phone_country_choose_02">الصين</string>
<string name="layout_layout_pic_login_dialog_01">الغرفة مقفلة</string>
@@ -4983,7 +4983,7 @@
<string name="user_birthday">تاريخ الميلاد:</string>
<string name="user_area">المنطقة:</string>
<string name="user_room">الغرفة:</string>
<string name="user_association">النقابة:</string>
<string name="user_association">الوكالة:</string>
<string name="sound_duration">%d"</string>
<string name="no_room_has_been_added_yet">لم يتم إضافة أي غرفة بعد</string>
<string name="user_no_room_has_been_added_yet">لم يقم هذا المستخدم بإضافة أي غرفة بعد</string>
@@ -5365,4 +5365,16 @@
<string name="CP_anim_set_tips">عرض الرسوم المتحركة للصفحة الرئيسية - CP</string>
<string name="CP_avatar_set_tips">عرض الصور الرمزية للصفحة الرئيسية- CP</string>
<string name="CP_Cancel_Success">لقد نجحت في إلغاء CP الخاص بك مع %s .</string>
<string name="roomNick">لقب الغرفة: %s</string>
<string name="roomBoomNotify">تم تشغيل بوم وذهب للمشاهدة</string>
<string name="roomBoomAwardHint">تهانينا على حصولك على الجوائز التالية في هذه الجولة من Boom</string>
<string name="roomBoomAwardHintEmpty">لسوء الحظ! لم تحصل على مكافأة، يرجى مواصلة العمل الجيد</string>
<string name="roomBoomAwardTitle">تهانينا</string>
<string name="roomBoomInfoAwardTitle">الجائزة الكبرى</string>
<string name="roomBoomInfoRankTitle">تصنيف الداعمين</string>
<string name="roomBoomInfoAwardHint">المكافآت هي للإشارة فقط. يتم تحديد الهدايا المحددة بناءً على قيمة مساهمتك وحظك</string>
<string name="roomBoomInfoAwardBtn">قدم الهدايا واربح جوائز كبرى</string>
<string name="roomBoomMessageView">تهانينا! %s إطلاق الجائزة الكبرى السوبر بووم، ستتم مكافأة جميع المستخدمين في الغرفة!</string>
<string name="roomBoomInfoRankHint">وقت إعادة الضبط 0:00 (GMT+8) يوميًا</string>
<string name="roomBoomInfoRankHint2">وقت إعادة الضبط 0:00 (GMT+3) يوميًا</string>
</resources>

View File

@@ -5307,5 +5307,17 @@
<string name="CP_avatar_set_tips">主頁CP頭像</string>
<string name="CP_Level_up_tips">%s 與 %s 已成為 %s 。</string>
<string name="CP_Cancel_Success">您已成功取消與 %s 的 CP 連結。</string>
<string name="roomNick">房間暱稱:%s</string>
<string name="roomBoomNotify">觸發了Boom前去圍觀</string>
<string name="roomBoomAwardHint">恭喜您在本輪 Boom 中獲得以下獎励。</string>
<string name="roomBoomAwardHintEmpty">很遺憾 您沒有獲得獎品,請繼續努力!</string>
<string name="roomBoomAwardTitle">恭喜您</string>
<string name="roomBoomInfoAwardTitle">超大獎</string>
<string name="roomBoomInfoRankTitle">支持者排名</string>
<string name="roomBoomInfoAwardHint">獎勵僅供參考。具體禮物由你的貢獻值和運氣決定。</string>
<string name="roomBoomInfoAwardBtn">送禮物,贏取超級獎品</string>
<string name="roomBoomMessageView">恭喜!%s 触发超级大奖BOOM所有在房用户将获得奖励</string>
<string name="roomBoomInfoRankHint">重置時間:每日 0:00 (GMT+8)</string>
<string name="roomBoomInfoRankHint2">重置時間:每日 0:00 (GMT+3)</string>
</resources>

View File

@@ -5359,6 +5359,30 @@ You cannot join again within 24 hours after leaving</string>
<string name="Multiplayer">Multiplayer</string>
<string name="changeRoomTips">Are you sure you want to go to this room?</string>
<string name="ttt">ttt</string>
<string name="roomNick">Room name: %s</string>
<string name="roomBoomNotify">Boom was triggered, go and watch</string>
<string name="roomBoomAwardHint">Congratulations on being awarded the following prizes in this round of Boom</string>
<string name="roomBoomAwardHintEmpty">Unfortunately! You did not receive reward, please keep up the good work!</string>
<string name="roomBoomAwardTitle">Congratulations</string>
<string name="roomBoomInfoAwardTitle">Super Jackpot</string>
<string name="roomBoomInfoRankTitle">Supporter Ranking</string>
<string name="roomBoomInfoAwardHint">The rewards are for reference only. The specific gifts are determined by your contribution value and luck.</string>
<string name="roomBoomInfoAwardBtn">Give gifts and win super prizes</string>
<string name="roomBoomInfoRankHint">Reset time: 0:00 (GMT+8) daily</string>
<string name="roomBoomInfoRankHint2">Reset time: 0:00 (GMT+3) daily</string>
<string name="roomBoomMessageView">Congratulations! %s has triggered the super jackpot BOOM, and all users in the room will receive rewards!</string>
</resources>

View File

@@ -11,6 +11,7 @@ import androidx.annotation.NonNull;
import com.chwl.app.ui.widget.dialog.BaseDialog;
import com.chwl.app.R;
import com.chwl.core.manager.AudioEngineManager;
import com.chwl.core.music.model.PlayerModel;

View File

@@ -456,6 +456,7 @@ public class TreasureBoxActivity extends BaseBindingActivity<ActivityTreasureBox
break;
case CUSTOM_MSG_TEMPLATE_NOTIFY://通用飘屏
if (baseProtocol.getSecond() == CUSTOM_MSG_TEMPLATE_NOTIFY_ALL) {
//todo do 通用飘屏
RoomTemplateNotifyAttachment attachment = new RoomTemplateNotifyAttachment(CUSTOM_MSG_TEMPLATE_NOTIFY, CUSTOM_MSG_TEMPLATE_NOTIFY_ALL);
attachment.setMsgBean(new Gson().fromJson(String.valueOf(baseProtocol.getData()), RoomTemplateNotifyMsgBean.class));
ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage(String.valueOf(AvRoomDataManager.get().getRoomId()), attachment);

View File

@@ -71,11 +71,11 @@ dependencies {
api 'io.agora.rtc:voice-sdk:4.2.2'
// core
implementation 'com.liulishuo.okdownload:okdownload:1.0.4'
// implementation 'com.liulishuo.okdownload:okdownload:1.0.4'
// provide sqlite to store breakpoints
implementation 'com.liulishuo.okdownload:sqlite:1.0.4'
// implementation 'com.liulishuo.okdownload:sqlite:1.0.4'
// provide okhttp to connect to backend
implementation 'com.liulishuo.okdownload:okhttp:1.0.4'
// implementation 'com.liulishuo.okdownload:okhttp:1.0.4'
// Room
api 'androidx.room:room-runtime:2.5.1'
annotationProcessor 'androidx.room:room-compiler:2.5.1'
@@ -93,8 +93,8 @@ dependencies {
api project(':nim_uikit')
api project(':library')
implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
implementation 'com.liulishuo.okdownload:okhttp:1.0.7'
// implementation 'com.liulishuo.okdownload:okdownload:1.0.7'
// implementation 'com.liulishuo.okdownload:okhttp:1.0.7'
implementation 'com.tencent.liteav:LiteAVSDK_TRTC:11.7.0.13946'

View File

@@ -215,7 +215,7 @@ public class UriProvider {
*/
public static String getBoxHelp() {
return JAVA_WEB_URL.concat("/molistar/modules/rule/newWishingWellRule.html");
}
}
public static String getRanking() {
return IM_SERVER_URL.concat("/molistar/modules/rank/index.html#/rank");
@@ -317,6 +317,12 @@ public class UriProvider {
public static String getCpRule() {
return JAVA_WEB_URL.concat("/molistar/modules/rule/cpRule.html");
}
/**
* boom规则
*/
public static String getBoomRule(long partitionId) {
return JAVA_WEB_URL.concat("/molistar/modules/rule/boom.html?partitionId="+partitionId);
}
public static String toFullUrl(String shortUrl) {

View File

@@ -0,0 +1,15 @@
package com.chwl.core.gift.bean;
import java.util.List;
public class BoomInfo {
public int level;
public int speed;
public List<BoomInfoAward> roomBoomLevelAwardVos;
public List<BoomInfoRank> roomBoomRankVos;
public boolean hot;
public boolean rank;
public boolean currLevel;
public String pic;
public String vapUrl;
}

View File

@@ -0,0 +1,9 @@
package com.chwl.core.gift.bean;
public class BoomInfoAward {
public int awardType;
public String awardName;
public String awardPic;
public int seq;
public int isShow;
}

View File

@@ -0,0 +1,8 @@
package com.chwl.core.gift.bean;
public class BoomInfoRank {
public String avatar;
public String nick;
public long uid;
public int position;
}

View File

@@ -0,0 +1,24 @@
package com.chwl.core.gift.bean;
import java.io.File;
public class BoomMsgAnimBean {
public String countDownUrl = "";
public String endUrl = "";
public File countDownFile;
public File endFile;
public int level;
@Override
public String toString() {
return "BoomMsgAnimBean{" +
"countDownUrl='" + countDownUrl + '\'' +
", endUrl='" + endUrl + '\'' +
", countDownFile=" + countDownFile +
", endFile=" + endFile +
", level=" + level +
'}';
}
}

View File

@@ -0,0 +1,22 @@
package com.chwl.core.gift.bean
//{
// "awardName": "yunqi",
// "awardPic": "http://pic.uat.lawachat.com/FtCxQF2n_jdjixyRvt_iha99OaLQ?imageslim",
// "level": 1,
// "nick": "mo",
// "roleType": 2,
// "roomUid": 3456,
// "uid": 3457
//}
data class BoomMsgAwardBean(
var awardName: String = "",
var awardPic: String = "",
var level: Int = 0,
var nick: String = "",
var roleType: Int = 0,
var roomUid: Long = 0,
var uid: Long = 0,
)

View File

@@ -0,0 +1,3 @@
package com.chwl.core.gift.bean
data class BoomMsgAwardList(var list : List<BoomMsgAwardBean>?=null, var second: Int = 0 )

View File

@@ -0,0 +1,49 @@
package com.chwl.core.gift.bean
//{
// "avatar": "https://img.molistar.xyz/default_avatar_molistar.png",
// "countDownVapUrl": "http://pic.uat.hicat.chat/2024092315323441165004.mp4",
// "drawTime": 1727260512548,
// "drawTimeLong": 1727260512548,
// "endVapUrl": "http://pic.uat.lawachat.com/2023112118545622752745.mp4",
// "erbanNo": 2211,
// "floatingScreenPic": "",
// "id": 1606,
// "level": 1,
// "nick": "mo",
// "notifyStaySecond": 3,
// "partitionId": 2,
// "pic": "http://pic.uat.lawachat.com/2023112117552001160733",
// "roomAvatar": "https://image.pekolive.com/0baefcc9-07ee-4ee1-a600-160914f0853c.jpeg",
// "roomTitle": "mo\u0027s Room",
// "roomUid": 3456,
// "status": 1,
// "targetIcon": "http://pic.uat.lawachat.com/2023112117552001160733",
// "uid": 3457,
// "vapUrl": "http://pic.uat.hicat.chat/2024092315322727355848.mp4"
//}
data class BoomMsgDialogBean(
var avatar: String = "",
var vapUrl: String = "",
var countDownVapUrl: String = "",
var endVapUrl: String = "",
var pic: String = "",
var floatingScreenPic: String = "",
var roomAvatar: String = "",
var targetIcon: String = "",
var nick: String = "",
var roomTitle: String = "",
var level: Int = 0,
var notifyStaySecond: Int = 0,
var partitionId: Long = 0,
var messTime: Long = 0,
var drawTime: Long = 0,
var roomUid: Long = 0,
var status: Long = 0,
var drawTimeLong: Long = 0,
var erbanNo: Long = 0,
var id: Long = 0,
var uid: Long = 0,
var second: Int = 0)

View File

@@ -0,0 +1,31 @@
package com.chwl.core.gift.bean
//{
// "countDownVapUrl": "http://pic.uat.hicat.chat/2024092315323441165004.mp4",
// "currLevel": false,
// "endVapUrl": "http://pic.uat.lawachat.com/2023112118545622752745.mp4",
// "exp": 200000,
// "goldNum": 700000,
// "hot": false,
// "level": 1,
// "messTime": 1727256856163,
// "pic": "http://pic.uat.lawachat.com/2023112117552001160733",
// "rank": false,
// "speed": 57,
// "vapUrl": "http://pic.uat.hicat.chat/2024092315322727355848.mp4"
//}
data class BoomMsgExpPushBean(
var vapUrl: String = "",
var countDownVapUrl: String = "",
var endVapUrl: String = "",
var currLevel: Boolean = false,
var hot: Boolean = false,
var rank: Boolean = false,
var pic: String = "",
var speed: Int = 0,
var goldNum: Int = 0,
var level: Int = 0,
var messTime: Long = 0,
var second: Int = 0)

View File

@@ -0,0 +1,32 @@
package com.chwl.core.gift.event;
import lombok.Data;
//处理 公屏推送 相关消息,如 boom飘屏点击事件
@Data
public class NotifyEvent {
private int action ;
private Object data;
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public int getAction() {
return action;
}
public void setAction(int action) {
this.action = action;
}
public @interface Action{
int ACT_BAI_SHUN_GAME = 1; //准备送礼
}
}

View File

@@ -39,6 +39,11 @@ public class BannerInfo implements Parcelable, Serializable, IRouterData {
*/
public final static transient int SKIP_TYPE_ROOM_USER_CARD = 6;
/**
* 百顺 baishun 游戏
*/
public final static transient int SKIP_TYPE_ROOM_BAI_SHUN = 7;
/*
bannerId1 //id
bannerName: xx//横幅广告名称

View File

@@ -53,6 +53,10 @@ public class HomeRoomInfo implements MultiItemEntity, Serializable {
private int isHourTop1;
private String introduction;
private boolean roomBoom;
private String roomBoomPic;
private String roomBoomVapUrl;
@Override
public int getItemType() {
return isBanner ? TYPE_BANNER : (!TextUtils.isEmpty(broadMsg) ? TYPE_BROADCAST : TYPE_ROOM);

View File

@@ -0,0 +1,78 @@
package com.chwl.core.im.custom.bean
import com.alibaba.fastjson.JSONArray
import com.alibaba.fastjson.JSONObject
import com.chwl.core.gift.bean.BoomMsgAwardBean
import com.chwl.core.gift.bean.BoomMsgAwardList
import com.chwl.core.gift.bean.BoomMsgDialogBean
import com.chwl.core.gift.bean.BoomMsgExpPushBean
import com.chwl.core.gift.bean.CpMsgBean
import com.chwl.core.gift.bean.LuckyGiftMsgAllBean
import com.chwl.core.gift.bean.LuckyGiftMsgSelfBean
import com.chwl.core.utils.LogUtils
import com.google.gson.Gson
class BoomMsgAttachment (first: Int, second: Int) : CustomAttachment(first, second) {
@JvmField
var expPushBean : BoomMsgExpPushBean?=null
@JvmField
var DialogBean : BoomMsgDialogBean?=null
@JvmField
var awardList : BoomMsgAwardList?=null
override fun parseData(data: JSONObject?) {
super.parseData(data)
if (data != null) {
try {
if (second == BOOM_SECOND_EXP_PUSH) {
expPushBean = Gson().fromJson<BoomMsgExpPushBean>(
data.toJSONString(),
BoomMsgExpPushBean::class.java
)
expPushBean?.second = second
}else if (second == BOOM_SECOND_DIALOG) {
DialogBean = Gson().fromJson<BoomMsgDialogBean>(
data.toJSONString(),
BoomMsgDialogBean::class.java
)
DialogBean?.second = second
}else if (second == BOOM_SECOND_AWARD) {
awardList = BoomMsgAwardList()
awardList?.list = Gson().fromJson(
data.toJSONString(),
Array<BoomMsgAwardBean>::class.java
).toList()
awardList?.second = second
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
override fun parseDataArr(data: JSONArray?) {
super.parseDataArr(data)
if (data != null) {
try {
if (second == BOOM_SECOND_AWARD) {
awardList = BoomMsgAwardList()
awardList?.list = Gson().fromJson(
data.toJSONString(),
Array<BoomMsgAwardBean>::class.java
).toList()
awardList?.second = second
}
} catch (e: Exception) {
e.printStackTrace()
}
}
}
override fun packData(): JSONObject {
val data = JSONObject()
return data
}
}

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