diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt index 48586623d..4321dcd7c 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/GameRoomFragment.kt @@ -14,6 +14,7 @@ import com.yizhuan.erban.avroom.firstcharge.FirstChargePrizeDialog import com.yizhuan.erban.avroom.game.GameDelegate import com.yizhuan.erban.avroom.game.OnGameStatusChangeListener import com.yizhuan.erban.avroom.presenter.GameRoomPresenter +import com.yizhuan.erban.avroom.redpackage.RedPackageWidget import com.yizhuan.erban.avroom.view.IGameRoomView import com.yizhuan.erban.databinding.FragmentGameRoomBinding import com.yizhuan.erban.ui.widget.GiftDialog.OnGiftDialogBtnClickListener @@ -193,4 +194,13 @@ class GameRoomFragment : BaseRoomFragment(), super.onDestroy() } + override fun onDestroyView() { + super.onDestroyView() + gameBinding.redPackageWidget.onStop() + } + + override fun initWidget() { + super.initWidget() + registerWidget(RedPackageWidget::class.java.simpleName, gameBinding.redPackageWidget) + } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/SingleRoomFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/SingleRoomFragment.kt index 630be3a8f..a184d5993 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/SingleRoomFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/SingleRoomFragment.kt @@ -16,6 +16,7 @@ import com.yizhuan.erban.avroom.adapter.SingleRoomPKMicroViewAdapter import com.yizhuan.erban.avroom.dialog.RequestUpMicDialog import com.yizhuan.erban.avroom.firstcharge.FirstChargePrizeDialog import com.yizhuan.erban.avroom.presenter.SingleRoomPresenter +import com.yizhuan.erban.avroom.redpackage.RedPackageWidget import com.yizhuan.erban.avroom.singleroompk.SingleRoomPkFinishDialog import com.yizhuan.erban.avroom.singleroompk.SingleRoomPkForceFinishDialog import com.yizhuan.erban.avroom.singleroompk.SingleRoomPkReceivedDialog @@ -261,4 +262,14 @@ class SingleRoomFragment : BaseRoomFragment = MutableLiveData() + /** + * 红包相关操作计数;目前的红包操作为:【正在打开当前房间的红包弹窗】。 + * 展示时+1,销毁时-1,以此来判断是否正在进行红包操作) + */ + private var operationCount: Int = 0 + + val inOperation get() = operationCount > 0 + override fun onStart(context: RoomContext) { super.onStart(context) registerSignaling() @@ -122,4 +133,31 @@ class RedPackageHandler : RoomHandler() { // updateIcon(null) requestLatestRoomRedPackage() } + + fun startOperation() { + operationCount++ + } + + fun stopOperation() { + operationCount-- + } + + /** + * 全服红包信令(之前是在BaseActivity中处理的;现在为了红包的一个需求,暂且拦截到这里处理) + */ + fun onAllServiceSignaling(context: Context, data: RedPackageNotifyInfo) { + if (context is AVRoomActivity) { + if (roomContext?.roomId == data.roomUid) { + RedPackageOpenDialog2.newInstance(data).show(context) + } else { + if (!inOperation) { + RedPackageGoRoomDialog.newInstance(data).show(context) + }else{ + // 需求:正在房间中领取红包时,不展示其他房间的全服红包 + } + } + } else { + RedPackageGoRoomDialog.newInstance(data).show(context) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/avroom/redpackage/open/RedPackageOpenDialog2.kt b/app/src/main/java/com/yizhuan/erban/avroom/redpackage/open/RedPackageOpenDialog2.kt index a237be886..87806496a 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/redpackage/open/RedPackageOpenDialog2.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/redpackage/open/RedPackageOpenDialog2.kt @@ -7,7 +7,9 @@ import android.animation.ObjectAnimator import android.animation.ValueAnimator import android.annotation.SuppressLint import android.os.Bundle +import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup import android.view.WindowManager import android.view.animation.AccelerateDecelerateInterpolator import androidx.core.view.isVisible @@ -19,6 +21,7 @@ import com.chuhai.utils.log.ILog import com.chuhai.utils.spannable.spannableBuilder import com.trello.rxlifecycle3.android.FragmentEvent import com.yizhuan.erban.R +import com.yizhuan.erban.avroom.redpackage.RedPackageHandler import com.yizhuan.erban.base.BaseDialog import com.yizhuan.erban.databinding.RedPackageOpenDialogBinding import com.yizhuan.erban.ui.utils.loadAvatar @@ -32,6 +35,7 @@ import com.yizhuan.xchat_android_core.manager.AvRoomDataManager import com.yizhuan.xchat_android_core.pay.PayModel import com.yizhuan.xchat_android_core.redpackage.* import com.yizhuan.xchat_android_core.support.config.Constants +import com.yizhuan.xchat_android_core.support.room.RoomContext import com.yizhuan.xchat_android_library.annatation.ActLayoutRes import com.yizhuan.xchat_android_library.utils.SingleToastUtil import io.reactivex.Observable @@ -476,11 +480,21 @@ class RedPackageOpenDialog2 : BaseDialog(), ILog { binding.tvOpenTips.isVisible = isVisible } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + RoomContext.get() + ?.findAbility(RedPackageHandler::class.simpleName) + ?.startOperation() + super.onViewCreated(view, savedInstanceState) + } + override fun onDestroyView() { super.onDestroyView() btnAnimator?.cancel() btnAnimator = null stopCountDown() + RoomContext.get() + ?.findAbility(RedPackageHandler::class.simpleName) + ?.stopOperation() } override fun onPause() { diff --git a/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java b/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java index 156b0f724..0a1fa468a 100644 --- a/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java +++ b/app/src/main/java/com/yizhuan/erban/base/BaseActivity.java @@ -69,6 +69,7 @@ import com.yizhuan.erban.application.XChatApplication; import com.yizhuan.erban.avroom.activity.AVRoomActivity; import com.yizhuan.erban.avroom.firstcharge.FirstChargeDialog; import com.yizhuan.erban.avroom.redpackage.RedPackageGoRoomDialog; +import com.yizhuan.erban.avroom.redpackage.RedPackageHandler; import com.yizhuan.erban.avroom.redpackage.RedPackageOpenDialog; import com.yizhuan.erban.avroom.redpackage.open.RedPackageOpenDialog2; import com.yizhuan.erban.common.LoadingFragment; @@ -123,6 +124,7 @@ import com.yizhuan.xchat_android_core.pay.bean.WalletInfo; import com.yizhuan.xchat_android_core.redpackage.RedPackageNotifyInfo; import com.yizhuan.xchat_android_core.room.bean.RoomInfo; import com.yizhuan.xchat_android_core.room.model.AvRoomModel; +import com.yizhuan.xchat_android_core.support.room.RoomContext; import com.yizhuan.xchat_android_core.treasurefairy.FairyMsgInfoBean; import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.utils.net.RxHelper; @@ -958,10 +960,19 @@ public abstract class BaseActivity extends RxAppCompatActivity return; RedPackageNotifyInfo notifyInfo = new Gson().fromJson(String.valueOf(baseProtocol.getData()), RedPackageNotifyInfo.class); RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; - if (roomInfo != null && roomInfo.getUid() == notifyInfo.getRoomUid() && context instanceof AVRoomActivity) { - RedPackageOpenDialog2.Companion.newInstance(notifyInfo).show(BaseActivity.this); + RoomContext roomContext = RoomContext.Companion.get(); + RedPackageHandler redPackageHandler = null; + if (roomContext != null) { + redPackageHandler = roomContext.findAbility(RedPackageHandler.class.getSimpleName()); + } + if (redPackageHandler != null) { + redPackageHandler.onAllServiceSignaling(this, notifyInfo); } else { - RedPackageGoRoomDialog.Companion.newInstance(notifyInfo).show(this); + if (roomInfo != null && roomInfo.getUid() == notifyInfo.getRoomUid() && context instanceof AVRoomActivity) { + RedPackageOpenDialog2.Companion.newInstance(notifyInfo).show(BaseActivity.this); + } else { + RedPackageGoRoomDialog.Companion.newInstance(notifyInfo).show(this); + } } } case CUSTOM_MSG_VIP: diff --git a/app/src/module_mini_world/res/layout/fragment_game_room.xml b/app/src/module_mini_world/res/layout/fragment_game_room.xml index 5b49ed287..1e03edd9e 100644 --- a/app/src/module_mini_world/res/layout/fragment_game_room.xml +++ b/app/src/module_mini_world/res/layout/fragment_game_room.xml @@ -137,7 +137,6 @@ android:layout_marginEnd="90dp" android:layout_marginBottom="@dimen/dp_10" /> - + + - - + + findAbility(key: String): T? { + fun findAbility(key: String?): T? { return abilityList[key] as? T }