From d1fc37aa244257d0c9a92ed691b1254f94d6c2dd Mon Sep 17 00:00:00 2001 From: max Date: Mon, 17 Jun 2024 15:34:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=88=90=E6=88=BF=E9=97=B4?= =?UTF-8?q?=E6=A6=9C=E6=B5=81=E6=B0=B4=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fragment/HomePartyRoomFragment.java | 2 + .../app/avroom/rank/RoomRankNumberWidget.kt | 92 +++++++++++++++++++ .../main/res/layout/fragment_av_room_game.xml | 29 +----- .../res/layout/room_rank_number_widget.xml | 31 +++++++ .../im/custom/bean/CustomAttachParser.java | 7 ++ .../core/im/custom/bean/CustomAttachment.java | 7 ++ .../bean/RoomSerialValueChangedAttachment.kt | 22 +++++ .../chwl/core/manager/AvRoomDataManager.java | 4 + .../chwl/core/manager/IMNetEaseManager.java | 5 + .../java/com/chwl/core/manager/RoomEvent.java | 3 + .../com/chwl/core/room/bean/RoomInfo.java | 4 + .../com/chwl/library/utils/FormatUtils.java | 37 ++++++++ 12 files changed, 218 insertions(+), 25 deletions(-) create mode 100644 app/src/main/java/com/chwl/app/avroom/rank/RoomRankNumberWidget.kt create mode 100644 app/src/main/res/layout/room_rank_number_widget.xml create mode 100644 core/src/main/java/com/chwl/core/im/custom/bean/RoomSerialValueChangedAttachment.kt diff --git a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java index c15015f01..4ab56dc3b 100644 --- a/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/chwl/app/avroom/fragment/HomePartyRoomFragment.java @@ -12,6 +12,7 @@ import com.chwl.app.avroom.dialog.RoomTeamPKResultDialog; import com.chwl.app.avroom.dialog.RoomTeamPkDialog; import com.chwl.app.avroom.headline.RoomHeadlineWidget; import com.chwl.app.avroom.online.RoomOnlineWidget; +import com.chwl.app.avroom.rank.RoomRankNumberWidget; import com.chwl.app.music.widget.MusicPlayerView; import com.chwl.app.ui.webview.DialogWebViewActivity; import com.chwl.core.room.pk.event.PKDataUpdateEvent; @@ -135,6 +136,7 @@ public class HomePartyRoomFragment extends BaseRoomFragment { + val attachment = + it.chatRoomMessage.attachment as? RoomSerialValueChangedAttachment + attachment?.serialValue?.let { + updateView(attachment.serialValue) + } + } + } + }) + } + + private fun refreshData() { + val value = AvRoomDataManager.get().serialValue + updateView(value) + } + + private fun updateView(value: Double?) { + if (value == null || value <= 0) { + binding.tvNumber.text = "0" + } else { + binding.tvNumber.text = FormatUtils.formatToShortKMHalfUp(value) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_av_room_game.xml b/app/src/main/res/layout/fragment_av_room_game.xml index 939b6a528..f5b1283c0 100644 --- a/app/src/main/res/layout/fragment_av_room_game.xml +++ b/app/src/main/res/layout/fragment_av_room_game.xml @@ -101,32 +101,11 @@ android:textSize="@dimen/dp_10" /> - - - - - - + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/dp_5" /> + + + + + + + + + \ No newline at end of file diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java index b04426789..057eff87a 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachParser.java @@ -727,6 +727,13 @@ public class CustomAttachParser implements MsgAttachmentParser { break; } break; + case CustomAttachment.CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED: + switch (second) { + case CustomAttachment.CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED_SUB: + attachment = new RoomSerialValueChangedAttachment(first, second); + break; + } + break; default: LogUtils.e(ResUtil.getString(R.string.custom_bean_customattachparser_01) + first + " second=" + second); break; diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java index 0aafbcf5b..8583ce601 100644 --- a/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java +++ b/core/src/main/java/com/chwl/core/im/custom/bean/CustomAttachment.java @@ -527,6 +527,13 @@ public class CustomAttachment implements MsgAttachment { public static final int CUSTOM_MSG_FAMILY_CREATE = 1107; public static final int CUSTOM_MSG_FAMILY_DISMISS = 1108; + + /** + * 房间总流水 + */ + public static final int CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED = 111; + public static final int CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED_SUB = 1110; + /** * 自定义消息附件的类型,根据该字段区分不同的自定义消息 */ diff --git a/core/src/main/java/com/chwl/core/im/custom/bean/RoomSerialValueChangedAttachment.kt b/core/src/main/java/com/chwl/core/im/custom/bean/RoomSerialValueChangedAttachment.kt new file mode 100644 index 000000000..ccf0b4957 --- /dev/null +++ b/core/src/main/java/com/chwl/core/im/custom/bean/RoomSerialValueChangedAttachment.kt @@ -0,0 +1,22 @@ +package com.chwl.core.im.custom.bean + +import androidx.annotation.Keep +import com.alibaba.fastjson.JSONObject +import com.chwl.core.bean.game.GameRoomInfo +import com.chwl.library.utils.json.JsonUtils +import com.google.gson.Gson + +@Keep +class RoomSerialValueChangedAttachment : CustomAttachment { + + var serialValue: Double? = null + + constructor() : super() + constructor(first: Int, second: Int) : super(first, second) + + override fun parseData(data: JSONObject?) { + if (data?.contains("serialValue") == true) { + serialValue = data.getDoubleValue("serialValue") + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/chwl/core/manager/AvRoomDataManager.java b/core/src/main/java/com/chwl/core/manager/AvRoomDataManager.java index 6684a2845..d92450704 100644 --- a/core/src/main/java/com/chwl/core/manager/AvRoomDataManager.java +++ b/core/src/main/java/com/chwl/core/manager/AvRoomDataManager.java @@ -231,6 +231,9 @@ public final class AvRoomDataManager { @Getter private boolean hasRoomAlbum; + @Getter + private double serialValue; + private List unlockedRoomAlbumPhotos = new ArrayList<>(); private AvRoomDataManager() { @@ -295,6 +298,7 @@ public final class AvRoomDataManager { pkBeginTime = roomInfo.getPkBeginTime(); redEnvelopeType = roomInfo.getRedEnvelopeType(); hasRoomAlbum = roomInfo.isHasRoomAlbum(); + serialValue = roomInfo.getSerialValue(); } /** diff --git a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java index 3b41a4d55..b0eb72c1e 100644 --- a/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java +++ b/core/src/main/java/com/chwl/core/manager/IMNetEaseManager.java @@ -1488,6 +1488,11 @@ public final class IMNetEaseManager { noticeRoomEvent(msg, RoomEvent.TEMPLATE_NOTIFY); } break; + case CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED: + if (second == CUSTOM_MSG_ROOM_SERIAL_VALUE_CHANGED_SUB) { + noticeRoomEvent(msg, RoomEvent.SERIAL_VALUE_CHANGED); + } + break; default: break; } diff --git a/core/src/main/java/com/chwl/core/manager/RoomEvent.java b/core/src/main/java/com/chwl/core/manager/RoomEvent.java index 8b009dee5..fda358301 100644 --- a/core/src/main/java/com/chwl/core/manager/RoomEvent.java +++ b/core/src/main/java/com/chwl/core/manager/RoomEvent.java @@ -268,6 +268,9 @@ public class RoomEvent { //PK创建 public static final int PK_CREATE = 111; + //房间流水 + public static final int SERIAL_VALUE_CHANGED = 112; + private int event = NONE; private int micPosition = Integer.MIN_VALUE; private int posState = -1; diff --git a/core/src/main/java/com/chwl/core/room/bean/RoomInfo.java b/core/src/main/java/com/chwl/core/room/bean/RoomInfo.java index 221ab55a1..28e868f99 100644 --- a/core/src/main/java/com/chwl/core/room/bean/RoomInfo.java +++ b/core/src/main/java/com/chwl/core/room/bean/RoomInfo.java @@ -154,6 +154,8 @@ public class RoomInfo implements Parcelable,Serializable { private boolean showPkBeginTime; private long pkBeginTime; + // 总流水 + private double serialValue; protected RoomInfo(Parcel in) { uid = in.readLong(); @@ -216,6 +218,7 @@ public class RoomInfo implements Parcelable,Serializable { mgName = in.readString(); mgMicNum = in.readInt(); clearScreenTime = in.readLong(); + serialValue = in.readDouble(); } @Override @@ -280,6 +283,7 @@ public class RoomInfo implements Parcelable,Serializable { dest.writeString(mgName); dest.writeInt(mgMicNum); dest.writeLong(clearScreenTime); + dest.writeDouble(serialValue); } @Override diff --git a/library/src/main/java/com/chwl/library/utils/FormatUtils.java b/library/src/main/java/com/chwl/library/utils/FormatUtils.java index 42f42a382..d024b3aef 100644 --- a/library/src/main/java/com/chwl/library/utils/FormatUtils.java +++ b/library/src/main/java/com/chwl/library/utils/FormatUtils.java @@ -1,5 +1,6 @@ package com.chwl.library.utils; + import com.chwl.library.R; import java.math.BigDecimal; @@ -165,4 +166,40 @@ public class FormatUtils { } } + public static String formatToShortKMHalfUp(double num) { + return formatToShortKM(num, RoundingMode.HALF_UP); + } + + public static String formatToShortKMDown(double num) { + return formatToShortKM(num, RoundingMode.DOWN); + } + + /** + * 把过长的金额类数字,转换成两位小数带K,M 缩写 + * + * @param num + * @return + */ + public static String formatToShortKM(double num, RoundingMode roundingMode) { + try { + DecimalFormat decimalFormat = new DecimalFormat("#.#"); + decimalFormat.setDecimalFormatSymbols(DecimalFormatSymbols.getInstance(Locale.ENGLISH)); + decimalFormat.setRoundingMode(roundingMode); + double K = Math.pow(10.0f, 3); + double M = Math.pow(10.0f, 6); + double resK = num / K; + if (resK < 1) { + return decimalFormat.format(num); + } else { + double resM = num / M; + if (resM < 1) { + return decimalFormat.format(resK) + "K"; + } else { + return decimalFormat.format(resM) + "M"; + } + } + } catch (Exception e) { + return String.valueOf(num); + } + } }