diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1de4e7c45..210add6e1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,7 +78,6 @@ - diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 800292db6..b2b9d3a5c 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -965,4 +965,10 @@ 更多設置 查看更多 礼物正在获取中... + 開始PK + 剩餘次數:%s + 是否確認進行多人PK(確認後扣除1點次數)當日剩餘次數: %s + 邀請\n主播 + 結束\nPK + 時間 %s diff --git a/config.gradle b/config.gradle index 0993db55d..e4e02bc72 100644 --- a/config.gradle +++ b/config.gradle @@ -4,8 +4,8 @@ ext { buildToolsVersion: "28.0.3", minSdkVersion : 21, targetSdkVersion : 31, - versionCode : 310, - versionName : "6.4.5" + versionCode : 311, + versionName : "6.4.6" ] manifestPlaceholders = [ //正式 @@ -27,6 +27,6 @@ ext { // true表示谷歌支付 false isGooglePlay : false, //是否上报异常日志 - isUploadLog : true + isUploadLog : false ] } \ No newline at end of file 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 f9b61a9a4..590052024 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -4,8 +4,6 @@ import static com.blankj.utilcode.util.SnackbarUtils.dismiss; import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_DISABLE; import static com.tencent.trtc.TRTCCloudDef.TRTC_VIDEO_MIRROR_TYPE_ENABLE; import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; -import static com.yunbao.live.views.AbsRyLivePushViewHolder.mPreView; -import static com.yunbao.live.views.LivePushRyViewHolder.dr_pk_view; import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_dr_pk_nub; import static com.yunbao.live.views.LiveRyAnchorViewHolder.btn_start_dr_pk; @@ -22,7 +20,6 @@ import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup; -import android.widget.LinearLayout; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -41,6 +38,8 @@ import com.yunbao.common.Constants; import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.LinkMicUserBean; import com.yunbao.common.bean.LiveBean; +import com.yunbao.common.bean.LiveUserGiftBean; +import com.yunbao.common.bean.MicUserBean; import com.yunbao.common.bean.UserBean; import com.yunbao.common.dialog.NotCancelableDialog; import com.yunbao.common.event.LoginInvalidEvent; @@ -48,16 +47,14 @@ import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; -import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.BitmapUtil; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DateFormatUtil; import com.yunbao.common.utils.DialogUitl; -import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.L; import com.yunbao.common.utils.LogUtil; -import com.yunbao.common.utils.ScreenDimenUtil; +import com.yunbao.common.utils.MicStatusManager; import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; @@ -66,10 +63,7 @@ import com.yunbao.live.R; import com.yunbao.live.bean.LiveGuardInfo; import com.yunbao.live.bean.LiveKsyConfigBean; import com.yunbao.live.bean.LiveReceiveGiftBean; -import com.yunbao.common.bean.LiveUserGiftBean; -import com.yunbao.common.bean.MicUserBean; import com.yunbao.live.dialog.LiveLinkMicListDialogFragment; -import com.yunbao.live.dialog.LiveMicAnchorDialogFragment; import com.yunbao.live.dialog.LiveNewFunctionDialogFragment; import com.yunbao.live.dialog.LiveNewWishListDialogFragment; import com.yunbao.live.dialog.LiveWishListDialogFragment4Audience; @@ -86,7 +80,6 @@ import com.yunbao.live.presenter.LiveRyLinkMicPkPresenter; import com.yunbao.live.socket.SocketRyChatUtil; import com.yunbao.live.socket.SocketRyClient; import com.yunbao.live.socket.SocketSendBean; -import com.yunbao.common.utils.MicStatusManager; import com.yunbao.live.views.LiveEndViewHolder; import com.yunbao.live.views.LiveMusicViewHolder; import com.yunbao.live.views.LiveNewReadyRyViewHolder; @@ -98,9 +91,7 @@ import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.io.File; -import java.util.ArrayList; import java.util.List; -import java.util.TreeMap; import cn.rongcloud.rtc.api.RCRTCEngine; import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback; @@ -260,8 +251,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl if (code == 0) { JSONObject obj = JSONObject.parseObject(info[0]); pk_nub = Integer.valueOf(obj.getString("pk_num_day")); - btn_dr_pk_nub.setText("剩餘次數:" + pk_nub); - DialogUitl.showSimpleDialog(mContext, "是否確認進行多人PK(確認後扣除1點次數)當日剩餘次數:" + pk_nub, + + btn_dr_pk_nub.setText(String.format(getString(R.string.number_of_remaining_times), String.valueOf(pk_nub))); + DialogUitl.showSimpleDialog(mContext, String.format(getString(R.string.confirmed_to_proceed), String.valueOf(pk_nub)), false, new DialogUitl.SimpleCallback2() { @Override @@ -275,7 +267,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl if (code == 0) { btn_start_dr_pk.setVisibility(View.VISIBLE); - dr_pk_view.setVisibility(View.VISIBLE); +// dr_pk_view.setVisibility(View.VISIBLE); final SocketSendBean msg1 = new SocketSendBean() .param("_method_", SOCKET_LIVE_DRPK) .param("action", 9) @@ -295,18 +287,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl @Override public void onSuccess(Message message) { isDRPK = 1; - btn_start_dr_pk_view.setVisibility(View.VISIBLE); - dr_pk_view.setVisibility(View.VISIBLE); - - ScreenDimenUtil util = ScreenDimenUtil.getInstance(); - int mScreenWdith = util.getScreenWdith(); - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); - params.weight = 1; - params.topMargin = DpUtil.dp2px(123); - dr_pk_view.setLayoutParams(params); - mPreView.setLayoutParams(params); - } @Override @@ -651,7 +632,6 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl if (mLiveRyLinkMicPkPresenter != null) { mLiveRyLinkMicPkPresenter.setSelfStream(mStream); } -// } //开始推流 if (mLivePushViewHolder != null) { @@ -1352,9 +1332,9 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.updataMicList(list); - Log.i("多人连麦", "onOpenDrawer: "+list.size()); + Log.i("多人连麦", "onOpenDrawer: " + list.size()); for (LinkMicUserBean userBean : list) { - Log.i("多人连麦", "u list: "+userBean.toString()); + Log.i("多人连麦", "u list: " + userBean.toString()); } } break; @@ -1365,12 +1345,23 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } break; case LINK_MIC_CLOSE: - if(mLiveRoomViewHolder!=null){ + if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.updataCleanMic(); } break; + case LEAVE_DR_ROOM: + if (mLiveRyLinkMicPkPresenter != null) { + mLiveRyLinkMicPkPresenter.leaveDRRoom(); + } + break; + case LEAVE_PK_SCORE: + if (mLiveRyLinkMicPkPresenter != null) { + mLiveRyLinkMicPkPresenter.upDataPkScore(event.getPkScores(), event.getUid(), event.getTime()); + } + break; } } + /** * 检查指定直播间连麦人数 * 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 9f4fdec6a..ebc8a7017 100644 --- a/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java +++ b/live/src/main/java/com/yunbao/live/event/LiveAudienceEvent.java @@ -1,5 +1,6 @@ package com.yunbao.live.event; +import com.alibaba.fastjson.JSONArray; import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.AiAutomaticSpeechModel; import com.yunbao.common.bean.AnchorRecommendItemModel; @@ -23,6 +24,36 @@ public class LiveAudienceEvent extends BaseModel { private AiAutomaticSpeechModel aiAutomaticSpeechModel;//机器人消息 private boolean voicePress = false; private boolean isActivity = false;//是否展示趣味活动和增值权益 + private JSONArray pkScores; + private String uid; + private int time; + + public JSONArray getPkScores() { + return pkScores; + } + + public LiveAudienceEvent setPkScores(JSONArray pkScores) { + this.pkScores = pkScores; + return this; + } + + public String getUid() { + return uid; + } + + public LiveAudienceEvent setUid(String uid) { + this.uid = uid; + return this; + } + + public int getTime() { + return time; + } + + public LiveAudienceEvent setTime(int time) { + this.time = time; + return this; + } public boolean isActivity() { return isActivity; @@ -196,7 +227,8 @@ public class LiveAudienceEvent extends BaseModel { LINK_MIC_CLOSE(43, "主播关闭连麦房"), SOCKET_LIVE_DRPK_SET_PK_VIEW(44, "setPkview"), SOCKET_LIVE_DRPK_SET_PK_END_VIEW(45, "setPkEndview"), - ; + LEAVE_DR_ROOM(44, "结束多人PK"), + LEAVE_PK_SCORE(45, "PK排名"); private int type; private String name; diff --git a/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java b/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java index 753250175..4a6b49f57 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java @@ -1,5 +1,14 @@ package com.yunbao.live.presenter; +import static com.lzy.okgo.utils.HttpUtils.runOnUiThread; +import static com.yunbao.common.Constants.SOCKET_LINK_MIC_PK; +import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; +import static com.yunbao.live.activity.LiveRyAnchorActivity.isDRPK; +import static com.yunbao.live.views.LivePushRyViewHolder.contexts; +import static com.yunbao.live.views.LivePushRyViewHolder.rcrtcLiveInfo; +import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; +import static cn.rongcloud.rtc.core.RendererCommon.ScalingType.SCALE_ASPECT_FILL; + import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; @@ -16,16 +25,23 @@ import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; +import android.widget.RelativeLayout; +import android.widget.TextView; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.tencent.trtc.TRTCCloud; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.bean.LiveInfoModel; import com.yunbao.common.bean.UserBean; +import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.live.LiveNetManager; +import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.ScreenDimenUtil; @@ -38,12 +54,14 @@ import com.yunbao.live.activity.LiveRyAnchorActivity; import com.yunbao.live.bean.LivePKUserListBean; import com.yunbao.live.custom.ProgressTextView; import com.yunbao.live.event.LiveAudienceEvent; -import com.yunbao.live.interfaces.ILiveLinkMicViewHolder; import com.yunbao.live.socket.SocketRyClient; import com.yunbao.live.socket.SocketRyLinkMicPkUtil; import com.yunbao.live.socket.SocketSendBean; import com.yunbao.live.views.LiveLinkMicPkViewHolder; import com.yunbao.live.views.LivePushRyViewHolder; +import com.yunbao.live.views.LiveRoomPlayViewHolder; + +import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.Arrays; @@ -69,21 +87,6 @@ import io.rong.imlib.RongIMClient; import io.rong.imlib.model.Conversation; import io.rong.message.TextMessage; -import static cn.rongcloud.rtc.core.RendererCommon.ScalingType.SCALE_ASPECT_FILL; -import static com.lzy.okgo.utils.HttpUtils.runOnUiThread; -import static com.yunbao.common.Constants.SOCKET_LINK_MIC_PK; -import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; -import static com.yunbao.live.activity.LiveRyAnchorActivity.isDRPK; -import static com.yunbao.live.views.AbsRyLivePushViewHolder.leave; -import static com.yunbao.live.views.AbsRyLivePushViewHolder.mPreView; -import static com.yunbao.live.views.AbsRyLivePushViewHolder.mPreView1; -import static com.yunbao.live.views.LivePushRyViewHolder.contexts; -import static com.yunbao.live.views.LivePushRyViewHolder.dr_pk_view; -import static com.yunbao.live.views.LivePushRyViewHolder.rcrtcLiveInfo; -import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; - -import org.greenrobot.eventbus.EventBus; - //import cn.rongcloud.rtc.jni.video.RCRect; /** @@ -129,7 +132,14 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { private String mSelfStream; private int mPkTimeFromServer; public static TRTCCloud mTRTCCloud1; + private View detailsView1, detailsView2, detailsView3, detailsView4; + private LinearLayout detailsLinearLayout1, detailsLinearLayout2, detailsLinearLayout3, detailsLinearLayout4; + private LinearLayout linearGrade1, linearGrade2, linearGrade3, linearGrade4; + private TextView textPkName1, textPkName2, textPkName3, textPkName4; + private TextView textGrade1, textGrade2, textGrade3, textGrade4; + private ImageView imageGrade1, imageGrade2, imageGrade3, imageGrade4; + public LivePushRyViewHolder livePushRyViewHolder; public static List inputStreamList = new ArrayList<>(); public static List inputStreamList1 = new ArrayList<>(); @@ -179,7 +189,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { } }; - public LiveRyLinkMicPkPresenter(Context context, ILiveLinkMicViewHolder linkMicViewHolder, boolean isAnchor, View root) { + public LiveRyLinkMicPkPresenter(Context context, LiveRoomPlayViewHolder linkMicViewHolder, boolean isAnchor, View root) { mContext = context; mIsAnchor = isAnchor; mRoot = root; @@ -218,6 +228,46 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { } + public LiveRyLinkMicPkPresenter(Context context, LivePushRyViewHolder linkMicViewHolder, boolean isAnchor, View root) { + mContext = context; + mIsAnchor = isAnchor; + mRoot = root; + mPkContainer = linkMicViewHolder.getPkContainer(); + livePushRyViewHolder = linkMicViewHolder; + mPkTimeString1 = ""; + mPkTimeString2 = WordUtil.getString(R.string.live_pk_time_2); + //从本地取数据 + String pkTime = CommonAppConfig.getInstance().getAnchorPkTime(); + if (!pkTime.isEmpty()) { + try { + int time = Integer.parseInt(pkTime) * 60; + if (time > 0) { + PK_TIME_MAX = time; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + Log.d("PK_TIME_MAX", "" + PK_TIME_MAX); + mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case WHAT_PK_WAIT_RECEIVE: + onApplyPkWait(); + break; + case WHAT_PK_WAIT_SEND: + onSendPkWait(); + break; + case WHAT_PK_TIME: + changePkTime(); + break; + } + } + }; + + } + public void setSocketRyClient(SocketRyClient SocketRyClient) { mSocketRyClient = SocketRyClient; } @@ -310,8 +360,8 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); params.weight = 1; params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top); - LivePushRyViewHolder.mPreView.setLayoutParams(params); - LivePushRyViewHolder.mPreView1.setLayoutParams(params); + livePushRyViewHolder.mPreView.setLayoutParams(params); + livePushRyViewHolder.mPreView1.setLayoutParams(params); } Log.i("tts", s1); @@ -463,35 +513,36 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 RCRTCVideoView remoteView = new RCRTCVideoView(mContext); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); + livePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr1_preview.removeAllViews(); + livePushRyViewHolder.mPreView1.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr1_preview.addView(remoteView); + livePushRyViewHolder.mPreView1.addView(remoteView); } else if (i == 2) { //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(mContext); - ((RCRTCVideoInputStream) stream).setVideoView(remoteView); - //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr2_preview.removeAllViews(); - remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr2_preview.addView(remoteView); +// RCRTCVideoView remoteView = new RCRTCVideoView(mContext); +// ((RCRTCVideoInputStream) stream).setVideoView(remoteView); +// //todo 本demo只演示添加1个远端用户的视图 +// LivePushRyViewHolder.dr2_preview.removeAllViews(); +// remoteView.setScalingType(SCALE_ASPECT_FILL); +// LivePushRyViewHolder.dr2_preview.addView(remoteView); } else if (i == 3) { //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(mContext); - ((RCRTCVideoInputStream) stream).setVideoView(remoteView); - //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr3_preview.removeAllViews(); - remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr3_preview.addView(remoteView); +// RCRTCVideoView remoteView = new RCRTCVideoView(mContext); +// ((RCRTCVideoInputStream) stream).setVideoView(remoteView); +// //todo 本demo只演示添加1个远端用户的视图 +// LivePushRyViewHolder.dr3_preview.removeAllViews(); +// remoteView.setScalingType(SCALE_ASPECT_FILL); +// LivePushRyViewHolder.dr3_preview.addView(remoteView); } else if (i == 4) { //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(mContext); - ((RCRTCVideoInputStream) stream).setVideoView(remoteView); - //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr4_preview.removeAllViews(); - remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr4_preview.addView(remoteView); +// RCRTCVideoView remoteView = new RCRTCVideoView(mContext); +// ((RCRTCVideoInputStream) stream).setVideoView(remoteView); +// //todo 本demo只演示添加1个远端用户的视图 +// LivePushRyViewHolder.dr4_preview.removeAllViews(); +// remoteView.setScalingType(SCALE_ASPECT_FILL); +// LivePushRyViewHolder.dr4_preview.addView(remoteView); } //如果要订阅所有远端用户的流。保存所有流信息,方便后面统一订阅 inputStreamList.add(stream); @@ -615,9 +666,9 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { RCRTCVideoView remoteView = new RCRTCVideoView(contexts); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 -// LivePushRyViewHolder.mPreView1.removeAllViews(); + livePushRyViewHolder.mPreView1.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.mPreView1.addView(remoteView); + livePushRyViewHolder.mPreView1.addView(remoteView); } //如果要订阅所有远端用户的流。保存所有流信息,方便后面统一订阅 inputStreamList.add(stream); @@ -695,9 +746,9 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); params.weight = 1; params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top); - LivePushRyViewHolder.mPreView.setLayoutParams(params); - LivePushRyViewHolder.mPreView1.setLayoutParams(params); - LivePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE); + livePushRyViewHolder.mPreView.setLayoutParams(params); + livePushRyViewHolder.mPreView1.setLayoutParams(params); + livePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE); final SocketSendBean msg1 = new SocketSendBean() .param("_method_", SOCKET_LINK_MIC_PK) @@ -739,9 +790,9 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); params.weight = 1; params.topMargin = mContext.getResources().getDimensionPixelOffset(R.dimen.live_top); - LivePushRyViewHolder.mPreView.setLayoutParams(params); - LivePushRyViewHolder.mPreView1.setLayoutParams(params); - mPreView1.setVisibility(View.VISIBLE); + livePushRyViewHolder.mPreView.setLayoutParams(params); + livePushRyViewHolder.mPreView1.setLayoutParams(params); + livePushRyViewHolder.mPreView1.setVisibility(View.VISIBLE); LivePushRyViewHolder.btn_close.setVisibility(View.VISIBLE); JSONObject msg1 = new JSONObject(); @@ -768,9 +819,9 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { RCRTCVideoView remoteView = new RCRTCVideoView(contexts); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 -// LivePushRyViewHolder.mPreView1.removeAllViews(); + livePushRyViewHolder.mPreView1.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.mPreView1.addView(remoteView); + livePushRyViewHolder.mPreView1.addView(remoteView); } //如果要订阅所有远端用户的流。保存所有流信息,方便后面统一订阅 inputStreamList.add(stream); @@ -1070,7 +1121,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { /** * 退出多人PK */ - public static void leaveDRRoom() { + public void leaveDRRoom() { Log.e("ry", "退出多人OKKK" + inputStreamList.size()); isDRPK = 0; for (int i = 0; i < inputStreamList.size(); i++) { @@ -1139,25 +1190,31 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { }); } } - new Handler(Looper.getMainLooper()).post(new Runnable() { - public void run() { - //恢复全屏画面 - LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - params.topMargin = 0; - mPreView.setLayoutParams(params); - dr_pk_view.setVisibility(View.GONE); - inputStreamList.clear(); - inputStreamList1.clear(); - //删除之前其他主播的画面 - LivePushRyViewHolder.dr1_preview.removeAllViews(); - LivePushRyViewHolder.dr2_preview.removeAllViews(); - LivePushRyViewHolder.dr3_preview.removeAllViews(); - LivePushRyViewHolder.dr4_preview.removeAllViews(); - } - }); + + leaveHandler.post(leaveRunnable); } + private Handler leaveHandler = new Handler(Looper.getMainLooper()); + private Runnable leaveRunnable = new Runnable() { + @Override + public void run() { + //恢复全屏画面 + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + params.topMargin = 0; + livePushRyViewHolder.camera.setLayoutParams(params); + livePushRyViewHolder.dr_pk_view.setVisibility(View.GONE); + inputStreamList.clear(); + inputStreamList1.clear(); + //删除之前其他主播的画面 + livePushRyViewHolder.dr1_preview.removeAllViews(); + livePushRyViewHolder.dr3_preview.removeAllViews(); + livePushRyViewHolder.cameraPreview3.removeAllViews(); + leaveHandler.removeCallbacks(leaveRunnable); + + } + }; + /** * 显示申请多人PK的弹窗 */ @@ -1215,7 +1272,7 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { @Override public void onSuccess(int code, String msg, String[] info) { - Log.i("多人PK","code = " + code + ", msg = " + msg + ", info = " + Arrays.deepToString(info)); + Log.i("多人PK", "code = " + code + ", msg = " + msg + ", info = " + Arrays.deepToString(info)); final SocketSendBean msg1 = new SocketSendBean() .param("_method_", SOCKET_LIVE_DRPK) @@ -1246,17 +1303,12 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { Log.e("ry", "发送失敗"); } }); - if(info.length==0){ + if (info.length == 0) { return; } JSONObject obj = JSONObject.parseObject(info[0]); JSONArray users = obj.getJSONArray("userlist"); - - //添加水印 -// RCRTCRect rect = new RCRTCRect(0.5f, 0.5f, 0.2f); -// RCRTCEngine.getInstance().getDefaultVideoStream().setWatermark(fromText(50, mNameText), rect); dRjoinOtherRoom(u.getId(), 1); - for (int i = 0; i < users.size(); i++) { JSONObject user = users.getJSONObject(i); Log.e("ry", mApplyUid + "VS" + user.getString("id") + "列表"); @@ -1417,15 +1469,28 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { new Handler(Looper.getMainLooper()).post(new Runnable() { public void run() { //把多人PK的View显示出来 - if (dr_pk_view.getVisibility() == View.GONE) { + if (livePushRyViewHolder.dr_pk_view.getVisibility() == View.GONE) { ScreenDimenUtil util = ScreenDimenUtil.getInstance(); int mScreenWdith = util.getScreenWdith(); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); params.weight = 1; params.topMargin = DpUtil.dp2px(123); - dr_pk_view.setLayoutParams(params); - mPreView.setLayoutParams(params); - dr_pk_view.setVisibility(View.VISIBLE); + livePushRyViewHolder.dr_pk_view.setLayoutParams(params); + livePushRyViewHolder.camera.setLayoutParams(params); + livePushRyViewHolder.dr_pk_view.setVisibility(View.VISIBLE); + livePushRyViewHolder.dr1_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr2_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr3_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr4_preview.setVisibility(View.GONE); + detailsView1 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout1 = detailsView1.findViewById(R.id.lin_pk1); + linearGrade1 = detailsView1.findViewById(R.id.linear_grade1); + imageGrade1 = detailsView1.findViewById(R.id.image_grade1); + textGrade1 = detailsView1.findViewById(R.id.text_grade1); + imageGrade1.setTag(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId())); + livePushRyViewHolder.mPreView.addView(detailsView1); + detailsLinearLayout1.setVisibility(View.VISIBLE); + linearGrade1.setVisibility(View.GONE); } Log.e("ry", "多人接受成功" + mApplyUid); @@ -1438,37 +1503,99 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { Log.e("ry", i + "收到" + stream.getMediaType() + "实打实打算" + rcrtcOtherRoom.getRemoteUsers().get(i).getUserId()); if (stream.getMediaType() == RCRTCMediaType.VIDEO) { if (inputStreamList.size() == 0) { + livePushRyViewHolder.dr1_preview.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(contexts); + RCRTCVideoView remoteView = new RCRTCVideoView(mContext); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr1_preview.removeAllViews(); + livePushRyViewHolder.dr1_preview.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr1_preview.addView(remoteView); + livePushRyViewHolder.dr1_preview.addView(remoteView); + + + LiveNetManager.get(mContext).getLiveInfo(uid, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView2 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout2 = detailsView2.findViewById(R.id.lin_pk2); + linearGrade2 = detailsView2.findViewById(R.id.linear_grade2); + textPkName2 = detailsView2.findViewById(R.id.text_pk_name2); + imageGrade2 = detailsView2.findViewById(R.id.image_grade2); + textGrade2 = detailsView2.findViewById(R.id.text_grade2); + imageGrade2.setTag(String.valueOf(uid)); + textPkName2.setText(data.getUserNicename()); + livePushRyViewHolder.dr1_preview.addView(detailsView2); + detailsLinearLayout2.setVisibility(View.VISIBLE); + linearGrade2.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); + } else if (inputStreamList.size() == 1) { + livePushRyViewHolder.dr3_preview.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(contexts); + RCRTCVideoView remoteView = new RCRTCVideoView(mContext); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr2_preview.removeAllViews(); + livePushRyViewHolder.dr3_preview.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr2_preview.addView(remoteView); + livePushRyViewHolder.dr3_preview.addView(remoteView); + LiveNetManager.get(mContext).getLiveInfo(uid, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView4 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout4 = detailsView4.findViewById(R.id.lin_pk4); + linearGrade4 = detailsView4.findViewById(R.id.linear_grade4); + textPkName4 = detailsView4.findViewById(R.id.text_pk_name4); + imageGrade4 = detailsView4.findViewById(R.id.image_grade4); + textGrade4 = detailsView4.findViewById(R.id.text_grade4); + imageGrade4.setTag(uid); + textPkName4.setText(data.getUserNicename()); + livePushRyViewHolder.dr3_preview.addView(detailsView4); + detailsLinearLayout4.setVisibility(View.VISIBLE); + linearGrade4.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); } else if (inputStreamList.size() == 2) { + livePushRyViewHolder.cameraPreview3.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(contexts); + RCRTCVideoView remoteView = new RCRTCVideoView(mContext); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr3_preview.removeAllViews(); + livePushRyViewHolder.cameraPreview3.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr3_preview.addView(remoteView); - } else if (inputStreamList.size() == 3) { - //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(contexts); - ((RCRTCVideoInputStream) stream).setVideoView(remoteView); - //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr4_preview.removeAllViews(); - remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr4_preview.addView(remoteView); + livePushRyViewHolder.cameraPreview3.addView(remoteView); + + LiveNetManager.get(mContext).getLiveInfo(uid, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView3 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout3 = detailsView3.findViewById(R.id.lin_pk3); + linearGrade3 = detailsView3.findViewById(R.id.linear_grade3); + textPkName3 = detailsView3.findViewById(R.id.text_pk_name3); + imageGrade3 = detailsView3.findViewById(R.id.image_grade3); + textGrade3 = detailsView3.findViewById(R.id.text_grade3); + imageGrade3.setTag(uid); + textPkName3.setText(data.getUserNicename()); + livePushRyViewHolder.cameraPreview3.addView(detailsView3); + detailsLinearLayout3.setVisibility(View.VISIBLE); + linearGrade3.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); } inputStreamList.add(stream); } @@ -1534,6 +1661,31 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { rcrtcOtherRoom.registerOtherRoomEventsListener(otherRoomEventsListener); new Handler(Looper.getMainLooper()).post(new Runnable() { public void run() { + + if (livePushRyViewHolder.dr_pk_view.getVisibility() == View.GONE) { + ScreenDimenUtil util = ScreenDimenUtil.getInstance(); + int mScreenWdith = util.getScreenWdith(); + LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, mScreenWdith * 720 / 960); + params.weight = 1; + params.topMargin = DpUtil.dp2px(123); + livePushRyViewHolder.dr_pk_view.setLayoutParams(params); + livePushRyViewHolder.camera.setLayoutParams(params); + livePushRyViewHolder.dr_pk_view.setVisibility(View.VISIBLE); + livePushRyViewHolder.dr1_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr2_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr3_preview.setVisibility(View.GONE); + livePushRyViewHolder.dr4_preview.setVisibility(View.GONE); + detailsView1 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout1 = detailsView1.findViewById(R.id.lin_pk1); + linearGrade1 = detailsView1.findViewById(R.id.linear_grade1); + imageGrade1 = detailsView1.findViewById(R.id.image_grade1); + textGrade1 = detailsView1.findViewById(R.id.text_grade1); + imageGrade1.setTag(String.valueOf(IMLoginManager.get(mContext).getUserInfo().getId())); + livePushRyViewHolder.mPreView.addView(detailsView1); + detailsLinearLayout1.setVisibility(View.VISIBLE); + linearGrade1.setVisibility(View.GONE); + } + //遍历远端用户列表 for (int i = 0; i < rcrtcOtherRoom.getRemoteUsers().size(); i++) { //遍历远端用户发布的资源列表 @@ -1541,37 +1693,96 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { Log.e("ry111", stream.getMediaType() + ""); if (stream.getMediaType() == RCRTCMediaType.VIDEO) { if (inputStreamList.size() == 0) { + livePushRyViewHolder.dr1_preview.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 RCRTCVideoView remoteView = new RCRTCVideoView(contexts); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr1_preview.removeAllViews(); + livePushRyViewHolder.dr1_preview.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr1_preview.addView(remoteView); + livePushRyViewHolder.dr1_preview.addView(remoteView); + LiveNetManager.get(mContext).getLiveInfo(u, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView2 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout2 = detailsView2.findViewById(R.id.lin_pk2); + linearGrade2 = detailsView2.findViewById(R.id.linear_grade2); + textPkName2 = detailsView2.findViewById(R.id.text_pk_name2); + imageGrade2 = detailsView2.findViewById(R.id.image_grade2); + textGrade2 = detailsView2.findViewById(R.id.text_grade2); + imageGrade2.setTag(String.valueOf(u)); + textPkName2.setText(data.getUserNicename()); + livePushRyViewHolder.dr1_preview.addView(detailsView2); + detailsLinearLayout2.setVisibility(View.VISIBLE); + linearGrade2.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); } else if (inputStreamList.size() == 1) { + livePushRyViewHolder.dr3_preview.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 RCRTCVideoView remoteView = new RCRTCVideoView(contexts); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr2_preview.removeAllViews(); + livePushRyViewHolder.dr3_preview.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr2_preview.addView(remoteView); + livePushRyViewHolder.dr3_preview.addView(remoteView); + LiveNetManager.get(mContext).getLiveInfo(u, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView4 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout4 = detailsView4.findViewById(R.id.lin_pk4); + linearGrade4 = detailsView4.findViewById(R.id.linear_grade4); + textPkName4 = detailsView4.findViewById(R.id.text_pk_name4); + imageGrade4 = detailsView4.findViewById(R.id.image_grade4); + textGrade4 = detailsView4.findViewById(R.id.text_grade4); + imageGrade4.setTag(u); + textPkName4.setText(data.getUserNicename()); + livePushRyViewHolder.dr3_preview.addView(detailsView4); + detailsLinearLayout4.setVisibility(View.VISIBLE); + linearGrade4.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); } else if (inputStreamList.size() == 2) { + livePushRyViewHolder.cameraPreview3.setVisibility(View.VISIBLE); //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 RCRTCVideoView remoteView = new RCRTCVideoView(contexts); ((RCRTCVideoInputStream) stream).setVideoView(remoteView); //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr3_preview.removeAllViews(); + livePushRyViewHolder.cameraPreview3.removeAllViews(); remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr3_preview.addView(remoteView); - } else if (inputStreamList.size() == 3) { - //如果远端用户发布的是视频流,创建显示视图RCRTCVideoView,并添加到布局中显示 - RCRTCVideoView remoteView = new RCRTCVideoView(contexts); - ((RCRTCVideoInputStream) stream).setVideoView(remoteView); - //todo 本demo只演示添加1个远端用户的视图 - LivePushRyViewHolder.dr4_preview.removeAllViews(); - remoteView.setScalingType(SCALE_ASPECT_FILL); - LivePushRyViewHolder.dr4_preview.addView(remoteView); + livePushRyViewHolder.cameraPreview3.addView(remoteView); + + LiveNetManager.get(mContext).getLiveInfo(u, new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + detailsView3 = LayoutInflater.from(mContext).inflate(R.layout.view_live_pk_details, null); + detailsLinearLayout3 = detailsView3.findViewById(R.id.lin_pk3); + linearGrade3 = detailsView3.findViewById(R.id.linear_grade3); + textPkName3 = detailsView3.findViewById(R.id.text_pk_name3); + imageGrade3 = detailsView3.findViewById(R.id.image_grade3); + textGrade3 = detailsView3.findViewById(R.id.text_grade3); + imageGrade3.setTag(u); + textPkName3.setText(data.getUserNicename()); + livePushRyViewHolder.cameraPreview3.addView(detailsView3); + detailsLinearLayout3.setVisibility(View.VISIBLE); + linearGrade3.setVisibility(View.GONE); + } + + @Override + public void onError(String error) { + + } + }); } inputStreamList.add(stream); @@ -1679,8 +1890,8 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { videoLayout2.setVideoStream(streams.get(i)); // RCRTCStream#MediaType 必须是Video videoLayout2.setX(480); //X 坐标 videoLayout2.setY(0); //Y 坐标 - videoLayout2.setWidth(240); // 视频窗口的宽 - videoLayout2.setHeight(360); // 视频窗口的高 + videoLayout2.setWidth(480); // 视频窗口的宽 + videoLayout2.setHeight(720); // 视频窗口的高 Log.e("ttt1112", "0" + "VS" + streams.get(i).getUserId()); } else if (i == 1) { //user3的视频流 @@ -2061,4 +2272,196 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { public void setSelfStream(String selfStream) { mSelfStream = selfStream; } + + /** + * 更新Pk分数 + */ + public void upDataPkScore(JSONArray pkScores, String uid, int time) { + String userID1 = (String) imageGrade1.getTag(); + String userID2 = (String) imageGrade2.getTag(); + String userID4 = (String) imageGrade4.getTag(); + if (livePushRyViewHolder.timeTitle.getVisibility() == View.GONE) { + RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) livePushRyViewHolder.timeTitle.getLayoutParams(); + layoutParams.topMargin = DpUtil.dp2px(123); + livePushRyViewHolder.timeTitle.setLayoutParams(layoutParams); + livePushRyViewHolder.timeTitle.setVisibility(View.VISIBLE); + } + int pkScoreSize = pkScores.size(); + if (pkScoreSize == 3) { + linearGrade1.setVisibility(View.VISIBLE); + linearGrade2.setVisibility(View.VISIBLE); + linearGrade4.setVisibility(View.VISIBLE); + //拿到原始数据 + for (int i = 0; i < pkScores.size(); i++) { + JSONObject score = pkScores.getJSONObject(i); + String userID = score.getString("id"); + long userScore = score.getLong("score"); + if (TextUtils.equals(userID, userID1)) { + textGrade1.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade1); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade1); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade1); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade1); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade1); + break; + } + } + } else if (TextUtils.equals(userID, userID2)) { + textGrade2.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade2); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade2); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade2); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade2); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade2); + break; + } + } + } else if (TextUtils.equals(userID, userID4)) { + textGrade4.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade4); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade4); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade4); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade4); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade4); + break; + } + } + } + } + } else { + String userID3 = (String) imageGrade3.getTag(); + linearGrade1.setVisibility(View.VISIBLE); + linearGrade2.setVisibility(View.VISIBLE); + linearGrade3.setVisibility(View.VISIBLE); + linearGrade4.setVisibility(View.VISIBLE); + //拿到原始数据 + for (int i = 0; i < pkScores.size(); i++) { + JSONObject score = pkScores.getJSONObject(i); + String userID = score.getString("id"); + long userScore = score.getLong("score"); + if (TextUtils.equals(userID, userID1)) { + textGrade1.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade1); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade1); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade1); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade1); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade1); + break; + } + } + } else if (TextUtils.equals(userID, userID2)) { + textGrade2.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade2); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade2); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade2); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade2); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade2); + break; + } + } + } else if (TextUtils.equals(userID, userID4)) { + textGrade4.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade4); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade4); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade4); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade4); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade4); + break; + } + } + } else if (TextUtils.equals(userID, userID3)) { + textGrade3.setText(String.valueOf(userScore)); + if (!score.containsKey("paiming")) { + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade3); + } else { + int ranking = score.getIntValue("paiming"); + switch (ranking) { + case 1: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no1, imageGrade3); + break; + case 2: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no2, imageGrade3); + break; + case 3: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no3, imageGrade3); + break; + case 4: + ImgLoader.display(mContext, R.mipmap.icon_livepk_no4, imageGrade3); + break; + } + } + } + + } + } + + } + + } 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 f1b4f4e0c..2a5eb60ee 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketRyClient.java @@ -3,8 +3,6 @@ package com.yunbao.live.socket; import static com.blankj.utilcode.util.SnackbarUtils.dismiss; import static com.blankj.utilcode.util.ViewUtils.runOnUiThread; import static com.yunbao.live.activity.LiveRyAnchorActivity.isDRPK; -import static com.yunbao.live.presenter.LiveRyLinkMicPkPresenter.leaveDRRoom; -import static com.yunbao.live.views.LivePushRyViewHolder.dr_pk_view; import static com.yunbao.live.views.LivePushRyViewHolder.rtcRoom; import static com.yunbao.live.views.LiveRoomViewHolder.getIsHot; @@ -19,7 +17,6 @@ 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.reflect.TypeToken; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; import com.yunbao.common.Constants; @@ -278,15 +275,20 @@ public class SocketRyClient { } //收到对方同意多人PK邀请 else if (action3 == 2) { - UserBean u = new UserBean(); -// u.setUserNiceName(map.getString("uname")); - u.setId(map.getString("uid")); - mListener.onLinkDRMicPkApplyOk(u); - } else if (action3 == 6) { +// UserBean u = new UserBean(); +//// u.setUserNiceName(map.getString("uname")); +// u.setId(map.getString("uid")); +// mListener.onLinkDRMicPkApplyOk(u); + } else if (action3 == 6) {//开始Pk if (LiveRoomViewHolder.mHandler != null) { LiveRoomViewHolder.mHandler.removeCallbacksAndMessages(null); } - LiveRoomViewHolder.UpPkBar(map.getJSONArray("userlist"), mLiveUid, map.getIntValue("drpk_time")); +// LiveRoomViewHolder.UpPkBar(map.getJSONArray("userlist"), mLiveUid, map.getIntValue("drpk_time")); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.LEAVE_PK_SCORE) + .setPkScores(map.getJSONArray("userlist")) + .setUid(mLiveUid) + .setTime(map.getIntValue("drpk_time"))); if (livePushRyViewHolder == null) { // LiveAudienceActivity.getmLivePlayViewHolder().setPkview(); Bus.get().post(new LiveAudienceEvent() @@ -298,11 +300,10 @@ public class SocketRyClient { // endDRGif(); LiveRoomViewHolder.d_pk_view.setVisibility(View.GONE); if (LiveRyAnchorActivity.mLiveAnchorViewHolder != null) { - dr_pk_view.setVisibility(View.GONE); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); params.topMargin = 0; - LivePushRyViewHolder.mPreView.setLayoutParams(params); - leaveDRRoom(); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.LEAVE_DR_ROOM)); isDRPK = 0; } else { // LiveAudienceActivity.getmLivePlayViewHolder().setPkEndview(); @@ -912,7 +913,12 @@ public class SocketRyClient { mListener.onSendGift(receiveGiftBean); } if (map.getIntValue("drpk_status") == 1) { - LiveRoomViewHolder.UpPkBar(map.getJSONArray("userlist"), mLiveUid, 0); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.LEAVE_PK_SCORE) + .setPkScores(map.getJSONArray("userlist")) + .setUid(mLiveUid) + .setTime(0)); +// LiveRoomViewHolder.UpPkBar(map.getJSONArray("userlist"), mLiveUid, 0); } } @@ -1058,16 +1064,16 @@ public class SocketRyClient { break; case 5://PK时候断开连麦的回调 if (rtcRoom != null) { - if (LivePushRyViewHolder.mPreView1 != null) { - LivePushRyViewHolder.mPreView1.removeAllViews(); - LivePushRyViewHolder.mPreView1.setVisibility(View.GONE); - isDRPK = 0; - leaveDRRoom(); - } +// if (LivePushRyViewHolder.mPreView1 != null) { +// LivePushRyViewHolder.mPreView1.removeAllViews(); +// LivePushRyViewHolder.mPreView1.setVisibility(View.GONE); +// isDRPK = 0; +// leaveDRRoom(); +// } LivePushRyViewHolder.btn_close.setVisibility(View.GONE); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); params.topMargin = 0; - LivePushRyViewHolder.mPreView.setLayoutParams(params); +// LivePushRyViewHolder.mPreView.setLayoutParams(params); //断开连麦 HttpClient.getInstance().post("livepk.setliveuserout", "livepk.setliveuserout") .execute(new HttpCallback() { diff --git a/live/src/main/java/com/yunbao/live/views/AbsRyLivePushViewHolder.java b/live/src/main/java/com/yunbao/live/views/AbsRyLivePushViewHolder.java index b0e368932..2b1c7e4f2 100644 --- a/live/src/main/java/com/yunbao/live/views/AbsRyLivePushViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/AbsRyLivePushViewHolder.java @@ -8,22 +8,16 @@ import android.view.animation.Animation; import android.view.animation.ScaleAnimation; import android.widget.FrameLayout; import android.widget.ImageView; -import android.widget.RelativeLayout; +import android.widget.LinearLayout; import android.widget.TextView; - import com.yunbao.common.CommonAppConfig; -import com.yunbao.common.bean.ConfigBean; -import com.yunbao.common.utils.DpUtil; import com.yunbao.common.utils.L; -import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.views.AbsViewHolder; import com.yunbao.live.R; import com.yunbao.live.interfaces.ILivePushViewHolder; import com.yunbao.live.interfaces.LivePushListener; -import cn.qqtheme.framework.util.ScreenUtils; - public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushViewHolder { @@ -38,9 +32,10 @@ public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushV protected ViewGroup mLeftContainer; protected ViewGroup mRightContainer; protected ViewGroup mPkContainer; - public static FrameLayout mPreView,mPreView1,dr1_preview,dr2_preview,dr3_preview,dr4_preview; - public static ImageView leave; + public FrameLayout mPreView, mPreView1, cameraPreview3, dr1_preview, dr2_preview, dr3_preview, dr4_preview; + public ImageView leave; protected boolean mOpenCamera;//是否选择了相机 + public LinearLayout camera; //倒计时 protected TextView mCountDownText; @@ -67,7 +62,7 @@ public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushV mRightContainer = (ViewGroup) findViewById(R.id.right_container); mPkContainer = (ViewGroup) findViewById(R.id.pk_container); mCameraFront = true; - String mBeautySdkType= CommonAppConfig.getInstance().getBeautySdkType(); + String mBeautySdkType = CommonAppConfig.getInstance().getBeautySdkType(); } @@ -208,7 +203,7 @@ public class AbsRyLivePushViewHolder extends AbsViewHolder implements ILivePushV } - public boolean isFlashOpen(){ + public boolean isFlashOpen() { return mFlashOpen; } diff --git a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java index e25f4cca7..79bbe9d18 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePushRyViewHolder.java @@ -5,7 +5,6 @@ import static com.yunbao.common.Constants.SOCKET_LIVE_DRPK; import static com.yunbao.live.activity.LiveActivity.mLiveRyLinkMicPkPresenter; import static com.yunbao.live.presenter.LiveRyLinkMicPkPresenter.inputStreamList; import static com.yunbao.live.presenter.LiveRyLinkMicPkPresenter.inputStreamList1; -import static com.yunbao.live.presenter.LiveRyLinkMicPkPresenter.leaveDRRoom; import static cn.rongcloud.rtc.base.RCRTCLiveRole.BROADCASTER; import android.app.Dialog; @@ -89,11 +88,12 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX public TencentTRTCBeautyManager tencentTRTCBeautyManager; public static Context contexts; public static TextView btn_close; - public static LinearLayout dr_pk_view; + public LinearLayout dr_pk_view; public static RCRTCRoom rtcRoom; public static RCRTCLiveInfo rcrtcLiveInfo; private ViewGroup liveActivityContainer; + public FrameLayout timeTitle; public LivePushRyViewHolder(Context context, ViewGroup parentView) { super(context, parentView); @@ -315,7 +315,9 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX @Override public void onFinishOtherRoom(String roomId, String userId) { super.onFinishOtherRoom(roomId, userId); - leaveDRRoom(); + if (mLiveRyLinkMicPkPresenter != null) { + mLiveRyLinkMicPkPresenter.leaveDRRoom(); + } } /** @@ -332,14 +334,18 @@ public class LivePushRyViewHolder extends AbsRyLivePushViewHolder implements ITX public void init() { super.init(); mPreView = (FrameLayout) findViewById(R.id.camera_preview); + camera = (LinearLayout) findViewById(R.id.camera); mPreView1 = (FrameLayout) findViewById(R.id.camera_preview1); + cameraPreview3 = (FrameLayout) findViewById(R.id.camera_preview3); dr1_preview = (FrameLayout) findViewById(R.id.dr1_preview); dr2_preview = (FrameLayout) findViewById(R.id.dr2_preview); dr3_preview = (FrameLayout) findViewById(R.id.dr3_preview); dr4_preview = (FrameLayout) findViewById(R.id.dr4_preview); leave = (ImageView) findViewById(R.id.leave); dr_pk_view = (LinearLayout) findViewById(R.id.dr_pk_view); + timeTitle = (FrameLayout) findViewById(R.id.time_title); dr_pk_view.setVisibility(View.GONE); + cameraPreview3.setVisibility(View.GONE); btn_close = (TextView) findViewById(R.id.btn_close); mMainHandler = new Handler(Looper.getMainLooper()); btn_close.setOnClickListener(new View.OnClickListener() { diff --git a/live/src/main/java/com/yunbao/live/views/LiveRyAnchorViewHolder.java b/live/src/main/java/com/yunbao/live/views/LiveRyAnchorViewHolder.java index bff0273c6..72777ff11 100644 --- a/live/src/main/java/com/yunbao/live/views/LiveRyAnchorViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LiveRyAnchorViewHolder.java @@ -4,9 +4,7 @@ import static com.yunbao.live.activity.LiveActivity.mLiveUid; import static com.yunbao.live.activity.LiveRyAnchorActivity.PKing; import static com.yunbao.live.activity.LiveRyAnchorActivity.pk_nub; import static com.yunbao.live.event.LiveAudienceEvent.LiveAudienceType.START_MESSAGE; -import static com.yunbao.live.event.LiveAudienceEvent.LiveAudienceType.WISH_LIST; import static com.yunbao.live.event.LiveAudienceEvent.LiveAudienceType.WISH_LIST_UPDATE; -import static com.yunbao.live.presenter.LiveRyLinkMicPkPresenter.leaveDRRoom; import android.content.Context; import android.graphics.drawable.Drawable; @@ -143,7 +141,8 @@ public class LiveRyAnchorViewHolder extends AbsLiveViewHolder { .execute(new HttpCallback() { @Override public void onSuccess(int code, String msg, String[] info) { - leaveDRRoom(); + Bus.get().post(new LiveAudienceEvent() + .setType(LiveAudienceEvent.LiveAudienceType.LEAVE_DR_ROOM)); PKing = false; } diff --git a/live/src/main/res/drawable/background_pk_time.xml b/live/src/main/res/drawable/background_pk_time.xml new file mode 100644 index 000000000..b76d2f6c9 --- /dev/null +++ b/live/src/main/res/drawable/background_pk_time.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_live_pk_details.xml b/live/src/main/res/layout/view_live_pk_details.xml new file mode 100644 index 000000000..7ba5e065e --- /dev/null +++ b/live/src/main/res/layout/view_live_pk_details.xml @@ -0,0 +1,222 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/live/src/main/res/layout/view_live_push_ry.xml b/live/src/main/res/layout/view_live_push_ry.xml index dd8c03d43..a430d9b42 100644 --- a/live/src/main/res/layout/view_live_push_ry.xml +++ b/live/src/main/res/layout/view_live_push_ry.xml @@ -1,33 +1,49 @@ - + android:layout_height="match_parent"> + - + android:layout_height="match_parent" + android:orientation="vertical"> + + + + + + + + android:visibility="gone" /> - + android:orientation="vertical" + android:visibility="gone"> + android:layout_weight="1" + android:background="@mipmap/live_icon_vacancy" /> + android:layout_weight="1" + android:background="@mipmap/live_icon_vacancy" /> @@ -59,24 +75,23 @@ + android:background="@mipmap/live_icon_vacancy" /> + android:background="@mipmap/live_icon_vacancy" /> - - - - + android:orientation="vertical" + android:visibility="gone"> + android:layout_height="match_parent" /> + + android:layout_marginTop="130dp"> + android:layout_marginBottom="20dp" /> + android:layout_marginBottom="20dp" /> @@ -133,27 +142,27 @@ android:id="@+id/small_container" android:layout_width="0dp" android:layout_height="0dp" - android:layout_alignParentBottom="true" android:layout_alignParentRight="true" + android:layout_alignParentBottom="true" android:layout_marginBottom="120dp" - app:mfl3_ratio="0.25" - /> + app:mfl3_ratio="0.25" /> - + android:textSize="13sp" + android:visibility="gone" /> + android:visibility="gone" /> + + + + + + diff --git a/live/src/main/res/layout/view_ry_live_anchor.xml b/live/src/main/res/layout/view_ry_live_anchor.xml index 796bfaad5..e7db29e4a 100644 --- a/live/src/main/res/layout/view_ry_live_anchor.xml +++ b/live/src/main/res/layout/view_ry_live_anchor.xml @@ -36,7 +36,7 @@ @@ -44,7 +44,7 @@ android:id="@+id/btn_dr_pk_nub" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="剩餘次數:0" + android:text="@string/number_of_remaining_times" android:textColor="#ffe1e1e1" android:textSize="8sp" /> @@ -67,8 +67,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" - android:text="邀請 - 主播" + android:text="@string/invite_anchor" android:textColor="#ffffffff" android:textSize="10sp" /> @@ -87,8 +86,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" - android:text="結束 -PK" + android:text="@string/end_pk" android:textColor="#ffb1b1b1" android:textSize="10sp" /> diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no1.png b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no1.png new file mode 100644 index 000000000..03984ca3b Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no1.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no2.png b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no2.png new file mode 100644 index 000000000..3a0becb0f Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no2.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no3.png b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no3.png new file mode 100644 index 000000000..b9a148add Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no3.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no4.png b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no4.png new file mode 100644 index 000000000..a9879e4f9 Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/icon_livepk_no4.png differ diff --git a/live/src/main/res/mipmap-xxxhdpi/live_pk_time_bg.png b/live/src/main/res/mipmap-xxxhdpi/live_pk_time_bg.png new file mode 100644 index 000000000..b07adf791 Binary files /dev/null and b/live/src/main/res/mipmap-xxxhdpi/live_pk_time_bg.png differ