修复:

侧边栏问题
This commit is contained in:
18401019693 2022-08-26 16:37:12 +08:00
parent 49ef55bfee
commit b4a71e1282
9 changed files with 359 additions and 213 deletions

View File

@ -177,7 +177,7 @@ public class AppContext extends CommonAppContext {
msg.obj = content.getContent(); msg.obj = content.getContent();
if (SocketRyClient.mSocketHandler != null if (SocketRyClient.mSocketHandler != null
&& (TextUtils.equals("__system__", message.getTargetId()) && (TextUtils.equals("__system__", message.getTargetId())
|| (TextUtils.equals("g" + PortraitLiveManager.liveID, message.getTargetId())))) { || ("g" + PortraitLiveManager.liveID).contains(message.getTargetId()))) {
SocketRyClient.mSocketHandler.sendMessage(msg); SocketRyClient.mSocketHandler.sendMessage(msg);
} }
} }

View File

@ -97,7 +97,7 @@ public class DialogUitl {
} }
public static void showSimpleDialog(Context context, String content, SimpleCallback callback) { public static void showSimpleDialog(Context context, String content, SimpleCallback callback) {
showSimpleDialog(context, content, true, callback); showSimpleDialog(context, content, false, callback);
} }
public static void showSimpleDialog(Context context, String content, boolean cancelable, SimpleCallback callback) { public static void showSimpleDialog(Context context, String content, boolean cancelable, SimpleCallback callback) {
@ -114,6 +114,15 @@ public class DialogUitl {
.show(); .show();
} }
public static void showSimpleDialog(Context context, String title, String content, boolean cancelable, SimpleCallback3 callback) {
new Builder(context)
.setTitle(title)
.setContent(content)
.setCancelable(cancelable)
.setClickCallback3(callback)
.build()
.show();
}
public static void showSimpleInputDialog(Context context, String title, String hint, int inputType, int length, SimpleCallback callback) { public static void showSimpleInputDialog(Context context, String title, String hint, int inputType, int length, SimpleCallback callback) {
new Builder(context).setTitle(title) new Builder(context).setTitle(title)
@ -290,6 +299,7 @@ public class DialogUitl {
private int mInputType; private int mInputType;
private int mLength; private int mLength;
private SimpleCallback mClickCallback; private SimpleCallback mClickCallback;
private SimpleCallback3 mClickCallback3;
public Builder(Context context) { public Builder(Context context) {
mContext = context; mContext = context;
@ -350,6 +360,11 @@ public class DialogUitl {
return this; return this;
} }
public Builder setClickCallback3(SimpleCallback3 clickCallback) {
mClickCallback3 = clickCallback;
return this;
}
public Dialog build() { public Dialog build() {
final Dialog dialog = new Dialog(mContext, mBackgroundDimEnabled ? R.style.dialog : R.style.dialog2); final Dialog dialog = new Dialog(mContext, mBackgroundDimEnabled ? R.style.dialog : R.style.dialog2);
dialog.setContentView(mInput ? R.layout.dialog_input : R.layout.dialog_simple); dialog.setContentView(mInput ? R.layout.dialog_input : R.layout.dialog_simple);
@ -397,13 +412,25 @@ public class DialogUitl {
} }
} else { } else {
dialog.dismiss(); dialog.dismiss();
if (mClickCallback3 != null) {
mClickCallback3.onConfirmClick(dialog);
} }
}
} else { } else {
dialog.dismiss(); dialog.dismiss();
if (mClickCallback3 != null) {
mClickCallback3.onCancel();
} else {
if (mClickCallback instanceof SimpleCallback2) { if (mClickCallback instanceof SimpleCallback2) {
((SimpleCallback2) mClickCallback).onCancelClick(); ((SimpleCallback2) mClickCallback).onCancelClick();
} }
} }
}
} }
}; };
btnConfirm.setOnClickListener(listener); btnConfirm.setOnClickListener(listener);
@ -429,6 +456,12 @@ public class DialogUitl {
void onCancelClick(); void onCancelClick();
} }
public interface SimpleCallback3 {
void onConfirmClick(Dialog dialog);
void onCancel();
}
/** /**
* 城市选择 * 城市选择

View File

@ -75,6 +75,10 @@ public class VerticalViewPager extends ViewGroup {
private boolean mEnableScroll = true; private boolean mEnableScroll = true;
public boolean ismEnableScroll() {
return mEnableScroll;
}
/** /**
* Used to track what the expected number of items in the adapter should be. * Used to track what the expected number of items in the adapter should be.
* If the app changes this when we don't expect it, we'll throw a big obnoxious exception. * If the app changes this when we don't expect it, we'll throw a big obnoxious exception.

View File

@ -10,9 +10,9 @@ ext {
manifestPlaceholders = [ manifestPlaceholders = [
// //
// serverHost : "https://napi.yaoulive.com", serverHost : "https://napi.yaoulive.com",
// //
serverHost : "https://ceshi.yaoulive.com", // serverHost : "https://ceshi.yaoulive.com",
// //
txMapAppKey : "EOZBZ-ASLCU-4XPV3-BDCHZ-4E3Q7-H4BWB", txMapAppKey : "EOZBZ-ASLCU-4XPV3-BDCHZ-4E3Q7-H4BWB",

View File

@ -327,6 +327,8 @@ public abstract class LiveActivity extends AbsActivity implements SocketMessageL
} }
} }
@Override @Override
public void onBuyLiangName(LiveReceiveGiftBean bean) { public void onBuyLiangName(LiveReceiveGiftBean bean) {
if (mLiveRoomViewHolder != null) { if (mLiveRoomViewHolder != null) {

View File

@ -1,6 +1,5 @@
package com.yunbao.live.activity; package com.yunbao.live.activity;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
@ -62,8 +61,6 @@ import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil; import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveRoomCheckLivePresenter; import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;
import com.yunbao.live.socket.SocketSendBean;
import com.yunbao.live.utils.LiveImDeletUtil;
import com.yunbao.live.views.LiveRoomPlayViewHolder; import com.yunbao.live.views.LiveRoomPlayViewHolder;
import com.yunbao.live.views.PortraitLiveManager; import com.yunbao.live.views.PortraitLiveManager;
@ -73,15 +70,6 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import cn.rongcloud.rtc.api.RCRTCEngine;
import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback;
import cn.rongcloud.rtc.api.callback.IRCRTCSwitchRoleCallback;
import cn.rongcloud.rtc.base.RTCErrorCode;
import io.rong.imlib.IRongCallback;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.message.TextMessage;
import static com.yunbao.live.views.LivePlayRyViewHolder.Micing; import static com.yunbao.live.views.LivePlayRyViewHolder.Micing;
/** /**
@ -110,7 +98,7 @@ public class LiveAudienceActivity extends LiveActivity {
public static int fansNum; public static int fansNum;
public static ProcessResultUtil mProcessResultUtil; public static ProcessResultUtil mProcessResultUtil;
private LiveImDeletUtil liveImDeletUtil;
public static int isattention; public static int isattention;
private LiveBean mLiveBean; private LiveBean mLiveBean;
@ -139,7 +127,7 @@ public class LiveAudienceActivity extends LiveActivity {
Bus.getOn(this); Bus.getOn(this);
super.main(); super.main();
liveAudienceActivity = this; liveAudienceActivity = this;
liveImDeletUtil = new LiveImDeletUtil();
mProcessResultUtil = new ProcessResultUtil(this); mProcessResultUtil = new ProcessResultUtil(this);
Intent intent = getIntent(); Intent intent = getIntent();
mLiveSDK = intent.getIntExtra(Constants.LIVE_SDK, Constants.LIVE_SDK_KSY); mLiveSDK = intent.getIntExtra(Constants.LIVE_SDK, Constants.LIVE_SDK_KSY);
@ -149,11 +137,6 @@ public class LiveAudienceActivity extends LiveActivity {
mLiveBean = intent.getParcelableExtra(Constants.LIVE_BEAN); mLiveBean = intent.getParcelableExtra(Constants.LIVE_BEAN);
mLiveUid = mLiveBean.getUid(); mLiveUid = mLiveBean.getUid();
mStream = mLiveBean.getStream(); mStream = mLiveBean.getStream();
// if (getIntent().getIntExtra("isry", 0) == 1) {
// isRy = true;
// } else {
// isRy = false;
// }
setVolumeControlStream(AudioManager.STREAM_MUSIC); setVolumeControlStream(AudioManager.STREAM_MUSIC);
manager = new PortraitLiveManager(this, intent); manager = new PortraitLiveManager(this, intent);
initView(); initView();
@ -192,6 +175,17 @@ public class LiveAudienceActivity extends LiveActivity {
verticalViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { verticalViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
if (Micing == 1) {
manager.micIngTypeOne(mLiveBean, mLiveType, mLiveTypeVal);
verticalViewPager.setEnableScroll(false);
} else if (Micing == 2) {
verticalViewPager.setEnableScroll(false);
manager.micIngTypeTwo(mLiveBean, mLiveType, mLiveTypeVal);
} else {
verticalViewPager.setEnableScroll(true);
mCurrentItem = position; mCurrentItem = position;
Log.e(TAG, "mCurrentItem:" + mCurrentItem); Log.e(TAG, "mCurrentItem:" + mCurrentItem);
if (mCurrentItem == itemModelList.size() - 1) { if (mCurrentItem == itemModelList.size() - 1) {
@ -213,6 +207,9 @@ public class LiveAudienceActivity extends LiveActivity {
} }
} }
}
@Override @Override
public void onPageSelected(int position) { public void onPageSelected(int position) {
super.onPageSelected(position); super.onPageSelected(position);
@ -414,115 +411,15 @@ public class LiveAudienceActivity extends LiveActivity {
@Override @Override
public void onBackPressed() { public void onBackPressed() {
manager.onBackPressed();
if (Micing == 1) { if (Micing == 1) {
DialogUitl.showSimpleDialog(mContext, "您已申請,退出將取消語音連麥申請!", new DialogUitl.SimpleCallback() { manager.micIngTypeOne(mLiveBean, mLiveType, mLiveTypeVal);
@Override
public void onConfirmClick(Dialog dialog, String content) {
Micing = 0;
//用户申请联麦
final SocketSendBean msg = new SocketSendBean()
.param("_method_", Constants.LIAN_MAI)
.param("action", 7)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("avatar", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("uid", CommonAppConfig.getInstance().getUid());
msg.create();
String targetId = mLiveUid;
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
TextMessage messageContent = TextMessage.obtain(msg.mResult.toString());
io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(targetId, conversationType, messageContent);
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
@Override
public void onAttached(io.rong.imlib.model.Message message) {
}
@Override
public void onSuccess(io.rong.imlib.model.Message message) {
Log.e("ry", "发送成功");
liveImDeletUtil.deleteMessages(message.getTargetId(), message.getMessageId());
}
@Override
public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) {
Log.e("ry", "发送失敗" + errorCode.toString());
liveImDeletUtil.deleteMessages(message.getTargetId(), message.getMessageId());
}
});
end();
}
});
return;
} else if (Micing == 2) { } else if (Micing == 2) {
DialogUitl.showSimpleDialog(mContext, "連麥中,退出將斷開語音連麥!", new DialogUitl.SimpleCallback() { manager.micIngTypeTwo(mLiveBean, mLiveType, mLiveTypeVal);
@Override } else {
public void onConfirmClick(Dialog dialog, String content) { super.onBackPressed();
ToastUtil.show("下麥中,稍等.....");
RCRTCEngine.getInstance().getRoom().getLocalUser().switchToAudience(new IRCRTCSwitchRoleCallback() {
/**
* 当切换失败且SDK处于无法回退状态时回调该角色已经无法使用当前角色继续进行音视频
* SDK内部会退出房间并清理所有资源该用户只能重新加入房间才能继续音视频
*/
@Override
public void onKicked() {
} }
@Override
public void onSuccess() {
Log.e("ry", "下麦成功");
// 该用户切换为观众成功可以以观众身份进行音视频
//退出多人房间
HttpClient.getInstance().get("live.leaveDrLm", "live.leaveDrLm")
.params("roomid", LiveActivity.mLiveUid)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
Log.e("ry", code + "退出多人");
}
});
//退出rtc播放
RCRTCEngine.getInstance().leaveRoom(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "退出多人房间成功");
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
Micing = 0;
end();
}
});
}
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", errorCode + "退出多人房间失敗");
}
});
}
/**
* 当切换失败且不影响当前角色继续音视频时回调
* @param errorCode 失败错误码
*/
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", "下麦失败" + errorCode);
}
});
}
});
return;
}
end();
} }
public void end() { public void end() {
@ -635,11 +532,16 @@ public class LiveAudienceActivity extends LiveActivity {
fragment.show(getSupportFragmentManager(), "ChatChargeDialogFragment"); fragment.show(getSupportFragmentManager(), "ChatChargeDialogFragment");
} }
public void setEnableScroll(boolean enableScroll) {
verticalViewPager.setEnableScroll(enableScroll);
}
@Subscribe(threadMode = ThreadMode.MAIN) @Subscribe(threadMode = ThreadMode.MAIN)
public void onLiveRoomChangeEvent(LiveRoomChangeEvent e) { public void onLiveRoomChangeEvent(LiveRoomChangeEvent e) {
if (verticalViewPager.ismEnableScroll()) {
LiveBean liveBean = e.getLiveBean(); LiveBean liveBean = e.getLiveBean();
if (liveBean != null) { if (liveBean != null) {
LiveHttpUtil.cancel(LiveHttpConsts.CHECK_LIVE); LiveHttpUtil.cancel(LiveHttpConsts.CHECK_LIVE);
LiveHttpUtil.cancel(LiveHttpConsts.ENTER_ROOM); LiveHttpUtil.cancel(LiveHttpConsts.ENTER_ROOM);
LiveHttpUtil.cancel(LiveHttpConsts.ROOM_CHARGE); LiveHttpUtil.cancel(LiveHttpConsts.ROOM_CHARGE);
@ -653,6 +555,11 @@ public class LiveAudienceActivity extends LiveActivity {
manager.onAdd(liveBean, mLiveType, mLiveTypeVal, mLiveSDK); manager.onAdd(liveBean, mLiveType, mLiveTypeVal, mLiveSDK);
} }
} else {
verticalViewPager.setEnableScroll(true);
}
} }
@Override @Override
@ -673,6 +580,15 @@ public class LiveAudienceActivity extends LiveActivity {
IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo(); IMLoginModel userInfo = IMLoginManager.get(mContext).getUserInfo();
switch (event.getType()) { switch (event.getType()) {
case SIDEBAR: case SIDEBAR:
int userIndex = -1;
for (int i = 0; i < list.size(); i++) {
if (TextUtils.equals(list.get(i).getUid(), PortraitLiveManager.liveID)) {
userIndex = i;
}
}
if (userIndex != -1) {
list.remove(userIndex);
}
//从右边打开侧边栏 //从右边打开侧边栏
SidebarLiveAudience sidebarLiveAudience = new SidebarLiveAudience(); SidebarLiveAudience sidebarLiveAudience = new SidebarLiveAudience();
bundle.putString("Avatar", mLiveBean.getAvatar()); bundle.putString("Avatar", mLiveBean.getAvatar());
@ -749,6 +665,11 @@ public class LiveAudienceActivity extends LiveActivity {
ZhuangBanActivity.forward(mContext, nobleUrl, false); ZhuangBanActivity.forward(mContext, nobleUrl, false);
break; break;
case LIAN_MAI: case LIAN_MAI:
if (event.getMicIng() == 1) {
manager.micIngTypeOne(event.getBean(), event.getLiveType(), event.getLiveTypeVal());
} else if (event.getMicIng() == 2) {
manager.micIngTypeTwo(event.getBean(), event.getLiveType(), event.getLiveTypeVal());
} else {
//获取房间连麦状态 //获取房间连麦状态
HttpClient.getInstance().get("live.getDrLm", "live.getDrLm") HttpClient.getInstance().get("live.getDrLm", "live.getDrLm")
.params("uid", mLiveUid, true) .params("uid", mLiveUid, true)
@ -769,6 +690,7 @@ public class LiveAudienceActivity extends LiveActivity {
} }
} }
}); });
}
break; break;
case EFFECTS_SETTINGS: case EFFECTS_SETTINGS:
EffectsSettingsDialog effectsSettingsDialog = new EffectsSettingsDialog(); EffectsSettingsDialog effectsSettingsDialog = new EffectsSettingsDialog();
@ -867,15 +789,7 @@ public class LiveAudienceActivity extends LiveActivity {
list.clear(); list.clear();
slideInfoModels.clear(); slideInfoModels.clear();
List<AnchorRecommendItemModel> models = anchorRecommendModel.getList(); List<AnchorRecommendItemModel> models = anchorRecommendModel.getList();
int userIndex = -1;
for (int i = 0; i < list.size(); i++) {
if (TextUtils.equals(list.get(i).getUid(), PortraitLiveManager.liveID)) {
userIndex = i;
}
}
if (userIndex != -1) {
models.remove(userIndex);
}
models.add(0, new AnchorRecommendItemModel()); models.add(0, new AnchorRecommendItemModel());
list.addAll(models); list.addAll(models);
slideInfoModels = anchorRecommendModel.getSlide(); slideInfoModels = anchorRecommendModel.getSlide();

View File

@ -34,6 +34,7 @@ import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.event.LiveRoomChangeEvent; import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpUtil; import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveRoomCheckLivePresenter; import com.yunbao.live.presenter.LiveRoomCheckLivePresenter;
import com.yunbao.live.views.LivePlayRyViewHolder;
import com.yunbao.live.views.PortraitLiveManager; import com.yunbao.live.views.PortraitLiveManager;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
@ -202,13 +203,25 @@ public class SidebarLiveAudience extends AbsDialogFragment {
if (liveBean1 == null) { if (liveBean1 == null) {
return; return;
} }
if (LivePlayRyViewHolder.Micing == 1) {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.LIAN_MAI)
.setMicIng(1)
.setBean(liveBean).setLiveType(liveType).setLiveTypeVal(liveTypeVal));
} else if (LivePlayRyViewHolder.Micing == 2) {
Bus.get().post(new LiveAudienceEvent()
.setType(LiveAudienceEvent.LiveAudienceType.LIAN_MAI)
.setMicIng(2)
.setBean(liveBean).setLiveType(liveType).setLiveTypeVal(liveTypeVal));
} else {
EventBus.getDefault().post(new LiveRoomChangeEvent(liveBean, liveType, liveTypeVal)); EventBus.getDefault().post(new LiveRoomChangeEvent(liveBean, liveType, liveTypeVal));
}
}); });
mCheckLivePresenter.checkLive(liveBean); mCheckLivePresenter.checkLive(liveBean);
} else { } else {
RouteUtil.forwardUserHome(getActivity(), liveId, 0); RouteUtil.forwardUserHome(getActivity(), liveId, 0);
getActivity().finish();
} }
} }
}); });

