Skip to content

Commit 56f00f5

Browse files
committed
1.7.1
1 parent 6fb7690 commit 56f00f5

81 files changed

Lines changed: 2199 additions & 679 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ polyv-android-livescenes-sdk-demo
22
===
33

44
[![build passing](https://img.shields.io/badge/build-passing-brightgreen.svg)](#)
5-
[![GitHub release](https://img.shields.io/badge/release-v1.7.0-blue.svg)](https://github.com/polyv/polyv-android-livescenes-sdk-demo/releases/tag/v1.7.0)
5+
[![GitHub release](https://img.shields.io/badge/release-v1.7.1-blue.svg)](https://github.com/polyv/polyv-android-livescenes-sdk-demo/releases/tag/v1.7.1)
66

77
### 1 简介
88
此项目是保利威 Android 多场景 Demo。
@@ -53,6 +53,7 @@ Demo [下载链接](https://www.pgyer.com/Mb6m) (密码:polyv)
5353

5454
| Github仓库Tag | 依赖SDK版本 | API文档 | Common层 | 观看端-云课堂场景 | 观看端-直播带货场景 | 开播端-手机开播三分屏场景 |开播端-手机开播纯视频场景 | 互动学堂场景 |
5555
| ------------- | ----------- | ------------------------------------------------------------------------------------ | -------- | --------------- | ---------------- | ---------------------- |-------------------- |--------------|
56+
| 1.7.1 | 1.7.1 | [v1.7.1 API](http://repo.polyv.net/android/livescenes/javadoc/1.7.1/index.html) |||||| |
5657
| 1.7.0 | 1.7.0 | [v1.7.0 API](http://repo.polyv.net/android/livescenes/javadoc/1.7.0/index.html) ||| ||||
5758
| 1.6.3 | 1.6.3 | [v1.6.3 API](http://repo.polyv.net/android/livescenes/javadoc/1.6.2/index.html) |||||| |
5859
| 1.6.0 | 1.6.0 | [v1.6.0 API](http://repo.polyv.net/android/livescenes/javadoc/1.6.0/index.html) ||| ||| |

build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ ext {
4545
compileSdkVersion = 27
4646
minSdkVersion = 21
4747
targetSdkVersion = 27
48-
versionCode = 170
49-
versionName = "1.7.0"
48+
versionCode = 171
49+
versionName = "1.7.1"
5050
}
5151

5252
task clean(type: Delete) {

demo/src/main/java/com/easefun/polyv/livedemo/PLVLoginStreamerActivity.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import android.widget.ProgressBar;
2525
import android.widget.TextView;
2626

27+
import com.easefun.polyv.livecommon.module.config.PLVLiveChannelConfigFiller;
2728
import com.easefun.polyv.livecommon.module.data.PLVStatefulData;
2829
import com.easefun.polyv.livecommon.module.utils.PLVToast;
2930
import com.easefun.polyv.livecommon.module.utils.result.PLVLaunchResult;
@@ -200,6 +201,9 @@ public void onLoginSuccess(PLVSLoginVO loginVO) {
200201
localInfoManager.saveLoginInfo("", "", "", false);
201202
}
202203

204+
//更新开播状态
205+
PLVLiveChannelConfigFiller.setLiveStreamingWhenLogin(loginVO.isLiveStatus());
206+
203207
//不填写登录昵称时,使用登录接口返回的后台设置的昵称
204208
String loginNick = TextUtils.isEmpty(nick) ? loginVO.getTeacherNickname() : nick;
205209

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/chatroom/adapter/holder/PLVLCMessageViewHolder.java

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.easefun.polyv.livecloudclass.modules.chatroom.adapter.holder;
22

3+
import static com.plv.foundationsdk.utils.PLVSugarUtil.nullable;
4+
35
import android.graphics.Color;
46
import android.graphics.drawable.Drawable;
57
import android.support.annotation.Nullable;
@@ -11,19 +13,20 @@
1113
import android.widget.ProgressBar;
1214
import android.widget.TextView;
1315

14-
import com.easefun.polyv.livecommon.ui.widget.gif.GifSpanTextView;
1516
import com.easefun.polyv.livecloudclass.R;
1617
import com.easefun.polyv.livecloudclass.modules.chatroom.adapter.PLVLCMessageAdapter;
1718
import com.easefun.polyv.livecommon.module.modules.chatroom.holder.PLVChatMessageBaseViewHolder;
1819
import com.easefun.polyv.livecommon.module.utils.PLVWebUtils;
1920
import com.easefun.polyv.livecommon.module.utils.imageloader.PLVAbsProgressStatusListener;
2021
import com.easefun.polyv.livecommon.module.utils.imageloader.PLVImageLoader;
2122
import com.easefun.polyv.livecommon.ui.widget.PLVCopyBoardPopupWindow;
23+
import com.easefun.polyv.livecommon.ui.widget.gif.GifSpanTextView;
2224
import com.easefun.polyv.livecommon.ui.widget.itemview.PLVBaseViewData;
2325
import com.easefun.polyv.livescenes.chatroom.PolyvChatroomManager;
2426
import com.easefun.polyv.livescenes.chatroom.send.img.PolyvSendChatImageListener;
2527
import com.easefun.polyv.livescenes.chatroom.send.img.PolyvSendLocalImgEvent;
26-
import com.easefun.polyv.livescenes.socket.PolyvSocketWrapper;
28+
import com.plv.foundationsdk.utils.PLVSugarUtil;
29+
import com.plv.livescenes.socket.PLVSocketWrapper;
2730
import com.plv.socket.event.PLVEventHelper;
2831
import com.plv.socket.user.PLVSocketUserConstant;
2932
import com.plv.thirdpart.blankj.utilcode.util.ToastUtils;
@@ -230,6 +233,14 @@ public void processData(PLVBaseViewData data, int position) {
230233
resetView();
231234
//是否是特殊身份类型
232235
boolean isSpecialType = PLVEventHelper.isSpecialType(userType);//管理员、讲师、助教、嘉宾都视为特殊身份类型
236+
237+
final String loginUserId = nullable(new PLVSugarUtil.Supplier<String>() {
238+
@Override
239+
public String get() {
240+
return PLVSocketWrapper.getInstance().getLoginVO().getUserId();
241+
}
242+
});
243+
233244
//设置头像
234245
if (avatar != null && avatarIv != null) {
235246
int defaultAvatar;
@@ -253,7 +264,7 @@ public void processData(PLVBaseViewData data, int position) {
253264
}
254265
//设置昵称
255266
if (nickName != null) {
256-
if (PolyvSocketWrapper.getInstance().getLoginVO().getUserId().equals(userId)) {
267+
if (loginUserId != null && loginUserId.equals(userId)) {
257268
nickName = nickName + "(我)";
258269
}
259270
if (actor != null) {
@@ -290,7 +301,7 @@ public void processData(PLVBaseViewData data, int position) {
290301
//设置被回复人相关的信息
291302
if (chatQuoteVO != null) {
292303
String nickName = chatQuoteVO.getNick();
293-
if (PolyvSocketWrapper.getInstance().getLoginVO().getUserId().equals(chatQuoteVO.getUserId())) {
304+
if (loginUserId != null && loginUserId.equals(chatQuoteVO.getUserId())) {
294305
nickName = nickName + "(我)";
295306
}
296307
if (quoteSplitView != null) {

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/linkmic/IPLVLCLinkMicLayout.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ public interface IPLVLCLinkMicLayout {
8787
*/
8888
boolean isMediaShowInLinkMicList();
8989

90+
/**
91+
* 回调通知,在加入连麦时已经将PPT切换到了主屏幕
92+
*/
93+
void notifySwitchedPptToMainScreenOnJoinChannel();
94+
9095
/**
9196
* 设置连麦布局监听器
9297
*

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/linkmic/PLVLCLinkMicLayout.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151

5252
import java.lang.annotation.Retention;
5353
import java.lang.annotation.RetentionPolicy;
54+
import java.util.Iterator;
55+
import java.util.LinkedList;
5456
import java.util.ArrayList;
5557
import java.util.List;
5658

@@ -96,6 +98,8 @@ public class PLVLCLinkMicLayout extends FrameLayout implements IPLVLinkMicContra
9698
//纯视频频道连麦时,讲师的位置切换器
9799
private PLVViewSwitcher teacherLocationViewSwitcher;
98100

101+
private final List<Runnable> onUserJoinPendingTask = new LinkedList<>();
102+
99103
//Listener
100104
private OnPLVLinkMicLayoutListener onPLVLinkMicLayoutListener;
101105
private RecyclerView.OnScrollListener onScrollTryScrollTipListener;
@@ -336,6 +340,27 @@ public boolean isMediaShowInLinkMicList() {
336340
return isMediaShowInLinkMicList;
337341
}
338342

343+
@Override
344+
public void notifySwitchedPptToMainScreenOnJoinChannel() {
345+
PLVSwitchViewAnchorLayout firstScreenSwitchView = linkMicListAdapter.getFirstScreenSwitchView();
346+
if (firstScreenSwitchView != null) {
347+
// 加入连麦后,PPT切换到主屏幕,再把PPT切到连麦列表,第一画面切到主屏幕
348+
onSwitchPPTViewLocation(false);
349+
} else {
350+
onUserJoinPendingTask.add(new Runnable() {
351+
@Override
352+
public void run() {
353+
post(new Runnable() {
354+
@Override
355+
public void run() {
356+
onSwitchPPTViewLocation(false);
357+
}
358+
});
359+
}
360+
});
361+
}
362+
}
363+
339364
@Override
340365
public int getMediaViewIndexInLinkMicList() {
341366
return linkMicListAdapter.getMediaViewIndexInLinkMicList();
@@ -568,6 +593,11 @@ public void onLeaveLinkMic() {
568593

569594
@Override
570595
public void onUsersJoin(List<String> uids) {
596+
Iterator<Runnable> pendingTaskIterator = onUserJoinPendingTask.iterator();
597+
while (pendingTaskIterator.hasNext()) {
598+
pendingTaskIterator.next().run();
599+
pendingTaskIterator.remove();
600+
}
571601

572602
linkMicListAdapter.updateAllItem();
573603

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/linkmic/adapter/PLVLinkMicListAdapter.java

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.easefun.polyv.livecloudclass.modules.linkmic.adapter;
22

3+
import android.content.Context;
34
import android.support.annotation.NonNull;
45
import android.support.annotation.Nullable;
56
import android.support.v7.widget.LinearLayoutManager;
@@ -343,7 +344,7 @@ public void updateCup(int pos) {
343344
@NonNull
344345
@Override
345346
public LinkMicItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
346-
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.plvlc_linkmic_scroll_item, parent, false);
347+
final View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.plvlc_linkmic_scroll_item, parent, false);
347348
itemView.getLayoutParams().width = getItemWidth();
348349
itemView.requestLayout();
349350

@@ -361,16 +362,38 @@ public LinkMicItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int v
361362
@Override
362363
public void onLayoutChange(View v, final int left, int top, final int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
363364
final int newWidth = right - left;
365+
final FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(viewHolder.qualityWidget.getLayoutParams());
364366
//切换到主屏幕的时候,不要显示view holder的昵称和麦克风
365367
if (newWidth != getItemWidth()) {
366368
viewHolder.tvNick.setVisibility(View.GONE);
367369
viewHolder.ivMicState.setVisibility(View.GONE);
370+
v.post(new Runnable() {
371+
@Override
372+
public void run() {
373+
if (itemView.getContext() != null) {
374+
if (PLVScreenUtils.isPortrait(itemView.getContext())) {
375+
updateNetQualityLayout(itemView.getContext(), layoutParams, 20, 12);
376+
} else {
377+
updateNetQualityLayout(itemView.getContext(), layoutParams, 24, 16);
378+
}
379+
viewHolder.qualityWidget.setLayoutParams(layoutParams);
380+
}
381+
}
382+
});
368383
} else {
369384
v.post(new Runnable() {
370385
@Override
371386
public void run() {
372387
viewHolder.tvNick.setVisibility(View.VISIBLE);
373388
viewHolder.ivMicState.setVisibility(View.VISIBLE);
389+
if (itemView.getContext() != null) {
390+
if (PLVScreenUtils.isPortrait(itemView.getContext())) {
391+
updateNetQualityLayout(itemView.getContext(), layoutParams, 12, 4);
392+
} else {
393+
updateNetQualityLayout(itemView.getContext(), layoutParams, 16, 4);
394+
}
395+
viewHolder.qualityWidget.setLayoutParams(layoutParams);
396+
}
374397
}
375398
});
376399
}
@@ -494,6 +517,7 @@ public void onClick(View v) {
494517
} else {
495518
switchViewHasMedia = null;
496519
}
520+
updateAllItem();
497521
}
498522
});
499523

@@ -739,6 +763,15 @@ private boolean intBetween(int value, int left, int right) {
739763
private FrameLayout.LayoutParams getRenderViewLayoutParam() {
740764
return new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER);
741765
}
766+
767+
/** 更新上面网络信号塔的布局尺寸,size是信号塔的尺寸,distance是右边距和上边距 */
768+
private void updateNetQualityLayout(Context context, FrameLayout.LayoutParams layoutParams, int size, int distance) {
769+
layoutParams.width = PLVScreenUtils.dip2px(context, size);
770+
layoutParams.height = PLVScreenUtils.dip2px(context, size);
771+
layoutParams.gravity = Gravity.END|Gravity.TOP;
772+
layoutParams.rightMargin = PLVScreenUtils.dip2px(context, distance);
773+
layoutParams.topMargin = PLVScreenUtils.dip2px(context, distance);
774+
}
742775
// </editor-fold>
743776

744777
// <editor-fold defaultstate="collapsed" desc="内部类 - LinkMicItemViewHolder定义">

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/media/PLVLCLiveMediaLayout.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import android.content.Context;
88
import android.content.res.Configuration;
99
import android.graphics.Bitmap;
10-
import android.graphics.Color;
1110
import android.os.CountDownTimer;
1211
import android.support.annotation.NonNull;
1312
import android.support.annotation.Nullable;
@@ -47,8 +46,6 @@
4746
import com.easefun.polyv.livecommon.module.data.IPLVLiveRoomDataManager;
4847
import com.easefun.polyv.livecommon.module.data.PLVStatefulData;
4948
import com.easefun.polyv.livecommon.module.modules.marquee.IPLVMarqueeView;
50-
import com.easefun.polyv.livecommon.module.modules.marquee.model.PLVMarqueeAnimationVO;
51-
import com.easefun.polyv.livecommon.module.modules.marquee.model.PLVMarqueeModel;
5249
import com.easefun.polyv.livecommon.module.modules.player.PLVPlayerState;
5350
import com.easefun.polyv.livecommon.module.modules.player.live.contract.IPLVLivePlayerContract;
5451
import com.easefun.polyv.livecommon.module.modules.player.live.presenter.PLVLivePlayerPresenter;
@@ -234,27 +231,6 @@ private void initVideoView() {
234231
videoView.setMediaController(mediaController);
235232
//设置跑马灯
236233
marqueeView = ((Activity) getContext()).findViewById(R.id.polyv_marquee_view);
237-
PLVMarqueeModel plvMarqueeModel = new PLVMarqueeModel()
238-
.setUserName("保利威SDK")
239-
.setFontAlpha(255)
240-
.setFontSize(40)
241-
.setFontColor(Color.RED)
242-
.setFilter(false)
243-
.setFilterAlpha(255)
244-
.setFilterColor(Color.BLACK)
245-
.setFilterBlurX(2)
246-
.setFilterBlurY(2)
247-
.setFilterStrength(4)
248-
.setSetting(PLVMarqueeAnimationVO.ROLL)
249-
.setInterval(3)
250-
.setTweenTime(1)
251-
.setLifeTime(2)
252-
.setSpeed(200)
253-
.setAlwaysShowWhenRun(true)
254-
.setHiddenWhenPause(false)
255-
;
256-
257-
marqueeView.setPLVMarqueeModel(plvMarqueeModel);
258234
}
259235

260236
private void initDanmuView() {

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/modules/media/PLVLCPlaybackMediaLayout.java

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.arch.lifecycle.Observer;
66
import android.content.Context;
77
import android.content.res.Configuration;
8-
import android.graphics.Color;
98
import android.support.annotation.NonNull;
109
import android.support.annotation.Nullable;
1110
import android.support.v4.app.Fragment;
@@ -41,8 +40,6 @@
4140
import com.easefun.polyv.livecommon.module.data.PLVStatefulData;
4241
import com.easefun.polyv.livecommon.module.modules.marquee.IPLVMarqueeView;
4342
import com.easefun.polyv.livecommon.module.modules.marquee.PLVMarqueeView;
44-
import com.easefun.polyv.livecommon.module.modules.marquee.model.PLVMarqueeAnimationVO;
45-
import com.easefun.polyv.livecommon.module.modules.marquee.model.PLVMarqueeModel;
4643
import com.easefun.polyv.livecommon.module.modules.player.PLVPlayerState;
4744
import com.easefun.polyv.livecommon.module.modules.player.playback.contract.IPLVPlaybackPlayerContract;
4845
import com.easefun.polyv.livecommon.module.modules.player.playback.prsenter.PLVPlaybackPlayerPresenter;
@@ -187,26 +184,6 @@ private void initVideoView() {
187184
videoView.setPlayerBufferingIndicator(loadingLayout);
188185
//设置跑马灯
189186
marqueeView = ((Activity) getContext()).findViewById(R.id.polyv_marquee_view);
190-
PLVMarqueeModel plvMarqueeModel = new PLVMarqueeModel()
191-
.setUserName("保利威SDK")
192-
.setFontAlpha(255)
193-
.setFontSize(40)
194-
.setFontColor(Color.RED)
195-
.setFilter(false)
196-
.setFilterAlpha(255)
197-
.setFilterColor(Color.BLACK)
198-
.setFilterBlurX(2)
199-
.setFilterBlurY(2)
200-
.setFilterStrength(4)
201-
.setSetting(PLVMarqueeAnimationVO.ROLL)
202-
.setInterval(3)
203-
.setTweenTime(1)
204-
.setLifeTime(2)
205-
.setSpeed(200)
206-
.setAlwaysShowWhenRun(true)
207-
.setHiddenWhenPause(false);
208-
209-
marqueeView.setPLVMarqueeModel(plvMarqueeModel);
210187
}
211188

212189
private void initDanmuView() {

polyvLiveCloudClassScene/src/main/java/com/easefun/polyv/livecloudclass/scenes/PLVLCCloudClassActivity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,7 @@ public void onJoinChannelSuccess() {
678678
//对于三分屏频道,如果PPT此时还在悬浮窗,则将PPT从悬浮窗切到主屏幕,将播放器从主屏幕切到悬浮窗
679679
if (floatingPPTLayout.isPPTInFloatingLayout()) {
680680
pptViewSwitcher.switchView();
681+
linkMicLayout.notifySwitchedPptToMainScreenOnJoinChannel();
681682
}
682683
}
683684
//隐藏悬浮窗

0 commit comments

Comments
 (0)