From 4e231e88380fe1c28b3d14fc4bb9e0570157b2f9 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Mon, 11 May 2020 21:20:10 +0300 Subject: [PATCH 1/2] -fix for feeds flikering --- .../data/sdk/calls/ConferenceListItem.java | 2 - .../conference/ConferenceVideoAdapter.java | 1 + .../conference/ConferenceVideoItemVh.java | 66 +++++++++++-------- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceListItem.java b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceListItem.java index 518fd344c7..7b3b85da4e 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceListItem.java +++ b/app/src/main/java/com/nynja/mobile/communicator/data/sdk/calls/ConferenceListItem.java @@ -135,12 +135,10 @@ public class ConferenceListItem extends Object { this.hasScreen = participant.hasScreen; this.isVideoPaused = participant.isVideoPaused; this.isScreenPaused = participant.isScreenPaused; -// this.isTrackActive = 0; // this.isMe = participant.isMe; this.isFriend = participant.isFriend; this.isMuted = participant.isMuted; this.isSpeaking = participant.isSpeaking; - this.isVideoFullScreen = false; } private void setActions(ArrayList itemActions) { diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/conference/ConferenceVideoAdapter.java b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/conference/ConferenceVideoAdapter.java index 1531324f8c..f078dee5d9 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/conference/ConferenceVideoAdapter.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/conference/ConferenceVideoAdapter.java @@ -141,6 +141,7 @@ public class ConferenceVideoAdapter> exten @NonNull @Override public T onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) { + Timber.d("ConferenceVideoAdapter::onBindViewHolder():"); ConferenceVideoItemVh viewHolder = new ConferenceVideoItemVh(viewGroup, mIsModerator); viewHolder.setOnClickListener(mOnConferenceVideoFeedClickListener); if (viewGroup.getContext() instanceof CallActivity) { diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java index 6f9d022f1d..bea30e0db3 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java @@ -40,6 +40,7 @@ public class ConferenceVideoItemVh extends BaseVH { private OnConferenceVideoFeedClickListener mListener; private boolean mIsModerator; private boolean mIsRenderersInitialized = false; + private String mTrackId = ""; public ConferenceVideoItemVh(ViewGroup parent, boolean isModerator) { super(parent, R.layout.li_conference_video); @@ -51,20 +52,20 @@ public class ConferenceVideoItemVh extends BaseVH { } - @Override public void bind() { - //mUnbinder = ButterKnife.bind(this, itemView); - } - - @Override public void bind(ConferenceListItem item, int position) { - Timber.d("ConferenceVideoItemVh::bind(): item participant ID=%s, position=%d", item.participantId, position); - mPosition = position; - if (mUnbinder != null) { - //mUnbinder.unbind(); - } else { - mUnbinder = ButterKnife.bind(this, itemView); - } - setData(item); - } +// @Override public void bind() { +// //mUnbinder = ButterKnife.bind(this, itemView); +// } +// +// @Override public void bind(ConferenceListItem item, int position) { +// Timber.d("ConferenceVideoItemVh::bind(): item participant ID=%s, position=%d", item.participantId, position); +// mPosition = position; +// if (mUnbinder != null) { +// //mUnbinder.unbind(); +// } else { +// mUnbinder = ButterKnife.bind(this, itemView); +// } +// setData(item); +// } public SurfaceViewRenderer getVideoFeed() { return mVideoFeed; @@ -75,6 +76,10 @@ public class ConferenceVideoItemVh extends BaseVH { } @Override public void setData(ConferenceListItem item) { + if (!item.equals(this.mItem) && this.mItem != null) { + enableVideoForTrack(false); + removeVideoRendererForTrack(); + } this.mItem = item; mSS.setAutoToggle(false); mActiveVideo.setAutoToggle(false); @@ -87,6 +92,7 @@ public class ConferenceVideoItemVh extends BaseVH { itemView.setOnLongClickListener(v -> mListener.onItemLongClick(item, mPosition)); } itemView.setTag(this); + mTrackId = ConferenceVideoModule.getInstance().getTrackIdByParticipantId(mItem.participantId); if (item.type == ConferenceListItem.ConferenceItemType.Plus) { // mPhoto.setImageResource(R.drawable.v_add_member_voice_call); } else { @@ -123,8 +129,8 @@ public class ConferenceVideoItemVh extends BaseVH { @Synchronized public void releaseVideoCallRrenderers() { Timber.d("ConferenceVideoItemVh::releaseVideoCallRrenderers(): item participant name=%s; ID=%s", mItem.name, mItem.participantId); - removeVideoRendererForTrack(); if (!mIsRenderersInitialized) return; + removeVideoRenderer(); if (mVideoFeed != null) { mVideoFeed.release(); } @@ -145,7 +151,7 @@ public class ConferenceVideoItemVh extends BaseVH { drawIsMutedIfNeeded(item); drawIsScfreenSharingIfNeeded(item); // drawIsActiveVideoIfNeeded(item); - drawIsFeedVideoIfNeeded(item.hasVideo); +// drawIsFeedVideoIfNeeded(item.hasVideo); if (mItem != null) { if (mItem != null && mItem.isMe) { mName.setText(R.string.call_me); @@ -244,13 +250,12 @@ public class ConferenceVideoItemVh extends BaseVH { Timber.d("setVideoRendererForTrack::setVideoRendererForTrack(): item participant name=%s; ID=%s", mItem.name, mItem.participantId); if (!mIsRenderersInitialized) return; if (mItem == null) return; - if (mItem.isTrackActive == 1) return; - String trackId = ConferenceVideoModule.getInstance().getTrackIdByParticipantId(mItem.participantId); - Timber.d("setVideoRendererForTrack::setVideoRendererForTrack(): item participant ID=%s; trackId=%s", mItem.participantId, trackId); - if (StringUtils.isNotEmpty(trackId) || mItem.isMe) { + //if (mItem.isTrackActive == 1) return; + Timber.d("setVideoRendererForTrack::setVideoRendererForTrack(): item participant ID=%s; trackId=%s", mItem.participantId, mTrackId); + if (StringUtils.isNotEmpty(mTrackId) || mItem.isMe) { mItem.isTrackActive = 1; Timber.d("setVideoRendererForTrack::setVideoRendererForTrack(): item participant ID=%s; isMe=%s", mItem.participantId, mItem.isMe? "true":"false"); - ConferenceVideoModule.getInstance().setVideoRendererForTrack(mVideoFeed, trackId, mItem.isMe); + ConferenceVideoModule.getInstance().setVideoRendererForTrack(mVideoFeed, mTrackId, mItem.isMe); refreshFeedVideo(); } } @@ -261,14 +266,8 @@ public class ConferenceVideoItemVh extends BaseVH { if (!mIsRenderersInitialized) return; if (mItem == null) return; if (mItem.isTrackActive == 0) return; - String trackId = ConferenceVideoModule.getInstance().getTrackIdByParticipantId(mItem.participantId); - Timber.d("setVideoRendererForTrack::removeVideoRendererForTrack(): item participant ID=%s; trackId=%s", mItem.participantId, trackId); - if (StringUtils.isNotEmpty(trackId) || mItem.isMe) { - Timber.d("setVideoRendererForTrack::removeVideoRendererForTrack(): item participant ID=%s; isMe=%s", mItem.participantId, mItem.isMe? "true":"false"); - ConferenceVideoModule.getInstance().setVideoRendererForTrack(null, trackId, mItem.isMe); - mItem.isTrackActive = 0; - refreshFeedVideo(); - } + Timber.d("setVideoRendererForTrack::removeVideoRendererForTrack(): item participant ID=%s; trackId=%s", mItem.participantId, mTrackId); + removeVideoRenderer(); } @Synchronized @@ -282,4 +281,13 @@ public class ConferenceVideoItemVh extends BaseVH { refreshFeedVideo(); } } + + private void removeVideoRenderer() { + if (StringUtils.isNotEmpty(mTrackId) || mItem.isMe) { + Timber.d("setVideoRendererForTrack::removeVideoRenderer(): item participant ID=%s; isMe=%s", mItem.participantId, mItem.isMe? "true":"false"); + ConferenceVideoModule.getInstance().setVideoRendererForTrack(null, mTrackId, mItem.isMe); + mItem.isTrackActive = 0; + refreshFeedVideo(); + } + } } -- GitLab From fe6a7e435e766035ec376cfd76d334383c6443b0 Mon Sep 17 00:00:00 2001 From: Ergyun Syuleyman Date: Mon, 11 May 2020 22:30:39 +0300 Subject: [PATCH 2/2] -fixed camera switch button visibilityon the video feeds --- .../conference/ConferenceVideoItemVh.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java index bea30e0db3..cd14239e36 100644 --- a/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java +++ b/app/src/main/java/com/nynja/mobile/communicator/ui/adapters/viewholders/conference/ConferenceVideoItemVh.java @@ -79,6 +79,7 @@ public class ConferenceVideoItemVh extends BaseVH { if (!item.equals(this.mItem) && this.mItem != null) { enableVideoForTrack(false); removeVideoRendererForTrack(); + hideSwithCamera(); } this.mItem = item; mSS.setAutoToggle(false); @@ -96,14 +97,9 @@ public class ConferenceVideoItemVh extends BaseVH { if (item.type == ConferenceListItem.ConferenceItemType.Plus) { // mPhoto.setImageResource(R.drawable.v_add_member_voice_call); } else { - // item.type == ConferenceListItem.ConferenceItemType.Participant - if (item.memberId == null || item.memberId.isEmpty()) { -// mPhoto.setImageResource(R.drawable.participant_placeholder_grey); - } else { - // in Conference - setupInConference(item); - onViewAttachedToWindow(); - } + // in Conference + setupInConference(item); + onViewAttachedToWindow(); } Timber.d("ConferenceVideoItemVh::setData(): item participant name=%s; ID=%s", item.name, item.participantId); } @@ -117,7 +113,6 @@ public class ConferenceVideoItemVh extends BaseVH { public void onViewDetachedFromWindow() { enableVideoForTrack(false); - //removeVideoRendererForTrack(); Timber.d("ConferenceVideoItemVh::onViewDetachedFromWindow(): item participant name=%s; ID=%s", mItem.name, mItem.participantId); } @@ -145,7 +140,7 @@ public class ConferenceVideoItemVh extends BaseVH { if (item.participantId == null || !item.isActive) { // in Conference - but not joined yet mMutedIndicator.setVisibility(View.GONE); -// mPhoto.setImageResource(R.drawable.participant_placeholder_grey); + hideSwithCamera(); } else { // already joined in Conference drawIsMutedIfNeeded(item); @@ -163,21 +158,28 @@ public class ConferenceVideoItemVh extends BaseVH { } } else if (mItem != null && mItem.isSpeaking) { mFeedFrameLayout.setBackgroundResource(R.drawable.video_feed_square_stroke_green); + hideSwithCamera(); } else { mFeedFrameLayout.setBackgroundColor(Color.TRANSPARENT); + hideSwithCamera(); } } else { mFeedFrameLayout.setBackgroundColor(Color.TRANSPARENT); + hideSwithCamera(); } } } + private void hideSwithCamera() { + mSwithCamera.setOnClickListener(null); + mSwithCamera.setVisibility(View.GONE); + } + private void drawIsMutedIfNeeded(ConferenceListItem item) { if(item.isMuted) { mMutedIndicator.setVisibility(View.VISIBLE); } else { mMutedIndicator.setVisibility(View.GONE); -// ImageUtils.loadAvatarImage(item.avatar, mPhoto); } } -- GitLab