From 41c57647bafc57e1a6d874be4f65db242894ce6e Mon Sep 17 00:00:00 2001 From: huangjian Date: Mon, 22 Aug 2022 17:12:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B6=82=E9=B8=A6=E7=A4=BC=E7=89=A9=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=8D=8F=E8=AE=AE=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../erban/avroom/fragment/BaseRoomFragment.kt | 14 +- .../erban/avroom/widget/GiftV2View.java | 7 - .../erban/avroom/widget/RoomEffectView.kt | 15 +++ .../OnGiftDialogBtnClickListenerWrapper.java | 2 +- .../erban/ui/im/actions/GiftAction.java | 2 +- .../yizhuan/erban/ui/widget/GiftDialog.java | 13 +- .../ui/widget/drawgift/DrawGiftHelper.java | 31 +++-- .../ui/widget/drawgift/DrawGiftPlayView.java | 4 +- .../ui/widget/drawgift/DrawGiftView.java | 15 +-- .../activity/MWTeamRoomMessageAct.java | 2 +- .../MiniWorldTeamMessageActivity.java | 2 +- .../PublicChatHallMessageFragment.java | 2 +- .../manager/IMNetEaseManager.java | 5 + .../xchat_android_core/gift/GiftModel.java | 9 +- .../xchat_android_core/gift/IGiftModel.java | 4 +- .../gift/bean/GiftMultiReceiverInfo.java | 1 - .../gift/bean/GiftReceiveInfo.java | 2 - .../gift/toolbox/GiftToolbox.java | 120 ++++++++++-------- .../im/custom/bean/CustomAttachParser.java | 7 + .../im/custom/bean/CustomAttachment.java | 12 ++ .../im/custom/bean/DrawGiftAttachment.java | 52 ++++++++ .../im/custom/bean/GiftAttachment.java | 7 - .../xchat_android_core/manager/RoomEvent.java | 2 + 23 files changed, 222 insertions(+), 108 deletions(-) create mode 100644 core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/DrawGiftAttachment.java diff --git a/app/src/main/java/com/yizhuan/erban/avroom/fragment/BaseRoomFragment.kt b/app/src/main/java/com/yizhuan/erban/avroom/fragment/BaseRoomFragment.kt index d4cf12a69..2bc979fbd 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/fragment/BaseRoomFragment.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/fragment/BaseRoomFragment.kt @@ -689,7 +689,7 @@ open class BaseRoomFragment?> : msg: String?, isKnap: Boolean, isWholdMic: Boolean, - drawFixedArray: List>, + drawFixedArray: List>, callback: SenGiftCallback ) { val targetUids: MutableList = ArrayList() @@ -697,14 +697,22 @@ open class BaseRoomFragment?> : targetUids.add(micMemberInfos[i].account.toLong()) } GiftModel.get() - .sendRoomGift(giftInfo.giftId, targetUids, number, msg, isKnap, isWholdMic,drawFixedArray) + .sendRoomGift( + giftInfo.giftId, + targetUids, + number, + msg, + isKnap, + isWholdMic, + drawFixedArray + ) .compose(bindUntilEvent(FragmentEvent.DESTROY)) .doOnError { if (it is VipLevelNotEnoughException) { dialogManager.showOkDialog("尚未达到赠送${giftInfo.giftName}所需贵族等级,所需贵族等级:${giftInfo.giftVipInfo?.vipName}") } } - .subscribe { throwable, _ -> + .subscribe { _, throwable -> if (throwable != null) { callback.onFail() } else { diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/GiftV2View.java b/app/src/main/java/com/yizhuan/erban/avroom/widget/GiftV2View.java index 82525109c..72a52b469 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/GiftV2View.java +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/GiftV2View.java @@ -100,7 +100,6 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect private Keyframe[] keyTrans; private SvgaObjectPool mMagicViewPool; private volatile Hashtable currentAnimationMap = new Hashtable<>(); - private DrawGiftHelper drawGiftHelper; public GiftV2View(Context context) { @@ -282,12 +281,6 @@ public class GiftV2View extends FrameLayout implements GiftEffectView.GiftEffect targetUsers.add(giftReceiver); } GiftReceiveInfo giftReceiveInfo = giftReceiveInfos.get(0); - if (giftReceiveInfo.getDrawFixedArray() != null) { - if (drawGiftHelper == null) { - drawGiftHelper = new DrawGiftHelper((Activity) context); - } - drawGiftHelper.prepareShowDrawGift(giftReceiveInfo.getDrawFixedArray(), false); - } GiftInfo giftInfo = giftReceiveInfo.getGift(); if (totalCoin >= 520 || (giftInfo != null && giftInfo.isHasEffect())) { Message msg = Message.obtain(); diff --git a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt index 7d494fb41..ba10dd18d 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/widget/RoomEffectView.kt @@ -1,6 +1,7 @@ package com.yizhuan.erban.avroom.widget import android.annotation.SuppressLint +import android.app.Activity import android.content.Context import android.graphics.Color import android.text.Layout @@ -33,6 +34,7 @@ import com.yizhuan.erban.ui.utils.isDestroyed import com.yizhuan.erban.ui.utils.load import com.yizhuan.erban.ui.utils.loadAnim import com.yizhuan.erban.ui.widget.SimpleAnimListener +import com.yizhuan.erban.ui.widget.drawgift.DrawGiftHelper import com.yizhuan.erban.utils.SpannableBuilder import com.yizhuan.xchat_android_constants.XChatConstants import com.yizhuan.xchat_android_core.auth.AuthModel @@ -120,6 +122,9 @@ class RoomEffectView @JvmOverloads constructor( private var isHideCarEffect = false + private val drawGiftHelper: DrawGiftHelper by lazy { DrawGiftHelper(context as Activity) } + + private fun loopCarAnim() { if (context.isDestroyed()) return isSvgaPlaying = false @@ -181,6 +186,16 @@ class RoomEffectView @JvmOverloads constructor( RoomEvent.ROOM_CAR_EFFECT_SHOW -> { isHideCarEffect = false } + RoomEvent.DRAW_GIFT_EFFECT -> { + val drawGiftAttachment = + (roomEvent.chatRoomMessage?.attachment as? DrawGiftAttachment) + ?: return@subscribe + drawGiftHelper.prepareShowDrawGift( + drawGiftAttachment.giftId, + drawGiftAttachment.drawFixedArray, + false + ) + } else -> {} } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/gift/callback/OnGiftDialogBtnClickListenerWrapper.java b/app/src/main/java/com/yizhuan/erban/ui/gift/callback/OnGiftDialogBtnClickListenerWrapper.java index 12ff0bc1e..4ce12bde9 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/gift/callback/OnGiftDialogBtnClickListenerWrapper.java +++ b/app/src/main/java/com/yizhuan/erban/ui/gift/callback/OnGiftDialogBtnClickListenerWrapper.java @@ -11,7 +11,7 @@ import java.util.List; public class OnGiftDialogBtnClickListenerWrapper implements GiftDialog.OnGiftDialogBtnClickListener { @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { + public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { } diff --git a/app/src/main/java/com/yizhuan/erban/ui/im/actions/GiftAction.java b/app/src/main/java/com/yizhuan/erban/ui/im/actions/GiftAction.java index 59925c5c5..0e2382c53 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/im/actions/GiftAction.java +++ b/app/src/main/java/com/yizhuan/erban/ui/im/actions/GiftAction.java @@ -55,7 +55,7 @@ public class GiftAction extends BaseAction implements GiftDialog.OnGiftDialogBtn @SuppressLint("CheckResult") @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isknap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { + public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isknap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { if (giftInfo == null) return; GiftModel.get().sendPersonalGift(giftInfo.getGiftId(), micMemberInfos.get(0).getAccount(), number, msg, isknap) .doOnError(throwable -> { diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/GiftDialog.java b/app/src/main/java/com/yizhuan/erban/ui/widget/GiftDialog.java index 2975f9679..7e110802b 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/GiftDialog.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/GiftDialog.java @@ -993,6 +993,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (sendGiftButton == null) return; sendGiftButton.setText("赠送"); sendGiftButton.setEnabled(true); + clearDrawGift(); } @Override @@ -1025,6 +1026,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (sendGiftButton == null) return; sendGiftButton.setText("赠送"); sendGiftButton.setEnabled(true); + clearDrawGift(); } @Override @@ -1059,6 +1061,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene if (sendGiftButton == null) return; sendGiftButton.setText("赠送"); sendGiftButton.setEnabled(true); + clearDrawGift(); } @Override @@ -1230,10 +1233,16 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene } @Nullable - private List> getDrawFixedArray() { + private List> getDrawFixedArray() { return drawGiftHelper == null ? null : drawGiftHelper.getDrawFixedArray(); } + private void clearDrawGift() { + if (drawGiftHelper != null) { + drawGiftHelper.clearDrawGift(); + } + } + @Override public void onDetachedFromWindow() { super.onDetachedFromWindow(); @@ -1324,7 +1333,7 @@ public class GiftDialog extends BottomSheetDialog implements View.OnClickListene String msg, boolean isKnap, boolean isWholeMic, - List> drawFixedArray, + List> drawFixedArray, SenGiftCallback callback); } diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftHelper.java b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftHelper.java index 49a7a8771..d48449705 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftHelper.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftHelper.java @@ -27,6 +27,7 @@ import com.netease.nim.uikit.support.glide.GlideApp; import com.yizhuan.erban.R; import com.yizhuan.xchat_android_core.gift.GiftModel; import com.yizhuan.xchat_android_core.gift.bean.GiftInfo; +import com.yizhuan.xchat_android_library.utils.ListUtils; import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -103,6 +104,8 @@ public class DrawGiftHelper { public void lazyDrawGiftView(int bottomSheetHeight, DrawGiftView.DrawGiftListener onDrawGiftListener) { if (drawGiftView == null) { drawGiftView = new DrawGiftView(activity); + int newSize = ScreenUtil.dip2px(10); + drawGiftView.setDrawStrokeInterval(newSize); drawGiftView.setOnDrawGiftListener(onDrawGiftListener); drawGiftView.showInActivityWindow(activity, bottomSheetHeight); } @@ -131,7 +134,8 @@ public class DrawGiftHelper { } //子线程处理播放礼物的数据 - public void prepareShowDrawGift(List> fixedArray, boolean insertToFirst) { + public void prepareShowDrawGift(int giftId, List> fixedArray, boolean insertToFirst) { + if (ListUtils.isListEmpty(fixedArray)) return; //把服务器推送来的"礼物位置json" 和 本地的 giftBeanList 一一对应上,找到礼物的bitmap final List allDrawGiftArray = new ArrayList<>(); @@ -146,32 +150,25 @@ public class DrawGiftHelper { .getDefaultDisplay().getMetrics(displayMetrics); float viewWidth = displayMetrics.widthPixels; float viewHeight = displayMetrics.heightPixels; + GiftInfo giftBean = GiftModel.get().findGiftInfoById(giftId); + Bitmap thumbGiftBitmap = cacheBitmapByGiftIdMap.get(giftId); //fixedArray 是服务器推送过来的礼物json - for (HashMap fixedMap : fixedArray) { - //giftBeanList 是手机本地缓存的全部礼物列表 - //我们要做的就是两个列表相互匹配,根据礼物id,找出礼物的bitmap(通过glide) - int giftId = Integer.parseInt(fixedMap.get("giftid")); - GiftInfo giftBean = GiftModel.get().findGiftInfoById(giftId); - + for (List fixedMap : fixedArray) { //将服务器推送来的x,y转成绝对像素坐标 DrawGiftModel drawGiftModel = new DrawGiftModel(); - drawGiftModel.setX(Float.valueOf(fixedMap.get("x")) * viewWidth); - drawGiftModel.setY(Float.valueOf(fixedMap.get("y")) * viewHeight); - - Bitmap thumbGiftBitmap = cacheBitmapByGiftIdMap.get(giftId); + drawGiftModel.setX(fixedMap.get(0) / 1000f * viewWidth); + drawGiftModel.setY(fixedMap.get(1) / 1000f * viewHeight); if (thumbGiftBitmap != null) { //缓存中就有bitmap drawGiftModel.setGiftBitmap(thumbGiftBitmap); - } else { //缓存没有bitmap //从Glide里找出礼物的bitmap FutureTarget futureBitmap = Glide.with(activity).asBitmap() .load(giftBean.getGiftUrl()) .submit(); - try { Bitmap bitmap = futureBitmap.get(); thumbGiftBitmap = obtainThumbBitmap(giftId, bitmap); @@ -219,13 +216,19 @@ public class DrawGiftHelper { } } - public List> getDrawFixedArray() { + public List> getDrawFixedArray() { if (drawGiftView != null) { return drawGiftView.transformGiftArrayFitScreen(activity); } return null; } + public void clearDrawGift() { + if (drawGiftView != null) { + drawGiftView.removeAll(); + } + } + private static class MyHandler extends Handler { diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftPlayView.java b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftPlayView.java index 61c625488..134ae9eb0 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftPlayView.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftPlayView.java @@ -91,7 +91,7 @@ public class DrawGiftPlayView extends View { Message message = Message.obtain(); message.arg1 = 0; message.what = DRAW_ONE_GIFT; - mHandler.sendMessageDelayed(message, 100); + mHandler.sendMessageDelayed(message, 50); } } } @@ -112,7 +112,7 @@ public class DrawGiftPlayView extends View { Message message = Message.obtain(); message.arg1 = currentGiftShowIndex + 1; message.what = DRAW_ONE_GIFT; - mHandler.sendMessageDelayed(message, 100); + mHandler.sendMessageDelayed(message, 50); } return true; diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftView.java b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftView.java index a02eb1c64..982105eeb 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftView.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/drawgift/DrawGiftView.java @@ -193,7 +193,7 @@ public class DrawGiftView extends View { public void removeAll() { strokeFirstPositionArray.clear(); allDrawGiftArray.clear(); - invalidate(); + postInvalidate(); } //移除最后一笔 @@ -266,23 +266,22 @@ public class DrawGiftView extends View { } //由于不同手机屏幕尺寸不同,如果礼物画在大屏幕的最右边(X很大)在小屏幕上绘制礼物的时候,X会超出屏幕。因此在这里转成百分比再上传给服务器 - public List> transformGiftArrayFitScreen(Context context) { + public List> transformGiftArrayFitScreen(Context context) { DisplayMetrics displayMetrics = new DisplayMetrics(); ((WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay().getMetrics(displayMetrics); //fixedArray是需要转成json发送给服务器的 - List> fixedArray = new ArrayList<>(); + List> fixedArray = new ArrayList<>(); float viewWidth = displayMetrics.widthPixels; float viewHeight = displayMetrics.heightPixels; - HashMap param = null; + List param = null; for (DrawGiftModel giftModel : allDrawGiftArray) { //x 和 y转为屏幕比例 - param = new HashMap<>(); - param.put("x", String.valueOf(((int) ((giftModel.getX() / viewWidth) * 1000)) / 1000f)); - param.put("y", String.valueOf(((int) ((giftModel.getY() / viewHeight) * 1000)) / 1000f)); - param.put("giftid", String.valueOf(giftModel.getgiftId())); + param = new ArrayList<>(); + param.add((int) ((giftModel.getX() / viewWidth) * 1000)); + param.add((int) ((giftModel.getY() / viewHeight) * 1000)); fixedArray.add(param); } return fixedArray; diff --git a/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MWTeamRoomMessageAct.java b/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MWTeamRoomMessageAct.java index f3ff497b0..2a5128c6b 100644 --- a/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MWTeamRoomMessageAct.java +++ b/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MWTeamRoomMessageAct.java @@ -184,7 +184,7 @@ public class MWTeamRoomMessageAct extends BaseMessageActivity implements IMWTeam new OnGiftDialogBtnClickListenerWrapper() { @SuppressLint("CheckResult") @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { + public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { if (giftInfo == null) return; if (mMwChatInfo != null) { diff --git a/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MiniWorldTeamMessageActivity.java b/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MiniWorldTeamMessageActivity.java index ff89bb49c..9aaeda59a 100644 --- a/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MiniWorldTeamMessageActivity.java +++ b/app/src/module_mini_world/java/com/yizhuan/erban/miniworld/activity/MiniWorldTeamMessageActivity.java @@ -207,7 +207,7 @@ public class MiniWorldTeamMessageActivity extends BaseMessageActivity implements new OnGiftDialogBtnClickListenerWrapper() { @SuppressLint("CheckResult") @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { + public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { if (giftInfo == null) return; if (mMwChatInfo != null) { diff --git a/app/src/module_public_chat_hall/java/com/yizhuan/erban/public_chat_hall/fragment/PublicChatHallMessageFragment.java b/app/src/module_public_chat_hall/java/com/yizhuan/erban/public_chat_hall/fragment/PublicChatHallMessageFragment.java index 80103b0dd..ee88ac122 100644 --- a/app/src/module_public_chat_hall/java/com/yizhuan/erban/public_chat_hall/fragment/PublicChatHallMessageFragment.java +++ b/app/src/module_public_chat_hall/java/com/yizhuan/erban/public_chat_hall/fragment/PublicChatHallMessageFragment.java @@ -304,7 +304,7 @@ public class PublicChatHallMessageFragment extends TFragment implements ModulePr new OnGiftDialogBtnClickListenerWrapper() { @SuppressLint("CheckResult") @Override - public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { + public void onSendGiftBtnClick(GiftInfo giftInfo, ArrayList micMemberInfos, int number, String msg, boolean isKnap, boolean isWholeMic, List> drawFixedArray, GiftDialog.SenGiftCallback callback) { if (giftInfo == null) return; boolean canUseNobleGiftOrNot = GiftModel.get().canUseNobleGiftOrNot(giftInfo); if (canUseNobleGiftOrNot) { diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java index 20c1a7ff3..9b4a5359e 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/IMNetEaseManager.java @@ -1355,6 +1355,11 @@ public final class IMNetEaseManager { addMessages(msg); } break; + case CUSTOM_MSG_DRAW_GIFT_EFFECT: + if (customAttachment.getSecond() == CUSTOM_MSG_SUB_TYPE_DRAW_GIFT_EFFECT) { + noticeRoomEvent(msg, RoomEvent.DRAW_GIFT_EFFECT); + } + break; default: break; } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/GiftModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/GiftModel.java index a27c36c85..29168c262 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/GiftModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/GiftModel.java @@ -309,7 +309,7 @@ public class GiftModel extends BaseModel implements IGiftModel { boolean isKnap, boolean isWholeMic, String chatSessionId, - List> drawFixedArray) { + List> drawFixedArray) { if (ListUtils.isListEmpty(targetUids)) { return Single.error(new Throwable("targetUids is empty")); } @@ -365,11 +365,9 @@ public class GiftModel extends BaseModel implements IGiftModel { PayModel.get().minusGold(giftInfo.getGoldPrice() * giftNum * targetUids.size()); } GiftMultiReceiverInfo giftMultiReceiverInfo = serviceResult.getData(); - giftMultiReceiverInfo.setDrawFixedArray(drawFixedArray); if (giftId != giftMultiReceiverInfo.getGiftId()) { return Single.error(RxHelper.createThrowable(serviceResult)); } - switch (sendType) { case GiftSendType.TYPE_ANCHOR: case GiftSendType.TYPE_MIC: @@ -400,6 +398,9 @@ public class GiftModel extends BaseModel implements IGiftModel { } break; } + if (!ListUtils.isListEmpty(drawFixedArray)) { + GiftToolbox.sendDrawGiftRoomMessage(giftId, drawFixedArray); + } return Single.just(serviceResult); } else { if (serviceResult.getCode() == BalanceNotEnoughExeption.code) { @@ -459,7 +460,7 @@ public class GiftModel extends BaseModel implements IGiftModel { String msg, boolean isKnap, boolean isWholeMic, - List> drawFixedArray) { + List> drawFixedArray) { Log.e("GiftDialog", "sendRoomGift() called with: giftId = [" + giftId + "], targetUids = [" + targetUids + "], giftNum = [" + giftNum + "], msg = [" + msg + "], isKnap = [" + isKnap + "], isWholeMic = [" + isWholeMic + "]"); return sendGift( giftId, diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/IGiftModel.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/IGiftModel.java index b4dddb8e5..541bf15d4 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/IGiftModel.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/IGiftModel.java @@ -89,7 +89,7 @@ public interface IGiftModel { boolean isKnap, boolean isWholeMic, String chatSessionId, - List> drawFixedArray); + List> drawFixedArray); /** * 房间内发送礼物 @@ -106,7 +106,7 @@ public interface IGiftModel { String msg, boolean isKnap, boolean isWholeMic, - List> drawFixedArray); + List> drawFixedArray); /** * 在单聊界面送礼物 diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftMultiReceiverInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftMultiReceiverInfo.java index 315f32e76..2fa213210 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftMultiReceiverInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftMultiReceiverInfo.java @@ -27,5 +27,4 @@ public class GiftMultiReceiverInfo implements Serializable { private List luckyBagGifts; private List targetUids; private LuckyGiftList luckyGiftList; - private List> drawFixedArray; } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftReceiveInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftReceiveInfo.java index a21dc28d0..83cc387e6 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftReceiveInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/bean/GiftReceiveInfo.java @@ -29,6 +29,4 @@ public class GiftReceiveInfo implements Serializable { //礼物值 private List giftValueVos; private long currentTime; - private List> drawFixedArray; - } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/gift/toolbox/GiftToolbox.java b/core/src/main/java/com/yizhuan/xchat_android_core/gift/toolbox/GiftToolbox.java index 2cbb4d1a4..f59e4e7a6 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/gift/toolbox/GiftToolbox.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/gift/toolbox/GiftToolbox.java @@ -20,12 +20,14 @@ import com.yizhuan.xchat_android_core.gift.bean.GiftReceiver; import com.yizhuan.xchat_android_core.gift.bean.LuckyBagGifts; import com.yizhuan.xchat_android_core.gift.bean.MultiGiftReceiveInfo; import com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment; +import com.yizhuan.xchat_android_core.im.custom.bean.DrawGiftAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.GiftAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.GiftBatchAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.MultiGiftAttachment; import com.yizhuan.xchat_android_core.im.custom.bean.MultiLuckyGiftAttachment; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.IMNetEaseManager; +import com.yizhuan.xchat_android_core.manager.RoomEvent; import com.yizhuan.xchat_android_core.public_chat_hall.manager.PublicChatHallDataManager; import com.yizhuan.xchat_android_core.public_chat_hall.model.PublicChatHallModel; import com.yizhuan.xchat_android_core.retry.ImRetryManager; @@ -35,6 +37,7 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo; import com.yizhuan.xchat_android_library.utils.ListUtils; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import io.reactivex.Single; @@ -45,6 +48,44 @@ import io.reactivex.Single; * @Date 2019/3/8 */ public class GiftToolbox { + + //单人礼物公屏 + public static final int CUSTOM_MSG_HEADER_TYPE_GIFT = 3; + public static final int CUSTOM_MSG_SUB_TYPE_SEND_GIFT = 31; //普通单人送礼公屏 + public static final int CUSTOM_MSG_SUB_TYPE_SEND_LUCKY_GIFT = 33;//单人福袋送礼公屏 + //多人礼物公屏 + public static final int CUSTOM_MSG_HEADER_TYPE_MULTI_GIFT = 12; + //普通 + public static final int CUSTOM_MSG_SUB_TYPE_BATCH_SEND_GIFT = 123;// 普通多人 + public static final int CUSTOM_MSG_SUB_TYPE_SEND_MULTI_GIFT = 121;//普通全麦 + //福袋 + public static final int CUSTOM_MSG_SUB_TYPE_SEND_MULTI_LUCK_GIFT = 124;// 福袋多人 + public static final int CUSTOM_MSG_SUB_TYPE_SEND_ALL_MIC_LUCKY_GIFT = 122;// 福袋全麦 + /** + * 收到普通礼物 + */ + public static final int RECEIVE_NORMALE_GIFT = 34; + /** + * 收到普通全麦礼物 + */ + public static final int RECEIVE_ALL_MIC__NORMALEI_GIFT = 35; + /** + * 收到普通多人礼物 + */ + public static final int RECEIVE_MUTLT_NORMALEI_GIFT = 53; + /** + * 收到个人福袋礼物 + */ + public static final int RECEIVE_LUCKY_GIFT = 61; + /** + * 收到多人福袋礼物 + */ + public static final int RECEIVE_MULTI_LUCKY_GIFT = 62; + /** + * 收到全麦福袋礼物 + */ + public static final int RECEIVE_ALL_MIC_LUCKY_GIFT = 64; + public static MultiGiftReceiveInfo transformToMultiGiftReceiveInfo(GiftMultiReceiverInfo giftMultiReceiverInfo) { MultiGiftReceiveInfo giftReceiveInfo = new MultiGiftReceiveInfo(); giftReceiveInfo.setUid(giftMultiReceiverInfo.getUid()); @@ -105,8 +146,6 @@ public class GiftToolbox { giftReceiveInfo.setDisplayGift(giftMultiReceiverInfo.getDisplayGift()); giftReceiveInfo.setGiftValueVos(giftMultiReceiverInfo.getGiftValueVos()); giftReceiveInfo.setCurrentTime(giftMultiReceiverInfo.getCurrentTime()); - giftReceiveInfo.setDrawFixedArray(giftMultiReceiverInfo.getDrawFixedArray()); - return giftReceiveInfo; } @@ -181,6 +220,31 @@ public class GiftToolbox { } + /** + * 发送涂鸦礼物特效消息 + */ + public static void sendDrawGiftRoomMessage(int giftId, List> drawFixedArray) { + RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (roomInfo == null) return; + DrawGiftAttachment giftAttachment = new DrawGiftAttachment( + CustomAttachment.CUSTOM_MSG_DRAW_GIFT_EFFECT, + CustomAttachment.CUSTOM_MSG_SUB_TYPE_DRAW_GIFT_EFFECT + ); + giftAttachment.setGiftId(giftId); + giftAttachment.setDrawFixedArray(drawFixedArray); + ChatRoomMessage message = ChatRoomMessageBuilder.createChatRoomCustomMessage( + // 聊天室id + roomInfo.getRoomId() + "", + giftAttachment + ); + ImRetryManager.sendRoomGiftMsg(message) + .doOnSuccess(retryChatRoomMessage -> { + // 送礼物的人自己的涂鸦特效 + IMNetEaseManager.get().noticeRoomEvent(message, RoomEvent.DRAW_GIFT_EFFECT); + }) + .subscribe(); + } + /** * 发送个多人送普通礼物的消息到公屏 * @@ -227,7 +291,6 @@ public class GiftToolbox { } } - /** * 发送全麦普通礼物的公屏消息 * @@ -264,13 +327,12 @@ public class GiftToolbox { } } - /** * 发送单人送福袋礼物的消息到公屏 * * @param giftReceiveInfo */ - public static void sendLuckyGiftRoomMessage(GiftMultiReceiverInfo giftReceiveInfo,int first,int second) { + public static void sendLuckyGiftRoomMessage(GiftMultiReceiverInfo giftReceiveInfo, int first, int second) { RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; if (roomInfo != null && giftReceiveInfo != null) { @@ -325,7 +387,7 @@ public class GiftToolbox { * * @param giftReceiveInfo */ - public static void sendMultiLuckyGiftRoomMessage(GiftMultiReceiverInfo giftReceiveInfo,int first,int second) { + public static void sendMultiLuckyGiftRoomMessage(GiftMultiReceiverInfo giftReceiveInfo, int first, int second) { RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo; if (roomInfo != null && giftReceiveInfo != null) { @@ -373,6 +435,7 @@ public class GiftToolbox { } } } + //=================================================================================== /** * 私聊界面发送礼物消息 @@ -451,7 +514,6 @@ public class GiftToolbox { /** * 群聊送礼消息 - * */ public static Single sendGiftTeamMessage(String sessionId, GiftMultiReceiverInfo multiGiftReceiveInfo) { UserInfo myUserInfo = UserModel.get().getCacheLoginUserInfo(); @@ -492,48 +554,4 @@ public class GiftToolbox { return IMNetEaseManager.get() .sendMessageSingle(imMessage); } - - //单人礼物公屏 - public static final int CUSTOM_MSG_HEADER_TYPE_GIFT = 3; - public static final int CUSTOM_MSG_SUB_TYPE_SEND_GIFT = 31; //普通单人送礼公屏 - public static final int CUSTOM_MSG_SUB_TYPE_SEND_LUCKY_GIFT = 33;//单人福袋送礼公屏 - - //多人礼物公屏 - public static final int CUSTOM_MSG_HEADER_TYPE_MULTI_GIFT = 12; - //普通 - public static final int CUSTOM_MSG_SUB_TYPE_BATCH_SEND_GIFT = 123;// 普通多人 - public static final int CUSTOM_MSG_SUB_TYPE_SEND_MULTI_GIFT = 121;//普通全麦 - //福袋 - public static final int CUSTOM_MSG_SUB_TYPE_SEND_MULTI_LUCK_GIFT = 124;// 福袋多人 - public static final int CUSTOM_MSG_SUB_TYPE_SEND_ALL_MIC_LUCKY_GIFT = 122;// 福袋全麦 - - - - /** - * 收到普通礼物 - */ - public static final int RECEIVE_NORMALE_GIFT = 34; - /** - * 收到普通全麦礼物 - */ - public static final int RECEIVE_ALL_MIC__NORMALEI_GIFT = 35; - /** - * 收到普通多人礼物 - */ - public static final int RECEIVE_MUTLT_NORMALEI_GIFT = 53; - //=================================================================================== - /** - * 收到个人福袋礼物 - */ - public static final int RECEIVE_LUCKY_GIFT = 61; - - /** - * 收到多人福袋礼物 - */ - public static final int RECEIVE_MULTI_LUCKY_GIFT = 62; - - /** - * 收到全麦福袋礼物 - */ - public static final int RECEIVE_ALL_MIC_LUCKY_GIFT = 64; } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java index c93b3d9d3..57213f6bf 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachParser.java @@ -14,6 +14,7 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_CHATTER_BOX_DROP; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_CHATTER_BOX_INIT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_DRAGON_BAR; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_DRAW_GIFT_EFFECT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_EXPER_LEVEL_UP_NOTICE; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_GROUP_CHAT_MEMBER_COUNT; @@ -56,6 +57,7 @@ import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUS import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ALL_DIAMOND; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_DIAMOND; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_RED_PACKAGE_RECEIVE_ROOM_MSG; +import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_TYPE_DRAW_GIFT_EFFECT; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_TYPE_RECEIVE_LUCKY_MONEY; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_TYPE_SEND_ADD_BLACK; import static com.yizhuan.xchat_android_core.im.custom.bean.CustomAttachment.CUSTOM_MSG_SUB_TYPE_SEND_KICK_ROOM; @@ -590,6 +592,11 @@ public class CustomAttachParser implements MsgAttachmentParser { case CUSTOM_MSG_RADISH: attachment = new RoomBoxPrizeAttachment(CUSTOM_MSG_RADISH, second); break; + case CUSTOM_MSG_DRAW_GIFT_EFFECT: + if (second == CUSTOM_MSG_SUB_TYPE_DRAW_GIFT_EFFECT) { + attachment = new DrawGiftAttachment(first, second); + } + break; default: LogUtils.e("未定义的first,请现在CustomAttachParser中解析first=" + first + " second=" + second); break; diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java index b7c202b16..38c4a8b60 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/CustomAttachment.java @@ -16,21 +16,29 @@ public class CustomAttachment implements MsgAttachment { public static final int CUSTOM_MSG_SUB_TYPE_AUCTION_START = 11; public static final int CUSTOM_MSG_SUB_TYPE_AUCTION_FINISH = 12; public static final int CUSTOM_MSG_SUB_TYPE_AUCTION_UPDATE = 13; + public static final int CUSTOM_MSG_HEADER_TYPE_ROOM_TIP = 2; public static final int CUSTOM_MSG_SUB_TYPE_ROOM_TIP_SHARE_ROOM = 21; public static final int CUSTOM_MSG_SUB_TYPE_ROOM_TIP_ATTENTION_ROOM_OWNER = 22; + public static final int CUSTOM_MSG_HEADER_TYPE_GIFT = 3; public static final int CUSTOM_MSG_SUB_TYPE_SEND_GIFT = 31; //普通单人送礼公屏 public static final int CUSTOM_MSG_ALL_SERVICE_GIFT = 32; public static final int CUSTOM_MSG_SUB_TYPE_SEND_LUCKY_GIFT = 34;//单人福袋送礼公屏 + public static final int CUSTOM_MSG_HEADER_TYPE_ACCOUNT = 5; + public static final int CUSTOM_MSG_HEADER_TYPE_OPEN_ROOM_NOTI = 6; + public static final int CUSTOM_MSG_HEADER_TYPE_QUEUE = 8; public static final int CUSTOM_MSG_HEADER_TYPE_QUEUE_INVITE = 81; public static final int CUSTOM_MSG_HEADER_TYPE_QUEUE_KICK = 82; + public static final int CUSTOM_MSG_HEADER_TYPE_FACE = 9; public static final int CUSTOM_MSG_SUB_TYPE_FACE_SEND = 91; + public static final int CUSTOM_MSG_HEADER_TYPE_NOTICE = 10; + public static final int CUSTOM_MSG_HEADER_TYPE_PACKET = 11; public static final int CUSTOM_MSG_SUB_TYPE_PACKET_FIRST = 111; //送礼物 @@ -400,6 +408,10 @@ public class CustomAttachment implements MsgAttachment { public static final int CUSTOM_MSG_GIFT_COMPOUND = 93; public static final int CUSTOM_MSG_SUB_GIFT_COMPOUND = 931; + public static final int CUSTOM_MSG_DRAW_GIFT_EFFECT = 94; + public static final int CUSTOM_MSG_SUB_TYPE_DRAW_GIFT_EFFECT = 941; + + /** * 自定义消息附件的类型,根据该字段区分不同的自定义消息 */ diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/DrawGiftAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/DrawGiftAttachment.java new file mode 100644 index 000000000..69a720f96 --- /dev/null +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/DrawGiftAttachment.java @@ -0,0 +1,52 @@ +package com.yizhuan.xchat_android_core.im.custom.bean; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.TypeReference; + +import java.util.List; + +/** + * @author chenran + * @date 2017/7/28 + */ + +public class DrawGiftAttachment extends CustomAttachment { + private int giftId; + private List> drawFixedArray; + + public DrawGiftAttachment(int first, int second) { + super(first, second); + } + + public int getGiftId() { + return giftId; + } + + public void setGiftId(int giftId) { + this.giftId = giftId; + } + + public List> getDrawFixedArray() { + return drawFixedArray; + } + + public void setDrawFixedArray( List> drawFixedArray) { + this.drawFixedArray = drawFixedArray; + } + + @Override + protected void parseData(JSONObject data) { + giftId = data.getIntValue("giftId"); + drawFixedArray = data.getObject("drawFixedArray", new TypeReference>>() { + }.getType()); + + } + + @Override + protected JSONObject packData() { + JSONObject object = new JSONObject(); + object.put("drawFixedArray", drawFixedArray); + object.put("giftId", giftId); + return object; + } +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/GiftAttachment.java b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/GiftAttachment.java index daf7c5160..93e9e92e3 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/GiftAttachment.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/im/custom/bean/GiftAttachment.java @@ -79,10 +79,6 @@ public class GiftAttachment extends CustomAttachment { giftReceiveInfo.setGiftValueVos(giftValueVos); } } - if (data.containsKey("drawFixedArray")) { - giftReceiveInfo.setDrawFixedArray(data.getObject("drawFixedArray", new TypeReference>>() { - }.getType())); - } giftReceiveInfo.setCurrentTime(data.getLong("currentTime")); } @@ -103,9 +99,6 @@ public class GiftAttachment extends CustomAttachment { object.put("giftValueVos", giftReceiveInfo.getGiftValueVos()); } object.put("currentTime", giftReceiveInfo.getCurrentTime()); - if (giftReceiveInfo.getDrawFixedArray() != null) { - object.put("drawFixedArray", giftReceiveInfo.getDrawFixedArray()); - } return object; } } diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java b/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java index 170575218..291e22423 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/manager/RoomEvent.java @@ -245,6 +245,8 @@ public class RoomEvent { //开宝箱横幅,SVGA背景的 public static final int RADISH_NOTIFY_SVGA = 97; + public static final int DRAW_GIFT_EFFECT = 98; + private int event = NONE; private int micPosition = Integer.MIN_VALUE; private int posState = -1;