From e68d20252a8646d25e50b18c2d4712e0a448d645 Mon Sep 17 00:00:00 2001 From: 18401019693 Date: Fri, 30 Jun 2023 10:17:33 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E6=8E=A5=E5=8F=A3=EF=BC=8C?= =?UTF-8?q?=E7=BA=A2=E5=8C=85=E5=B1=95=E7=A4=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/yunbao/common/Constants.java | 9 +- .../common/bean/EnterRoomInfoModel.java | 21 +- .../java/com/yunbao/common/bean/MsgModel.java | 4 + .../common/bean/RedPacketGiftModel.java | 72 ++++++ .../common/bean/RedPacketInfoModel.java | 212 ++++++++++++++++++ .../yunbao/common/bean/RedPacketModel.java | 90 ++++++++ .../com/yunbao/common/http/PDLiveApi.java | 21 ++ .../common/http/live/LiveNetManager.java | 53 +++++ .../com/yunbao/common/utils/TimeUtils.java | 50 +++++ common/src/main/res/values/strings.xml | 3 + .../live/activity/LiveAudienceActivity.java | 7 +- .../yunbao/live/adapter/LiveGiftAdapter.java | 6 +- .../live/adapter/LiveGiftPagerAdapter.java | 7 +- .../live/adapter/RedPacketGiftAdapter.java | 51 +++++ .../com/yunbao/live/dialog/GiftPopDialog.java | 2 +- .../live/dialog/LiveGiftDialogFragment.java | 4 +- .../LiveGiftDialogFragment4Wishlist.java | 2 +- .../live/dialog/ReceiveRendPacketPopup.java | 109 ++++++++- .../live/dialog/SendRendPacketPopup.java | 63 +++++- .../yunbao/live/event/LiveAudienceEvent.java | 14 +- .../yunbao/live/socket/SocketRyClient.java | 16 +- .../yunbao/live/views/LiveRoomViewHolder.java | 108 +++++---- .../live/views/PortraitLiveManager.java | 20 +- .../live/views/RedPacketGiftViewHolder.java | 27 +++ .../res/layout/view_receive_red_packet.xml | 98 +++++--- live/src/main/res/layout/view_red_packet.xml | 6 +- .../main/res/layout/view_red_packet_gift.xml | 23 ++ .../main/res/layout/view_send_red_packet.xml | 1 + .../main/res/mipmap-xhdpi/ixon_attention.png | Bin 0 -> 1252 bytes 29 files changed, 981 insertions(+), 118 deletions(-) create mode 100644 common/src/main/java/com/yunbao/common/bean/RedPacketGiftModel.java create mode 100644 common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java create mode 100644 common/src/main/java/com/yunbao/common/bean/RedPacketModel.java create mode 100644 live/src/main/java/com/yunbao/live/adapter/RedPacketGiftAdapter.java create mode 100644 live/src/main/java/com/yunbao/live/views/RedPacketGiftViewHolder.java create mode 100644 live/src/main/res/layout/view_red_packet_gift.xml create mode 100644 live/src/main/res/mipmap-xhdpi/ixon_attention.png diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java index f1e9e0d49..0df53f2ab 100644 --- a/common/src/main/java/com/yunbao/common/Constants.java +++ b/common/src/main/java/com/yunbao/common/Constants.java @@ -179,10 +179,11 @@ public class Constants { public static final String CUSTOM_FULL_SERVICE_NOTIFY = "customFullServiceNotify";//全服通知 public static final String XYD_COMPLETE = "XydComplete";//心愿单完成通知 public static final String WISH_LIST_PROGRESS = "wishListProgress";//心愿单进度通知 - public static final String LIVE_VOTE_CREATE="createVote"; - public static final String LIVE_VOTE_UPDATE="updateVote"; - public static final String LIVE_VOTE_END="endVote"; - public static final String LIVE_PK_END="endPK";//结束PK,以这个PK获取到的参数为准 + public static final String LIVE_VOTE_CREATE = "createVote"; + public static final String LIVE_VOTE_UPDATE = "updateVote"; + public static final String LIVE_VOTE_END = "endVote"; + public static final String LIVE_PK_END = "endPK";//结束PK,以这个PK获取到的参数为准 + public static final String RED_PACKET = "RedPacket";//红包通知 //游戏socket public static final String SOCKET_GAME_ZJH = "startGame";//炸金花 diff --git a/common/src/main/java/com/yunbao/common/bean/EnterRoomInfoModel.java b/common/src/main/java/com/yunbao/common/bean/EnterRoomInfoModel.java index a87e09e64..b69499034 100644 --- a/common/src/main/java/com/yunbao/common/bean/EnterRoomInfoModel.java +++ b/common/src/main/java/com/yunbao/common/bean/EnterRoomInfoModel.java @@ -103,9 +103,20 @@ public class EnterRoomInfoModel extends BaseModel { @SerializedName("anchor_goodnum") private String anchorGoodnum; @SerializedName("jackpot_level") - private String jackpotLevel="-1"; + private String jackpotLevel = "-1"; @SerializedName("live_vote") private LiveRoomVoteModel voteModel; + @SerializedName("red_packet") + private RedPacketModel redPacketModel; + + public RedPacketModel getRedPacketModel() { + return redPacketModel; + } + + public EnterRoomInfoModel setRedPacketModel(RedPacketModel redPacketModel) { + this.redPacketModel = redPacketModel; + return this; + } public String getJackpotLevel() { @@ -486,8 +497,8 @@ public class EnterRoomInfoModel extends BaseModel { } public String getIsconnection() { - if(StringUtil.isEmpty(isconnection)){ - isconnection="0"; + if (StringUtil.isEmpty(isconnection)) { + isconnection = "0"; } return isconnection; } @@ -498,8 +509,8 @@ public class EnterRoomInfoModel extends BaseModel { } public String getIsleave() { - if(StringUtil.isEmpty(isleave)){ - isleave="0"; + if (StringUtil.isEmpty(isleave)) { + isleave = "0"; } return isleave; } diff --git a/common/src/main/java/com/yunbao/common/bean/MsgModel.java b/common/src/main/java/com/yunbao/common/bean/MsgModel.java index c6bea4ffc..a38ff98a5 100644 --- a/common/src/main/java/com/yunbao/common/bean/MsgModel.java +++ b/common/src/main/java/com/yunbao/common/bean/MsgModel.java @@ -357,4 +357,8 @@ public class MsgModel extends BaseModel { public void setSystem_bubble(String system_bubble) { this.system_bubble = system_bubble; } + + /** + * 红包 + */ } diff --git a/common/src/main/java/com/yunbao/common/bean/RedPacketGiftModel.java b/common/src/main/java/com/yunbao/common/bean/RedPacketGiftModel.java new file mode 100644 index 000000000..a0fc6f54d --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/RedPacketGiftModel.java @@ -0,0 +1,72 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +/** + * 红包随机礼物 + */ +public class RedPacketGiftModel extends BaseModel { + /** + * { + * "id": 210, + * "giftname": "玫瑰", + * "needcoin": 20, + * "gifticon": "https://downs.yaoulive.com/603f25d9aa969.png" + * } + */ + @SerializedName("id") + private String id; + @SerializedName("giftname") + private String giftname; + @SerializedName("needcoin") + private String needcoin; + @SerializedName("gifticon") + private String gifticon; + @SerializedName("gift_num") + private String giftNum; + + public String getGiftNum() { + return "X" +giftNum; + } + + public RedPacketGiftModel setGiftNum(String giftNum) { + this.giftNum = giftNum; + return this; + } + + public String getId() { + return id; + } + + public RedPacketGiftModel setId(String id) { + this.id = id; + return this; + } + + public String getGiftname() { + return giftname; + } + + public RedPacketGiftModel setGiftname(String giftname) { + this.giftname = giftname; + return this; + } + + public String getNeedcoin() { + return "X" + needcoin; + } + + public RedPacketGiftModel setNeedcoin(String needcoin) { + this.needcoin = needcoin; + return this; + } + + public String getGifticon() { + return gifticon; + } + + public RedPacketGiftModel setGifticon(String gifticon) { + this.gifticon = gifticon; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java b/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java new file mode 100644 index 000000000..4880dd1c5 --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/RedPacketInfoModel.java @@ -0,0 +1,212 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +import java.util.List; + +/** + * 红包信息 + */ +public class RedPacketInfoModel extends BaseModel { + + @SerializedName("liveuid") + private String liveuid; + @SerializedName("uid") + private String uid; + @SerializedName("amount_diamond") + private String amountDiamond; + @SerializedName("red_packet_money") + private String redPacketMoney; + @SerializedName("red_packet_quantity") + private String redPacketQuantity; + @SerializedName("conditions") + private String conditions; + @SerializedName("create_time") + private String createTime; + @SerializedName("start_time") + private String startTime; + @SerializedName("end_time") + private String endTime; + @SerializedName("user_id") + private String userId; + @SerializedName("user_nicename") + private String userNicename; + @SerializedName("avatar") + private String avatar; + @SerializedName("avatar_thumb") + private String avatarThumb; + @SerializedName("id") + private String id; + @SerializedName("user_exists") + private String userExists; + @SerializedName("is_attention") + private String isAttention; + + public String getIsAttention() { + return isAttention; + } + + public RedPacketInfoModel setIsAttention(String isAttention) { + this.isAttention = isAttention; + return this; + } + + @SerializedName("user_golden_bean") + private String userGoldenBean; + + @SerializedName("red_packet_gift") + private List packetGiftModels; + + public List getPacketGiftModels() { + return packetGiftModels; + } + + public RedPacketInfoModel setPacketGiftModels(List packetGiftModels) { + this.packetGiftModels = packetGiftModels; + return this; + } + + public String getLiveuid() { + return liveuid; + } + + public RedPacketInfoModel setLiveuid(String liveuid) { + this.liveuid = liveuid; + return this; + } + + public String getUid() { + return uid; + } + + public RedPacketInfoModel setUid(String uid) { + this.uid = uid; + return this; + } + + public String getAmountDiamond() { + return amountDiamond; + } + + public RedPacketInfoModel setAmountDiamond(String amountDiamond) { + this.amountDiamond = amountDiamond; + return this; + } + + public String getRedPacketMoney() { + return redPacketMoney; + } + + public RedPacketInfoModel setRedPacketMoney(String redPacketMoney) { + this.redPacketMoney = redPacketMoney; + return this; + } + + public String getRedPacketQuantity() { + return redPacketQuantity; + } + + public RedPacketInfoModel setRedPacketQuantity(String redPacketQuantity) { + this.redPacketQuantity = redPacketQuantity; + return this; + } + + public String getConditions() { + return conditions; + } + + public RedPacketInfoModel setConditions(String conditions) { + this.conditions = conditions; + return this; + } + + public String getCreateTime() { + return createTime; + } + + public RedPacketInfoModel setCreateTime(String createTime) { + this.createTime = createTime; + return this; + } + + public String getStartTime() { + return startTime; + } + + public RedPacketInfoModel setStartTime(String startTime) { + this.startTime = startTime; + return this; + } + + public String getEndTime() { + return endTime; + } + + public RedPacketInfoModel setEndTime(String endTime) { + this.endTime = endTime; + return this; + } + + public String getUserId() { + return userId; + } + + public RedPacketInfoModel setUserId(String userId) { + this.userId = userId; + return this; + } + + public String getUserNicename() { + return userNicename; + } + + public RedPacketInfoModel setUserNicename(String userNicename) { + this.userNicename = userNicename; + return this; + } + + public String getAvatar() { + return avatar; + } + + public RedPacketInfoModel setAvatar(String avatar) { + this.avatar = avatar; + return this; + } + + public String getAvatarThumb() { + return avatarThumb; + } + + public RedPacketInfoModel setAvatarThumb(String avatarThumb) { + this.avatarThumb = avatarThumb; + return this; + } + + public String getId() { + return id; + } + + public RedPacketInfoModel setId(String id) { + this.id = id; + return this; + } + + public String getUserExists() { + return userExists; + } + + public RedPacketInfoModel setUserExists(String userExists) { + this.userExists = userExists; + return this; + } + + public String getUserGoldenBean() { + return userGoldenBean; + } + + public RedPacketInfoModel setUserGoldenBean(String userGoldenBean) { + this.userGoldenBean = userGoldenBean; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/bean/RedPacketModel.java b/common/src/main/java/com/yunbao/common/bean/RedPacketModel.java new file mode 100644 index 000000000..bf36f58cc --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/RedPacketModel.java @@ -0,0 +1,90 @@ +package com.yunbao.common.bean; + +import com.google.gson.annotations.SerializedName; + +public class RedPacketModel extends BaseModel { + //是否展示 + @SerializedName("is_show") + private int isShow; + //正在进行的红包数量 + @SerializedName("red_packet_count") + private int redPacketCount; + //正在进行的红包总数量 + @SerializedName("red_packet_quantity") + private int redPacketQuantity; + //当前红包剩余数量 + @SerializedName("red_packet_remain") + private int redPacketRemain; + //红包倒计时 + @SerializedName("countdown") + private int countdown; + //红包id + @SerializedName("red_packet_id") + private String redPacketId; + //红包领取条件 + @SerializedName("conditions") + private int conditions; + + public int getIsShow() { + return isShow; + } + + public RedPacketModel setIsShow(int isShow) { + this.isShow = isShow; + return this; + } + + public int getRedPacketCount() { + return redPacketCount; + } + + public RedPacketModel setRedPacketCount(int redPacketCount) { + this.redPacketCount = redPacketCount; + return this; + } + + public int getRedPacketQuantity() { + return redPacketQuantity; + } + + public RedPacketModel setRedPacketQuantity(int redPacketQuantity) { + this.redPacketQuantity = redPacketQuantity; + return this; + } + + public int getRedPacketRemain() { + return redPacketRemain; + } + + public RedPacketModel setRedPacketRemain(int redPacketRemain) { + this.redPacketRemain = redPacketRemain; + return this; + } + + public int getCountdown() { + return countdown; + } + + public RedPacketModel setCountdown(int countdown) { + this.countdown = countdown; + return this; + } + + public String getRedPacketId() { + return redPacketId; + } + + public RedPacketModel setRedPacketId(String redPacketId) { + this.redPacketId = redPacketId; + return this; + } + + public int getConditions() { + return conditions; + } + + public RedPacketModel setConditions(int conditions) { + this.conditions = conditions; + return this; + } +} diff --git a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java index 1e1fa32c3..15d747ef6 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -35,6 +35,7 @@ import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankHttpTurntableBean; import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RankPkInfoBean; +import com.yunbao.common.bean.RedPacketInfoModel; import com.yunbao.common.bean.SearchModel; import com.yunbao.common.bean.SetAttentsModel; import com.yunbao.common.bean.SlideInBannerModel; @@ -730,4 +731,24 @@ public interface PDLiveApi { */ @GET("/api/public/?service=Live.getBlindBoxInfo") Observable>> getBlindBoxInfo(); + + /** + * 获取盲盒礼物当前数据 + */ + @GET("/api/public/?service=Live.createRedPacket") + Observable> createRedPacket( + @Query("liveuid") String liveUid, + @Query("red_packet_money") String redPacketMoney, + @Query("red_packet_quantity") String redPacketQuantity, + @Query("conditions") String conditions + ); + + /** + * 获取盲盒礼物当前数据 + */ + @GET("/api/public/?service=Live.redPacketInfo") + Observable> redPacketInfo( + @Query("liveuid") String liveUid, + @Query("red_packet_id") String redPacketId + ); } diff --git a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java index 50dad56d9..c4000a5e1 100644 --- a/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java +++ b/common/src/main/java/com/yunbao/common/http/live/LiveNetManager.java @@ -34,6 +34,7 @@ import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankHttpTurntableBean; import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RankPkInfoBean; +import com.yunbao.common.bean.RedPacketInfoModel; import com.yunbao.common.bean.SetAttentsModel; import com.yunbao.common.bean.StarChallengeStatusModel; import com.yunbao.common.bean.UserAreaBean; @@ -1550,6 +1551,58 @@ public class LiveNetManager { }).isDisposed(); } + /** + * 创建红包 + * + * @param liveUid 直播间id + * @param redPacketMoney 红包金额 + * @param redPacketQuantity 红包数量 + * @param conditions 红包领取条件 0.无 1.关注主播 + */ + public void createRedPacket(String liveUid, String redPacketMoney, String redPacketQuantity, String conditions, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .createRedPacket(liveUid, redPacketMoney, redPacketQuantity, conditions) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer>() { + @Override + public void accept(ResponseModel objectResponseModel) throws Exception { + if (callback != null) { + callback.onSuccess(objectResponseModel.getData().getMsg()); + } + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + } + }).isDisposed(); + } + + /** + * 红包信息 + * + * @param liveUid 直播间id + * @param redPacketId 红包id + */ + public void redPacketInfo(String liveUid, String redPacketId, HttpCallback callback) { + API.get().pdLiveApi(mContext) + .redPacketInfo(liveUid, redPacketId) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(redPacketInfoModelResponseModel -> { + if (callback != null) { + callback.onSuccess(redPacketInfoModelResponseModel.getData().getInfo()); + } + }, throwable -> { + if (callback != null) { + callback.onError(mContext.getString(R.string.net_error)); + } + }).isDisposed(); + } + /** * 直播间取消网络请求 */ diff --git a/common/src/main/java/com/yunbao/common/utils/TimeUtils.java b/common/src/main/java/com/yunbao/common/utils/TimeUtils.java index a19cf4576..ef038c26b 100644 --- a/common/src/main/java/com/yunbao/common/utils/TimeUtils.java +++ b/common/src/main/java/com/yunbao/common/utils/TimeUtils.java @@ -6,6 +6,7 @@ package com.yunbao.common.utils; public class TimeUtils { /** * 毫秒转秒 + * * @param duration 毫秒数 * @return */ @@ -17,4 +18,53 @@ public class TimeUtils { toSecond = ((minute * 60) + second); return toSecond; } + + //根据秒数转化为时分秒 00:00:00 + public static String getTime(int second) { + if (second < 10) { + return "" + second; + } + if (second < 60) { + return "" + second; + } + if (second < 3600) { + int minute = second / 60; + second = second - minute * 60; + if (minute < 10) { + if (second < 10) { + return "0" + minute + ":0" + second; + } + return "0" + minute + ":" + second; + } + if (second < 10) { + return minute + ":0" + second; + } + return minute + ":" + second; + } + int hour = second / 3600; + int minute = (second - hour * 3600) / 60; + second = second - hour * 3600 - minute * 60; + if (hour < 10) { + if (minute < 10) { + if (second < 10) { + return "0" + hour + ":0" + minute + ":0" + second; + } + return "0" + hour + ":0" + minute + ":" + second; + } + if (second < 10) { + return "0" + hour + minute + ":0" + second; + } + return "0" + hour + minute + ":" + second; + } + if (minute < 10) { + if (second < 10) { + return hour + ":0" + minute + ":0" + second; + } + return hour + ":0" + minute + ":" + second; + } + if (second < 10) { + return hour + minute + ":0" + second; + } + return hour + minute + ":" + second; + } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index dd92b5293..01e644c90 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1223,4 +1223,7 @@ Limited ride And limited avatar frame 獲得%s 查看幸運觀衆> 贈送主播禮物表達心意 + 倒計時:%s + 待開紅包:%s + 來自%s的獎勵,齊心協力連成目標 diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java index 1bbc86181..9799974ff 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -861,7 +861,7 @@ public class LiveAudienceActivity extends LiveActivity { if (TextUtils.equals(htmlUrl, "recharge")) { RouteUtil.forwardMyCoin(mContext); } else if (TextUtils.equals(htmlUrl, "to_me_information")) { - RouteUtil.forwardEditProfileActivity(); + RouteUtil.forwardEditProfileActivity(); } else { if (!screen) { ZhuangBanActivity.forward(mContext, htmlUrl, false); @@ -1382,6 +1382,11 @@ public class LiveAudienceActivity extends LiveActivity { manager.blindBoxAllServerNotify(event.getAllServerNotifyEvent()); } break; + case RED_PACKET: + if (manager != null) { + manager.redPacketManage(event.getRedPacketModel()); + } + break; } diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveGiftAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveGiftAdapter.java index a5d9c37c1..f61da4be3 100644 --- a/live/src/main/java/com/yunbao/live/adapter/LiveGiftAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/LiveGiftAdapter.java @@ -54,15 +54,17 @@ public class LiveGiftAdapter extends RecyclerView.Adapter { private View mAnimView; private String mName1, mName2; boolean isTouch = true; + private String mLiveUid; public void setTouch(boolean touch) { isTouch = touch; } - public LiveGiftAdapter(Context context, LayoutInflater inflater, List list, String coinName) { + public LiveGiftAdapter(Context context, LayoutInflater inflater, List list, String coinName, String liveUid) { mContext = context; mInflater = inflater; mList = list; + mLiveUid = liveUid; mCoinName = coinName; mName1 = CommonAppConfig.getInstance().getCoinName(); mName2 = CommonAppConfig.getInstance().getGoldCoinName(); @@ -243,7 +245,7 @@ public class LiveGiftAdapter extends RecyclerView.Adapter { @Override public void onViewClicks() { new XPopup.Builder(mContext) - .asCustom(new SendRendPacketPopup(mContext)) + .asCustom(new SendRendPacketPopup(mContext,mLiveUid )) .show(); } }); diff --git a/live/src/main/java/com/yunbao/live/adapter/LiveGiftPagerAdapter.java b/live/src/main/java/com/yunbao/live/adapter/LiveGiftPagerAdapter.java index f02e95447..c5d94a941 100644 --- a/live/src/main/java/com/yunbao/live/adapter/LiveGiftPagerAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/LiveGiftPagerAdapter.java @@ -29,9 +29,10 @@ public class LiveGiftPagerAdapter extends PagerAdapter { private static final int GIFT_COUNT = 8;//每页8个礼物 private int mPage = -1; private ActionListener mActionListener; - - public LiveGiftPagerAdapter(Context context, List giftList) { + private String mLiveUid; + public LiveGiftPagerAdapter(Context context, List giftList,String liveUid) { mContext = context; + mLiveUid = liveUid; mViewList = new ArrayList<>(); int fromIndex = 0; int size = giftList.size(); @@ -74,7 +75,7 @@ public class LiveGiftPagerAdapter extends PagerAdapter { bean.setPage(i); list.add(bean); } - LiveGiftAdapter adapter = new LiveGiftAdapter(mContext, inflater, list, coinName); + LiveGiftAdapter adapter = new LiveGiftAdapter(mContext, inflater, list, coinName,mLiveUid); adapter.setActionListener(actionListener); recyclerView.setAdapter(adapter); mViewList.add(recyclerView); diff --git a/live/src/main/java/com/yunbao/live/adapter/RedPacketGiftAdapter.java b/live/src/main/java/com/yunbao/live/adapter/RedPacketGiftAdapter.java new file mode 100644 index 000000000..99083753a --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/RedPacketGiftAdapter.java @@ -0,0 +1,51 @@ +package com.yunbao.live.adapter; + +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.RedPacketGiftModel; +import com.yunbao.live.R; +import com.yunbao.live.views.RedPacketGiftViewHolder; + +import java.util.ArrayList; +import java.util.List; + +public class RedPacketGiftAdapter extends RecyclerView.Adapter { + private List packetGiftModels = new ArrayList<>(); + + @NonNull + @Override + public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View redPacketGiftView = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_red_packet_gift, parent, false); + return new RedPacketGiftViewHolder(redPacketGiftView); + } + + @Override + public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { + if (holder instanceof RedPacketGiftViewHolder) { + RedPacketGiftViewHolder redPacketGiftViewHolder = (RedPacketGiftViewHolder) holder; + redPacketGiftViewHolder.showData(packetGiftModels.get(position)); + } + } + + @Override + public int getItemCount() { + return packetGiftModels.size(); + } + + /** + * 添加数据 + * + * @param list + */ + public void addData(List list) { + if (list == null) return; + packetGiftModels.clear(); + packetGiftModels.addAll(list); + notifyDataSetChanged(); + } +} diff --git a/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java b/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java index c875a7e59..c832dbf84 100644 --- a/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java +++ b/live/src/main/java/com/yunbao/live/dialog/GiftPopDialog.java @@ -238,7 +238,7 @@ public class GiftPopDialog extends AbsDialogPopupWindow implements ActionListene } private void showGiftList(List list) { - mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list); + mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list,""); mLiveGiftPagerAdapter.setActionListener(this); mViewPager.setAdapter(mLiveGiftPagerAdapter); diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment.java index aa5d65639..d77b1514a 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment.java @@ -532,7 +532,7 @@ public class LiveGiftDialogFragment extends AbsDialogFragment implements View.On } } mGiftList = list; - mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list); + mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list,mLiveUid); mLiveGiftPagerAdapter.setActionListener(this); mViewPager.setAdapter(mLiveGiftPagerAdapter); @@ -570,7 +570,7 @@ public class LiveGiftDialogFragment extends AbsDialogFragment implements View.On private void showWrapList(List list) { mWrapList = list; - mLiveWrapPagerAdapter = new LiveGiftPagerAdapter(mContext, list); + mLiveWrapPagerAdapter = new LiveGiftPagerAdapter(mContext, list,mLiveUid); mLiveWrapPagerAdapter.setActionListener(this); mVPWrapList.setAdapter(mLiveWrapPagerAdapter); LayoutInflater inflater = LayoutInflater.from(mContext); diff --git a/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment4Wishlist.java b/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment4Wishlist.java index eca3de6de..1b9d5ff05 100644 --- a/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment4Wishlist.java +++ b/live/src/main/java/com/yunbao/live/dialog/LiveGiftDialogFragment4Wishlist.java @@ -221,7 +221,7 @@ public class LiveGiftDialogFragment4Wishlist extends AbsDialogFragment implement } private void showGiftList(List list) { - mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list); + mLiveGiftPagerAdapter = new LiveGiftPagerAdapter(mContext, list,mLiveUid); mLiveGiftPagerAdapter.setActionListener(this); mViewPager.setAdapter(mLiveGiftPagerAdapter); LayoutInflater inflater = LayoutInflater.from(mContext); diff --git a/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java b/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java index 6f6f8ce7e..b8f81efdd 100644 --- a/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java +++ b/live/src/main/java/com/yunbao/live/dialog/ReceiveRendPacketPopup.java @@ -2,27 +2,53 @@ package com.yunbao.live.dialog; import android.content.Context; import android.os.Handler; +import android.text.TextUtils; +import android.util.TypedValue; import android.widget.Button; import android.widget.FrameLayout; +import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.lxj.xpopup.XPopup; import com.lxj.xpopup.core.CenterPopupView; +import com.yunbao.common.bean.IMLoginModel; +import com.yunbao.common.bean.RedPacketInfoModel; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.common.http.CommonHttpUtil; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.interfaces.CommonCallback; +import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.utils.TimeUtils; +import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.weight.CircleProgress; +import com.yunbao.common.views.weight.ClipPathCircleImage; import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; +import com.yunbao.live.adapter.RedPacketGiftAdapter; public class ReceiveRendPacketPopup extends CenterPopupView { private CircleProgress circleProgress; private int time = 10; private Button redPacketOpen; - private TextView redPacketTimeText; + private TextView redPacketTimeText, receiveRed, redPacketValue; private FrameLayout redPacketTimeLayout; + private String mLiveUid, redPacketId, userID; + private ClipPathCircleImage headPortrait; + private RecyclerView redPacketGiftList; + private RedPacketGiftAdapter redPacketGiftAdapter; + private ImageView isAttention; + + public ReceiveRendPacketPopup(@NonNull Context context, int time, String mLiveUid, String redPacketId) { - public ReceiveRendPacketPopup(@NonNull Context context) { super(context); + this.time = time; + this.mLiveUid = mLiveUid; + this.redPacketId = redPacketId; } // 返回自定义弹窗的布局离开 @@ -36,6 +62,35 @@ public class ReceiveRendPacketPopup extends CenterPopupView { protected void onCreate() { super.onCreate(); initView(); + initData(); + } + + private void initData() { + LiveNetManager.get(getContext()) + .redPacketInfo(mLiveUid, redPacketId, new HttpCallback() { + @Override + public void onSuccess(RedPacketInfoModel data) { + ImgLoader.displayAvatar(getContext(), data.getAvatar(), headPortrait); + receiveRed.setText(String.format(getContext() + .getString(R.string.together_to_achieve_goal), + data.getUserNicename())); + redPacketValue.setText(data.getAmountDiamond()); + redPacketGiftAdapter.addData(data.getPacketGiftModels()); + IMLoginModel userInfo = IMLoginManager.get(getContext()).getUserInfo(); + if (TextUtils.equals(String.valueOf(userInfo.getId()), data.getUid())) { + isAttention.setVisibility(GONE); + } else { + isAttention.setVisibility(TextUtils.equals(data.getIsAttention(), "0") ? VISIBLE : GONE); + } + + userID = data.getUserId(); + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); } private Handler timeHandler = new Handler(); @@ -46,7 +101,13 @@ public class ReceiveRendPacketPopup extends CenterPopupView { if (time > 0) { circleProgress.setCurrent(time--); timeHandler.postDelayed(timeRunnable, 1000); - redPacketTimeText.setText(String.valueOf(time)); + String countdown = TimeUtils.getTime(time); + if (countdown.length() < 4) { + redPacketTimeText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 36); + } else { + redPacketTimeText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 23); + } + redPacketTimeText.setText(countdown); } else { redPacketTimeLayout.setVisibility(GONE); redPacketOpen.setVisibility(VISIBLE); @@ -61,16 +122,50 @@ public class ReceiveRendPacketPopup extends CenterPopupView { redPacketOpen = findViewById(R.id.red_packet_open); redPacketTimeText = findViewById(R.id.red_packet_time_text); redPacketTimeLayout = findViewById(R.id.red_packet_time_layout); - circleProgress.setMax(time); - circleProgress.setCurrent(time); - redPacketTimeText.setText(String.valueOf(time)); - timeHandler.postDelayed(timeRunnable, 1000); + receiveRed = findViewById(R.id.receive_red); + redPacketValue = findViewById(R.id.red_packet_value); + headPortrait = findViewById(R.id.head_portrait); + isAttention = findViewById(R.id.is_attention); + redPacketGiftList = findViewById(R.id.red_packet_gift_list); + redPacketGiftList.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false)); + redPacketGiftAdapter = new RedPacketGiftAdapter(); + redPacketGiftList.setAdapter(redPacketGiftAdapter); + if (time > 0) { + circleProgress.setMax(time); + circleProgress.setCurrent(time); + String countdown = TimeUtils.getTime(time); + if (countdown.length() < 4) { + redPacketTimeText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 36); + } else { + redPacketTimeText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 23); + } + redPacketTimeText.setText(countdown); + timeHandler.postDelayed(timeRunnable, 1000); + } else { + redPacketTimeLayout.setVisibility(GONE); + redPacketOpen.setVisibility(VISIBLE); + } + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.red_packet_open), () -> { dismiss(); new XPopup.Builder(getContext()) .asCustom(new ResultRendPacketPopup(getContext())) .show(); }); + ViewClicksAntiShake.clicksAntiShake(isAttention, new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + CommonHttpUtil.setAttention(userID, new CommonCallback() { + @Override + public void callback(Integer attention) { + if (attention == 1) { + isAttention.setVisibility(GONE); + } + } + }); + } + }); + } } diff --git a/live/src/main/java/com/yunbao/live/dialog/SendRendPacketPopup.java b/live/src/main/java/com/yunbao/live/dialog/SendRendPacketPopup.java index 637581850..0f26e4d36 100644 --- a/live/src/main/java/com/yunbao/live/dialog/SendRendPacketPopup.java +++ b/live/src/main/java/com/yunbao/live/dialog/SendRendPacketPopup.java @@ -7,7 +7,6 @@ import android.graphics.Color; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; -import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; @@ -17,6 +16,8 @@ import androidx.annotation.NonNull; import com.alibaba.android.arouter.launcher.ARouter; import com.lxj.xpopup.core.CenterPopupView; +import com.yunbao.common.http.base.HttpCallback; +import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; @@ -27,9 +28,12 @@ public class SendRendPacketPopup extends CenterPopupView { private TextView rill, total; private FrameLayout redPacketIllustrate; private ImageView iconInstructions, illustrateClose; + private String mLiveID, conditions = "0"; - public SendRendPacketPopup(@NonNull Context context) { + public SendRendPacketPopup(@NonNull Context context, String liveID) { super(context); + mLiveID = liveID; + } // 返回自定义弹窗的布局离开 @@ -60,10 +64,12 @@ public class SendRendPacketPopup extends CenterPopupView { ViewClicksAntiShake.clicksAntiShake(thereIsNo, () -> { selectText(thereIsNo, true); selectText(followingAnchor, false); + conditions = "0"; }); ViewClicksAntiShake.clicksAntiShake(followingAnchor, () -> { selectText(thereIsNo, false); selectText(followingAnchor, true); + conditions = "1"; }); redEnvelopeRill.setText(String.format(getContext().getString(R.string.red_envelope_rill), "0")); totalConsumptionOfDrill.setText(String.format(getContext().getString(R.string.total_consumption_of_drill), "0")); @@ -121,6 +127,7 @@ public class SendRendPacketPopup extends CenterPopupView { } catch (NumberFormatException e) { rillInt = 0; } + if (TextUtils.isEmpty(number)) { totalConsumptionOfDrill.setText(String.format(getContext().getString(R.string.total_consumption_of_drill), "0")); } else { @@ -149,6 +156,58 @@ public class SendRendPacketPopup extends CenterPopupView { //我们的 ARouter.getInstance().build(PATH_COIN).withInt("p", 0).navigation(); }); + //创建红包 + ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.red_pack_send), new ViewClicksAntiShake.ViewClicksCallBack() { + @Override + public void onViewClicks() { + String rillNumber = rill.getText().toString(); + String number = total.getText().toString(); + int rillInt = 0; + + try { + rillInt = Integer.parseInt(rillNumber); + } catch (NumberFormatException e) { + rillInt = 0; + } + int totalInt = 0; + try { + totalInt = Integer.parseInt(number); + } catch (NumberFormatException e) { + totalInt = 0; + } + boolean totalTrue = false; + boolean rillTrue = false; + if (totalInt >= 1 && totalInt <= 100) { + totalTrue = true; + } else { + ToastUtil.show(String.format(getContext().getString(R.string.range_range_is), "1~100")); + } + if (rillInt >= 200 && rillInt <= 10000) { + rillTrue = true; + } else { + ToastUtil.show(String.format(getContext().getString(R.string.range_range_is), "200~10000")); + } + if (totalTrue && rillTrue) { + LiveNetManager.get(getContext()) + .createRedPacket(mLiveID, + rillNumber, + number, + conditions, new HttpCallback() { + @Override + public void onSuccess(String data) { + dismiss(); + } + + @Override + public void onError(String error) { + ToastUtil.show(error); + } + }); + } + + } + }); + } private void selectText(TextView textView, boolean select) { diff --git a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java index f771db0bd..2e2e70a13 100644 --- a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java +++ b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java @@ -7,6 +7,7 @@ import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.MsgModel; +import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.WishModel; import com.yunbao.common.bean.XydCompleteModel; import com.yunbao.common.event.AllServerNotifyEvent; @@ -43,6 +44,16 @@ public class LiveAudienceEvent extends BaseModel { private XydCompleteModel xydCompleteModel; private LiveReceiveGiftBean liveReceiveGiftBean; private AllServerNotifyEvent allServerNotifyEvent; + private RedPacketModel redPacketModel; + + public RedPacketModel getRedPacketModel() { + return redPacketModel; + } + + public LiveAudienceEvent setRedPacketModel(RedPacketModel redPacketModel) { + this.redPacketModel = redPacketModel; + return this; + } public AllServerNotifyEvent getAllServerNotifyEvent() { return allServerNotifyEvent; @@ -356,7 +367,8 @@ public class LiveAudienceEvent extends BaseModel { VOTE_CREATE(65, "创建投票"), VOTE_UPDATE(66, "更新投票"), VOTE_END(67, "投票结束"), - BLIND_BOX(68, "盲盒全服通知"); + BLIND_BOX(68, "盲盒全服通知"), + RED_PACKET(69, "RedPacket"); private int type; private String name; diff --git a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java index 994c4d589..297a1489f 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -7,10 +7,8 @@ import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; import static com.yunbao.live.views.LiveRoomViewHolder.getIsHot; import android.app.Activity; -import android.app.Dialog; import android.content.Context; import android.os.Handler; -import android.os.Looper; import android.os.Message; import android.text.TextUtils; import android.util.Log; @@ -30,6 +28,7 @@ import com.yunbao.common.bean.LinkMicUserBean; import com.yunbao.common.bean.LiveUserGiftBean; import com.yunbao.common.bean.MsgModel; import com.yunbao.common.bean.PkRankBean; +import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.SocketModel; import com.yunbao.common.bean.UserBean; import com.yunbao.common.bean.WishModel; @@ -42,7 +41,6 @@ import com.yunbao.common.http.HttpClient; import com.yunbao.common.manager.IMRTCManager; import com.yunbao.common.manager.RandomPkManager; import com.yunbao.common.utils.Bus; -import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.L; import com.yunbao.common.utils.ToastUtil; import com.yunbao.live.R; @@ -69,8 +67,6 @@ import org.greenrobot.eventbus.EventBus; import java.lang.ref.WeakReference; import java.util.List; -import java.util.Timer; -import java.util.TimerTask; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; import cn.rongcloud.rtc.base.RTCErrorCode; @@ -676,6 +672,7 @@ public class SocketRyClient { ); break; case Constants.LIVE_PK_END: + mListener.onEndPk(map.getLong("uid"), map.getLong("pkuid"), map.getLong("uid_score"), @@ -683,7 +680,12 @@ public class SocketRyClient { JSONObject.parseObject(map.getJSONObject("ct").getJSONObject("pk_top_users").toJSONString(), LivePKUserListBean.class) ); break; - + case Constants.RED_PACKET: + RedPacketModel redPacketModel = GsonUtils.fromJson(map.toString(), RedPacketModel.class); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.RED_PACKET) + .setRedPacketModel(redPacketModel)); + break; } } @@ -1002,7 +1004,7 @@ public class SocketRyClient { // 玩家自己送礼物 private void sendGiftInSameRoom(JSONObject map) { String ctJson = map.getString("ct"); - SendBlindGiftEvent sendBlindGiftEvent = JSON.parseObject(ctJson, SendBlindGiftEvent.class); + SendBlindGiftEvent sendBlindGiftEvent = JSON.parseObject(ctJson, SendBlindGiftEvent.class); LiveReceiveGiftBean receiveGiftBean = JSON.parseObject(map.getString("ct"), LiveReceiveGiftBean.class); sendBlindGiftEvent.setUserNiceName(map.getString("uname")); receiveGiftBean.setAvatar(map.getString("uhead") + ""); diff --git a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java index ad71c7aad..648708eca 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -83,6 +83,7 @@ import com.yunbao.common.bean.MsgModel; import com.yunbao.common.bean.NewPeopleTaskModel; import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.RankHourModel; +import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.RewardAllModel; import com.yunbao.common.bean.StarChallengeStatusModel; import com.yunbao.common.bean.TaskModel; @@ -113,6 +114,7 @@ import com.yunbao.common.utils.SVGAViewUtils; import com.yunbao.common.utils.ScreenDimenUtil; import com.yunbao.common.utils.SpUtil; import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.TimeUtils; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.formatBigNum; import com.yunbao.common.views.AbsViewHolder; @@ -1106,54 +1108,10 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis mChatRecyclerView.setHasFixedSize(true); LinearLayoutManager layoutManager = new LinearLayoutManager(mContext); layoutManager.setOrientation(RecyclerView.VERTICAL); -// layoutManager.setReverseLayout(true); layoutManager.setStackFromEnd(true); mChatRecyclerView.setLayoutManager(layoutManager); mChatRecyclerView.addItemDecoration(new TopGradual()); mChatRecyclerView.setItemViewCacheSize(10); -// mChatRecyclerView.setItemAnimator(new SimpleItemAnimator() { -// @Override -// public boolean animateRemove(RecyclerView.ViewHolder holder) { -// return false; -// } -// -// @Override -// public boolean animateAdd(RecyclerView.ViewHolder holder) { -// Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.live_chat_msg_in); -// holder.itemView.startAnimation(animation); -// return false; -// } -// -// @Override -// public boolean animateMove(RecyclerView.ViewHolder holder, int fromX, int fromY, int toX, int toY) { -// return false; -// } -// -// @Override -// public boolean animateChange(RecyclerView.ViewHolder oldHolder, RecyclerView.ViewHolder newHolder, int fromLeft, int fromTop, int toLeft, int toTop) { -// return false; -// } -// -// @Override -// public void runPendingAnimations() { -// -// } -// -// @Override -// public void endAnimation(@NonNull RecyclerView.ViewHolder item) { -// -// } -// -// @Override -// public void endAnimations() { -// -// } -// -// @Override -// public boolean isRunning() { -// return false; -// } -// }); mLiveChatAdapter = new LiveChatAdapter(mContext); mChatRecyclerView.setAdapter(mLiveChatAdapter); mLiveChatAdapter.setOnItemClickListener(new OnItemClickListener() { @@ -1321,6 +1279,11 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis avatar_r1 = (RoundedImageView) findViewById(R.id.avatar_r1); avatar_r2 = (RoundedImageView) findViewById(R.id.avatar_r2); avatar_r3 = (RoundedImageView) findViewById(R.id.avatar_r3); + redPacket = (FrameLayout) findViewById(R.id.red_packet); + redPacketCountdown = (TextView) findViewById(R.id.red_packet_countdown); + redSchedule = (TextView) findViewById(R.id.red_schedule); + redPacketQueue = (LinearLayout) findViewById(R.id.red_packet_queue); + openRedPacket = (TextView) findViewById(R.id.open_red_packet); lt_pk_line = (RelativeLayout) findViewById(R.id.lt_pk_line); clickAvatar(); @@ -1409,17 +1372,71 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis new LoadDian9TuUtil().loadDian9TuAssets2(mContext, liveWksLayout, "rectangle_new.png", 1); new LoadDian9TuUtil().loadDian9TuAssets2(mContext, wishListLayout2, "rectangle_new.png", 1); + + } + + private FrameLayout redPacket; + private TextView redPacketCountdown, redSchedule, openRedPacket; + private LinearLayout redPacketQueue; + private int redTimeCountdown = 0; + private RedPacketModel mRedPacketModel; + private Handler timeHandler = new Handler(); + private Runnable timeRunnable = new Runnable() { + @Override + public void run() { + if (redTimeCountdown > 0) { + redTimeCountdown = redTimeCountdown - 1; + timeHandler.postDelayed(timeRunnable, 1000); + redPacketCountdown.setText(String.format(mContext.getString(R.string.red_packet_countdown), TimeUtils.getTime(redTimeCountdown))); + } else { + StringBuffer stringBuffer = new StringBuffer(); + stringBuffer.append(mRedPacketModel.getRedPacketCount()) + .append("/") + .append(mRedPacketModel.getRedPacketQuantity()); + redSchedule.setText(stringBuffer.toString()); + openRedPacket.setText(String.format(mContext.getString(R.string.open_red_packet), mRedPacketModel.getRedPacketRemain() + "")); + redPacketCountdown.setVisibility(View.GONE); + redPacketQueue.setVisibility(View.VISIBLE); + } + + } + }; + + /** + * 红包相关处理 + */ + public void redPacketManage(RedPacketModel redPacketModel) { + mRedPacketModel = redPacketModel; + if (redPacketModel.getIsShow() == 1) { + redPacket.setVisibility(View.VISIBLE); + if (redPacketModel.getCountdown() > 180) { + redPacketQueue.setVisibility(View.GONE); + redPacketCountdown.setVisibility(View.VISIBLE); + redTimeCountdown = redPacketModel.getCountdown() - 180; + redPacketCountdown.setText(TimeUtils.getTime(redTimeCountdown)); + timeHandler.postDelayed(timeRunnable, 1000); + } else { + redPacketQueue.setVisibility(View.VISIBLE); + redPacketCountdown.setVisibility(View.GONE); + } + } else { + hindeRedPacket(); + } //测试点开红包 ViewClicksAntiShake.clicksAntiShake(findViewById(R.id.red_packet), new ViewClicksAntiShake.ViewClicksCallBack() { @Override public void onViewClicks() { new XPopup.Builder(mContext) - .asCustom(new ReceiveRendPacketPopup(mContext)) + .asCustom(new ReceiveRendPacketPopup(mContext, redTimeCountdown, mLiveUid, redPacketModel.getRedPacketId())) .show(); } }); } + public void hindeRedPacket() { + redPacket.setVisibility(View.GONE); + } + /** * 隐藏女神说 */ @@ -3523,6 +3540,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis public void showPrizePoolLevel(String level) { } + /** * 获取是否有热度卡加成 */ diff --git a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java index 2c7b5fd27..fc2f4277a 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -39,6 +39,7 @@ import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.LiveRoomActivityModel; import com.yunbao.common.bean.LiveUserGiftBean; import com.yunbao.common.bean.MsgModel; +import com.yunbao.common.bean.RedPacketModel; import com.yunbao.common.bean.StarChallengeStatusModel; import com.yunbao.common.bean.UserBean; import com.yunbao.common.bean.WishModel; @@ -594,7 +595,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe } else if (!pkInfo.getString("end_pk_time").equals("0")) { if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.pkHandler = true; - mLiveRoomViewHolder.pkUid=pkUid; + mLiveRoomViewHolder.pkUid = pkUid; mLiveRoomViewHolder.initPkRank(null); } if (mLivePlayViewHolder != null) { @@ -666,6 +667,18 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe .setType(LiveAudienceEvent.LiveAudienceType.LIVE_PK_ING)); } + if (data.getEnterRoomInfo().getRedPacketModel() != null) { + + mLiveRoomViewHolder.redPacketManage(data.getEnterRoomInfo().getRedPacketModel()); +// mLiveRoomViewHolder.redPacketManage(new RedPacketModel() +// .setIsShow(1) +// .setRedPacketCount(23) +// .setRedPacketQuantity(100) +// .setRedPacketRemain(6) +// .setCountdown(360)); + }else { + mLiveRoomViewHolder.hindeRedPacket(); + } } @Override @@ -2022,4 +2035,9 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLiveRoomViewHolder.blindBoxAllServerNotify(event); } } + public void redPacketManage(RedPacketModel redPacket) { + if (mLiveRoomViewHolder != null) { + mLiveRoomViewHolder.redPacketManage(redPacket); + } + } } diff --git a/live/src/main/java/com/yunbao/live/views/RedPacketGiftViewHolder.java b/live/src/main/java/com/yunbao/live/views/RedPacketGiftViewHolder.java new file mode 100644 index 000000000..0afe1de06 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/views/RedPacketGiftViewHolder.java @@ -0,0 +1,27 @@ +package com.yunbao.live.views; + +import android.view.View; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.RedPacketGiftModel; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.live.R; + +public class RedPacketGiftViewHolder extends RecyclerView.ViewHolder { + private ImageView giftIcon; + private TextView giftName; + public RedPacketGiftViewHolder(@NonNull View itemView) { + super(itemView); + giftIcon = itemView.findViewById(R.id.gift_icon); + giftName = itemView.findViewById(R.id.gift_name); + } + + public void showData(RedPacketGiftModel redPacketGiftModel) { + ImgLoader.displayAvatar(itemView.getContext(), redPacketGiftModel.getGifticon(), giftIcon); + giftName.setText(redPacketGiftModel.getGiftNum()); + } +} diff --git a/live/src/main/res/layout/view_receive_red_packet.xml b/live/src/main/res/layout/view_receive_red_packet.xml index fe822b879..b8e95fa59 100644 --- a/live/src/main/res/layout/view_receive_red_packet.xml +++ b/live/src/main/res/layout/view_receive_red_packet.xml @@ -2,8 +2,8 @@ - + + - - + android:gravity="center_horizontal" + android:orientation="vertical"> + android:textSize="13sp" + android:textStyle="bold" /> - - - + android:layout_below="@id/receive_red" + android:layout_centerHorizontal="true" + android:layout_marginTop="6dp" + android:gravity="center_vertical"> + + + + + + + +