From a0e514945d3bb98b10ff278197349d3fa8d0ae14 Mon Sep 17 00:00:00 2001 From: huangjian Date: Thu, 16 Dec 2021 15:53:29 +0800 Subject: [PATCH] =?UTF-8?q?1.=E5=A4=84=E7=90=86=E6=B8=B8=E6=88=8F=E4=B8=AD?= =?UTF-8?q?=E9=80=80=E5=87=BA=E6=B8=B8=E6=88=8F=E5=92=8C=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E5=8C=96=E6=88=BF=E9=97=B4=E7=9A=84=E6=83=85=E5=86=B5=202.?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=88=BF=E4=B8=BB=E8=B8=A2=E6=B8=B8=E6=88=8F?= =?UTF-8?q?=E4=B8=AD=E7=94=A8=E6=88=B7=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erban/avroom/ButtonItemFactory.java | 12 ++----- .../erban/avroom/activity/AVRoomActivity.java | 3 ++ .../erban/avroom/fragment/GameRoomFragment.kt | 33 +++++++++++++------ .../yizhuan/erban/avroom/game/GameDelegate.kt | 23 ++++--------- .../avroom/presenter/AvRoomPresenter.java | 15 --------- .../avroom/presenter/GameRoomPresenter.java | 8 +++++ .../erban/ui/widget/UserInfoDialog.java | 13 ++++++-- .../manager/AvRoomDataManager.java | 10 +++--- .../room/event/FinishAvRoomEvent.java | 4 +++ 9 files changed, 64 insertions(+), 57 deletions(-) create mode 100644 core/src/main/java/com/yizhuan/xchat_android_core/room/event/FinishAvRoomEvent.java diff --git a/app/src/main/java/com/yizhuan/erban/avroom/ButtonItemFactory.java b/app/src/main/java/com/yizhuan/erban/avroom/ButtonItemFactory.java index d2fef0795..f13a131ef 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/ButtonItemFactory.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/ButtonItemFactory.java @@ -313,11 +313,7 @@ public class ButtonItemFactory { @Override public void onClick() { StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_card_kickout_room_click, "资料卡片-踢出房间"); - if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(account))) { - SingleToastUtil.showToast("不可以踢出在游戏中的用户!"); - return; - } - new DialogManager(context).showOkCancelDialog((AvRoomDataManager.get().isOpenKTV() ? "KTV模式下将自动删除ta的歌曲," : "") + "是否要将此用户踢出房间?", + new DialogManager(context).showOkCancelDialog((AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : "") + "是否要将此用户踢出房间?", true, new DialogManager.AbsOkDialogListener() { @SuppressLint("CheckResult") @Override @@ -424,13 +420,9 @@ public class ButtonItemFactory { String nick) { return new ViewItem("拉入黑名单", R.drawable.icon_dialog_mark_black_list, () -> { StatisticManager.Instance().onEvent(StatisticsProtocol.Event.data_dard_join_blacklist_click, "资料卡片-加入黑名单"); - if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(account))) { - SingleToastUtil.showToast("不可以拉黑在游戏中的用户!"); - return; - } new DialogManager(context).showOkCancelDialog( "是否将" + nick + "加入黑名单?加入后他将无法进入此房间" + - (AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isOpenKTV() ? "KTV模式下将自动删除ta的歌曲" : ""), true, + (AvRoomDataManager.get().mCurrentRoomInfo != null && AvRoomDataManager.get().isGamePlaying(Long.parseLong(account)) ? "游戏模式下默认该玩家退出游戏" : ""), true, () -> { Single single; diff --git a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java index 554d4dc2e..021b5fcf9 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/activity/AVRoomActivity.java @@ -102,6 +102,7 @@ import com.yizhuan.xchat_android_core.redpackage.RedPackageNotifyInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.bean.SimplePartyRoomInfo; import com.yizhuan.xchat_android_core.room.dragonball.DragonBallModel; +import com.yizhuan.xchat_android_core.room.event.FinishAvRoomEvent; import com.yizhuan.xchat_android_core.room.event.RoomClearScreenEvent; import com.yizhuan.xchat_android_core.room.pk.event.PKStateEvent; import com.yizhuan.xchat_android_core.statistic.StatisticManager; @@ -851,6 +852,7 @@ public class AVRoomActivity extends BaseMvpActivity(), +class GameRoomFragment : BaseMvpFragment(), View.OnClickListener, OnGiftDialogBtnClickListener, IGameRoomView, OnMicroItemClickListener, OnGameStatusChangeListener { private var myUid: Long = 0 @@ -210,8 +212,8 @@ class GameRoomFragment() : BaseMvpFragment() inputLayout.setOnTouchListener { _: View?, _: MotionEvent? -> inputEdit.clearFocus() - inputLayout.setVisibility(View.GONE) - KeyBoardUtils.hideKeyBoard(getActivity(), inputEdit) + inputLayout.visibility = View.GONE + KeyBoardUtils.hideKeyBoard(activity, inputEdit) false } softKeyboardListener() @@ -268,7 +270,7 @@ class GameRoomFragment() : BaseMvpFragment() RxBus.get().toFlowable(ShowUserInfoDialogEvent::class.java) .compose(bindUntilEvent(FragmentEvent.DESTROY_VIEW)) .observeOn(AndroidSchedulers.mainThread()) - .subscribe { showUserCardDialog(it.getUid()) } + .subscribe { showUserCardDialog(it.uid) } // 刷新礼物列表,获取房间专属礼物列表 GiftModel.get().refreshGiftList(AvRoomDataManager.get().roomUid.toString()).subscribe() @@ -377,7 +379,7 @@ class GameRoomFragment() : BaseMvpFragment() RoomEvent.DOWN_MIC -> { if (AvRoomDataManager.get().isOwner(roomEvent.account)) { //自己的消息 - gameDelegate.exitGame() + gameDelegate.exitGame() } onDownMicro(roomEvent.micPosition) } @@ -527,7 +529,7 @@ class GameRoomFragment() : BaseMvpFragment() } }) val bannerAdapter = RoomActAdapter(mContext, dialogInfo) - rollPagerView.setAdapter(bannerAdapter) + rollPagerView.adapter = bannerAdapter rollPagerView.setPlayDelay(3000) //设置透明度 rollPagerView.setAnimationDurtion(500) @@ -665,11 +667,10 @@ class GameRoomFragment() : BaseMvpFragment() override fun onStop() { super.onStop() - gameDelegate.onPause() + gameDelegate.onStop() } override fun onDestroyView() { - gameDelegate.onDestroy() super.onDestroyView() releaseView() } @@ -678,6 +679,7 @@ class GameRoomFragment() : BaseMvpFragment() mDisposable?.dispose() mDisposable = null EventBus.getDefault().unregister(this) + gameDelegate.onDestroy() super.onDestroy() } @@ -866,7 +868,7 @@ class GameRoomFragment() : BaseMvpFragment() val buttonItem3 = ButtonItem( if (roomMicInfo.isMicLock) unlockStr else lockStr, ButtonItem.OnClickListener { - if (roomMicInfo.isMicLock()) { + if (roomMicInfo.isMicLock) { if (SuperAdminUtil.isSuperAdmin()) { SingleToastUtil.showToast(SaConstant.TOAST_ERROR_TIPS) return@OnClickListener @@ -878,7 +880,7 @@ class GameRoomFragment() : BaseMvpFragment() } }) val buttonItem4 = - ButtonItem("上麦", { toUpMicroPhone(micPosition, currentUid.toString() + "", false) }) + ButtonItem("上麦") { toUpMicroPhone(micPosition, currentUid.toString() + "", false) } //别问为什么,ui调整了顺序 //禁用超管的上麦和抱TA上麦 if (!SuperAdminUtil.isSuperAdmin()) { @@ -1064,6 +1066,11 @@ class GameRoomFragment() : BaseMvpFragment() @SuppressLint("CheckResult") override fun toUpMicroPhone(micPosition: Int, currentUid: String, b: Boolean) { + if (AvRoomDataManager.get().isSelfGamePlaying) { + SingleToastUtil.showToast("游戏中不可以换麦!") + return + } + UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN checkPermission(Manifest.permission.RECORD_AUDIO) .subscribe({ result: Boolean -> if (result) { @@ -1169,6 +1176,11 @@ class GameRoomFragment() : BaseMvpFragment() ).openDialog() } + @Subscribe(threadMode = ThreadMode.MAIN) + fun onFinishAvRoomEvent(event: FinishAvRoomEvent) { + gameDelegate.exitGame() + } + /** * 底部按钮点击处理 */ @@ -1331,4 +1343,5 @@ class GameRoomFragment() : BaseMvpFragment() override fun onGameEnd() { gameBinding.ivShowMic.callOnClick() } + } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt b/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt index c4e81ebb7..905fab57c 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/game/GameDelegate.kt @@ -30,19 +30,10 @@ import java.util.* class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: Long?) { - companion object { - const val STATUS_NOT_JOIN = 0 - const val STATUS_NOT_READY = 1 - const val STATUS_READY = 2 - const val STATUS_PLAYING = 3 - } - private val TAG = "GameDelegate" private var APP_CODE = "" - private val mRoomID = AvRoomDataManager.get().roomUid.toString() - private val mLanguage = "zh-CN" //语言 //调用游戏SDK的接口,成功加载游戏后可用: @@ -91,7 +82,6 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: login(loginCallback) } - fun updateGame(mgId: Long?) { if (mgId == null || mgId == 0L || mgId == mMGID || iSudFSTAPP == null) return mMGID = mgId @@ -100,6 +90,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: } fun exitGame() { + UserModel.get().cacheLoginUserInfo?.gameStatus = GameStatus.STATUS_NOT_JOIN notifySelfPlayingState(false) notifySelfInState(false) } @@ -371,7 +362,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: try { val jsonObject = JSONObject(dataJson) val seatIndex = jsonObject.optInt("seatIndex", -1) - updateMyMicQueue(STATUS_NOT_READY, true, seatIndex) + updateMyMicQueue(GameStatus.STATUS_NOT_READY, true, seatIndex) } catch (e: Exception) { e.printStackTrace() } @@ -429,9 +420,9 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: reason = jsonObject.getInt("reason") } if (reason == 0) { - updateMyMicQueue(STATUS_NOT_JOIN) + updateMyMicQueue(GameStatus.STATUS_NOT_JOIN) } else if (reason == 1) { - updateMyMicQueue(STATUS_NOT_JOIN) + updateMyMicQueue(GameStatus.STATUS_NOT_JOIN) } } } catch (e: Exception) { @@ -481,7 +472,7 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: if (retCode != 0) { return } - updateMyMicQueue(if (isReady) STATUS_READY else STATUS_NOT_READY) + updateMyMicQueue(if (isReady) GameStatus.STATUS_READY else GameStatus.STATUS_NOT_READY) } catch (e: Exception) { e.printStackTrace() } @@ -512,10 +503,10 @@ class GameDelegate(val activity: Activity, val container: FrameLayout, var mgId: val isPlaying = jsonObject.getBoolean("isPlaying") if (isPlaying) { onGameStatusChangeListener?.onGameStart() - updateMyMicQueue(STATUS_PLAYING) + updateMyMicQueue(GameStatus.STATUS_PLAYING) } else { onGameStatusChangeListener?.onGameEnd() - updateMyMicQueue(STATUS_NOT_READY) + updateMyMicQueue(GameStatus.STATUS_NOT_READY) } } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java index d5563b01e..704a5accf 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/AvRoomPresenter.java @@ -531,21 +531,6 @@ public class AvRoomPresenter extends BaseMvpPresenter { }); } - public void upAiMicroPhone(int micPosition, String uId) { - if (AvRoomDataManager.get().mCurrentRoomInfo == null) return; - mAvRoomModel.upAiMicroPhone(micPosition, uId, String.valueOf(AvRoomDataManager.get().mCurrentRoomInfo.getRoomId()), - new CallBack() { - @Override - public void onSuccess(String data) { - Logger.i("用户%1$s上麦成功:%2$s", uId, data); - } - - @Override - public void onFail(int code, String error) { - Logger.i("用户%1$s上麦失败:%2$s----", uId, error); - } - }); - } @Override public void onDestroyPresenter() { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/presenter/GameRoomPresenter.java b/app/src/main/java/com/yizhuan/erban/avroom/presenter/GameRoomPresenter.java index 63b362f5c..c109e9317 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/presenter/GameRoomPresenter.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/presenter/GameRoomPresenter.java @@ -39,6 +39,7 @@ import com.yizhuan.xchat_android_core.praise.PraiseModel; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.exception.AntiSpamHitException; import com.yizhuan.xchat_android_core.room.face.FaceReceiveInfo; +import com.yizhuan.xchat_android_core.room.game.GameStatus; import com.yizhuan.xchat_android_core.room.giftvalue.helper.GiftValueMrg; import com.yizhuan.xchat_android_core.room.model.AvRoomModel; import com.yizhuan.xchat_android_core.room.model.HomePartyModel; @@ -113,6 +114,13 @@ public class GameRoomPresenter extends BaseMvpPresenter { if (currentRoom == null) { return; } + if (AvRoomDataManager.get().isSelfGamePlaying()){ + SingleToastUtil.showToast("游戏中不可以换麦!"); + return; + } + if (UserModel.get().getCacheLoginUserInfo() != null) { + UserModel.get().getCacheLoginUserInfo().setGameStatus(GameStatus.STATUS_NOT_JOIN); + } final String currentUid = String.valueOf(AuthModel.get().getCurrentUid()); if (AvRoomDataManager.get().isRoomOwner(currentUid) || AvRoomDataManager.get().isRoomAdmin(currentUid) || SuperAdminUtil.isSuperAdmin()) { diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java b/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java index 242e3f03e..8dd9eb44d 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java @@ -1043,6 +1043,11 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe return; } + if (AvRoomDataManager.get().isSelfGamePlaying()){ + SingleToastUtil.showToast("游戏中不可以主动下麦!"); + return; + } + if (AvRoomDataManager.get().mCurrentRoomInfo.isOpenKTV()) { new DialogManager(context).showOkCancelDialog("KTV模式下下麦会移除您已点的所有歌曲,确定进行此操作?", false, () -> { @@ -1307,8 +1312,12 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe } } - if (AvRoomDataManager.get().isGamePlaying(AvRoomDataManager.get().getMicPosition(uid))){ - SingleToastUtil.showToast("不可以抱正在游戏中的用户下麦!"); + if (AvRoomDataManager.get().isGamePlaying(uid)){ + new DialogManager(context).showOkCancelWithTitleDialog("抱Ta下麦后默认该玩家退出游戏,是否继续?", + (DialogManager.LambdaOkDialogListener) () -> { + kickDownMicCode(); + dismiss(); + }); return; } //ktv模式下麦 diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java index 4c32a2087..473393fa2 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/AvRoomDataManager.java @@ -34,6 +34,7 @@ import com.yizhuan.xchat_android_core.room.ktv.event.KtvEvent; import com.yizhuan.xchat_android_core.room.bean.RoomModeType; import com.yizhuan.xchat_android_core.super_admin.SuperAdminDataMrg; import com.yizhuan.xchat_android_core.super_admin.util.SuperAdminUtil; +import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.utils.LogUtils; import com.yizhuan.xchat_android_core.utils.StringUtils; import com.yizhuan.xchat_android_library.rxbus.RxBus; @@ -165,6 +166,8 @@ public final class AvRoomDataManager { * 表示自己是否在队列中 */ public boolean myIsInQueue = false; + //TRTC SIG + public String trtcSig; private Disposable subscribe; /** * 一起玩 按钮开关 @@ -183,10 +186,6 @@ public final class AvRoomDataManager { */ private boolean isParty; private boolean redEnvelopeOpen; - - //TRTC SIG - public String trtcSig; - /** * 缓存师父的 UID */ @@ -221,6 +220,9 @@ public final class AvRoomDataManager { chatRoomDataRelease(); //清空缓存 IMNetEaseManager.get().mCacheRoomQueueInfo = null; + if (UserModel.get().getCacheLoginUserInfo() != null) { + UserModel.get().getCacheLoginUserInfo().setGameStatus(GameStatus.STATUS_NOT_JOIN); + } LogUtils.d("---------清除AvRoomDataManager数据完成---------"); } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/room/event/FinishAvRoomEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/room/event/FinishAvRoomEvent.java new file mode 100644 index 000000000..bd6c9fa2c --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/room/event/FinishAvRoomEvent.java @@ -0,0 +1,4 @@ +package com.yizhuan.xchat_android_core.room.event; + +public class FinishAvRoomEvent { +}