View File

@ -3,6 +3,7 @@ package com.yunbao.live.event;
import com.yunbao.common.bean.ActiveModel; import com.yunbao.common.bean.ActiveModel;
import com.yunbao.common.bean.AnchorRecommendItemModel; import com.yunbao.common.bean.AnchorRecommendItemModel;
import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.BaseModel;
import com.yunbao.live.bean.LiveBean;
import com.yunbao.live.bean.OpenParametersModel; import com.yunbao.live.bean.OpenParametersModel;
public class LiveAudienceEvent extends BaseModel { public class LiveAudienceEvent extends BaseModel {
@ -11,6 +12,46 @@ public class LiveAudienceEvent extends BaseModel {
private String avatar = ""; private String avatar = "";
private OpenParametersModel parametersModel = new OpenParametersModel(); private OpenParametersModel parametersModel = new OpenParametersModel();
private AnchorRecommendItemModel anchorRecommendItemModel = new AnchorRecommendItemModel(); private AnchorRecommendItemModel anchorRecommendItemModel = new AnchorRecommendItemModel();
private int micIng = 0;//连麦状态
private LiveBean bean;
private int liveType;
private int liveTypeVal;
public int getLiveType() {
return liveType;
}
public LiveAudienceEvent setLiveType(int liveType) {
this.liveType = liveType;
return this;
}
public int getLiveTypeVal() {
return liveTypeVal;
}
public LiveAudienceEvent setLiveTypeVal(int liveTypeVal) {
this.liveTypeVal = liveTypeVal;
return this;
}
public LiveBean getBean() {
return bean;
}
public LiveAudienceEvent setBean(LiveBean bean) {
this.bean = bean;
return this;
}
public int getMicIng() {
return micIng;
}
public LiveAudienceEvent setMicIng(int micIng) {
this.micIng = micIng;
return this;
}
public AnchorRecommendItemModel getAnchorRecommendItemModel() { public AnchorRecommendItemModel getAnchorRecommendItemModel() {
return anchorRecommendItemModel; return anchorRecommendItemModel;

View File

@ -5,6 +5,8 @@ import android.app.Dialog;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.os.CountDownTimer; import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Looper;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -35,6 +37,7 @@ import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.CommonHttpConsts; import com.yunbao.common.http.CommonHttpConsts;
import com.yunbao.common.http.CommonHttpUtil; import com.yunbao.common.http.CommonHttpUtil;
import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.HttpClient;
import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.Bus;
import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DialogUitl;
@ -63,27 +66,38 @@ import com.yunbao.live.dialog.BlowkissDialog;
import com.yunbao.live.dialog.NewUserDialog; import com.yunbao.live.dialog.NewUserDialog;
import com.yunbao.live.event.LinkMicTxAccEvent; import com.yunbao.live.event.LinkMicTxAccEvent;
import com.yunbao.live.event.LiveAudienceEvent; import com.yunbao.live.event.LiveAudienceEvent;
import com.yunbao.live.event.LiveRoomChangeEvent;
import com.yunbao.live.http.LiveHttpConsts; import com.yunbao.live.http.LiveHttpConsts;
import com.yunbao.live.http.LiveHttpUtil; import com.yunbao.live.http.LiveHttpUtil;
import com.yunbao.live.presenter.LiveLinkMicAnchorPresenter; import com.yunbao.live.presenter.LiveLinkMicAnchorPresenter;
import com.yunbao.live.presenter.LiveLinkMicPkPresenter;
import com.yunbao.live.presenter.LiveLinkMicPresenter; import com.yunbao.live.presenter.LiveLinkMicPresenter;
import com.yunbao.live.presenter.LiveRyLinkMicPkPresenter; import com.yunbao.live.presenter.LiveRyLinkMicPkPresenter;
import com.yunbao.live.socket.SocketClient; import com.yunbao.live.socket.SocketClient;
import com.yunbao.live.socket.SocketMessageListener; import com.yunbao.live.socket.SocketMessageListener;
import com.yunbao.live.socket.SocketRyChatUtil; import com.yunbao.live.socket.SocketRyChatUtil;
import com.yunbao.live.socket.SocketRyClient; import com.yunbao.live.socket.SocketRyClient;
import com.yunbao.live.socket.SocketSendBean;
import com.yunbao.live.utils.LiveImDeletUtil;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import java.util.List; import java.util.List;
import cn.rongcloud.rtc.api.RCRTCEngine;
import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback;
import cn.rongcloud.rtc.api.callback.IRCRTCSwitchRoleCallback;
import cn.rongcloud.rtc.base.RTCErrorCode;
import io.rong.imlib.IRongCallback;
import io.rong.imlib.IRongCoreCallback; import io.rong.imlib.IRongCoreCallback;
import io.rong.imlib.IRongCoreEnum; import io.rong.imlib.IRongCoreEnum;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.chatroom.base.RongChatRoomClient; import io.rong.imlib.chatroom.base.RongChatRoomClient;
import io.rong.imlib.model.Conversation;
import io.rong.message.TextMessage;
import static com.yunbao.common.CommonAppContext.logger; import static com.yunbao.common.CommonAppContext.logger;
import static com.yunbao.common.CommonAppContext.mFirebaseAnalytics; import static com.yunbao.common.CommonAppContext.mFirebaseAnalytics;
import static com.yunbao.live.views.LivePlayRyViewHolder.Micing;
import static com.yunbao.live.views.LiveRoomViewHolder.isStayRoomfive; import static com.yunbao.live.views.LiveRoomViewHolder.isStayRoomfive;
/** /**
@ -123,8 +137,6 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
//主播与主播连麦逻辑 //主播与主播连麦逻辑
private LiveLinkMicAnchorPresenter mLiveLinkMicAnchorPresenter; private LiveLinkMicAnchorPresenter mLiveLinkMicAnchorPresenter;
//主播与主播PK逻辑 //主播与主播PK逻辑
private LiveLinkMicPkPresenter mLiveLinkMicPkPresenter;
//主播与主播PK逻辑
private LiveRyLinkMicPkPresenter mLiveRyLinkMicPkPresenter; private LiveRyLinkMicPkPresenter mLiveRyLinkMicPkPresenter;
//直播间的类型 普通 密码 门票 计时等 //直播间的类型 普通 密码 门票 计时等
private int mLiveType; private int mLiveType;
@ -150,10 +162,13 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
private boolean mCoinNotEnough;//余额不足 private boolean mCoinNotEnough;//余额不足
private boolean mFirstConnectSocket;//是否是第一次连接成功socket private boolean mFirstConnectSocket;//是否是第一次连接成功socket
private int liveBg; private int liveBg;
private LiveImDeletUtil liveImDeletUtil;
public PortraitLiveManager(Activity context, Intent intent) { public PortraitLiveManager(Activity context, Intent intent) {
this.mContext = context; this.mContext = context;
this.mIntent = intent; this.mIntent = intent;
liveImDeletUtil = new LiveImDeletUtil();
ininView(); ininView();
} }
@ -203,8 +218,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
.setmLiveType(mLiveType) .setmLiveType(mLiveType)
.setmLiveTypeVal(mLiveTypeVal))); .setmLiveTypeVal(mLiveTypeVal)));
mLivePlayViewHolder = new LivePlayKsyViewHolder(mContext, playContainer, mIntent.getIntExtra("landscape", 0)); mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, mIntent.getIntExtra("landscape", 0));
mLivePlayViewHolder.addToParent(); mLivePlayViewHolder.addToParent();
mLivePlayViewHolder.subscribeActivityLifeCycle(); mLivePlayViewHolder.subscribeActivityLifeCycle();
mLiveRoomViewHolder = new LiveRoomViewHolder(false, 1, mContext, mContainer, mSecondPage.findViewById(R.id.gift_gif), mSecondPage.findViewById(R.id.gift_svga), mContainerWrap, mContext.getWindowManager()); mLiveRoomViewHolder = new LiveRoomViewHolder(false, 1, mContext, mContainer, mSecondPage.findViewById(R.id.gift_gif), mSecondPage.findViewById(R.id.gift_svga), mContainerWrap, mContext.getWindowManager());
@ -307,9 +321,6 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (mLiveLinkMicAnchorPresenter != null) { if (mLiveLinkMicAnchorPresenter != null) {
mLiveLinkMicAnchorPresenter.clearData(); mLiveLinkMicAnchorPresenter.clearData();
} }
if (mLiveLinkMicPkPresenter != null) {
mLiveLinkMicPkPresenter.clearData();
}
if (mLiveRyLinkMicPkPresenter != null) { if (mLiveRyLinkMicPkPresenter != null) {
mLiveRyLinkMicPkPresenter.clearData(); mLiveRyLinkMicPkPresenter.clearData();
} }
@ -366,9 +377,146 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
} }
/**
* 申请连麦但是主播还未同意的状态
*/
public void micIngTypeOne(LiveBean bean, int liveType, int liveTypeVal) {
DialogUitl.showSimpleDialog(mContext, null, "您已申請,退出將取消語音連麥申請!", false, new DialogUitl.SimpleCallback3() {
@Override
public void onConfirmClick(Dialog dialog) {
Micing = 0;
//用户申请联麦
final SocketSendBean msg = new SocketSendBean()
.param("_method_", Constants.LIAN_MAI)
.param("action", 7)
.param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName())
.param("avatar", CommonAppConfig.getInstance().getUserBean().getAvatar())
.param("uid", CommonAppConfig.getInstance().getUid());
msg.create();
Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE;
TextMessage messageContent = TextMessage.obtain(msg.mResult.toString());
io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(liveID, conversationType, messageContent);
RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() {
@Override
public void onAttached(io.rong.imlib.model.Message message) {
}
@Override
public void onSuccess(io.rong.imlib.model.Message message) {
Log.e("ry", "发送成功");
liveImDeletUtil.deleteMessages(message.getTargetId(), message.getMessageId());
if (isBackPressed) {
((LiveAudienceActivity) mContext).onBackPressed();
} else {
EventBus.getDefault().post(new LiveRoomChangeEvent(bean, liveType, liveTypeVal));
}
}
@Override
public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) {
Log.e("ry", "发送失敗" + errorCode.toString());
liveImDeletUtil.deleteMessages(message.getTargetId(), message.getMessageId());
}
});
}
@Override
public void onCancel() {
((LiveAudienceActivity) mContext).setEnableScroll(true);
}
});
}
/**
* 正处于连麦中
*/
public void micIngTypeTwo(LiveBean bean, int liveType, int liveTypeVal) {
DialogUitl.showSimpleDialog(mContext, null, "連麥中,退出將斷開語音連麥!", false, new DialogUitl.SimpleCallback3() {
@Override
public void onConfirmClick(Dialog dialog) {
ToastUtil.show("下麥中,稍等.....");
RCRTCEngine.getInstance().getRoom().getLocalUser().switchToAudience(new IRCRTCSwitchRoleCallback() {
/**
* 当切换失败且SDK处于无法回退状态时回调该角色已经无法使用当前角色继续进行音视频
* SDK内部会退出房间并清理所有资源该用户只能重新加入房间才能继续音视频
*/
@Override
public void onKicked() {
}
@Override
public void onSuccess() {
Log.e("ry", "下麦成功");
// 该用户切换为观众成功可以以观众身份进行音视频
//退出多人房间
HttpClient.getInstance().get("live.leaveDrLm", "live.leaveDrLm")
.params("roomid", liveID)
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
Log.e("ry", code + "退出多人");
}
});
//退出rtc播放
RCRTCEngine.getInstance().leaveRoom(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "退出多人房间成功");
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
Micing = 0;
}
});
if (isBackPressed) {
((LiveAudienceActivity) mContext).onBackPressed();
} else {
EventBus.getDefault().post(new LiveRoomChangeEvent(bean, liveType, liveTypeVal));
}
}
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", errorCode + "退出多人房间失敗");
}
});
}
/**
* 当切换失败且不影响当前角色继续音视频时回调
* @param errorCode 失败错误码
*/
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", "下麦失败" + errorCode);
}
});
}
@Override
public void onCancel() {
((LiveAudienceActivity) mContext).setEnableScroll(true);
}
});
}
//是否处于返回键
private boolean isBackPressed = false;
@Override @Override
public void onBackPressed() { public void onBackPressed() {
isBackPressed = true;
} }
@Override @Override
@ -968,23 +1116,14 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
if (mLiveRoomViewHolder != null) { if (mLiveRoomViewHolder != null) {
mLiveRoomViewHolder.setOtherInfo(pkInfo.getString("pkuid"), pkInfo.getString("pkuimg"), pkInfo.getString("pkuname")); mLiveRoomViewHolder.setOtherInfo(pkInfo.getString("pkuid"), pkInfo.getString("pkuimg"), pkInfo.getString("pkuname"));
} }
if (mLiveLinkMicPkPresenter != null) {
mLiveLinkMicPkPresenter.onEnterRoomPkStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("pk_time"), livePKUserListBean);
} else {
mLiveRyLinkMicPkPresenter.onEnterRoomPkStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("pk_time"), livePKUserListBean); mLiveRyLinkMicPkPresenter.onEnterRoomPkStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("pk_time"), livePKUserListBean);
}
} else if (!pkInfo.getString("end_pk_time").equals("0")) { } else if (!pkInfo.getString("end_pk_time").equals("0")) {
LivePlayRyViewHolder.setViewUP(3); LivePlayRyViewHolder.setViewUP(3);
//pk排名数据 //pk排名数据
LivePKUserListBean livePKUserListBean = JSON.parseObject(pkInfo.getString("pk_top_users"), LivePKUserListBean.class); LivePKUserListBean livePKUserListBean = JSON.parseObject(pkInfo.getString("pk_top_users"), LivePKUserListBean.class);
if (mLiveLinkMicPkPresenter != null) {
mLiveLinkMicPkPresenter.onEnterRoomCFStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("end_pk_time"), livePKUserListBean);
} else {
mLiveRyLinkMicPkPresenter.onEnterRoomCFStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("end_pk_time"), livePKUserListBean); mLiveRyLinkMicPkPresenter.onEnterRoomCFStart(pkUid, pkInfo.getLongValue("pk_gift_liveuid"), pkInfo.getLongValue("pk_gift_pkuid"), pkInfo.getIntValue("end_pk_time"), livePKUserListBean);
}
} }
//多人PK //多人PK
} else if (pkInfo != null && pkInfo.getIntValue("drpk_status") == 1) { } else if (pkInfo != null && pkInfo.getIntValue("drpk_status") == 1) {