From 4dc4dfc93bfd68e8f42a7b7bacbe209b9dbfb59b Mon Sep 17 00:00:00 2001 From: eggmanQQQ <3671373519@qq.com> Date: Thu, 10 Oct 2024 19:42:26 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=20=E9=BA=A6=20=E4=BA=BA=E5=A3=B0?= =?UTF-8?q?=E9=9F=B3=E4=B9=90=20=E5=BC=80=E5=85=B3=E5=8A=9F=E8=83=BD,=20?= =?UTF-8?q?=E5=88=9D=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/chwl/app/MainActivity.java | 2 + .../app/avroom/BottomViewListenerWrapper.java | 2 +- .../app/avroom/activity/AVRoomActivity.java | 2 + .../app/avroom/fragment/BaseRoomFragment.kt | 45 +++++++++++-- .../chwl/app/avroom/widget/BottomView.java | 64 +++++++++++++++---- .../chwl/app/avroom/widget/MessageView.java | 4 +- .../app/ui/login/helper/LogoutHelper.java | 2 +- .../chwl/core/manager/AudioEngineManager.java | 24 ++++++- .../chwl/core/music/model/PlayerModel.java | 13 ++-- 9 files changed, 131 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/chwl/app/MainActivity.java b/app/src/main/java/com/chwl/app/MainActivity.java index 9f6890f80..2b15d91d4 100644 --- a/app/src/main/java/com/chwl/app/MainActivity.java +++ b/app/src/main/java/com/chwl/app/MainActivity.java @@ -35,6 +35,7 @@ import com.chwl.app.star.StarFragment; import com.chwl.app.support.PreloadResourceViewModel; import com.chwl.app.ui.login.LoginPasswordActivity; import com.chwl.core.home.bean.MainTabInfo; +import com.chwl.core.manager.AudioEngineManager; import com.chwl.core.settings.SettingsModel; import com.chwl.library.utils.JavaUtil; import com.netease.nim.uikit.StatusBarUtil; @@ -666,6 +667,7 @@ public class MainActivity extends BaseMvpActivity @Override public void exitRoom(RoomInfo roomInfo) { + AudioEngineManager.get().setNotRecord(false); closeOpenRoomAnimation(); DaemonService.stop(MainActivity.this); } diff --git a/app/src/main/java/com/chwl/app/avroom/BottomViewListenerWrapper.java b/app/src/main/java/com/chwl/app/avroom/BottomViewListenerWrapper.java index 909e204c8..9dab5987c 100644 --- a/app/src/main/java/com/chwl/app/avroom/BottomViewListenerWrapper.java +++ b/app/src/main/java/com/chwl/app/avroom/BottomViewListenerWrapper.java @@ -9,7 +9,7 @@ public abstract class BottomViewListenerWrapper { } - public void onOpenMicBtnClick() { + public void onOpenMicBtnClick(int type) { } diff --git a/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java b/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java index 7b3ee6db2..6b4cb1580 100644 --- a/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java +++ b/app/src/main/java/com/chwl/app/avroom/activity/AVRoomActivity.java @@ -42,6 +42,7 @@ import com.alibaba.fastjson.JSONObject; import com.chwl.app.notify.RoomNotifyManager; import com.chwl.app.ui.webview.baishun.BaiShunGameWebFragment; import com.chwl.app.ui.webview.baishun.IBaiShunGameListener; +import com.chwl.core.manager.AudioEngineManager; import com.chwl.library.widget.SVGAView; import com.chwl.core.monsterhunting.bean.MonsterDataBean; import com.chwl.core.room.game.bean.BaiShunGameConfig; @@ -814,6 +815,7 @@ public class AVRoomActivity extends BaseMvpActivity?> : openOrCloseGiftValue(true) updateView() updateMicBtn() + AudioEngineManager.get().isNotRecord = false microView.setOnMicroItemClickListener(this) mDisposable = IMNetEaseManager.get().chatRoomEventObservable .subscribe { onReceiveRoomEvent(it) } @@ -1456,37 +1459,69 @@ open class BaseRoomFragment?> : * 底部按鈕點擊處理 */ open inner class BaseRoomBottomViewWrapper : BottomViewListenerWrapper() { + @SuppressLint("CheckResult") - override fun onOpenMicBtnClick() { + override fun onOpenMicBtnClick(type : Int) { //todo do 关麦开麦 val roomQueueInfo = AvRoomDataManager.get().getRoomQueueMemberInfoByAccount(AuthModel.get().currentUid.toString()) if (roomQueueInfo?.mRoomMicInfo == null) return //先判斷麥上是否是開麥的 if (!roomQueueInfo.mRoomMicInfo.isMicMute && !AudioEngineManager.get().isAudienceRole) { + if (!isHavingMicPermissions) { val rxPermissions = RxPermissions(this@BaseRoomFragment) rxPermissions.request(Manifest.permission.RECORD_AUDIO) .subscribe { aBoolean: Boolean -> if (aBoolean) { - AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute - AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) + + if (type == MyConstant.MicType.open) { + AudioEngineManager.get().isMute = false + AudioEngineManager.get().isNotRecord = false +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) + }else if (type == MyConstant.MicType.music) { + AudioEngineManager.get().isMute = false +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) + AudioEngineManager.get().isNotRecord = true + }else if (type == MyConstant.MicType.close) { + AudioEngineManager.get().isMute = true +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE) + AudioEngineManager.get().isNotRecord = false + } updateMicBtn() } else { - toast("開啟權限後才能開麥") + toast(R.string.ask_again.getString()) } } return } - AudioEngineManager.get().isMute = !AudioEngineManager.get().isMute + + if (type == MyConstant.MicType.open) { + AudioEngineManager.get().isMute = false + AudioEngineManager.get().isNotRecord = false +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) + }else if (type == MyConstant.MicType.music) { + AudioEngineManager.get().isMute = false +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) + AudioEngineManager.get().isNotRecord = true + }else if (type == MyConstant.MicType.close) { + AudioEngineManager.get().isMute = true +// AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_AUDIENCE) + AudioEngineManager.get().isNotRecord = false + } + updateMicBtn() + if (AudioEngineManager.get().isMute) { AudioEngineManager.get().stopLocalAudio() } else if (AvRoomDataManager.get().isOnMic(myUid)) { AudioEngineManager.get().setRole(Constants.CLIENT_ROLE_BROADCASTER) } + } } + + override fun onSendFaceBtnClick() { if (AvRoomDataManager.get().isOnMic(myUid) || AvRoomDataManager.get().isRoomOwner) { if (dynamicFaceDialog == null) { diff --git a/app/src/main/java/com/chwl/app/avroom/widget/BottomView.java b/app/src/main/java/com/chwl/app/avroom/widget/BottomView.java index b6c002755..ac702e331 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/BottomView.java +++ b/app/src/main/java/com/chwl/app/avroom/widget/BottomView.java @@ -16,13 +16,15 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; + +import com.chwl.core.contacts.MyConstant; +import com.chwl.core.manager.AudioEngineManager; import com.chwl.core.manager.AvRoomDataManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.chwl.app.avroom.activity.RoomTypeSwitchActivity; import com.chwl.core.utils.extension.StringExtensionKt; -import com.chwl.library.utils.SizeUtils; import com.netease.nim.uikit.api.NimUIKit; import com.netease.nim.uikit.common.util.sys.ScreenUtil; import com.netease.nimlib.sdk.msg.model.RecentContact; @@ -32,7 +34,6 @@ import com.chwl.app.avroom.BottomViewListenerWrapper; import com.chwl.app.ui.utils.ImageLoadUtils; import com.chwl.app.room_chat.activity.RoomMsgActivity; import com.chwl.core.helper.ImHelperUtils; -import com.chwl.core.manager.AvRoomDataManager; import com.chwl.core.manager.IMMessageManager; import com.chwl.core.pay.event.FirstChargeEvent; import com.chwl.core.room.bean.RoomInfo; @@ -227,11 +228,35 @@ public class BottomView extends LinearLayout implements View.OnClickListener { } public void setMicBtnOpen(boolean isOpen) { - if (isOpen) { - openMic.setImageResource(R.drawable.room_menu_ic_mic_open); + if(openMic == null){ + return; + } + +// if (isOpen) { +// openMic.setImageResource(R.drawable.room_menu_ic_mic_open); +// } else { +// openMic.setImageResource(R.drawable.room_menu_ic_mic_close); +// } + +// + RoomInfo currentRoomInfo = AvRoomDataManager.get().mCurrentRoomInfo; + if (currentRoomInfo != null) { + openMic.setEnabled(true); + if(!AudioEngineManager.get().isMute()){ + if (AudioEngineManager.get().isNotRecord()) { + openMic.setImageResource(R.drawable.room_menu_ic_mic_music); + } else { + openMic.setImageResource(R.drawable.room_menu_ic_mic_open); + } + }else{ + openMic.setImageResource(R.drawable.room_menu_ic_mic_close); + } } else { + openMic.setEnabled(false); openMic.setImageResource(R.drawable.room_menu_ic_mic_close); } + + } public void setRemoteMuteOpen(boolean isOpen) { @@ -317,10 +342,7 @@ public class BottomView extends LinearLayout implements View.OnClickListener { public void onClick(View v) { switch (v.getId()) { case R.id.icon_room_open_mic: - if (wrapper != null) { - wrapper.onOpenMicBtnClick(); - } -// showMicSetDialog(openMic); + showMicSetDialog(openMic); break; case R.id.tv_room_send_msg_input: @@ -468,6 +490,8 @@ public class BottomView extends LinearLayout implements View.OnClickListener { contentView = LayoutInflater.from(getContext()).inflate(R.layout.popup_mic_set, null); micSetPopupWindow = new PopupWindow(contentView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); micSetPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + micSetPopupWindow.setTouchable(true); + micSetPopupWindow.setFocusable(false); // micSetPopupWindow.setAnimationStyle(R.style.style_anim_mic_set); } else { contentView = micSetPopupWindow.getContentView(); @@ -477,16 +501,28 @@ public class BottomView extends LinearLayout implements View.OnClickListener { ImageView micMusic = contentView.findViewById(R.id.micMusic); ImageView micOn = contentView.findViewById(R.id.micOn); - micOff.setOnClickListener(v -> { - micSetPopupWindow.dismiss(); - }); - micMusic.setOnClickListener(v -> { - micSetPopupWindow.dismiss(); - }); micOn.setOnClickListener(v -> { micSetPopupWindow.dismiss(); + if (wrapper != null) { + wrapper.onOpenMicBtnClick(MyConstant.MicType.open); + } }); + micMusic.setOnClickListener(v -> { + micSetPopupWindow.dismiss(); + if (wrapper != null) { + wrapper.onOpenMicBtnClick(MyConstant.MicType.music); + } + }); + + micOff.setOnClickListener(v -> { + micSetPopupWindow.dismiss(); + if (wrapper != null) { + wrapper.onOpenMicBtnClick(MyConstant.MicType.close); + } + }); + + int[] vLoc = new int[2]; parent.getLocationInWindow(vLoc); try { diff --git a/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java b/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java index 79d7237ab..6f37f9e1c 100644 --- a/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java +++ b/app/src/main/java/com/chwl/app/avroom/widget/MessageView.java @@ -277,10 +277,12 @@ public class MessageView extends FrameLayout { private boolean isChat(){return mMsgType.equals(ResUtil.getString(R.string.send_msg));} private boolean isGift(){return mMsgType.equals(ResUtil.getString(R.string.send_gift_tab_title));} - + //todo do 消息类型分类 需要进一步判断 private boolean isChatMsg(ChatRoomMessage msg){ return (msg.getMsgType() == MsgTypeEnum.text); } + + //todo do 消息类型分类 需要进一步判断 private boolean isGiftMsg(ChatRoomMessage msg){ return (msg.getMsgType() == MsgTypeEnum.custom); } diff --git a/app/src/main/java/com/chwl/app/ui/login/helper/LogoutHelper.java b/app/src/main/java/com/chwl/app/ui/login/helper/LogoutHelper.java index 591bb128f..dc7e1a21b 100644 --- a/app/src/main/java/com/chwl/app/ui/login/helper/LogoutHelper.java +++ b/app/src/main/java/com/chwl/app/ui/login/helper/LogoutHelper.java @@ -46,7 +46,7 @@ public class LogoutHelper { if (e instanceof SocketTimeoutException || e instanceof SocketException || e instanceof HttpException) { activity.toast(ResUtil.getString(R.string.login_helper_logouthelper_013)); } else if (e instanceof BanAccountException) { - //todo do 显示id 跟 原因 + //todo do 封禁 显示id 跟 原因 BanAccountException exception = (BanAccountException) e; String text = ResUtil.getString(R.string.login_helper_logouthelper_02) + exception.getMessage() + ResUtil.getString(R.string.login_helper_logouthelper_03); int start = text.length(); diff --git a/core/src/main/java/com/chwl/core/manager/AudioEngineManager.java b/core/src/main/java/com/chwl/core/manager/AudioEngineManager.java index 7018529d7..e14fcccc3 100644 --- a/core/src/main/java/com/chwl/core/manager/AudioEngineManager.java +++ b/core/src/main/java/com/chwl/core/manager/AudioEngineManager.java @@ -1,6 +1,8 @@ package com.chwl.core.manager; +import com.chwl.library.utils.config.BasicConfig; +import com.chwl.library.utils.pref.CommonPref; import com.netease.nim.uikit.common.util.log.LogUtil; import com.chwl.core.manager.agora.RtcEngineManager; import com.chwl.core.manager.trtc.TRtcEngineManager; @@ -180,9 +182,29 @@ public class AudioEngineManager { public void adjustRecordingSignalVolume(int volume) { if (this.iAudioEngine == null) return; - this.iAudioEngine.adjustRecordingSignalVolume(volume); +// this.iAudioEngine.adjustRecordingSignalVolume(volume); + if (notRecord) { + this.iAudioEngine.adjustRecordingSignalVolume(0); + } else { + this.iAudioEngine.adjustRecordingSignalVolume(volume); + } } + private boolean notRecord = false; + public void setNotRecord(boolean isNotRecord){ + notRecord = isNotRecord; + if (notRecord) { + adjustRecordingSignalVolume(0); + } else { + adjustRecordingSignalVolume(VolumeSetting.getVoiceVolume()); + } + } + + public boolean isNotRecord() { + return notRecord; + } + + public int startAudioMixing(String filePath, boolean loopback, int cycle) { if (this.iAudioEngine == null) { return 0; diff --git a/core/src/model_music/java/com/chwl/core/music/model/PlayerModel.java b/core/src/model_music/java/com/chwl/core/music/model/PlayerModel.java index 59c4cf635..d2e814b5b 100644 --- a/core/src/model_music/java/com/chwl/core/music/model/PlayerModel.java +++ b/core/src/model_music/java/com/chwl/core/music/model/PlayerModel.java @@ -10,6 +10,7 @@ import com.chwl.core.manager.AudioEngineManager; import com.chwl.core.manager.AvRoomDataManager; import com.chwl.core.manager.IMNetEaseManager; import com.chwl.core.manager.RoomEvent; +import com.chwl.core.manager.VolumeSetting; import com.chwl.core.music.bean.LocalMusicInfo; import com.chwl.core.music.db.bean.LocalMusicBean; import com.chwl.core.music.db.model.LocalMusicDbModel; @@ -52,8 +53,10 @@ public class PlayerModel extends BaseModel implements IPlayerModel { private PlayerModel() { playerListMusicInfos = new ArrayList<>(); state = STATE_STOP; - volume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("volume", 50); - recordingVolume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("recordingVolume", 50); +// volume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("volume", 50); +// recordingVolume = CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).getInt("recordingVolume", 50); + volume = VolumeSetting.getMusicVolume(); + recordingVolume = VolumeSetting.getVoiceVolume(); mDisposable = IMNetEaseManager.get().getChatRoomEventObservable() .subscribe(new Consumer() { @@ -273,14 +276,16 @@ public class PlayerModel extends BaseModel implements IPlayerModel { @Override public void seekVolume(int volume) { this.volume = volume; - CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("volume", volume); +// CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("volume", volume); + VolumeSetting.putMusicVolume(volume); AudioEngineManager.get().adjustAudioMixingVolume(volume); } @Override public void seekRecordingVolume(int volume) { this.recordingVolume = volume; - CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("recordingVolume", volume); +// CommonPref.instance(BasicConfig.INSTANCE.getAppContext()).putInt("recordingVolume", volume); + VolumeSetting.putVoiceVolume(volume); AudioEngineManager.get().adjustRecordingSignalVolume(volume); }