diff --git a/common/src/main/java/com/yunbao/common/views/AbsViewHolder.java b/common/src/main/java/com/yunbao/common/views/AbsViewHolder.java index 30a155779..fef359955 100644 --- a/common/src/main/java/com/yunbao/common/views/AbsViewHolder.java +++ b/common/src/main/java/com/yunbao/common/views/AbsViewHolder.java @@ -65,6 +65,10 @@ public abstract class AbsViewHolder implements LifeCycleListener { } } + public boolean isShow(){ + return mParentView.indexOfChild(mContentView)>-1; + } + public void removeFromParent() { ViewParent parent = mContentView.getParent(); if (parent != null) { diff --git a/gradle.properties b/gradle.properties index 38b11a081..f8c588910 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ # org.gradle.parallel=true #Thu Feb 04 00:05:45 CST 2021 android.injected.testOnly=false -org.gradle.daemon=true +org.gradle.daemon=true org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 org.gradle.parallel=true org.gradle.configureondemand=true @@ -25,4 +25,6 @@ systemProp.http.proxyHost=127.0.0.1 systemProp.https.proxyHost=127.0.0.1 systemProp.https.proxyPort=10809 systemProp.http.proxyPort=10809 + + #android.enableR8.fullMode=true \ No newline at end of file diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/LiveFloatView.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/LiveFloatView.java index 7a336a381..26e22e858 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/LiveFloatView.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/LiveFloatView.java @@ -94,7 +94,7 @@ public class LiveFloatView implements Function1 { swAuManager.initRtcEngine( mContext); swAuManager.setupRemoteVideo(Integer.parseInt(mLiveBean.getUid())); //进入主播房间 - swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, SWAuManager.getChannelName(mLiveBean.getUid())); + swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken,mLiveBean.getUid(), SWAuManager.getChannelName(mLiveBean.getUid())); }else{ videoView = magnetView.findViewById(R.id.video_view); mPlayer = new TXLivePlayer(mContext); @@ -145,7 +145,7 @@ public class LiveFloatView implements Function1 { }); if(mLiveSDK == Constants.LIVE_SDK_SW){ ViewClicksAntiShake.clicksAntiShake(videoFrameLayout, () -> { - mPlayer.stopPlay(true); + SWAuManager.get().exitChannelAll(); APPEasyFloat.getInstance().dismiss(mContext); new Handler().post(liveCheck); }); @@ -166,8 +166,13 @@ public class LiveFloatView implements Function1 { @Override public void dismiss() { - if (mPlayer != null) - mPlayer.stopPlay(true); + if(mLiveSDK == Constants.LIVE_SDK_SW){ + SWAuManager.get().exitChannelAll(); + }else{ + if (mPlayer != null) + mPlayer.stopPlay(true); + } + } }) .show(mContext); @@ -192,7 +197,7 @@ public class LiveFloatView implements Function1 { public LiveFloatView cacheLiveData(LiveBean mLiveBean, int mLiveType, int mLiveSDK, int mLiveTypeVal) { this.mLiveBean = mLiveBean; this.mLiveType = mLiveType; - this.mLiveSDK = Constants.LIVE_SDK_SW; + this.mLiveSDK = mLiveSDK; this.mLiveTypeVal = mLiveTypeVal; return instance; } @@ -249,7 +254,7 @@ public class LiveFloatView implements Function1 { swAuManager.initRtcEngine( mContext); swAuManager.setupRemoteVideo(Integer.parseInt(mLiveBean.getUid())); //进入主播房间 - swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, SWAuManager.getChannelName(mLiveBean.getUid())); + swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, mLiveBean.getUid(),SWAuManager.getChannelName(mLiveBean.getUid())); }else{ TXCloudVideoView videoView = view.findViewById(R.id.video_view); mPlayer = new TXLivePlayer(mContext); diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java index 26ceb75c6..63ca6e76a 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWAuManager.java @@ -2,15 +2,24 @@ package io.agora.beautyapi.faceunity.agora; import android.app.Activity; import android.content.Context; +import android.util.Log; import android.view.SurfaceView; import android.widget.FrameLayout; import com.yunbao.common.CommonAppConfig; import com.yunbao.common.CommonAppContext; +import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.UserBean; +import com.yunbao.common.http.API; +import com.yunbao.common.http.ResponseModel; +import com.yunbao.common.manager.MicUserManager; +import com.yunbao.common.manager.MicedUserManager; import com.yunbao.common.manager.base.BaseCacheManager; +import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.L; import com.yunbao.common.utils.StringUtil; +import com.yunbao.common.utils.ToastUtil; import io.agora.rtc2.ChannelMediaOptions; import io.agora.rtc2.Constants; @@ -19,6 +28,15 @@ import io.agora.rtc2.RtcConnection; import io.agora.rtc2.RtcEngineConfig; import io.agora.rtc2.RtcEngineEx; import io.agora.rtc2.video.VideoCanvas; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; +import io.rong.imkit.IMCenter; +import io.rong.imlib.IRongCallback; +import io.rong.imlib.RongIMClient; +import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Message; +import io.rong.message.TextMessage; /** * 声网主播管理类 @@ -37,6 +55,14 @@ public class SWAuManager extends BaseCacheManager { private FrameLayout pkContainer3; //pk主播视图3 private FrameLayout linkUserContainer;//连麦用户视图 + private int liveMicUid; + + private SwListener swListener; + + public void setSwListener(SwListener swListener) { + this.swListener = swListener; + } + public SWAuManager(Context context) { super(context); } @@ -57,13 +83,13 @@ public class SWAuManager extends BaseCacheManager { @Override public void onJoinChannelSuccess(String channel, int uid, int elapsed) { super.onJoinChannelSuccess(channel, uid, elapsed); - L.eSw("加入房间成功 channel"+channel+" uid"+uid); + L.eSw("加入房间成功 channel" + channel + " uid" + uid); } @Override public void onUserJoined(int uid, int elapsed) { super.onUserJoined(uid, elapsed); - L.eSw("用户加入房间成功"+uid); + L.eSw("用户加入房间成功" + uid); } }; @@ -84,8 +110,6 @@ public class SWAuManager extends BaseCacheManager { throw new RuntimeException("Check the error."); } mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); // 直播模式,引擎級別 - // 启用视频模块 - mRtcEngine.enableVideo(); // 开启本地预览 //mRtcEngine.startPreview(); } @@ -112,19 +136,20 @@ public class SWAuManager extends BaseCacheManager { /** * 创建语音房 + * * @param token * @param channelName * @param uid */ - public void joinAudioRoom(String channelName,String token,int uid){ - L.eSw("加入房间"+channelName+" uid"+uid); + public void joinAudioRoom(String channelName, String token, int uid) { + L.eSw("加入房间" + channelName + " uid" + uid); + // 直播场景下,设置频道场景为 BROADCASTING (直播场景) + mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_LIVE_BROADCASTING); // 创建 ChannelMediaOptions 对象,并进行配置 ChannelMediaOptions options = new ChannelMediaOptions(); // 根据场景将用户角色设置为 AUDIENCE (观众) options.clientRoleType = Constants.CLIENT_ROLE_AUDIENCE; - // 直播场景下,设置频道场景为 BROADCASTING (直播场景) - options.audienceLatencyLevel = Constants.CHANNEL_PROFILE_LIVE_BROADCASTING; // 觀眾走極速直播 - options.autoSubscribeVideo = false; + mRtcEngine.disableVideo(); options.autoSubscribeAudio = true; mRtcEngine.joinChannel(token, channelName, uid, options); } @@ -148,7 +173,8 @@ public class SWAuManager extends BaseCacheManager { /** * 加入房间 */ - public void joinRoom(String strUid, String token, String channelName) { + public void joinRoom(String strUid, String token, String liveUid, String channelName) { + liveMicUid = Integer.parseInt(liveUid); int uid; if (StringUtil.isEmpty(strUid)) { uid = 0; @@ -159,6 +185,13 @@ public class SWAuManager extends BaseCacheManager { SurfaceView surfaceView = new SurfaceView(mContext); audienceContainer.addView(surfaceView); + // 启用视频模块 + mRtcEngine.enableVideo(); + + //走媒体音量,和音质有关 + mRtcEngine.setAudioProfile(Constants.AUDIO_PROFILE_MUSIC_HIGH_QUALITY); + mRtcEngine.setAudioScenario(Constants.AUDIO_SCENARIO_GAME_STREAMING); + // 创建 ChannelMediaOptions 对象,并进行配置 ChannelMediaOptions options = new ChannelMediaOptions(); // 根据场景将用户角色设置为 AUDIENCE (观众) @@ -229,10 +262,11 @@ public class SWAuManager extends BaseCacheManager { mRtcEngine.updateChannelMediaOptions(options); } - public void setMicAudio(int toUid,boolean isEn) { - L.eSw("setMicAudio:toUid" +toUid+"isEn "+ isEn); - mRtcEngine.muteRemoteAudioStream(toUid,isEn); + public void setMicAudio(int toUid, boolean isEn) { + L.eSw("setMicAudio:toUid" + toUid + "isEn " + isEn); + mRtcEngine.muteRemoteAudioStream(toUid, isEn); } + /** * PK-加入对方主播直播间 * @@ -310,7 +344,7 @@ public class SWAuManager extends BaseCacheManager { */ public void exitChannelAll() { L.eSw("exitChannelAll exitChannelAll exitChannelAll"); - if(mRtcEngine!=null){ + if (mRtcEngine != null) { mRtcEngine.leaveChannel(); } } @@ -336,6 +370,17 @@ public class SWAuManager extends BaseCacheManager { } }); } + + @Override + public void onUserOffline(int uid, int reason) { + super.onUserOffline(uid, reason); + L.eSw("onUserOffline: uid " + uid + " reason" + reason); + if (liveMicUid == uid) { + if (swListener != null) { + swListener.onUserOffline(liveMicUid); + } + } + } }; //设置对方主播视图 @@ -367,4 +412,7 @@ public class SWAuManager extends BaseCacheManager { this.linkUserContainer = linkUserContainer; } + public interface SwListener { + void onUserOffline(int liveUid); + } } diff --git a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java index 3bf15d9d8..2b7934d3b 100644 --- a/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java +++ b/lib_faceunity/src/main/java/io/agora/beautyapi/faceunity/agora/SWManager.java @@ -117,7 +117,7 @@ public class SWManager extends BaseCacheManager { cfg.dimensions = VideoEncoderConfiguration.VD_1920x1080; break; } - cfg.frameRate = 24; + cfg.frameRate = 20; cfg.bitrate = 0; cfg.mirrorMode = VideoEncoderConfiguration.MIRROR_MODE_TYPE.MIRROR_MODE_ENABLED; //镜像 mRtcEngine.setVideoEncoderConfiguration(cfg); @@ -148,7 +148,10 @@ public class SWManager extends BaseCacheManager { /** * 设置清晰度 - * + * 单人直播:720x1280 + * 2人连麦PK:360x640 + * 3人连麦PK:左侧主播 360x640,右侧两个主播 360x320 + * 4人连麦PK:360X320 * @param selectClarity */ public void setDimensions(int selectClarity) { @@ -221,6 +224,10 @@ public class SWManager extends BaseCacheManager { ChannelMediaOptions options = new ChannelMediaOptions(); // 设置角色 BROADCASTER (主播) 或 AUDIENCE (观众) options.clientRoleType = Constants.CLIENT_ROLE_BROADCASTER; + + mRtcEngine.setAudioProfile(Constants.AUDIO_PROFILE_MUSIC_HIGH_QUALITY); + mRtcEngine.setAudioScenario(Constants.AUDIO_SCENARIO_GAME_STREAMING); + // 加入频道 mRtcEngine.joinChannel(token, channelName, uid, options); } @@ -297,6 +304,12 @@ public class SWManager extends BaseCacheManager { super.onError(err); L.eSw("onError:" + err); } + + @Override + public void onVideoSizeChanged(Constants.VideoSourceType source, int uid, int width, int height, int rotation) { + super.onVideoSizeChanged(source, uid, width, height, rotation); + L.eSw("uid:"+uid+"\nwidth:"+width+"\nheight:"+height); + } }); } 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 250c1ffbe..75e1bbd4b 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAnchorActivity.java @@ -941,7 +941,7 @@ public class LiveAnchorActivity extends LiveActivity implements LiveFunctionClic } }); } else { - ToastUtil.show("主播正在PK,稍後再試"); + ToastUtil.show(mContext.getString(R.string.pking_over)); } } } 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 5ab28a083..c17dc9e25 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveAudienceActivity.java @@ -366,8 +366,6 @@ public class LiveAudienceActivity extends LiveActivity { loadData(viewGroup, mCurrentItem); } } - - }); getDrawer(); @@ -412,7 +410,9 @@ public class LiveAudienceActivity extends LiveActivity { } else { new LiveRoomCheckLivePresenter(mContext, data.getUid(), data.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() { @Override - public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk, boolean isSw) { + public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk, boolean isSw1) { + L.eSw("onLiveRoomChanged:"+isSw1); + isSw = isSw1; liveIndex = false; try { mLiveSDK = Integer.parseInt(liveSdk); @@ -915,10 +915,11 @@ public class LiveAudienceActivity extends LiveActivity { LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class); new LiveRoomCheckLivePresenter(mContext, liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() { @Override - public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk, boolean isSw) { + public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk, boolean isSw1) { if (liveBean == null) { return; } + isSw = isSw1; if (MicStatusManager.getInstance().isMic(liveUid)) { MicStatusManager.getInstance().showDownMicDialog(mContext); return; 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 77684997f..2a8a7fc6c 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveRyAnchorActivity.java @@ -1237,8 +1237,6 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl JSONObject obj = JSON.parseObject(info[0]); if (obj != null) { if (obj.getString("ispk").equals("0")) { - - IMRTCManager.getInstance().requestJoinOtherRoom(pkUid, true, extra, new IRCRTCResultCallback() { @Override public void onSuccess() { @@ -1270,7 +1268,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl }); } else { - ToastUtil.show("主播正在PK,稍後再試"); + ToastUtil.show(mContext.getString(R.string.pking_over)); if (RandomPkManager.getInstance().isRandomModel()) { RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_REFUSE); } @@ -1345,7 +1343,7 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } }); } else { - ToastUtil.show("主播正在PK,稍後再試"); + ToastUtil.show(mContext.getString(R.string.pking_over)); } } } @@ -1648,7 +1646,10 @@ public class LiveRyAnchorActivity extends LiveActivity implements LiveFunctionCl } if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.seisShowGif(true); - mLiveRoomViewHolder.endDRGif(); + if(isDRPK==1){ + mLiveRoomViewHolder.endDRGif(); + } + } // if (mLiveRoomViewHolder != null) { // mLiveRoomViewHolder.hotAddVisibility(false); diff --git a/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java b/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java index c3e5a1265..25fe644df 100644 --- a/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java +++ b/live/src/main/java/com/yunbao/live/activity/LiveSwAnchorActivity.java @@ -1262,7 +1262,7 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl } }); } else { - ToastUtil.show("主播正在PK,稍後再試"); + ToastUtil.show(mContext.getString(R.string.pking_over)); if (RandomPkManager.getInstance().isRandomModel()) { RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_REFUSE); } @@ -1341,7 +1341,7 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl } }); } else { - ToastUtil.show("主播正在PK,稍後再試"); + ToastUtil.show(mContext.getString(R.string.pking_over)); } } } @@ -1645,7 +1645,9 @@ public class LiveSwAnchorActivity extends LiveActivity implements LiveFunctionCl } if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.seisShowGif(true); - mLiveRoomViewHolder.endDRGif(); + if(isDRPK==1){ + mLiveRoomViewHolder.endDRGif(); + } } // if (mLiveRoomViewHolder != null) { // mLiveRoomViewHolder.hotAddVisibility(false); diff --git a/live/src/main/java/com/yunbao/live/adapter/AnchorUserMicInfoAdapter.java b/live/src/main/java/com/yunbao/live/adapter/AnchorUserMicInfoAdapter.java index 923055085..7304344a7 100644 --- a/live/src/main/java/com/yunbao/live/adapter/AnchorUserMicInfoAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/AnchorUserMicInfoAdapter.java @@ -21,6 +21,7 @@ import com.yunbao.common.CommonAppConfig; import com.yunbao.common.Constants; import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.bean.BaseModel; +import com.yunbao.common.bean.MsgSwitchFollowlModel; import com.yunbao.common.bean.UserBean; import com.yunbao.common.custom.CommonRefreshView; import com.yunbao.common.dialog.AbsDialogFragment; @@ -34,6 +35,7 @@ import com.yunbao.common.utils.CommonIconUtil; import com.yunbao.common.utils.SVGAViewUtils; import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.WordUtil; +import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.live.R; import com.yunbao.live.activity.LiveActivity; import com.yunbao.live.socket.SocketSendBean; @@ -123,23 +125,23 @@ public class AnchorUserMicInfoAdapter extends RefreshAdapter { if (MicedUserManager.get().getMicUserList().size() < 3) { if (v.getTag() != null) { UserBean tag = (UserBean) v.getTag(); - if (tag.getTypeMic() == TYPE_MIC_REQUEST) { - SocketSendBean bean = createSocketSendBean().param("targetId", tag.getId()); - applyMic(tag, 1, bean); - ToastUtil.show(mContext.getString(R.string.live_mic_invite)); - } else if (tag.getTypeMic() == TYPE_MIC_INVITE) { - applyMic(tag, 4, createSocketSendBean()); - ToastUtil.show(mContext.getString(R.string.live_mic_request)); - for (int i = 0; i < mList.size(); i++) { - if (TextUtils.equals(mList.get(i).getId(), tag.getId())) { - mList.get(i).setRequest(true); - notifyItemChanged(i); + ViewClicksAntiShake.clicksAntiShake(mBtn, () -> { + if (tag.getTypeMic() == TYPE_MIC_REQUEST) { + applyMic(tag, 4, createSocketSendBean()); + ToastUtil.show(mContext.getString(R.string.live_mic_request)); + for (int i = 0; i < mList.size(); i++) { + if (TextUtils.equals(mList.get(i).getId(), tag.getId())) { + mList.get(i).setRequest(true); + notifyItemChanged(i); + } } + } else if (tag.getTypeMic() == TYPE_MIC_INVITE) { + SocketSendBean bean = createSocketSendBean().param("targetId", tag.getId()); + applyMic(tag, 1, bean); + ToastUtil.show(mContext.getString(R.string.live_mic_invite)); } - - } + }); } - }else { ToastUtil.show(mContext.getString(R.string.live_mic_max)); } @@ -167,7 +169,7 @@ public class AnchorUserMicInfoAdapter extends RefreshAdapter { return new SocketSendBean() .param("_method_", Constants.LIAN_MAI) .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) - .param("avatar", CommonAppConfig.getInstance().getUserBean().getAvatar()) + .param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) .param("uid", CommonAppConfig.getInstance().getUid()); } diff --git a/live/src/main/java/com/yunbao/live/adapter/FreePkRecyclerAdapter.java b/live/src/main/java/com/yunbao/live/adapter/FreePkRecyclerAdapter.java index 065f13413..648a042cf 100644 --- a/live/src/main/java/com/yunbao/live/adapter/FreePkRecyclerAdapter.java +++ b/live/src/main/java/com/yunbao/live/adapter/FreePkRecyclerAdapter.java @@ -132,7 +132,7 @@ public class FreePkRecyclerAdapter extends RefreshAdapter { } if (freePkNum == 0 && mDrPkNum == -1) { ToastUtil.show(mContext.getString(R.string.free_pk_num_null)); - // return; + return; } LiveHttpUtil.getMicList(liveUid, 0, new com.yunbao.common.http.HttpCallback() { @Override diff --git a/live/src/main/java/com/yunbao/live/bean/LivePkBean.java b/live/src/main/java/com/yunbao/live/bean/LivePkBean.java index 14dde6181..5522c0e76 100644 --- a/live/src/main/java/com/yunbao/live/bean/LivePkBean.java +++ b/live/src/main/java/com/yunbao/live/bean/LivePkBean.java @@ -17,6 +17,7 @@ public class LivePkBean { private String avatar; private String stream; private String pkUid; + private String drpkStatus; private int level; private int levelAnchor; private int sex; @@ -69,6 +70,19 @@ public class LivePkBean { this.stream = stream; } + @JSONField(name="drpk_status") + public String getDrpkStatus(){ + if (drpkStatus == null) { + drpkStatus = "0"; + } + return drpkStatus; + } + + @JSONField(name = "drpk_status") + public void setDrpkStatus(String drpkStatus) { + this.drpkStatus = drpkStatus; + } + @JSONField(name = "pkuid") public String getPkUid() { if (pkUid == null) { diff --git a/live/src/main/java/com/yunbao/live/dialog/FreePkDialogFragment.java b/live/src/main/java/com/yunbao/live/dialog/FreePkDialogFragment.java index 18275126c..b5520e1f5 100644 --- a/live/src/main/java/com/yunbao/live/dialog/FreePkDialogFragment.java +++ b/live/src/main/java/com/yunbao/live/dialog/FreePkDialogFragment.java @@ -343,7 +343,11 @@ public class FreePkDialogFragment extends AbsDialogFragment implements View.OnCl userBean.setId(bean.getUid()); userBean.setUserNiceName(bean.getUserNiceName()); userBean.setAvatar(bean.getAvatar()); - userBean.setPk(bean.getPkUid().equals("0") ? 0 : 1); + if(bean.getPkUid().equals("0")||bean.getDrpkStatus().equals("0")){ + userBean.setPk(0); + }else{ + userBean.setPk(1); + } userBean.setAttention("1"); list.add(userBean); } 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 4c4f563ed..80ed11380 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveRyLinkMicPkPresenter.java @@ -35,6 +35,7 @@ import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.tencent.trtc.TRTCCloud; @@ -45,6 +46,7 @@ import com.yunbao.common.event.AnchorInfoEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMRTCManager; @@ -1047,7 +1049,20 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { mHandler.removeMessages(WHAT_PK_WAIT_RECEIVE); } if (mAcceptPk) { - isPK(u); + + LiveHttpUtil.livePkCheckLive(u.getId(), "", "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + if (obj != null) { + if (obj.getString("ispk").equals("0")) { + isPK(u); + }else{ + ToastUtil.show(mContext.getString(R.string.pking_over)); + } + } + }}}); } else { if (mPkWaitCount < 0) { rtcRoom.getLocalUser().responseJoinOtherRoom(u.getId(), u.getId(), false, false, "extra", new IRCRTCResultCallback() { @@ -1391,7 +1406,6 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { mHandler.removeMessages(WHAT_PK_WAIT_RECEIVE); } if (mAcceptPk) { - HttpClient.getInstance().get("Livepk.changeLive", "Livepk.changeLive") .params("uid", CommonAppConfig.getInstance().getUid()) .params("pkuid", u.getId()) @@ -1522,6 +1536,21 @@ public class LiveRyLinkMicPkPresenter implements View.OnClickListener { } }); + /*LiveHttpUtil.livePkCheckLive(u.getId(), "", "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + if (obj != null) { + if (obj.getString("ispk").equals("0")) { + + + }else{ + ToastUtil.show(mContext.getString(R.string.pking_over)); + } + } + } + }});*/ } else { if (mPkWaitCount < 0) { diff --git a/live/src/main/java/com/yunbao/live/presenter/LiveSwLinkMicPkPresenter.java b/live/src/main/java/com/yunbao/live/presenter/LiveSwLinkMicPkPresenter.java index 8dc363a62..fd690e02c 100644 --- a/live/src/main/java/com/yunbao/live/presenter/LiveSwLinkMicPkPresenter.java +++ b/live/src/main/java/com/yunbao/live/presenter/LiveSwLinkMicPkPresenter.java @@ -29,16 +29,22 @@ import android.widget.PopupWindow; import android.widget.RelativeLayout; import android.widget.TextView; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; +import com.tencent.imsdk.v2.V2TIMManager; +import com.tencent.imsdk.v2.V2TIMMessage; +import com.tencent.imsdk.v2.V2TIMSendCallback; import com.tencent.trtc.TRTCCloud; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; import com.yunbao.common.bean.UserBean; import com.yunbao.common.event.AnchorInfoEvent; import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMRTCManager; @@ -109,7 +115,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { private Context mContext; private View mRoot; private boolean mIsAnchor;//自己是否是主播 - private SocketSwClient mSocketRyClient; + private SocketSwClient mSocketSwClient; private ViewGroup mPkContainer; private boolean mIsApplyDialogShow;//是否显示了申请PK的弹窗 private boolean mAcceptPk;//是否接受连麦 @@ -285,7 +291,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { } public void setSocketRyClient(SocketSwClient SocketRyClient) { - mSocketRyClient = SocketRyClient; + mSocketSwClient = SocketRyClient; } public void setLiveUid(String liveUid, String url) { @@ -471,7 +477,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { return; } mPkSend = true; - SocketSwLinkMicPkUtil.linkMicPkApply(mSocketRyClient, pkUid, stream); + SocketSwLinkMicPkUtil.linkMicPkApply(mSocketSwClient, pkUid, stream); ToastUtil.show(mContext.getString(R.string.link_mic_apply_pk)); if (mLiveLinkMicPkViewHolder == null) { @@ -571,13 +577,6 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { LivePushSwViewHolder.btn_close.setVisibility(View.VISIBLE); LiveSwAnchorActivity.isDRPK = 1; livePushSwViewHolder.setAnPkRtc(u);//设置对方主播视图 - - final SocketSendBean msg1 = new SocketSendBean() - .param("_method_", SOCKET_LINK_MIC_PK).param("action", 4) - .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) - .param("pkuid", u.getId()).param("uid", CommonAppConfig.getInstance().getUid()) - .param("pkhead", u.getAvatar()).param("pkname", u.getUserNiceName()); - msg1.create(); LivePushSwViewHolder.btn_close.setVisibility(View.VISIBLE); } @@ -639,7 +638,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { Bus.get().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.UN_LEAVELIVE)); LiveSwAnchorActivity.isDRPK = 1; LivePushSwViewHolder.btn_close.setVisibility(View.VISIBLE); - SocketSwLinkMicPkUtil.linkMicPkAccept(mSocketRyClient, mApplyUid, mApplyUrl, mApplyNmae); + SocketSwLinkMicPkUtil.linkMicPkAccept(mSocketSwClient, mApplyUid, mApplyUrl, mApplyNmae); EventBus.getDefault().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.UP_PK_TWO).setObject(mApplyUid)); onLinkMicPkStart(mApplyUid, 2); } @@ -668,6 +667,19 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { } if (mAcceptPk) { isPK(u); + /*LiveHttpUtil.livePkCheckLive(u.getId(), "", "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + if (obj != null) { + if (obj.getString("ispk").equals("0")) { + isPK(u); + }else{ + ToastUtil.show(mContext.getString(R.string.pking_over)); + } + } + }}});*/ } else { if (mPkWaitCount < 0) { if(rtcRoom==null){ @@ -908,7 +920,6 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { mHandler.removeMessages(WHAT_PK_WAIT_RECEIVE); } if (mAcceptPk) { - HttpClient.getInstance().get("Livepk.changeLive", "Livepk.changeLive").params("uid", CommonAppConfig.getInstance().getUid()).params("pkuid", u.getId()).params("type", "1").params("sign", "1").execute(new HttpCallback() { @Override public void onSuccess(int code, String msgs, String[] info) { @@ -1118,8 +1129,22 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { } } }); + /*LiveHttpUtil.livePkCheckLive(u.getId(), "", "", new HttpCallback() { + @Override + public void onSuccess(int code, String msg, String[] info) { + if (code == 0 && info.length > 0) { + JSONObject obj = JSON.parseObject(info[0]); + if (obj != null) { + if (obj.getString("ispk").equals("0")) { + } else { + ToastUtil.show(mContext.getString(R.string.pking_over)); + } + } + } + } + });*/ } else { if (mPkWaitCount < 0) { IMRTCManager.getInstance().responseJoinOtherRoom(u.getId(), false, "extra", new IRCRTCResultCallback() { @@ -1637,7 +1662,7 @@ public class LiveSwLinkMicPkPresenter implements View.OnClickListener { mHandler.removeCallbacksAndMessages(null); } mHandler = null; - mSocketRyClient = null; + mSocketSwClient = null; if (mLiveLinkMicPkViewHolder != null) { mLiveLinkMicPkViewHolder.release(); } diff --git a/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java b/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java index f54c8eb66..658f3528f 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketSwClient.java @@ -312,14 +312,13 @@ public class SocketSwClient { u.setUserNiceName(map.getString("uname")); u.setId(map.getString("uid")); mListener.onLinkDRMicPkApply(u); - } - //收到对方同意多人PK邀请 - else if (action3 == 2) { + } else if (action3 == 2) { + //收到对方同意多人PK邀请 if("0".equals(map.getString("msgtype"))){ return; } UserBean u = new UserBean(); -// u.setUserNiceName(map.getString("uname")); +// u.setUserNiceName(map.getString("uname")); u.setId(map.getString("pkuid")); L.eSw("action3 == 2:"+u.getId()); L.eSw("收到对方同意多人PK邀请"); @@ -1280,8 +1279,8 @@ public class SocketSwClient { case 1://收到对方主播PK回调 UserBean u = new UserBean(); u.setId(map.getString("uid")); - u.setUserNiceName(map.getString("pkname")); - u.setAvatar(map.getString("pkhead")); + u.setUserNiceName(map.getString("uname")); + u.setAvatar(map.getString("uhead")); u.setRandomPk("11".equals(map.getString("msgtype"))); mListener.onLinkMicPkApply(u, map.getString("stream"), "11".equals(map.getString("msgtype"))?2:1); break; @@ -1306,7 +1305,7 @@ public class SocketSwClient { L.eSw("所有人收到PK开始址的回调"); // RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START); EventBus.getDefault().post(new LiveAudienceEvent().setType(LiveAudienceEvent.LiveAudienceType.PK_TWO_START).setObject(map.getString("pkuid"))); - mListener.onLinkMicPkStart(map.getString("pkuid"), map.getString("pkhead"), map.getString("pkname"), map.getString("is_ladders")); + mListener.onLinkMicPkStart(map.getString("pkuid"), map.getString("uhead"), map.getString("uname"), map.getString("is_ladders")); break; case 5://PK时候断开连麦的回调 // if (rtcRoom != null) { @@ -1341,61 +1340,62 @@ public class SocketSwClient { } break; case 10://系统发起PK回调 - final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK) - .param("action", 2) - .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) - .param("pkuid", CommonAppConfig.getInstance().getUid()) - .param("msgtype", 2) - .param("uid", CommonAppConfig.getInstance().getUid()) - .param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) - .param("random_pk", "1") - .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) - .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); - msg1.create(); - Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; - TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); - io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(map.getString("uid"), conversationType, messageContent); + if(livePushSwViewHolder!=null){ + final SocketSendBean msg1 = new SocketSendBean().param("_method_", SOCKET_LINK_MIC_PK) + .param("action", 2) + .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) + .param("pkuid", CommonAppConfig.getInstance().getUid()) + .param("msgtype", 2) + .param("uid", CommonAppConfig.getInstance().getUid()) + .param("uhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) + .param("random_pk", "1") + .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) + .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()); + msg1.create(); + Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; + TextMessage messageContent = TextMessage.obtain(msg1.mResult.toString()); + io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(map.getString("uid"), conversationType, messageContent); - RongIMClient.getInstance().sendMessage(message, null, null, new IRongCallback.ISendMessageCallback() { - @Override - public void onAttached(io.rong.imlib.model.Message message) { + 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) { - } + @Override + public void onSuccess(io.rong.imlib.model.Message message) { + } - @Override - public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) { - Log.e("tx", "aaa" + errorCode.toString()); - ToastUtil.show(errorCode.code + ":" + errorCode.msg); - } - }); + @Override + public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) { + Log.e("tx", "aaa" + errorCode.toString()); + ToastUtil.show(errorCode.code + ":" + errorCode.msg); + } + }); - RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START); + RandomPkManager.getInstance().setPkStatus(RandomPkManager.PK_STATUS_START); + + LiveNetManager.get(mContext).getLiveInfo(map.getString("uid"), new com.yunbao.common.http.base.HttpCallback() { + @Override + public void onSuccess(LiveInfoModel data) { + mListener.onLinkMicToPk(map.getString("uid"), data.getAvatar(), map.getString("uhead")); + mListener.onLinkMicPkStart(map.getString("uid"), data.getAvatar(), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid")); + if (livePushSwViewHolder != null) { + UserBean userBean = new UserBean(); + userBean.setId(map.getString("uid")); + userBean.setAvatar(data.getAvatar()); + userBean.setUserNiceName(map.getString("uname")); + livePushSwViewHolder.setAnPkRtc(userBean); + } + } + + @Override + public void onError(String error) { - LiveNetManager.get(mContext).getLiveInfo(map.getString("uid"), new com.yunbao.common.http.base.HttpCallback() { - @Override - public void onSuccess(LiveInfoModel data) { - mListener.onLinkMicToPk(map.getString("uid"), data.getAvatar(), map.getString("uhead")); - mListener.onLinkMicPkStart(map.getString("uid"), data.getAvatar(), map.getString("uname"), map.getString("is_ladders"));// mListener.onLinkMicPkStart(map.getString("uid")); - if (livePushSwViewHolder != null) { - UserBean userBean = new UserBean(); - userBean.setId(map.getString("uid")); - userBean.setAvatar(data.getAvatar()); - userBean.setUserNiceName(map.getString("uname")); - livePushSwViewHolder.setAnPkRtc(userBean); } } - - @Override - public void onError(String error) { - - } - } - ); - + ); + } /*JSONObject msg1 = new JSONObject(); msg1.put("type", "autoLivePK"); msg1.put("uid", CommonAppConfig.getInstance().getUid()); diff --git a/live/src/main/java/com/yunbao/live/socket/SocketSwLinkMicPkUtil.java b/live/src/main/java/com/yunbao/live/socket/SocketSwLinkMicPkUtil.java index 9c7281eb9..34cc7bb6f 100644 --- a/live/src/main/java/com/yunbao/live/socket/SocketSwLinkMicPkUtil.java +++ b/live/src/main/java/com/yunbao/live/socket/SocketSwLinkMicPkUtil.java @@ -7,6 +7,7 @@ import com.yunbao.common.Constants; import com.yunbao.common.bean.UserBean; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.utils.L; import io.rong.imlib.IRongCallback; import io.rong.imlib.RongIMClient; @@ -47,7 +48,7 @@ public class SocketSwLinkMicPkUtil { @Override public void onSuccess(int code, String msgs, String[] info) { if (code == 0) { - + L.eSw("1111111111111111111111111111"); HttpClient.getInstance().get("Livepk.setPK", "Livepk.setPK") .params("uid", CommonAppConfig.getInstance().getUid()) .params("pkuid", pkUid) @@ -58,10 +59,12 @@ public class SocketSwLinkMicPkUtil { public void onSuccess(int code, String msgs, String[] info) { if (code == 0) { Log.e("ry",name+"啊啊"+url); + L.eSw("2222222222222222222222"); final SocketSendBean msg1 = new SocketSendBean() .param("_method_", Constants.SOCKET_LINK_MIC_PK) .param("action", 4) - .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) + .param("uname", url) + .param("uhead", name) .param("pkuid", pkUid) .param("uid", CommonAppConfig.getInstance().getUid()) .param("pkhead", url) diff --git a/live/src/main/java/com/yunbao/live/views/LivePlaySwViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePlaySwViewHolder.java index 39ec37fa7..f57b6e365 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePlaySwViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePlaySwViewHolder.java @@ -35,13 +35,20 @@ import com.lxj.xpopup.interfaces.XPopupCallback; import com.lzf.easyfloat.EasyFloat; import com.lzy.okserver.OkDownload; import com.yunbao.common.CommonAppConfig; +import com.yunbao.common.Constants; +import com.yunbao.common.bean.BaseModel; import com.yunbao.common.bean.EnterRoomNewModel; import com.yunbao.common.bean.UserBean; import com.yunbao.common.dialog.LiveFontSizeSettingDialog; +import com.yunbao.common.http.API; import com.yunbao.common.http.HttpCallback; import com.yunbao.common.http.HttpClient; +import com.yunbao.common.http.ResponseModel; import com.yunbao.common.interfaces.OnItemClickListener; import com.yunbao.common.manager.IMLoginManager; +import com.yunbao.common.manager.MicUserManager; +import com.yunbao.common.manager.MicedUserManager; +import com.yunbao.common.manager.imrongcloud.RongcloudIMManager; import com.yunbao.common.utils.Bus; import com.yunbao.common.utils.DialogUitl; import com.yunbao.common.utils.DpUtil; @@ -57,6 +64,7 @@ import com.yunbao.live.activity.LiveActivity; import com.yunbao.live.activity.LiveAudienceActivity; import com.yunbao.live.bean.DrPkbean; import com.yunbao.live.event.LiveAudienceEvent; +import com.yunbao.live.socket.SocketSendBean; import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; @@ -88,6 +96,15 @@ import cn.rongcloud.rtc.base.RCRTCStreamType; import cn.rongcloud.rtc.base.RTCErrorCode; import cn.rongcloud.rtc.core.RendererCommon; import io.agora.beautyapi.faceunity.agora.SWAuManager; +import io.reactivex.android.schedulers.AndroidSchedulers; +import io.reactivex.functions.Consumer; +import io.reactivex.schedulers.Schedulers; +import io.rong.imkit.IMCenter; +import io.rong.imlib.IRongCallback; +import io.rong.imlib.RongIMClient; +import io.rong.imlib.model.Conversation; +import io.rong.imlib.model.Message; +import io.rong.message.TextMessage; public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder { @@ -205,8 +222,57 @@ public class LivePlaySwViewHolder extends LiveRoomPlayViewHolder { swAuManager.setAudienceContainer(ry_view); swAuManager.initRtcEngine((Activity) mContext); swAuManager.setupRemoteVideo(Integer.parseInt(liveUid)); + swAuManager.setSwListener(new SWAuManager.SwListener() { + @Override + public void onUserOffline(int liveUid) { + API.get().createPDLiveApi(false) + .killDrLm(CommonAppConfig.getInstance().getUid(), String.valueOf(liveUid)) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeOn(Schedulers.io()) + .subscribe(new Consumer>() { + @Override + public void accept(ResponseModel stringResponseModel) throws Exception { + + SocketSendBean socketSendBean = new SocketSendBean() + .param("_method_", Constants.LIAN_MAI) + .param("uname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) + .param("avatar", CommonAppConfig.getInstance().getUserBean().getAvatar()) + .param("uid", CommonAppConfig.getInstance().getUid()); + + ToastUtil.show(mContext.getString(R.string.live_mic_user_down)); + + socketSendBean.param("action", 8); + socketSendBean.create(); + Conversation.ConversationType conversationType = Conversation.ConversationType.PRIVATE; + TextMessage messageContent = TextMessage.obtain(socketSendBean.mResult.toString()); + io.rong.imlib.model.Message message = io.rong.imlib.model.Message.obtain(CommonAppConfig.getInstance().getUid(), conversationType, messageContent); + RongcloudIMManager.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", "发送成功"); + + IMCenter.getInstance().deleteRemoteMessages(Conversation.ConversationType.PRIVATE, message.getTargetId(), new Message[]{message}, null); + IMCenter.getInstance().clearMessagesUnreadStatus(Conversation.ConversationType.PRIVATE, message.getTargetId(), null); + MicedUserManager.get().removeMiscUser(CommonAppConfig.getInstance().getUid()); + } + + @Override + public void onError(io.rong.imlib.model.Message message, RongIMClient.ErrorCode errorCode) { + Log.e("ry", "发送失敗" + errorCode.toString()); + } + }); + + } + }, Throwable::printStackTrace).isDisposed(); + } + }); //进入主播房间 - swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken, SWAuManager.getChannelName(liveUid)); + swAuManager.joinRoom(CommonAppConfig.getInstance().getUid(), CommonAppConfig.SWToken,liveUid, SWAuManager.getChannelName(liveUid)); } /** diff --git a/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java b/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java index d5a2402c8..c98f319ca 100644 --- a/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java +++ b/live/src/main/java/com/yunbao/live/views/LivePushSwViewHolder.java @@ -303,9 +303,11 @@ public class LivePushSwViewHolder extends AbsRyLivePushViewHolder implements ITX final SocketSendBean msg1 = new SocketSendBean() .param("_method_", Constants.SOCKET_LINK_MIC_PK) .param("action", 4) - .param("pkname", CommonAppConfig.getInstance().getUserBean().getUserNiceName()) + .param("pkname", u.getUserNiceName()) .param("pkuid", u.getId()) - .param("pkhead", CommonAppConfig.getInstance().getUserBean().getAvatar()) + .param("pkhead", u.getAvatar()) + .param("uname", u.getUserNiceName()) + .param("uhead", u.getAvatar()) .param("uid", CommonAppConfig.getInstance().getUid()); msg1.create(); 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 9d0196c0d..cda10a56c 100644 --- a/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java +++ b/live/src/main/java/com/yunbao/live/views/PortraitLiveManager.java @@ -344,15 +344,24 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe } }; + boolean isChangeSdk = false; @Override - public synchronized void onAdd(LiveBean data, int liveType, int liveTypeVal, int liveSdk, boolean isSw) { + public synchronized void onAdd(LiveBean data, int liveType, int liveTypeVal, int liveSdk, boolean isSw1) { + if(isSw==isSw1){ + L.eSw("直播SDK 没有改变了 "+isSw1); + isChangeSdk = false; + }else{ + L.eSw("直播SDK 改变了 "+isSw1); + isChangeSdk = true; + } + isSw = isSw1; isEnterRoom = false; MobclickAgent.onEvent(mContext, "live_room_chat_list", "滑动直播间聊天列表"); openParametersModel = new OpenParametersModel(); - if (mLiveRoomViewHolder != null) { + /*if (mLiveRoomViewHolder != null) { mLiveRoomViewHolder.UpPkTwo(); - } + }*/ mContext.runOnUiThread(new Runnable() { @Override @@ -387,23 +396,28 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe frameAnimation.start(); liveHandler.removeCallbacks(loadRunnableGone); liveHandler.removeCallbacks(loadTimeoutRunnableGone); - if (mLivePlayViewHolder == null) { + + if (mLivePlayViewHolder == null|| isChangeSdk) { + if (isSw) { mLivePlayViewHolder = new LivePlaySwViewHolder(mContext, playContainer, 1); } else { mLivePlayViewHolder = new LivePlayRyViewHolder(mContext, playContainer, 1); } + mLivePlayViewHolder.initSwEngine(mLiveBean.getUid()); mLiveRoomViewHolder = new LiveRoomViewHolder(false, 1, mContext, mContainer, mSecondPage.findViewById(R.id.gift_gif), mSecondPage.findViewById(R.id.gift_svga), mContainerWrap, mContext.getWindowManager(),isSw); mLiveAudienceViewHolder = new LiveAudienceViewHolder(mContext, mContainer); mLiveLinkMicPresenter = new LiveLinkMicPresenter(mContext, mLivePlayViewHolder, false, mLiveSDK, mLiveAudienceViewHolder.getContentView()); mLiveLinkMicAnchorPresenter = new LiveLinkMicAnchorPresenter(mContext, mLivePlayViewHolder, false, mLiveSDK, null); + if (isSw) { mLiveSwLinkMicPkPresenter = new LiveSwLinkMicPkPresenter(mContext, mLivePlayViewHolder, false, null); } else { mLiveRyLinkMicPkPresenter = new LiveRyLinkMicPkPresenter(mContext, mLivePlayViewHolder, false, null); } + mLivePlayViewHolder.removeFromParent(); mLivePlayViewHolder.addToParent(); mLivePlayViewHolder.subscribeActivityLifeCycle(); mLivePlayViewHolder.setLoadViewListener(new LiveRoomPlayViewHolder.LoadingListener() { @@ -413,11 +427,15 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe liveHandler.removeCallbacks(loadTimeoutRunnableGone); } }); - mLiveRoomViewHolder.subscribeActivityLifeCycle(); - mLiveAudienceViewHolder.addToParent(); + mLiveRoomViewHolder.removeFromParent(); mLiveRoomViewHolder.addToParent(); + mLiveRoomViewHolder.subscribeActivityLifeCycle(); + + mLiveAudienceViewHolder.removeFromParent(); + mLiveAudienceViewHolder.addToParent(); mLiveAudienceViewHolder.subscribeActivityLifeCycle(); } else { + mLivePlayViewHolder.initSwEngine(mLiveBean.getUid()); mLivePlayViewHolder.setLiveBeanLandscape(1); mLiveLinkMicPresenter.setLiveSdk(mLiveSDK); mLiveLinkMicAnchorPresenter.setLiveSdk(mLiveSDK); @@ -1012,7 +1030,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe mLiveRyLinkMicPkPresenter = null; if (PermissionUtils.checkPermission(mContext) && !kick) { LiveFloatView.getInstance() - .cacheLiveData(mLiveBean, mLiveType, mLiveSDK, mLiveTypeVal) + .cacheLiveData(mLiveBean, mLiveType, isSw? Constants.LIVE_SDK_SW:Constants.LIVE_SDK_KSY, mLiveTypeVal) .builderSystemFloat(mContext, mLiveBean.getPull()); mContext.finish(); } else { @@ -1020,7 +1038,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe EventBus.getDefault() .post(new LiveFloatEvent() .setmLiveBean(mLiveBean) - .setmLiveSDK(mLiveSDK) + .setmLiveSDK(isSw? Constants.LIVE_SDK_SW:Constants.LIVE_SDK_KSY) .setmLiveType(mLiveType) .setmLiveTypeVal(mLiveTypeVal)); } @@ -1059,7 +1077,7 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe boolean floatPermission = PermissionUtils.checkPermission(mContext); if (mLiveBean != null && !isQuitF && !isForeground && floatPermission) { LiveFloatView.getInstance() - .cacheLiveData(mLiveBean, mLiveType, mLiveSDK, mLiveTypeVal) + .cacheLiveData(mLiveBean, mLiveType, isSw? Constants.LIVE_SDK_SW:Constants.LIVE_SDK_KSY, mLiveTypeVal) .builderSystemFloat(mContext, mLiveBean.getPull()); mContext.finish(); } diff --git a/live/src/main/res/layout/view_live_push_sw.xml b/live/src/main/res/layout/view_live_push_sw.xml index b6d31d27b..4cd13440a 100644 --- a/live/src/main/res/layout/view_live_push_sw.xml +++ b/live/src/main/res/layout/view_live_push_sw.xml @@ -2,7 +2,8 @@ + android:layout_height="match_parent" + xmlns:tools="http://schemas.android.com/tools"> @@ -38,51 +40,53 @@ + android:orientation="horizontal" + android:visibility="visible"> + android:orientation="vertical"> + android:background="@mipmap/live_icon_vacancy" + tools:ignore="NestedWeights" /> + android:orientation="vertical"> + android:background="@mipmap/live_icon_vacancy" + tools:ignore="NestedWeights" />