diff --git a/common/src/main/java/com/yunbao/common/Constants.java b/common/src/main/java/com/yunbao/common/Constants.java index ba53dd875..cdab20733 100644 --- a/common/src/main/java/com/yunbao/common/Constants.java +++ b/common/src/main/java/com/yunbao/common/Constants.java @@ -202,6 +202,8 @@ public class Constants { public static final String LuckyAngel = "LuckyCheck";//幸运天使 public static final String Lucky100Check = "Lucky100Check";//幸运天使 + public static final String PrankSendData = "PrankSendData";//整蛊进度 + public static final int SOCKET_WHAT_CONN = 0; public static final int SOCKET_WHAT_DISCONN = 2; public static final int SOCKET_WHAT_BROADCAST = 1; diff --git a/common/src/main/java/com/yunbao/common/bean/PrankProgressBean.java b/common/src/main/java/com/yunbao/common/bean/PrankProgressBean.java new file mode 100644 index 000000000..02c9953bb --- /dev/null +++ b/common/src/main/java/com/yunbao/common/bean/PrankProgressBean.java @@ -0,0 +1,162 @@ +package com.yunbao.common.bean; + +import java.util.List; + +public class PrankProgressBean extends BaseModel { + private int status;//整蛊状态 0.关闭 1.开启 + private int prank_turntable_status;// 转盘整蛊状态 0=关闭 1=开启 + private int prank_type;// 整蛊类型 1.礼物整蛊 2.连击整蛊 + private List prank_list;// 整蛊进度 + private List completed_list;// 待完成的整蛊 + + public PrankProgressBean(){ + } + + + + public static class PrankList{ + private int gift_id;// 礼物ID + private int gift_num;// 整蛊需要的礼物数量 + private String prank_content; // 整蛊内容 + private int send_num; // 用户已赠送的礼物数量 + private int completed_num;// 待完成的整蛊次数 + private String gift_name;// 礼物名称 + private String gift_icon; // 礼物图片链接 + + public int getGift_id() { + return gift_id; + } + + public void setGift_id(int gift_id) { + this.gift_id = gift_id; + } + + public int getGift_num() { + return gift_num; + } + + public void setGift_num(int gift_num) { + this.gift_num = gift_num; + } + + public String getPrank_content() { + return prank_content; + } + + public void setPrank_content(String prank_content) { + this.prank_content = prank_content; + } + + public int getSend_num() { + return send_num; + } + + public void setSend_num(int send_num) { + this.send_num = send_num; + } + + public int getCompleted_num() { + return completed_num; + } + + public void setCompleted_num(int completed_num) { + this.completed_num = completed_num; + } + + public String getGift_name() { + return gift_name; + } + + public void setGift_name(String gift_name) { + this.gift_name = gift_name; + } + + public String getGift_icon() { + return gift_icon; + } + + public void setGift_icon(String gift_icon) { + this.gift_icon = gift_icon; + } + + //计算完成度 + public double getCompletionRate() { + if (gift_num == 0) return 0; // Avoid division by zero + return (double) send_num / gift_num; + } + + public PrankList(int gift_id, int gift_num, String prank_content, int send_num, int completed_num, String gift_name, String gift_icon) { + this.gift_id = gift_id; + this.gift_num = gift_num; + this.prank_content = prank_content; + this.send_num = send_num; + this.completed_num = completed_num; + this.gift_name = gift_name; + this.gift_icon = gift_icon; + } + + @Override + public String toString() { + return "PrankList{" + + "gift_id=" + gift_id + + ", gift_num=" + gift_num + + ", prank_content='" + prank_content + '\'' + + ", send_num=" + send_num + + ", completed_num=" + completed_num + + ", gift_name='" + gift_name + '\'' + + ", gift_icon='" + gift_icon + '\'' + + '}'; + } + } + + public int getStatus() { + return status; + } + + public void setStatus(int status) { + this.status = status; + } + + public int getPrank_type() { + return prank_type; + } + + public void setPrank_type(int prank_type) { + this.prank_type = prank_type; + } + + public List getPrank_list() { + return prank_list; + } + + public void setPrank_list(List prank_list) { + this.prank_list = prank_list; + } + + public List getCompleted_list() { + return completed_list; + } + + public void setCompleted_list(List completed_list) { + this.completed_list = completed_list; + } + + public int getPrank_turntable_status() { + return prank_turntable_status; + } + + public void setPrank_turntable_status(int prank_turntable_status) { + this.prank_turntable_status = prank_turntable_status; + } + + @Override + public String toString() { + return "PrankProgressBean{" + + "status=" + status + + ", prank_turntable_status=" + prank_turntable_status + + ", prank_type=" + prank_type + + ", prank_list=" + prank_list + + ", completed_list=" + completed_list + + '}'; + } +} 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 eda563660..c3f9e6277 100644 --- a/common/src/main/java/com/yunbao/common/http/PDLiveApi.java +++ b/common/src/main/java/com/yunbao/common/http/PDLiveApi.java @@ -56,6 +56,7 @@ import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankGiftResultBean; import com.yunbao.common.bean.PrankHttpTurntableBean; +import com.yunbao.common.bean.PrankProgressBean; import com.yunbao.common.bean.QuickGiftSendGiftModel; import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RankPkInfoBean; @@ -510,6 +511,12 @@ public interface PDLiveApi { @Query("prank_type") String prank_type ); + /** + * 获取整蛊进度列表 + */ + @GET("/api/public/?service=Prank.prankCompletedList") + Observable> getPrankProgressList(@Query("anchor_id") String anchor_id); + /** * 设置礼物整蛊 */ 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 9dd7d0af1..191c87a7e 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 @@ -56,6 +56,7 @@ import com.yunbao.common.bean.PkRankBean; import com.yunbao.common.bean.PrankGiftBean; import com.yunbao.common.bean.PrankGiftResultBean; import com.yunbao.common.bean.PrankHttpTurntableBean; +import com.yunbao.common.bean.PrankProgressBean; import com.yunbao.common.bean.QuickGiftSendGiftModel; import com.yunbao.common.bean.RandomPkUserBean; import com.yunbao.common.bean.RankPkInfoBean; @@ -899,6 +900,25 @@ public class LiveNetManager { }).isDisposed(); } + /** + * 获取整蛊进度列表 + */ + public void getPrankProgressList(String mLiveUid, HttpCallback callback){ + API.get().pdLiveApi(mContext) + .getPrankProgressList(mLiveUid) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(responseModel->{ + if (callback != null){ + callback.onSuccess(responseModel.getData().getInfo()); + } + },throwable->{ + if (callback != null){ + callback.onError(throwable.getMessage()); + } + } ).isDisposed(); + } + /** * 设置礼物整蛊 */ diff --git a/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java index 9a2484077..19c2c2b2e 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java @@ -1048,6 +1048,11 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic } + @Override + public void onUpdatePrankProgress(String prankString) { + + } + /** * 腾讯sdk连麦时候主播混流 */ 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 15fd3aea4..adffc593f 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -579,6 +579,11 @@ public class LiveAudienceActivity extends LiveActivity { manager.prankTurntable(msgtype, time, jsonObject); } + @Override + public void onUpdatePrankProgress(String prankString) { + + } + @Override public void onBackPressed() { if (manager != null && manager.getsudGameMin()) { diff --git a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java index de28117f2..a42bc3d71 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -1452,6 +1452,11 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } } + @Override + public void onUpdatePrankProgress(String prankString) { + + } + /** * 腾讯sdk连麦时候主播混流 diff --git a/live/src/main/java/com/yunbao/live/adapter/ComboAdapter.java b/live/src/main/java/com/yunbao/live/adapter/ComboAdapter.java new file mode 100644 index 000000000..ca265bf41 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/ComboAdapter.java @@ -0,0 +1,77 @@ +package com.yunbao.live.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.PrankProgressBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.live.R; + +import java.util.ArrayList; +import java.util.List; + +public class ComboAdapter extends RecyclerView.Adapter{ + + private List mList = new ArrayList<>(); + private Context mContext; + + public ComboAdapter(Context context){ + mContext = context; + } + + public void setList(List list){ + mList.clear(); + mList.addAll(list); + notifyDataSetChanged(); + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_combo_vote, parent, false)); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + PrankProgressBean.PrankList data = mList.get(position); + holder.itemView.setOnClickListener(v-> onItemClickListener.onItemClick(v,data.getGift_id())); + holder.combo_item_prank_name.setText(data.getPrank_content()); + ImgLoader.display(mContext,data.getGift_icon(),holder.combo_item_icon); + holder.combo_item_combo.setText(String.valueOf(data.getSend_num())); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder{ + + private TextView combo_item_prank_name,combo_item_combo; + private ImageView combo_item_icon; + + public MyViewHolder(@NonNull View itemView){ + super(itemView); + combo_item_prank_name = itemView.findViewById(R.id.combo_item_prank_name); + combo_item_combo = itemView.findViewById(R.id.combo_item_combo); + combo_item_icon = itemView.findViewById(R.id.combo_item_icon); + } + + } + + private OnItemClickListener onItemClickListener; + + public interface OnItemClickListener { + void onItemClick(View view,int giftId); + } + + public void addOnItemClickListener(OnItemClickListener onItemClickListener){ + this.onItemClickListener = onItemClickListener; + } +} diff --git a/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java b/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java index 6e5acb0f2..5e2b22877 100644 --- a/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/FrameGiftAdapter.java @@ -42,6 +42,7 @@ public class FrameGiftAdapter extends RecyclerView.Adapter { if (!TextUtils.isEmpty(wishGiftId) && TextUtils.equals(giftJson.get(position).getId() + "", wishGiftId)) { Bus.get().post(new LiveGiftItemEvent().setLiveGiftModel(giftJson.get(position))); + wishGiftId = null; } FrameGiftViewHolder frameGiftViewHolder = (FrameGiftViewHolder) holder; diff --git a/live/src/main/java/com/yunbao/live/adapter/PrankAdapter.java b/live/src/main/java/com/yunbao/live/adapter/PrankAdapter.java new file mode 100644 index 000000000..e0d0589b5 --- /dev/null +++ b/live/src/main/java/com/yunbao/live/adapter/PrankAdapter.java @@ -0,0 +1,88 @@ +package com.yunbao.live.adapter; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.yunbao.common.bean.PrankProgressBean; +import com.yunbao.common.glide.ImgLoader; +import com.yunbao.live.R; +import com.yunbao.live.views.LiveRoomViewHolder; + +import java.util.ArrayList; +import java.util.List; + +public class PrankAdapter extends RecyclerView.Adapter { + + private List mList = new ArrayList<>(); + private Context mContext; + + public PrankAdapter(Context context){ + mContext = context; + } + + public void setList(List list){ + mList.clear(); + mList.addAll(list); + notifyDataSetChanged(); + } + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + return new MyViewHolder(LayoutInflater.from(mContext).inflate(R.layout.item_prank_progress, parent, false)); + } + + @SuppressLint("SetTextI18n") + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { + PrankProgressBean.PrankList data = mList.get(position); + holder.itemView.setOnClickListener(v-> onItemClickListener.onItemClick(v,data.getGift_id())); + holder.prank_item_subscript.setText(String.valueOf(data.getCompleted_num())); + holder.prank_item_prank_name.setText(data.getPrank_content()); + holder.prank_item_gift_name.setText(data.getGift_name()); + holder.prank_item_now_progress.setText(String.valueOf(data.getSend_num())); + holder.prank_item_total_progress.setText("/"+ data.getGift_num()); + ImgLoader.display(mContext,data.getGift_icon(),holder.prank_item_icon); + holder.prank_item_progress.setMax(data.getGift_num()); + holder.prank_item_progress.setProgress(data.getSend_num()); + } + + @Override + public int getItemCount() { + return mList.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder{ + private TextView prank_item_subscript,prank_item_prank_name,prank_item_gift_name,prank_item_now_progress,prank_item_total_progress; + private ImageView prank_item_icon; + private ProgressBar prank_item_progress; + public MyViewHolder(@NonNull View itemView) { + super(itemView); + prank_item_subscript = itemView.findViewById(R.id.prank_item_subscript); + prank_item_prank_name = itemView.findViewById(R.id.prank_item_prank_name); + prank_item_gift_name = itemView.findViewById(R.id.prank_item_gift_name); + prank_item_now_progress = itemView.findViewById(R.id.prank_item_now_progress); + prank_item_total_progress = itemView.findViewById(R.id.prank_item_total_progress); + prank_item_icon = itemView.findViewById(R.id.prank_item_icon); + prank_item_progress = itemView.findViewById(R.id.prank_item_progress); + } + } + + private OnItemClickListener onItemClickListener; + + public interface OnItemClickListener { + void onItemClick(View view,int giftId); + } + + public void addOnItemClickListener(OnItemClickListener onItemClickListener){ + this.onItemClickListener = onItemClickListener; + } +} diff --git a/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java b/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java index e8cdb4451..4f6f9669e 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketMessageListener.java @@ -341,4 +341,9 @@ public interface SocketMessageListener { * */ void onHourRank(LiveChatBean bean,JSONObject ranks); + + /** + * 整蛊列表数据更新 + */ + void onUpdatePrankProgress(String prankString); } 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 6237cff21..801bd7506 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -19,6 +19,9 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.blankj.utilcode.util.GsonUtils; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; @@ -192,7 +195,7 @@ public class SocketRyClient { SocketReceiveBean received = JSON.parseObject(socketMsg, SocketReceiveBean.class); JSONObject map = received.getMsg().getJSONObject(0); - +// LogUtils.e("yqw=====>收到的socket:"+map.getString("_method_")+","+map.getString("ct")); switch (map.getString("_method_")) { //用户连麦 case Constants.LIAN_MAI: @@ -251,7 +254,7 @@ public class SocketRyClient { // LiveLinkMicPresenter.setHD(map.getString("ct")); break; case Constants.SOCKET_SYSTEM://系统消息 - if (map.getString("ct").contains("甜蜜不停")) { + if (map.getString("ct").contains("甜蜜不停")) { break; } UserBean us = CommonAppConfig.getInstance().getUserBean(); @@ -290,6 +293,19 @@ public class SocketRyClient { } } break; + + case Constants.PrankSendData: + //整蛊礼物刷新 + if (map.getIntValue("action") == 13 && map.getString("msgtype").equals("4")){ + String ctString = map.getString("ct"); + JsonElement jsonElement = JsonParser.parseString(ctString); + if (jsonElement == null) break; +// LogUtils.e("yqw=====>整蛊礼物列表:"+ctString); + JsonObject jsonObject = jsonElement.getAsJsonObject(); + systemChatMessage2(WordUtil.isNewZh() ? jsonObject.get("msg").getAsString() : jsonObject.get("msg_en").getAsString()); + mListener.onUpdatePrankProgress(ctString); + } + break; case Constants.SOCKET_KICK://踢人 systemChatMessage2(map.getString("ct")); mListener.onKick(map.getString("touid")); diff --git a/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java b/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java index ee7c03513..1d151691b 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java +++ b/live/src/main/java/com/yunbao/live/views/LiveGiftItemFragment.java @@ -56,6 +56,16 @@ public class LiveGiftItemFragment extends BaseFragment { frameGiftList.setLayoutManager(new GridLayoutManager(getActivity(), 4, GridLayoutManager.VERTICAL, false)); frameGiftAdapter = new FrameGiftAdapter(contextLayoutGiftHeight, giftJson, mStream, mLiveUid, wishGiftId); frameGiftList.setAdapter(frameGiftAdapter); + + frameGiftList.post(()->{ + if (!TextUtils.isEmpty(wishGiftId) && !giftJson.isEmpty()){ + for (int i = 0; i < giftJson.size(); i++) { + if (giftJson.get(i).getId()== Integer.parseInt(wishGiftId)){ + frameGiftAdapter.giftSelect(giftJson.get(i)); + } + } + } + }); } @Override 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 312689662..172b13db9 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRoomViewHolder.java @@ -44,6 +44,9 @@ import androidx.recyclerview.widget.RecyclerView; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.blankj.utilcode.util.GsonUtils; +import com.blankj.utilcode.util.LogUtils; +import com.blankj.utilcode.util.SizeUtils; import com.bumptech.glide.Glide; import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.engine.GlideException; @@ -51,6 +54,7 @@ import com.bumptech.glide.load.resource.gif.GifDrawable; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.target.Target; +import com.google.gson.reflect.TypeToken; import com.lxj.xpopup.XPopup; import com.makeramen.roundedimageview.RoundedImageView; import com.ms.banner.Banner; @@ -61,6 +65,7 @@ import com.opensource.svgaplayer.SVGADrawable; import com.opensource.svgaplayer.SVGAImageView; import com.opensource.svgaplayer.SVGAParser; import com.opensource.svgaplayer.SVGAVideoEntity; +import com.yunbao.common.bean.PrankProgressBean; import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; @@ -148,9 +153,11 @@ import com.yunbao.live.activity.LiveAnchorActivity; import com.yunbao.live.activity.LiveAudienceActivity; import com.yunbao.live.activity.LiveRyAnchorActivity; import com.yunbao.live.activity.ZhuangBanActivity; +import com.yunbao.live.adapter.ComboAdapter; import com.yunbao.live.adapter.LiveChatAdapter; import com.yunbao.live.adapter.LiveRoomFastMessageRecyclerViewAdapter; import com.yunbao.live.adapter.LiveUserAdapter; +import com.yunbao.live.adapter.PrankAdapter; import com.yunbao.live.bean.DrPkbean; import com.yunbao.live.bean.LiveBuyGuardMsgBean; import com.yunbao.live.bean.LiveChatBean; @@ -195,6 +202,7 @@ import java.lang.ref.WeakReference; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -396,6 +404,15 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis private View quick_gift_reminder; private int guardType = 0; + //整蛊进度列表功能 + private View prank_group; + private TextView prank_group_title,prank_group_turntable; + private RecyclerView recycler_prank; + private ImageView prank_group_bottom_icon,prank_group_turntable_icon,prank_small_icon; + private PrankAdapter prankAdapter; + private ComboAdapter comboAdapter; + private List prankAndComboList = new ArrayList<>(); + public LiveRoomViewHolder setGuardType(int guardType) { this.guardType = guardType; return this; @@ -1624,6 +1641,164 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis } }); // dragonImmediateParticipation.setVisibility(View.GONE); + + //整蛊转盘优化更新 + prank_group = findViewById(R.id.prank_group);//浮窗 + prank_group_title = (TextView) findViewById(R.id.prank_group_title);//浮窗标题 + recycler_prank = (RecyclerView) findViewById(R.id.recycler_prank);//列表 + prank_group_turntable = (TextView) findViewById(R.id.prank_group_turntable);//文字转盘整蛊(用户端已删除,主播端为待完成整蛊按钮) + prank_group_bottom_icon = (ImageView) findViewById(R.id.prank_group_bottom_icon);//收起icon + prank_group_turntable_icon = (ImageView) findViewById(R.id.prank_group_turntable_icon);//转盘图标 + prank_small_icon = (ImageView) findViewById(R.id.prank_small_icon);//收起后图标 + + //点击文字转盘整蛊(跳转转盘整蛊) + prank_group_turntable.setOnClickListener(v->{ + + }); + + //点击收起 + prank_group_bottom_icon.setOnClickListener(v->{ + prank_group.setVisibility(View.GONE); + prank_small_icon.setVisibility(View.VISIBLE); + }); + + //点击收起整蛊icon + prank_small_icon.setOnClickListener(v->{ + prank_group.setVisibility(View.VISIBLE); + prank_small_icon.setVisibility(View.GONE); + }); + + //点击图片转盘整蛊(跳转转盘整蛊) + prank_group_turntable_icon.setOnClickListener(v->{ + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.WE_CHEAT)); + }); + + recycler_prank.setLayoutManager(new LinearLayoutManager(mContext)); + + prankAdapter = new PrankAdapter(mContext); + comboAdapter = new ComboAdapter(mContext); + + //整蛊礼物点击 + prankAdapter.addOnItemClickListener((view, giftId) -> { +// LogUtils.e("yqw=====>点击整蛊礼物:"+giftId); + openGiftDialog(String.valueOf(giftId)); + }); + + //连击投票礼物点击 + comboAdapter.addOnItemClickListener((view, giftId) -> { +// LogUtils.e("yqw=====>点击投票礼物:"+giftId); + openGiftDialog(String.valueOf(giftId)); + }); + } + + //初始化整蛊列表进度 + public void initPrankProgress(){ +// LogUtils.e("yqw=====>主播id:"+mLiveUid); + //获取整蛊列表 + LiveNetManager.get(mContext).getPrankProgressList(mLiveUid, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(PrankProgressBean data) { +// LogUtils.e("yqw=====>整蛊列表:"+data); + prankAndComboList.clear(); + prankAndComboList.addAll(data.getPrank_list()); + setPrankList(data.getStatus(),data.getPrank_type(),data.getPrank_turntable_status()); + } + + @Override + public void onError(String error) { + prank_group.setVisibility(View.GONE); + prank_small_icon.setVisibility(View.GONE); + prank_group_turntable_icon.setVisibility(View.GONE); + ToastUtil.show(WordUtil.isNewZh()?"抱歉!出錯了!":"i \\'m sorry! An error occurred"); + } + }); + } + + + + //刷新整蛊礼物列表 + public void refreshPrank(String newPrankData){ + try { +// LogUtils.e("yqw=====>整蛊礼物数据1:"+newPrankData); + org.json.JSONObject ctString = new org.json.JSONObject(newPrankData); + if (ctString.getInt("is_update") == 1){ + //列表全部更新 + if (ctString.getInt("status")==1){ + //编辑添加整蛊 + initPrankProgress(); + }else { + //编辑取消整蛊 + prank_group.setVisibility(View.GONE); + prank_small_icon.setVisibility(View.GONE); + } + if (Integer.parseInt(ctString.getString("prank_turntable_status")) == 0){ + prank_group_turntable_icon.setVisibility(View.GONE); + } + }else { + //送整蛊礼物更新 + String prankListString = ctString.getString("prank_list"); + List prankList = GsonUtils.fromJson(prankListString,new TypeToken>() {}.getType()); +// LogUtils.e("yqw=====>整蛊礼物数据2:"+prankList.toString()); + prankAndComboList.clear(); + prankAndComboList.addAll(prankList); + setPrankList(Integer.parseInt(ctString.getString("status")), Integer.parseInt(ctString.getString("prank_type")), Integer.parseInt(ctString.getString("prank_turntable_status"))); + } + }catch (Exception e){ + LogUtils.e("yqw=====>转换错误:"+e.getMessage()); + } + + } + + //设置整蛊礼物数据 + private void setPrankList(int status,int mPrankType,int prankTurntableStatus){ +// LogUtils.e("yqw=====>显示转盘icon:是否显示:"+(prankTurntableStatus == 1)+",是否在倒计时"+(lt_trickery.getVisibility() == View.VISIBLE)); + if (prankTurntableStatus == 1 && lt_trickery.getVisibility() == View.GONE){ + prank_group_turntable_icon.setVisibility(View.VISIBLE); + }else { + prank_group_turntable_icon.setVisibility(View.GONE); + } +// LogUtils.e("yqw=====>显示整蛊列表或者投票列表:"+status); + if (status == 1){ + prank_group.setVisibility(View.VISIBLE); + if (mPrankType == 1){ + sortByCompletionRate(prankAndComboList); + prankAdapter.setList(prankAndComboList); + recycler_prank.setAdapter(prankAdapter); + }else { + sortBySendNum(prankAndComboList); + comboAdapter.setList(prankAndComboList); + recycler_prank.setAdapter(comboAdapter); + prank_group_title.setText(R.string.combo_vote); + } + limitItem(Math.min(prankAndComboList.size(), 4)); + }else { + prank_group.setVisibility(View.GONE); + prank_small_icon.setVisibility(View.GONE); + } + } + + //根据完成度排序 + private void sortByCompletionRate(List items) { + Collections.sort(items, (item1, item2) -> Double.compare(item2.getCompletionRate(), item1.getCompletionRate())); + } + + //根据连击数排列 + private void sortBySendNum(List items) { + Collections.sort(items, (item1, item2) -> { + return Integer.compare(item2.getSend_num(), item1.getSend_num()); // 从高到低排序 + }); + } + + //设置最多显示4个项目 + private void limitItem(int maxItem){ + recycler_prank.post(() -> { + View itemView = recycler_prank.getChildAt(0); + int height = (itemView.getHeight()+ SizeUtils.dp2px(3f))*maxItem; + ViewGroup.LayoutParams layoutParams = recycler_prank.getLayoutParams(); + layoutParams.height = height; + recycler_prank.setLayoutParams(layoutParams); + }); } int ttttttype = 0; @@ -4725,6 +4900,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis content = jsonObject.getString("content"); name = jsonObject.getString("user_nicename"); lt_trickery.setVisibility(View.VISIBLE); + prank_group_turntable_icon.setVisibility(View.GONE); lt_trickery.setBackground(mContext.getResources().getDrawable(R.mipmap.img_buoy)); isClose = false; starTimeloud(1, time); @@ -4768,6 +4944,7 @@ public class LiveRoomViewHolder extends AbsViewHolder implements View.OnClickLis countDownTimerTrickery.cancel(); countDownTimerTrickery = null; lt_trickery.setVisibility(View.GONE); + prank_group_turntable_icon.setVisibility(View.VISIBLE); LiveNetManager.get(mContext).endPrankTurntable(mLiveUid, new com.yunbao.common.http.base.HttpCallback() { @Override public void onSuccess(BaseModel data) { 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 1c236e345..128f3088e 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -589,6 +589,8 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLiveRoomViewHolder.setVoteData(data.getEnterRoomInfo().getVoteModel()); mLiveRoomViewHolder.updateFansMessageRed(); mLiveRoomViewHolder.setFansGroup(data.getEnterRoomInfo().getIsFans()); + //初始化整蛊进度列表 + mLiveRoomViewHolder.initPrankProgress(); isattention = Integer.parseInt(data.getEnterRoomInfo().getIsattention()); if (isattention == 0) { @@ -1736,6 +1738,14 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe } } + //整蛊进度数据更新 + @Override + public void onUpdatePrankProgress(String prankString) { + if (mLiveRoomViewHolder != null){ + mLiveRoomViewHolder.refreshPrank(prankString); + } + } + private PagerAdapter pagerAdapter = new PagerAdapter() { @Override public int getCount() { diff --git a/live/src/main/res/drawable/bg_prank_bottom_detail.xml b/live/src/main/res/drawable/bg_prank_bottom_detail.xml new file mode 100644 index 000000000..8083e5818 --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_bottom_detail.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/bg_prank_group.xml b/live/src/main/res/drawable/bg_prank_group.xml new file mode 100644 index 000000000..cae27342f --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_group.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/bg_prank_item.xml b/live/src/main/res/drawable/bg_prank_item.xml new file mode 100644 index 000000000..861ab3d90 --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_item.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/bg_prank_item_subscript.xml b/live/src/main/res/drawable/bg_prank_item_subscript.xml new file mode 100644 index 000000000..eb405431d --- /dev/null +++ b/live/src/main/res/drawable/bg_prank_item_subscript.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/live/src/main/res/drawable/progress_prank_bg.xml b/live/src/main/res/drawable/progress_prank_bg.xml new file mode 100644 index 000000000..520540726 --- /dev/null +++ b/live/src/main/res/drawable/progress_prank_bg.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_combo_vote.xml b/live/src/main/res/layout/item_combo_vote.xml new file mode 100644 index 000000000..41a59afa6 --- /dev/null +++ b/live/src/main/res/layout/item_combo_vote.xml @@ -0,0 +1,41 @@ + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/item_prank_progress.xml b/live/src/main/res/layout/item_prank_progress.xml new file mode 100644 index 000000000..548d2f753 --- /dev/null +++ b/live/src/main/res/layout/item_prank_progress.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_live_room.xml b/live/src/main/res/layout/view_live_room.xml index 1b330e863..7165d8a47 100644 --- a/live/src/main/res/layout/view_live_room.xml +++ b/live/src/main/res/layout/view_live_room.xml @@ -2396,6 +2396,32 @@ android:gravity="bottom" android:orientation="vertical"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/mipmap-xhdpi/bottom_icon.png b/live/src/main/res/mipmap-xhdpi/bottom_icon.png new file mode 100644 index 000000000..8ad5e0add Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/bottom_icon.png differ diff --git a/live/src/main/res/mipmap-xhdpi/prank_icon.png b/live/src/main/res/mipmap-xhdpi/prank_icon.png new file mode 100644 index 000000000..ffe3faccc Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/prank_icon.png differ diff --git a/live/src/main/res/mipmap-xhdpi/turntable_icon.png b/live/src/main/res/mipmap-xhdpi/turntable_icon.png new file mode 100644 index 000000000..a0a224ab0 Binary files /dev/null and b/live/src/main/res/mipmap-xhdpi/turntable_icon.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/bottom_icon.png b/live/src/main/res/mipmap-xxxhdpi/bottom_icon.png new file mode 100644 index 000000000..61feac52c Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/bottom_icon.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/prank_icon.png b/live/src/main/res/mipmap-xxxhdpi/prank_icon.png new file mode 100644 index 000000000..9f622f3a6 Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/prank_icon.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/turntable_icon.png b/live/src/main/res/mipmap-xxxhdpi/turntable_icon.png new file mode 100644 index 000000000..eca2d11bd Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/turntable_icon.png differ diff --git a/live/src/main/res/values-en/strings.xml b/live/src/main/res/values-en/strings.xml index e695323e2..95be733a7 100644 --- a/live/src/main/res/values-en/strings.xml +++ b/live/src/main/res/values-en/strings.xml @@ -117,6 +117,12 @@ Fan group level Of Lv%s Can send this gift Join the fan group can be opened [Join] Join the fan group to open + + Tricky progress + Turntable + Details> + Combo + Most first Clear Save Switch to diff --git a/live/src/main/res/values/strings.xml b/live/src/main/res/values/strings.xml index 9d14c000e..c5890fa7b 100644 --- a/live/src/main/res/values/strings.xml +++ b/live/src/main/res/values/strings.xml @@ -134,5 +134,11 @@ 確定 禮物數量 + 設置其他數量(最多9999) + + 整蠱進度 + 轉盤整蠱 + 詳情> + 連擊投票 + 連擊最多優先 整蠱說明