From 5cce2cb68c644bb7d1fcaa46e601e403c25ea3b8 Mon Sep 17 00:00:00 2001 From: wzq Date: Tue, 26 Sep 2023 18:20:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E9=A1=B5tab=20item=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=A3=B0=E9=9F=B3=E5=8D=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/assets/svga/home_voice_playing.svga | Bin 0 -> 12690 bytes .../erban/audio/helper/AudioPlayerHelper.java | 3 + .../erban/home/adapter/HomeChatAdapter.kt | 5 +- .../home/adapter/RoomNewFriendsAdapter.kt | 135 +++++++++++++++--- .../{ic_sound_star.png => ic_sound_start.png} | Bin app/src/main/res/drawable/bg_759fff_2.xml | 2 +- app/src/main/res/layout/item_home_chat.xml | 2 +- .../main/res/layout/item_room_new_friends.xml | 12 +- app/src/main/res/values/colors.xml | 1 + .../user/bean/UserInfo.java | 8 ++ 10 files changed, 139 insertions(+), 29 deletions(-) create mode 100644 app/src/main/assets/svga/home_voice_playing.svga rename app/src/main/res/drawable-xhdpi/{ic_sound_star.png => ic_sound_start.png} (100%) diff --git a/app/src/main/assets/svga/home_voice_playing.svga b/app/src/main/assets/svga/home_voice_playing.svga new file mode 100644 index 0000000000000000000000000000000000000000..342b4083dff75ee5d79cfa72a3c214dc23f99684 GIT binary patch literal 12690 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 MAVui^0D6)9zD@h#6aWAK literal 0 HcmV?d00001 diff --git a/app/src/main/java/com/yizhuan/erban/audio/helper/AudioPlayerHelper.java b/app/src/main/java/com/yizhuan/erban/audio/helper/AudioPlayerHelper.java index d0f049c26..8f8dfe23a 100644 --- a/app/src/main/java/com/yizhuan/erban/audio/helper/AudioPlayerHelper.java +++ b/app/src/main/java/com/yizhuan/erban/audio/helper/AudioPlayerHelper.java @@ -109,6 +109,9 @@ public class AudioPlayerHelper { } public void endPlay() { + if (listener != null) { + listener.onCompletion(); + } handler.removeMessages(WHAT_STATUS.COUNT_PLAY); if (player != null) { if (preparing) { diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt b/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt index 7ae19573a..95e3f660a 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/HomeChatAdapter.kt @@ -9,7 +9,7 @@ import com.yizhuan.erban.R import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 import com.yizhuan.erban.ui.utils.loadFromAssets import com.yizhuan.xchat_android_core.home.bean.HomeRoomInfo -import com.yizhuan.xchat_android_library.utils.StringCutUtils +import com.yizhuan.xchat_android_core.utils.subAndReplaceDot /** * create by lvzebiao @2019/11/13 @@ -20,8 +20,7 @@ class HomeChatAdapter : override fun convert(helper: BaseViewHolder, item: HomeRoomInfo) { val svgaLiving = helper.getView(R.id.svga_living) ImageLoadUtilsV2.loadAvatar(helper.getView(R.id.iv_avatar), item.avatar) - val name = StringCutUtils.subStrByLen(item.title.substring(0, item.title.length - 3), 8) - helper.setText(R.id.tv_name, name) + helper.setText(R.id.tv_name, item.title.subAndReplaceDot(8)) if (item.mgId == 0L) { helper.getView(R.id.group_game).visibility = View.INVISIBLE } else { diff --git a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt index b7a678dff..3e582697a 100644 --- a/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/home/adapter/RoomNewFriendsAdapter.kt @@ -7,32 +7,47 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.appcompat.widget.AppCompatImageView import androidx.appcompat.widget.AppCompatTextView -import androidx.constraintlayout.widget.Group -import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.google.android.flexbox.AlignItems import com.google.android.flexbox.FlexDirection +import com.opensource.svgaplayer.SVGAImageView import com.yizhuan.erban.R +import com.yizhuan.erban.audio.helper.AudioPlayerHelper +import com.yizhuan.erban.audio.helper.OnPlayListener import com.yizhuan.erban.avroom.activity.AVRoomActivity import com.yizhuan.erban.ui.im.avtivity.NimP2PMessageActivity import com.yizhuan.erban.ui.user.activity.UserInfoActivity import com.yizhuan.erban.ui.user.adapter.UserInfoLabelAdapter import com.yizhuan.erban.ui.utils.ImageLoadUtils import com.yizhuan.erban.ui.utils.loadAvatar +import com.yizhuan.erban.ui.utils.loadFromAssets import com.yizhuan.erban.view.GenderAgeTextView +import com.yizhuan.xchat_android_core.Constants +import com.yizhuan.xchat_android_core.manager.AudioEngineManager +import com.yizhuan.xchat_android_core.manager.AvRoomDataManager import com.yizhuan.xchat_android_core.user.bean.UserInfo -import com.yizhuan.xchat_android_core.user.bean.UserInfo.SoundBean import com.yizhuan.xchat_android_core.utils.StarUtils import com.yizhuan.xchat_android_core.utils.ifNullOrEmpty import com.yizhuan.xchat_android_library.common.widget.LinesFlexBoxLayoutManager import com.yizhuan.xchat_android_library.utils.ListUtils +import com.yizhuan.xchat_android_library.utils.SingleToastUtil +import io.reactivex.Observable +import io.reactivex.android.schedulers.AndroidSchedulers +import io.reactivex.disposables.Disposable +import io.reactivex.schedulers.Schedulers import java.util.Date +import java.util.concurrent.TimeUnit class RoomNewFriendsAdapter : BaseQuickAdapter(R.layout.item_room_new_friends) { + private var disposable: Disposable? = null + + private var isMute = false + private var isRemoteMute = false + override fun convert(helper: BaseViewHolder, item: UserInfo) { helper.getView(R.id.iv_avatar).loadAvatar(item.avatar) helper.setText(R.id.tv_desc, item.userDesc.ifNullOrEmpty { "我是个默认签名" }) @@ -46,15 +61,13 @@ class RoomNewFriendsAdapter : helper.setText(R.id.tv_constellation, star) val tvTalk = helper.getView(R.id.tv_talk) - val viewOnline = helper.getView(R.id.view_online) - val groupParty = helper.getView(R.id.group_party) - viewOnline.isVisible = item.inOnline - if (item.inMic) { - groupParty.visibility = View.VISIBLE - } else { - groupParty.visibility = View.INVISIBLE - } + helper.setVisible( + R.id.view_online, if (item.inMic) { + false + } else item.inOnline + ) + helper.setVisible(R.id.group_party, item.inMic) if (item.inRoomUid != 0L) { tvTalk.text = "去找TA" @@ -93,16 +106,17 @@ class RoomNewFriendsAdapter : ) } - if (item.audioCard != null && !TextUtils.isEmpty(item.audioCard.audioUrl)) { + if (item.userVoice.isNullOrBlank()) { + helper.getView(R.id.tv_desc).visibility = View.VISIBLE + helper.getView(R.id.llAudio).visibility = View.GONE + } else { helper.getView(R.id.tv_desc).visibility = View.GONE helper.getView(R.id.llAudio).visibility = View.VISIBLE - helper.getView(R.id.tvAudio).text = item.audioCard.second.toString() + helper.getView(R.id.tvAudio).text = item.voiceDura.toString() helper.getView(R.id.llAudio) - .setOnClickListener { v -> toggleAudio(item.audioCard) } - } else { - helper.getView(R.id.tv_desc).visibility = View.VISIBLE - helper.getView(R.id.llAudio).visibility = View.GONE + .setOnClickListener { toggleAudio(helper, item) } + helper.setImageResource(R.id.liv_user, R.drawable.ic_sound_wave) } val mLabelRecyclerView = helper.getView(R.id.mLabelRecyclerView) @@ -124,8 +138,91 @@ class RoomNewFriendsAdapter : } - private fun toggleAudio(audioCard: SoundBean) { - + private fun toggleAudio(holder: BaseViewHolder, item: UserInfo) { + if (item.isVoicePlaying) { + stopAudio() + } else { + playAudio(holder, item) + } } + private fun stopAudio() { + AudioPlayerHelper.get().endPlay() + } + + private fun resetAudioUI(holder: BaseViewHolder, item: UserInfo) { + item.isVoicePlaying = false + + disposable?.dispose() + holder.setImageResource(R.id.iv_audio_control, R.drawable.ic_sound_pause) + holder.setText(R.id.tvAudio, item.voiceDura.toString()) + + val svgaImageView = holder.getView(R.id.liv_user) + svgaImageView.stopAnimation() + svgaImageView.setImageResource(R.drawable.ic_sound_wave) + + AvRoomDataManager.get().mCurrentRoomInfo?.run { + AudioEngineManager.get().isRemoteMute = isRemoteMute //非靜音 + AudioEngineManager.get().isMute = isMute //能説話 + AudioEngineManager.get().setRole( + if (isRemoteMute) Constants.CLIENT_ROLE_AUDIENCE else Constants.CLIENT_ROLE_BROADCASTER + ) + } + } + + private fun playAudio(holder: BaseViewHolder, item: UserInfo) { + AudioPlayerHelper.get().endPlay() + + item.isVoicePlaying = true + + + holder.setImageResource(R.id.iv_audio_control, R.drawable.ic_sound_start) + val svgaImageView = holder.getView(R.id.liv_user) + svgaImageView.loadFromAssets("svga/home_voice_playing.svga") + + disposable = Observable.interval(1L, TimeUnit.SECONDS) + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .map { it + 1 } + .takeUntil { it == item.voiceDura.toLong() } + .subscribe { + holder.setText(R.id.tvAudio, (item.voiceDura - it).toString()) + } + + AvRoomDataManager.get().mCurrentRoomInfo?.run { + isRemoteMute = AudioEngineManager.get().isRemoteMute + isMute = AudioEngineManager.get().isMute + AudioEngineManager.get().isRemoteMute = true //設置靜音 + AudioEngineManager.get().isMute = true //不能説話 + AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE) + } + + AudioPlayerHelper.get().playInThread(item.userVoice, object : OnPlayListener { + override fun onError(error: String) { + SingleToastUtil.showToast(mContext.getString(R.string.me_error_playing)) + resetAudioUI(holder, item) + } + + override fun onPrepared() {} + override fun onPlaying(currDuration: Long) {} + override fun onCompletion() { + resetAudioUI(holder, item) + } + }) + } + + override fun onViewDetachedFromWindow(holder: BaseViewHolder) { + super.onViewDetachedFromWindow(holder) + + val position = holder.absoluteAdapterPosition + + if (position < 0 || position >= data.size) { + return + } + + val item = data[position] + if (item.isVoicePlaying) { + stopAudio() + } + } } \ No newline at end of file diff --git a/app/src/main/res/drawable-xhdpi/ic_sound_star.png b/app/src/main/res/drawable-xhdpi/ic_sound_start.png similarity index 100% rename from app/src/main/res/drawable-xhdpi/ic_sound_star.png rename to app/src/main/res/drawable-xhdpi/ic_sound_start.png diff --git a/app/src/main/res/drawable/bg_759fff_2.xml b/app/src/main/res/drawable/bg_759fff_2.xml index d856d8c92..e5ba211a2 100644 --- a/app/src/main/res/drawable/bg_759fff_2.xml +++ b/app/src/main/res/drawable/bg_759fff_2.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_chat.xml b/app/src/main/res/layout/item_home_chat.xml index 527ca39b4..7837495f3 100644 --- a/app/src/main/res/layout/item_home_chat.xml +++ b/app/src/main/res/layout/item_home_chat.xml @@ -84,6 +84,6 @@ app:layout_constraintEnd_toEndOf="@+id/view_bg" app:layout_constraintStart_toEndOf="@+id/svga_living" app:layout_constraintTop_toBottomOf="@+id/view_aperture" - tools:text="音樂與你" /> + tools:text="音音音樂與音樂與" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_room_new_friends.xml b/app/src/main/res/layout/item_room_new_friends.xml index f46147851..91a4ac84b 100644 --- a/app/src/main/res/layout/item_room_new_friends.xml +++ b/app/src/main/res/layout/item_room_new_friends.xml @@ -20,8 +20,8 @@ + app:constraint_referenced_ids="iv_mask_party,iv_party,view_aperture" + tools:visibility="visible" /> + app:autoPlay="false" + app:clearsAfterDetached="true" /> #6BB3FF #5CF1FF #CF70FF + #A974FF diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java index 044869e82..2f1462224 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/user/bean/UserInfo.java @@ -89,6 +89,14 @@ public class UserInfo implements Serializable { private String userVoice; //声音时间 private int voiceDura; + + /** + * 声音是否正在播放, RecycleView 记录状态 + */ + @Getter + @Setter + private boolean voicePlaying; + //关注数 private long followNum; //粉丝数