Compare commits
11 Commits
dev/app_cp
...
dev/app_re
Author | SHA1 | Date | |
---|---|---|---|
![]() |
927059e873 | ||
![]() |
2d33a96376 | ||
![]() |
84ff7be54e | ||
![]() |
367a55654b | ||
![]() |
7e48f77f1c | ||
![]() |
11e5271193 | ||
![]() |
20457a9bdf | ||
![]() |
47d1985d66 | ||
![]() |
4dc4dfc93b | ||
![]() |
04b71fa067 | ||
![]() |
583173308e |
@@ -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" />
|
||||
|
BIN
app/src/main/assets/svga/baishun_notify_bg.svga
Normal 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);
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -9,7 +9,7 @@ public abstract class BottomViewListenerWrapper {
|
||||
|
||||
}
|
||||
|
||||
public void onOpenMicBtnClick() {
|
||||
public void onOpenMicBtnClick(int type) {
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -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()
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -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()
|
||||
|
@@ -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
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -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
|
||||
|
@@ -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) {
|
||||
|
@@ -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 {
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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來了
|
||||
*
|
||||
|
@@ -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,
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@@ -82,6 +82,7 @@ class HomeTabRoomFragment : BaseViewBindingFragment<HomeTabRoomFragmentBinding>(
|
||||
.setLayoutManager(LinearLayoutManager(mContext))
|
||||
.build()
|
||||
|
||||
|
||||
adapter.setOnLoadMoreListener({
|
||||
loadData(false)
|
||||
}, binding.mRecyclerRoom)
|
||||
|
@@ -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 -> {}
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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)
|
||||
}
|
||||
|
174
app/src/main/java/com/chwl/app/notify/views/BaiShunGameNotify.kt
Normal 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)
|
||||
}
|
||||
}
|
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -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"));
|
||||
|
@@ -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设置改变
|
||||
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
|
45
app/src/main/java/com/chwl/app/ui/utils/GameUtil.kt
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
@@ -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
|
||||
}
|
||||
})
|
||||
}
|
@@ -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
|
||||
|
@@ -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){};
|
||||
|
||||
}
|
||||
|
||||
|
@@ -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() {
|
||||
|
321
app/src/main/java/com/chwl/app/utils/RoomBoomManager.kt
Normal 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
|
||||
}
|
||||
|
||||
}
|
@@ -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
|
||||
|
43
app/src/main/java/com/chwl/app/utils/VapAnimListener.java
Normal 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() {
|
||||
//播放器被销毁
|
||||
|
||||
}
|
||||
}
|
@@ -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) {
|
||||
|
@@ -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()
|
||||
|
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_award_btn_bg.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_award_item_bg.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_award_root_bg.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_award_title_bg.png
Normal file
After Width: | Height: | Size: 120 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_award_bg.png
Normal file
After Width: | Height: | Size: 495 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 42 KiB |
After Width: | Height: | Size: 22 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_bg.png
Normal file
After Width: | Height: | Size: 2.5 MiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_level_bg.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_pro.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_pro_bg.png
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_pro_val_bg.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_rank_bg.png
Normal file
After Width: | Height: | Size: 1.2 MiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_info_rank_head.png
Normal file
After Width: | Height: | Size: 147 KiB |
After Width: | Height: | Size: 23 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_more.png
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_notify_bg.png
Normal file
After Width: | Height: | Size: 149 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_notify_go.png
Normal file
After Width: | Height: | Size: 100 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_notify_head.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_pro.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
app/src/main/res/drawable-xhdpi/ic_room_boom_pro_bg.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
app/src/main/res/drawable-xxhdpi/ic_notify_go.png
Normal file
After Width: | Height: | Size: 5.8 KiB |
426
app/src/main/res/layout/dialog_room_boom_info.xml
Normal 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>
|
@@ -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"
|
||||
|
@@ -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>
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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"
|
||||
|
@@ -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>
|
29
app/src/main/res/layout/item_room_boom_info_level.xml
Normal 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>
|
80
app/src/main/res/layout/layout_template_notify_baishun.xml
Normal 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>
|
@@ -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" />
|
||||
|
||||
|
@@ -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" />
|
||||
|
||||
|
@@ -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>
|
91
app/src/main/res/layout/room_boom_reward.xml
Normal 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>
|
18
app/src/main/res/layout/room_boom_reward_item.xml
Normal 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>
|
96
app/src/main/res/layout/room_notify_boom.xml
Normal 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>
|
@@ -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>
|
@@ -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>
|
@@ -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>
|
||||
|
||||
|
||||
|
@@ -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;
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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'
|
||||
|
||||
|
@@ -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) {
|
||||
|
15
core/src/main/java/com/chwl/core/gift/bean/BoomInfo.java
Normal 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;
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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;
|
||||
}
|
@@ -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 +
|
||||
'}';
|
||||
}
|
||||
}
|
@@ -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,
|
||||
)
|
@@ -0,0 +1,3 @@
|
||||
package com.chwl.core.gift.bean
|
||||
|
||||
data class BoomMsgAwardList(var list : List<BoomMsgAwardBean>?=null, var second: Int = 0 )
|
@@ -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)
|
@@ -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)
|
32
core/src/main/java/com/chwl/core/gift/event/NotifyEvent.java
Normal 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; //准备送礼
|
||||
|
||||
}
|
||||
}
|
@@ -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;
|
||||
|
||||
/*
|
||||
bannerId:1 //id
|
||||
bannerName: xx//横幅广告名称
|
||||
|
@@ -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);
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
}
|