diff --git a/app/src/main/java/com/nnbc123/app/avroom/fragment/BaseRoomFragment.kt b/app/src/main/java/com/nnbc123/app/avroom/fragment/BaseRoomFragment.kt index 32f506f30..0a8e1ef5b 100644 --- a/app/src/main/java/com/nnbc123/app/avroom/fragment/BaseRoomFragment.kt +++ b/app/src/main/java/com/nnbc123/app/avroom/fragment/BaseRoomFragment.kt @@ -116,6 +116,7 @@ import com.netease.nimlib.sdk.StatusCode import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder import com.netease.nimlib.sdk.chatroom.model.ChatRoomKickOutEvent import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage +import com.nnbc123.app.avroom.hour_rank.RoomHourRankWidget import com.orhanobut.logger.Logger import com.tbruyelle.rxpermissions2.RxPermissions import com.trello.rxlifecycle3.android.FragmentEvent @@ -250,6 +251,7 @@ open class BaseRoomFragment?> : openOrCloseGiftValue(true) updateView() updateMicBtn() + refreshHourRank() microView.setOnMicroItemClickListener(this) mDisposable = IMNetEaseManager.get().chatRoomEventObservable .subscribe { onReceiveRoomEvent(it) } @@ -285,7 +287,11 @@ open class BaseRoomFragment?> : ivRadishEntrance?.isVisible = GoldBoxHelper.isShowRadish() if (ivRadishEntrance != null && GoldBoxHelper.isShowRadish()) { StatisticManager.Instance() - .onEvent(StatisticsProtocol.EVENT_ROOM_POP_SHOW, "房间pop曝光", mapOf("name" to "星际探索")) + .onEvent( + StatisticsProtocol.EVENT_ROOM_POP_SHOW, + "房间pop曝光", + mapOf("name" to "星际探索") + ) } initWishListPager() } @@ -305,18 +311,22 @@ open class BaseRoomFragment?> : GiftValueMrg.get().handleReconnect(false) } } + RoomEvent.ROOM_EXIT -> { // 退出房间,把标志置为 false AvRoomDataManager.get().isFromMentoring = false // 退出房间的时候,要停止倒计时 EventBus.getDefault().post(MentoringStopCountingEvent()) } + RoomEvent.DOWN_CROWDED_MIC -> if (AvRoomDataManager.get().isOwner(roomEvent.account)) { toast(R.string.crowded_down) } + RoomEvent.ROOM_MANAGER_ADD, RoomEvent.ROOM_MANAGER_REMOVE -> { updateView() } + RoomEvent.ROOM_INFO_UPDATE -> { Logger.i("房间更新事件") addOpenDatingTips() //一定要放在updateView之前!!! @@ -325,19 +335,24 @@ open class BaseRoomFragment?> : updateView() updateRemoteMuteBtn() openOrCloseGiftValue(false) + refreshHourRank() } + RoomEvent.ENTER_ROOM -> { Logger.i("进入房间事件") updateView() updateRemoteMuteBtn() openOrCloseGiftValue(true) GiftValueMrg.get().updateRoomGiftValue(false) + refreshHourRank() } + RoomEvent.ADD_BLACK_LIST -> onChatRoomMemberBlackAdd(roomEvent.account) RoomEvent.MIC_QUEUE_STATE_CHANGE -> onQueueMicStateChange( roomEvent.micPosition, roomEvent.posState ) + RoomEvent.KICK_DOWN_MIC_BY_S_ADMIN, RoomEvent.KICK_DOWN_MIC -> if (event == RoomEvent.KICK_DOWN_MIC) { SingleToastUtil.showToast( mContext.resources.getString( @@ -351,16 +366,20 @@ open class BaseRoomFragment?> : ) ) } + RoomEvent.DOWN_MIC -> { onDownMicro(roomEvent.micPosition) } + RoomEvent.UP_MIC -> { onUpMicro(roomEvent.micPosition) } + RoomEvent.INVITE_UP_MIC -> if (AvRoomDataManager.get().isOwner(roomEvent.account)) { //自己的消息 onInviteUpMic(roomEvent.micPosition) } + RoomEvent.KICK_OUT_ROOM -> { val reason = roomEvent.reason if (reason != null && reason.reason == ChatRoomKickOutEvent.ChatRoomKickOutReason.CHAT_ROOM_INVALID) { @@ -378,8 +397,10 @@ open class BaseRoomFragment?> : AvRoomDataManager.get().removeChatRoomMember(targetUid) } } + RoomEvent.LEAVE_MODE -> microView.adapter.notifyDataSetChanged() RoomEvent.ROOM_CLEAN_SCREEN -> messageView.clear() + RoomEvent.ROOM_HOUR_RANK -> refreshHourRank() } } @@ -530,7 +551,10 @@ open class BaseRoomFragment?> : rootView.setOnClickListener { WishListPanelDialog.newInstance().show(mContext) StatisticManager.Instance() - .onEvent(StatisticsProtocol.EVENT_WISHLIST_POP_CLICK, "礼物心愿气泡点击") + .onEvent( + StatisticsProtocol.EVENT_WISHLIST_POP_CLICK, + "礼物心愿气泡点击" + ) } return rootView } @@ -759,12 +783,14 @@ open class BaseRoomFragment?> : .onEvent(StatisticsProtocol.EVENT_ROOM_CHAT_CLICK, "语音房_公屏发言") sendMsg() } + R.id.contribute_list -> { DialogWebViewActivity.start(mContext, UriProvider.getRoomRanking()) StatisticManager.Instance() .onEvent(StatisticsProtocol.EVENT_MP_ROOM_RANKING_LIST_CLICK, "房间榜") mvpPresenter?.loadRoomRank() } + R.id.iv_first_charge_enter -> FirstChargeDialog.start(mContext) } } @@ -1315,6 +1341,24 @@ open class BaseRoomFragment?> : }, 200) } + /** + * 更新房间小时榜 + */ + protected open fun refreshHourRank() { + val data = AvRoomDataManager.get().hourRankInfo + val widget = view?.findViewById(R.id.hourRankWidget) as? RoomHourRankWidget ?: return + when (AvRoomDataManager.get().mCurrentRoomInfo?.isPermitRoom) { + 1, 4 -> { + widget.loadData(data) + widget.isVisible = true + } + + else -> { + widget.isVisible = false + } + } + } + /** * 底部按钮点击处理 */ diff --git a/app/src/main/java/com/nnbc123/app/avroom/fragment/HomePartyRoomFragment.java b/app/src/main/java/com/nnbc123/app/avroom/fragment/HomePartyRoomFragment.java index bae2a6fc3..ddf832abf 100644 --- a/app/src/main/java/com/nnbc123/app/avroom/fragment/HomePartyRoomFragment.java +++ b/app/src/main/java/com/nnbc123/app/avroom/fragment/HomePartyRoomFragment.java @@ -656,14 +656,6 @@ public class HomePartyRoomFragment extends BaseRoomFragment 30) { + // 不需要轮播 + binding.viewFlipper.inAnimation = null + binding.viewFlipper.outAnimation = null + binding.viewFlipper.isAutoStart = false + binding.viewFlipper.stopFlipping() + binding.viewFlipper.displayedChild = 0 + } else { + if (binding.viewFlipper.inAnimation == null) { + binding.viewFlipper.inAnimation = inAnimation + } + if (binding.viewFlipper.outAnimation == null) { + binding.viewFlipper.outAnimation = outAnimation + } + binding.viewFlipper.isAutoStart = true + binding.viewFlipper.startFlipping() + } + } + + private fun updateRanking(rank: Long) { + if (rank <= 0) { + binding.tvRank.text = "小时榜" + return + } + if (rank > 30) { + binding.tvRank.text = "暂未上榜" + return + } + SpannableTextBuilder(binding.tvRank).appendText( + "小时榜 第 ", + textColor = context.getColorById(R.color.white) + ).appendText( + rank.toString(), + textColor = context.getColorById(R.color.color_FFF265) + ).appendText( + " 名", + textColor = context.getColorById(R.color.white) + ).apply() + } + + private fun updateDiff(diff: Long) { + val value = FormatUtils.formatUnit(diff, 10000, "w") + SpannableTextBuilder(binding.tvDiff).appendText( + "距上一名差 ", + textColor = context.getColorById(R.color.white) + ).appendText( + value, + textColor = context.getColorById(R.color.color_FFF265) + ).apply() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/nnbc123/app/home/fragment/HomeFragment.kt b/app/src/main/java/com/nnbc123/app/home/fragment/HomeFragment.kt index 37b34f800..cea7962a5 100644 --- a/app/src/main/java/com/nnbc123/app/home/fragment/HomeFragment.kt +++ b/app/src/main/java/com/nnbc123/app/home/fragment/HomeFragment.kt @@ -37,7 +37,7 @@ class HomeFragment : BaseFragment(), View.OnClickListener { R.id.iv_my_room -> { StatisticManager.Instance() .onEvent(StatisticsProtocol.EVENT_HOME_MY_ROOM_CLICK, "首页_我的房间") - OpenRoomHelper.openHomePartyRoom(baseActivity) + OpenRoomHelper.openRoom(baseActivity) } } } diff --git a/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt b/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt index 80433a70a..769a9593a 100644 --- a/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt +++ b/app/src/main/java/com/nnbc123/app/home/fragment/MeFragment.kt @@ -415,7 +415,7 @@ class MeFragment : BaseFragment(), View.OnClickListener { "个人中心充值卡片点击" ) } - R.id.me_item_room -> OpenRoomHelper.openHomePartyRoom(requireActivity() as BaseActivity) + R.id.me_item_room -> OpenRoomHelper.openRoom(requireActivity() as BaseActivity) R.id.me_item_level -> CommonWebViewActivity.start( mContext, UriProvider.getUserLevelUrl() diff --git a/app/src/main/java/com/nnbc123/app/ui/im/RouterHandler.java b/app/src/main/java/com/nnbc123/app/ui/im/RouterHandler.java index 4e270765d..5b83edf45 100644 --- a/app/src/main/java/com/nnbc123/app/ui/im/RouterHandler.java +++ b/app/src/main/java/com/nnbc123/app/ui/im/RouterHandler.java @@ -286,7 +286,7 @@ public class RouterHandler { case RouterType.MY_ROOM: //我的房间,开房 StatisticManager.Instance().onEvent(StatisticsProtocol.EVENT_ME_INTO_MY_ROOM_CLICK, "我页_进入我的房间"); - OpenRoomHelper.openHomePartyRoom((BaseActivity) context); + OpenRoomHelper.openRoom((BaseActivity) context); break; case RouterType.COLLECTION_ROOM: //收藏的房间 diff --git a/app/src/main/res/drawable-xxhdpi/room_hour_ranking_ic_crown.webp b/app/src/main/res/drawable-xxhdpi/room_hour_ranking_ic_crown.webp new file mode 100644 index 000000000..c0cc6a9d9 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/room_hour_ranking_ic_crown.webp differ diff --git a/app/src/main/res/drawable/room_hour_ranking_bg.xml b/app/src/main/res/drawable/room_hour_ranking_bg.xml new file mode 100644 index 000000000..3fce9c57c --- /dev/null +++ b/app/src/main/res/drawable/room_hour_ranking_bg.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/room_hour_ranking_widget.xml b/app/src/main/res/layout/room_hour_ranking_widget.xml new file mode 100644 index 000000000..3202573e1 --- /dev/null +++ b/app/src/main/res/layout/room_hour_ranking_widget.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index b1a40ab88..aca977342 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -628,5 +628,6 @@ #FFFDF5 #FFD46C #695CEB + #FFFFF265 diff --git a/app/src/module_mini_world/res/layout/fragment_av_room_game.xml b/app/src/module_mini_world/res/layout/fragment_av_room_game.xml index 916a67f4c..ec09ff06c 100644 --- a/app/src/module_mini_world/res/layout/fragment_av_room_game.xml +++ b/app/src/module_mini_world/res/layout/fragment_av_room_game.xml @@ -60,33 +60,21 @@ android:layout_marginTop="5dp" android:visibility="gone" /> - + android:layout_marginTop="6dp" /> @@ -94,7 +82,7 @@ android:id="@+id/ll_room_pk_order" android:layout_width="52dp" android:layout_height="52dp" - android:layout_below="@id/tv_hour_rank" + android:layout_below="@id/hourRankWidget" android:layout_marginTop="5dp" android:background="@drawable/bg_room_pk_order" android:gravity="center" @@ -385,7 +373,7 @@ android:id="@+id/vs_music_player" android:layout_width="match_parent" android:layout_height="match_parent" - android:layout_below="@id/tv_hour_rank" + android:layout_below="@id/hourRankWidget" android:layout_marginTop="5dp" android:layout="@layout/avroom_music_player_layout" /> diff --git a/app/src/module_mini_world/res/layout/fragment_single_room.xml b/app/src/module_mini_world/res/layout/fragment_single_room.xml index f8d3abf2c..93467c4aa 100644 --- a/app/src/module_mini_world/res/layout/fragment_single_room.xml +++ b/app/src/module_mini_world/res/layout/fragment_single_room.xml @@ -131,7 +131,7 @@ android:id="@+id/ll_room_pk_order" android:layout_width="52dp" android:layout_height="52dp" - android:layout_below="@id/tv_hour_rank" + android:layout_below="@id/hourRankWidget" android:layout_marginTop="5dp" android:background="@drawable/bg_room_pk_match_order" android:gravity="center" @@ -161,24 +161,14 @@ - - + app:layout_constraintTop_toTopOf="@id/contribute_list" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="15dp" + android:layout_marginTop="6dp" /> + app:layout_constraintStart_toEndOf="@id/hourRankWidget" + app:layout_constraintTop_toTopOf="@id/hourRankWidget" /> { + override fun createFromParcel(parcel: Parcel): RoomHourRankInfo { + return RoomHourRankInfo(parcel) + } + + override fun newArray(size: Int): Array { + return arrayOfNulls(size) + } + } +} \ No newline at end of file diff --git a/core/src/main/java/com/nnbc123/core/room/bean/RoomInfo.java b/core/src/main/java/com/nnbc123/core/room/bean/RoomInfo.java index 37601457e..61c5fd5c0 100644 --- a/core/src/main/java/com/nnbc123/core/room/bean/RoomInfo.java +++ b/core/src/main/java/com/nnbc123/core/room/bean/RoomInfo.java @@ -95,7 +95,7 @@ public class RoomInfo implements Parcelable, Serializable { * {@link RoomModeType} */ private int roomModeType; - private int isPermitRoom; // 1:牌照房, 3:新秀房,其他:普通房 + private int isPermitRoom; // 1:牌照房, 2非牌照房, 3:新秀房, 4:个播 /** * 是否为房间纯净模式 */ @@ -163,6 +163,7 @@ public class RoomInfo implements Parcelable, Serializable { isRoomFans = in.readByte() != 0; background = in.readParcelable(BackgroundBean.class.getClassLoader()); roomBackground = in.readParcelable(RoomBackgroundBean.class.getClassLoader()); + hourRank = in.readParcelable(RoomHourRankInfo.class.getClassLoader()); hasKTVPriv = in.readByte() != 0; isOpenKTV = in.readByte() != 0; isOpenGame = in.readByte() != 0; @@ -228,6 +229,7 @@ public class RoomInfo implements Parcelable, Serializable { dest.writeByte((byte) (isRoomFans ? 1 : 0)); dest.writeParcelable(background, flags); dest.writeParcelable(roomBackground, flags); + dest.writeParcelable(hourRank, flags); dest.writeByte((byte) (hasKTVPriv ? 1 : 0)); dest.writeByte((byte) (isOpenKTV ? 1 : 0)); dest.writeByte((byte) (isOpenGame ? 1 : 0)); @@ -287,6 +289,8 @@ public class RoomInfo implements Parcelable, Serializable { return "牌照房"; } else if (isPermitRoom == 3) { return "新秀房"; + } else if (isPermitRoom == 4) { + return "个播房"; } return "普通房"; } @@ -323,8 +327,17 @@ public class RoomInfo implements Parcelable, Serializable { private String mgName; private int mgMicNum; private long clearScreenTime; + private RoomHourRankInfo hourRank; -// + public RoomHourRankInfo getHourRank() { + return hourRank; + } + + public void setHourRank(RoomHourRankInfo hourRank) { + this.hourRank = hourRank; + } + + // // // /** // * 房间角标 diff --git a/library/src/main/java/com/nnbc123/library/utils/FormatUtils.java b/library/src/main/java/com/nnbc123/library/utils/FormatUtils.java index 1c3b8fbe3..695af5ff9 100644 --- a/library/src/main/java/com/nnbc123/library/utils/FormatUtils.java +++ b/library/src/main/java/com/nnbc123/library/utils/FormatUtils.java @@ -110,11 +110,11 @@ public class FormatUtils { //PK值相关格式化方式,统一方法,方便以后更改样式 public static String formatPKValue(long value) { - // if (value >= 1000000) return (value / 100) / 100f + "万"; + // if (value >= 1000000) return (value / 100) / 100f + "万"; return String.valueOf(value); } - - public static String formatRankValue(int goldAmount){ + + public static String formatRankValue(int goldAmount) { String strGoldAmount; if (goldAmount >= 10000) { BigDecimal b = BigDecimal.valueOf(goldAmount / 10000.0); @@ -126,4 +126,29 @@ public class FormatUtils { return strGoldAmount; } + /** + * 超过单位值后,返回转换后的数值,否则返回原数值 + * + * @param value + * @param unitValue 单位值 + * @param unitName 单位名称/后缀 + * @return + */ + public static String formatUnit(long value, int unitValue, String unitName) { + try { + if (value >= unitValue) { + BigDecimal b = BigDecimal.valueOf(value * 1.0 / unitValue); + double df = b.setScale(1, BigDecimal.ROUND_HALF_UP).doubleValue(); + if (unitName != null) { + return df + unitName; + } else { + return String.valueOf(df); + } + } else { + return String.valueOf(value); + } + } catch (Exception e) { + return String.valueOf(value); + } + } }